-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
132 lines (107 loc) · 5.03 KB
/
CMakeLists.txt
File metadata and controls
132 lines (107 loc) · 5.03 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
cmake_minimum_required(VERSION 3.3)
project(bbchatter CXX C)
set(CMAKE_BUILD_TYPE Debug)
set(CMAKE_VERBOSE_MAKEFILE ON)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(CMAKE_C_COMPILER ${PROJECT_SOURCE_DIR}/deps/llvm/install_local/bin/clang)
set(CMAKE_CXX_COMPILER ${PROJECT_SOURCE_DIR}/deps/llvm/install_local/bin/clang++)
set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/build")
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(COMMON_COMPILER_FLAGS
-O3
-march=native
-mtune=native
-mno-avx
-g
-std=c++1y
-Werror
-Wno-c++98-compat
-Wno-c++98-c++11-compat-pedantic
-Wno-error=padded
-Wno-missing-braces
-Weverything
-DSPDLOG_DEBUG_ON)
set(MAIN_SOURCE_FILE main.cpp)
# Set the source files
set(SOURCE_FILES
WebSocket.cpp
HTTPParser.cpp
cutils.cpp)
set(SANITIZE_FLAGS_NoSan "")
set(SANITIZE_LINK_FLAGS_NoSan "")
set(SANITIZE_FLAGS_Address -fsanitize=address -fno-omit-frame-pointer -O1 -g -fno-optimize-sibling-calls)
set(SANITIZE_LINK_FLAGS_Address -fsanitize=address)
set(SANITIZE_FLAGS_Undefined -fsanitize=undefined)
set(SANITIZE_LINK_FLAGS_Undefined -fsanitize=undefined)
set(SANITIZE_FLAGS_MemoryWithOrigins -fsanitize=memory -fsanitize-memory-track-origins=2 -fno-omit-frame-pointer -g -O1)
set(SANITIZE_LINK_FLAGS_MemoryWithOrigins -fsanitize=memory)
set(SANITIZE_FLAGS_Thread -fsanitize=thread -g -O1)
set(SANITIZE_LINK_FLAGS_Thread -fsanitize=thread)
foreach(SAN_TYPE NoSan Address Undefined MemoryWithOrigins Thread)
set(LIBCXX_COMPILER_FLAGS_${SAN_TYPE}
-nostdinc++
-isystem${PROJECT_SOURCE_DIR}/deps/libcxx/install_local/NoSan/include
-isystem${PROJECT_SOURCE_DIR}/deps/libcxx/install_local/NoSan/include/c++/v1)
set(LIBCXX_LINK_FLAGS_${SAN_TYPE}
-L${PROJECT_SOURCE_DIR}/deps/libcxx/install_local/${SAN_TYPE}/lib
-L${PROJECT_SOURCE_DIR}/deps/libcxxabi/install_local/${SAN_TYPE}/lib
-stdlib=libc++
-lc++
-lc++abi)
set(COMMON_INCLUDE_DIRS_${SAN_TYPE}
${PROJECT_SOURCE_DIR}/deps/boost/install_local/NoSan/include
${PROJECT_SOURCE_DIR}/deps/gtest/install_local/NoSan/include
${PROJECT_SOURCE_DIR}/deps/spdlog/include
${PROJECT_SOURCE_DIR}/deps/http-parser)
set(LINK_LIBRARIES_${SAN_TYPE}
-v
-flto
-O3
-march=native
-mtune=native
-mno-avx
-B${PROJECT_SOURCE_DIR}/deps/binutils/gold
-L${PROJECT_SOURCE_DIR}/deps/boost/install_local/${SAN_TYPE}/lib
-L${PROJECT_SOURCE_DIR}/deps/http-parser/install_local/${SAN_TYPE}/lib
-lpthread
-lboost_system
-lboost_thread
-lhttp_parser
${PROJECT_SOURCE_DIR}/deps/jemalloc/install_local/lib/libjemalloc.a)
set(LIB_CXX_RPATH_${SAN_TYPE}
"${PROJECT_SOURCE_DIR}/deps/libcxx/install_local/${SAN_TYPE}/lib;${PROJECT_SOURCE_DIR}/deps/libcxxabi/install_local/${SAN_TYPE}/lib")
set(GTEST_INCLUDE_DIRS_${SAN_TYPE}
${PROJECT_SOURCE_DIR}/deps/gtest/install_local/NoSan/include)
set(GTEST_LIBRARY_FLAGS_${SAN_TYPE}
-L${PROJECT_SOURCE_DIR}/deps/gtest/install_local/${SAN_TYPE}/lib
-lgtest
-lgtest_main)
endforeach(SAN_TYPE NoSan Address Undefined MemoryWithOrigins Thread)
add_executable(bbchatter ${MAIN_SOURCE_FILE} ${SOURCE_FILES})
target_link_libraries(bbchatter ${LINK_LIBRARIES_NoSan} ${LIBCXX_LINK_FLAGS_NoSan})
target_compile_options(bbchatter PRIVATE ${COMMON_COMPILER_FLAGS} ${LIBCXX_COMPILER_FLAGS_NoSan})
set_source_files_properties(${PROJECT_SOURCE_DIR}/deps/sha1/sha1.c PROPERTIES COMPILE_FLAGS ${LIBCXX_COMPILER_FLAGS_NoSan})
target_include_directories(bbchatter SYSTEM BEFORE PRIVATE ${COMMON_INCLUDE_DIRS_NoSan})
set_target_properties(bbchatter
PROPERTIES
BUILD_WITH_INSTALL_RPATH ON
INSTALL_RPATH "${LIB_CXX_RPATH_NoSan}")
# Google Test
enable_testing()
include (CTest)
set(GTEST_FOUND ON)
file(GLOB TEST_SRC_FILES ${PROJECT_SOURCE_DIR}/test/*.cpp)
foreach(SAN_DIR NoSan Address Undefined MemoryWithOrigins Thread)
set(TEST_BIN_NAME bbchatter_test_${SAN_DIR})
add_executable(${TEST_BIN_NAME} ${SOURCE_FILES} ${TEST_SRC_FILES})
target_compile_options(${TEST_BIN_NAME} PRIVATE ${COMMON_COMPILER_FLAGS} ${LIBCXX_COMPILER_FLAGS_${SAN_DIR}} ${SANITIZE_FLAGS_${SAN_DIR}})
target_link_libraries(${TEST_BIN_NAME} ${LINK_LIBRARIES_${SAN_DIR}} ${LIBCXX_LINK_FLAGS_${SAN_DIR}} ${GTEST_LIBRARY_FLAGS_${SAN_DIR}} ${SANITIZE_LINK_FLAGS_${SAN_DIR}})
target_include_directories(${TEST_BIN_NAME} SYSTEM BEFORE PRIVATE ${COMMON_INCLUDE_DIRS_NoSan})
set_target_properties(${TEST_BIN_NAME}
PROPERTIES
BUILD_WITH_INSTALL_RPATH ON
INSTALL_RPATH "${LIB_CXX_RPATH_${SAN_DIR}}")
add_test(test_${SAN_DIR} ${TEST_BIN_NAME})
################################################
endforeach(SAN_DIR NoSan Address Undefined MemoryWithOrigins Thread)