]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | # Part of Beast |
2 | ||
3 | cmake_minimum_required (VERSION 3.5.2) | |
4 | ||
5 | project (Beast) | |
6 | ||
7 | set_property (GLOBAL PROPERTY USE_FOLDERS ON) | |
8 | ||
9 | if (MSVC) | |
10 | add_definitions (-D_WIN32_WINNT=0x0601) | |
11 | add_definitions (-D_SCL_SECURE_NO_WARNINGS=1) | |
12 | add_definitions (-D_CRT_SECURE_NO_WARNINGS=1) | |
13 | ||
14 | set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4100 /wd4244 /MP /W4 /bigobj") | |
15 | set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Ob2 /Oi /Ot /GL") | |
16 | set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /Oi /Ot") | |
17 | ||
18 | set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /SAFESEH:NO") | |
19 | set (CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /LTCG") | |
20 | ||
21 | # for RelWithDebInfo builds, disable incremental linking | |
22 | # since CMake sets it ON by default for that build type and it | |
23 | # causes warnings | |
24 | # | |
25 | string (REPLACE "/INCREMENTAL" "/INCREMENTAL:NO" replacement_flags | |
26 | ${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO}) | |
27 | set (CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO ${replacement_flags}) | |
28 | ||
29 | else() | |
30 | set(THREADS_PREFER_PTHREAD_FLAG ON) | |
31 | find_package(Threads) | |
32 | ||
33 | set(CMAKE_CXX_FLAGS | |
34 | "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -Wextra -Wpedantic -Wno-unused-parameter") | |
35 | endif() | |
36 | ||
37 | #------------------------------------------------------------------------------- | |
38 | # | |
39 | # Boost | |
40 | # | |
41 | ||
42 | option (Boost_USE_STATIC_LIBS "Use static libraries for boost" ON) | |
43 | ||
44 | set (Boost_NO_SYSTEM_PATHS ON) | |
45 | set (Boost_USE_MULTITHREADED ON) | |
46 | add_definitions (-DBOOST_COROUTINES_NO_DEPRECATION_WARNING=1) # for asio | |
47 | ||
48 | unset (Boost_INCLUDE_DIR CACHE) | |
49 | unset (Boost_LIBRARY_DIRS CACHE) | |
50 | if (MSVC) | |
51 | find_package (Boost REQUIRED) | |
52 | else() | |
53 | find_package (Boost REQUIRED COMPONENTS | |
54 | coroutine | |
55 | context | |
56 | filesystem | |
57 | program_options | |
58 | system | |
59 | thread | |
60 | ) | |
61 | link_libraries (${Boost_LIBRARIES}) | |
62 | endif() | |
63 | ||
64 | include_directories (SYSTEM ${Boost_INCLUDE_DIRS}) | |
65 | ||
66 | if (MINGW) | |
67 | link_libraries(ws2_32 mswsock) | |
68 | endif() | |
69 | ||
70 | #------------------------------------------------------------------------------- | |
71 | # | |
72 | # OpenSSL | |
73 | # | |
74 | ||
75 | if (APPLE AND NOT DEFINED ENV{OPENSSL_ROOT_DIR}) | |
76 | find_program(HOMEBREW brew) | |
77 | if (NOT HOMEBREW STREQUAL "HOMEBREW-NOTFOUND") | |
78 | execute_process(COMMAND brew --prefix openssl | |
79 | OUTPUT_VARIABLE OPENSSL_ROOT_DIR | |
80 | OUTPUT_STRIP_TRAILING_WHITESPACE) | |
81 | endif() | |
82 | endif() | |
83 | ||
84 | find_package(OpenSSL) | |
85 | ||
86 | # | |
87 | #------------------------------------------------------------------------------- | |
88 | ||
89 | function(DoGroupSources curdir rootdir folder) | |
90 | file(GLOB children RELATIVE ${PROJECT_SOURCE_DIR}/${curdir} ${PROJECT_SOURCE_DIR}/${curdir}/*) | |
91 | foreach(child ${children}) | |
92 | if(IS_DIRECTORY ${PROJECT_SOURCE_DIR}/${curdir}/${child}) | |
93 | DoGroupSources(${curdir}/${child} ${rootdir} ${folder}) | |
94 | elseif(${child} STREQUAL "CMakeLists.txt") | |
95 | source_group("" FILES ${PROJECT_SOURCE_DIR}/${curdir}/${child}) | |
96 | else() | |
97 | string(REGEX REPLACE ^${rootdir} ${folder} groupname ${curdir}) | |
98 | string(REPLACE "/" "\\" groupname ${groupname}) | |
99 | source_group(${groupname} FILES ${PROJECT_SOURCE_DIR}/${curdir}/${child}) | |
100 | endif() | |
101 | endforeach() | |
102 | endfunction() | |
103 | ||
104 | function(GroupSources curdir folder) | |
105 | DoGroupSources(${curdir} ${curdir} ${folder}) | |
106 | endfunction() | |
107 | ||
108 | #------------------------------------------------------------------------------- | |
109 | ||
110 | if ("${VARIANT}" STREQUAL "coverage") | |
111 | set(CMAKE_CXX_FLAGS | |
112 | "${CMAKE_CXX_FLAGS} -fprofile-arcs -ftest-coverage") | |
113 | set(CMAKE_BUILD_TYPE RELWITHDEBINFO) | |
114 | set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lgcov") | |
115 | elseif ("${VARIANT}" STREQUAL "asan") | |
116 | set(CMAKE_CXX_FLAGS | |
117 | "${CMAKE_CXX_FLAGS} -fsanitize=address -fno-omit-frame-pointer") | |
118 | set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address") | |
119 | set(CMAKE_BUILD_TYPE RELWITHDEBINFO) | |
120 | elseif ("${VARIANT}" STREQUAL "usan") | |
121 | set(CMAKE_CXX_FLAGS | |
122 | "${CMAKE_CXX_FLAGS} -fsanitize=undefined -fno-omit-frame-pointer") | |
123 | set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=undefined") | |
124 | set(CMAKE_BUILD_TYPE RELWITHDEBINFO) | |
125 | elseif ("${VARIANT}" STREQUAL "debug") | |
126 | set(CMAKE_BUILD_TYPE DEBUG) | |
127 | elseif ("${VARIANT}" STREQUAL "release") | |
128 | set(CMAKE_BUILD_TYPE RELEASE) | |
129 | endif() | |
130 | ||
131 | include_directories (extras) | |
132 | include_directories (include) | |
133 | ||
134 | set(ZLIB_SOURCES | |
135 | ${PROJECT_SOURCE_DIR}/test/zlib/zlib-1.2.8/crc32.h | |
136 | ${PROJECT_SOURCE_DIR}/test/zlib/zlib-1.2.8/deflate.h | |
137 | ${PROJECT_SOURCE_DIR}/test/zlib/zlib-1.2.8/inffast.h | |
138 | ${PROJECT_SOURCE_DIR}/test/zlib/zlib-1.2.8/inffixed.h | |
139 | ${PROJECT_SOURCE_DIR}/test/zlib/zlib-1.2.8/inflate.h | |
140 | ${PROJECT_SOURCE_DIR}/test/zlib/zlib-1.2.8/inftrees.h | |
141 | ${PROJECT_SOURCE_DIR}/test/zlib/zlib-1.2.8/trees.h | |
142 | ${PROJECT_SOURCE_DIR}/test/zlib/zlib-1.2.8/zlib.h | |
143 | ${PROJECT_SOURCE_DIR}/test/zlib/zlib-1.2.8/zutil.h | |
144 | ${PROJECT_SOURCE_DIR}/test/zlib/zlib-1.2.8/adler32.c | |
145 | ${PROJECT_SOURCE_DIR}/test/zlib/zlib-1.2.8/compress.c | |
146 | ${PROJECT_SOURCE_DIR}/test/zlib/zlib-1.2.8/crc32.c | |
147 | ${PROJECT_SOURCE_DIR}/test/zlib/zlib-1.2.8/deflate.c | |
148 | ${PROJECT_SOURCE_DIR}/test/zlib/zlib-1.2.8/infback.c | |
149 | ${PROJECT_SOURCE_DIR}/test/zlib/zlib-1.2.8/inffast.c | |
150 | ${PROJECT_SOURCE_DIR}/test/zlib/zlib-1.2.8/inflate.c | |
151 | ${PROJECT_SOURCE_DIR}/test/zlib/zlib-1.2.8/inftrees.c | |
152 | ${PROJECT_SOURCE_DIR}/test/zlib/zlib-1.2.8/trees.c | |
153 | ${PROJECT_SOURCE_DIR}/test/zlib/zlib-1.2.8/uncompr.c | |
154 | ${PROJECT_SOURCE_DIR}/test/zlib/zlib-1.2.8/zutil.c | |
155 | ) | |
156 | ||
157 | file(GLOB_RECURSE BEAST_INCLUDES | |
158 | ${PROJECT_SOURCE_DIR}/include/beast/*.hpp | |
159 | ${PROJECT_SOURCE_DIR}/include/beast/*.ipp | |
160 | ) | |
161 | ||
162 | file(GLOB_RECURSE EXTRAS_INCLUDES | |
163 | ${PROJECT_SOURCE_DIR}/extras/beast/*.hpp | |
164 | ${PROJECT_SOURCE_DIR}/extras/beast/*.ipp | |
165 | ) | |
166 | ||
167 | add_subdirectory (examples) | |
168 | if (NOT OPENSSL_FOUND) | |
169 | message("OpenSSL not found. Not building examples/ssl") | |
170 | else() | |
171 | add_subdirectory (examples/ssl) | |
172 | endif() | |
173 | ||
174 | add_subdirectory (test) | |
175 | add_subdirectory (test/core) | |
176 | add_subdirectory (test/http) | |
177 | add_subdirectory (test/websocket) | |
178 | add_subdirectory (test/zlib) |