-
Notifications
You must be signed in to change notification settings - Fork 37
/
Copy pathCMakeLists.txt
136 lines (109 loc) · 4.14 KB
/
CMakeLists.txt
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
133
134
135
136
cmake_minimum_required(VERSION 3.2.0)
if (CMAKE_VERSION VERSION_LESS "3.7.1")
message(WARNING "It is highly recommended to used the latest version of CMake.")
message(WARNING "To support Android, you should use at least 3.7.1")
endif()
project(libnekit C CXX)
set(PLATFORM "mac" CACHE STRING "Name of the platform.")
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_C_VISIBILITY_PRESET hidden)
set(CMAKE_CXX_VISIBILITY_PRESET hidden)
set(CMAKE_VISIBILITY_INLINES_HIDDEN ON)
cmake_policy(SET CMP0063 NEW)
add_library(nekit "")
if (NOT WIN32)
include(CheckCXXCompilerFlag)
# I can't get VS suppress warnings from thrid party libraries, tried CAExcludePath and IncludePath but got no luck.
check_cxx_compiler_flag(-Wall HAS_WALL)
target_compile_options(nekit PRIVATE $<$<BOOL:${HAS_WALL}>:-Wall>)
check_cxx_compiler_flag(-Wextra HAS_WEXTRA)
target_compile_options(nekit PRIVATE $<$<BOOL:${HAS_WEXTRA}>:-Wextra>)
check_cxx_compiler_flag(-Wstrict-aliasing HAS_STRICT_ALIASING)
target_compile_options(nekit PRIVATE $<$<BOOL:${HAS_STRICT_ALIASING}>:-Wstrict-aliasing>)
check_cxx_compiler_flag(-Wpedantic HAS_PEDANTIC)
target_compile_options(nekit PRIVATE $<$<BOOL:${HAS_PEDANTIC}>:-Wpedantic>)
check_cxx_compiler_flag(-Wno-pragma-once-outside-header HAS_PRAGMA_ONCE_WARNING)
target_compile_options(nekit PRIVATE $<$<BOOL:${HAS_PRAGMA_ONCE_WARNING}>:-Wno-pragma-once-outside-header>)
endif()
option(COVERAGE "Generate coverage report" OFF)
if(COVERAGE)
target_compile_options(nekit PRIVATE -g -O0 -coverage)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -coverage")
endif()
set(DEPENDENCY_ROOT "${PROJECT_SOURCE_DIR}/deps/${PLATFORM}")
target_include_directories(nekit PUBLIC "include")
if(WIN32)
target_compile_definitions(nekit PUBLIC -DELPP_WINSOCK2 -DWIN32_LEAN_AND_MEAN)
endif()
target_compile_definitions(nekit PUBLIC -DBOOST_ASIO_DISABLE_HANDLER_TYPE_REQUIREMENTS)
file(GLOB_RECURSE HEADER_FILES "include/*.h")
target_sources(nekit
PUBLIC
${HEADER_FILES}
PRIVATE
src/transport/tcp_socket.cc
src/transport/tcp_listener.cc
src/transport/tunnel.cc
src/transport/tcp_connector.cc
src/utils/system_resolver.cc
src/utils/timer.cc
src/utils/logger.cc
src/utils/cancelable.cc
src/utils/maxmind.cc
src/utils/subnet.cc
src/utils/country_iso_code.cc
src/utils/http_message_stream_rewriter.cc
src/init.cc
src/proxy_manager.cc
src/rule/rule_manager.cc
src/rule/all_rule.cc
src/rule/dns_fail_rule.cc
src/rule/geo_rule.cc
src/rule/domain_rule.cc
src/rule/domain_regex_rule.cc
src/rule/subnet_rule.cc
src/instance.cc
src/crypto/random.cc
src/crypto/key_generator.cc
src/crypto/stream_cipher_interface.cc
src/crypto/tls_tunnel.cc
src/utils/buffer.cc
src/utils/endpoint.cc
src/utils/stream_reader.cc
src/utils/track_id_generator.cc
src/data_flow/socks5_server_data_flow.cc
src/data_flow/http_server_data_flow.cc
src/data_flow/http_data_flow.cc
src/data_flow/socks5_data_flow.cc
src/data_flow/speed_data_flow.cc
src/data_flow/tls_data_flow.cc
src/third_party/http_parser/http_parser.c
)
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/contrib" AND IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/contrib" AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/contrib/CMakeLists.txt")
message(STATUS "Add contrib folder.")
add_subdirectory("contrib")
endif()
include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
conan_basic_setup(TARGETS NO_OUTPUT_DIRS)
target_link_libraries(nekit CONAN_PKG::libmaxminddb CONAN_PKG::libsodium CONAN_PKG::OpenSSL CONAN_PKG::boost)
install(TARGETS nekit
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib
)
install(DIRECTORY include
DESTINATION "."
FILES_MATCHING PATTERN "*.h" PATTERN "*.hpp")
option(NE_ENABLE_TEST "Enable tests." ON)
if (NE_ENABLE_TEST)
enable_testing()
add_subdirectory(test)
endif()
option(NE_BUILD_APP "Build file in app folder." OFF)
if (NE_BUILD_APP)
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/app" AND IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/app" AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/app/CMakeLists.txt")
add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/app")
endif()
endif()