-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCMakeLists.txt
125 lines (92 loc) · 5.11 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
cmake_minimum_required(VERSION 3.22.0)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
# set Debug during the competition
set(CMAKE_BUILD_TYPE Debug)
# set compiler as clang
set(CMAKE_CXX_COMPILER "/usr/bin/clang++")
set(CMAKE_C_COMPILER "/usr/bin/clang")
message(STATUS "CMAKE_CXX_COMPILER: ${CMAKE_CXX_COMPILER}")
message(STATUS "CMAKE_C_COMPILER: ${CMAKE_C_COMPILER}")
message(STATUS "CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE}")
message(STATUS "CMAKE_CXX_STANDARD: ${CMAKE_CXX_STANDARD}")
add_compile_options(-Wall -Wextra -Wpedantic)
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libstdc++ -fexperimental-library")
endif ()
project(net)
find_package(OpenSSL REQUIRED)
# set library output path
set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
set(INCLUDE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/include)
set(TEMPLATE_OUTPUT_PATH ${EXECUTABLE_OUTPUT_PATH}/template)
file(MAKE_DIRECTORY ${INCLUDE_OUTPUT_PATH})
file(MAKE_DIRECTORY ${LIBRARY_OUTPUT_PATH})
file(MAKE_DIRECTORY ${EXECUTABLE_OUTPUT_PATH})
file(MAKE_DIRECTORY ${TEMPLATE_OUTPUT_PATH})
message(STATUS "LIBRARY_OUTPUT_PATH: ${INCLUDE_OUTPUT_PATH}")
message(STATUS "LIBRARY_OUTPUT_PATH: ${LIBRARY_OUTPUT_PATH}")
message(STATUS "LIBRARY_OUTPUT_PATH: ${EXECUTABLE_OUTPUT_PATH}")
# build net
aux_source_directory(./utils utils_src)
aux_source_directory(./net/socket net_socket_src)
aux_source_directory(./net/application net_application_src)
aux_source_directory(./net/common net_common_src)
add_library(utils STATIC ${utils_src})
add_library(net::utils ALIAS utils)
target_include_directories(utils PUBLIC ./utils/include)
add_library(common STATIC ${net_common_src})
add_library(net::common ALIAS common)
target_include_directories(common PUBLIC ./net/common/include)
add_library(net_socket STATIC ${net_socket_src})
add_library(net::socket ALIAS net_socket)
target_include_directories(net_socket PUBLIC ./net/socket/include ${OPENSSL_INCLUDE_DIR})
target_link_libraries(net_socket PUBLIC net::utils net::common OpenSSL::SSL OpenSSL::Crypto)
add_library(net_application STATIC ${net_application_src})
add_library(net::application ALIAS net_application)
target_include_directories(net_application PUBLIC ./net/application/include ${OPENSSL_INCLUDE_DIR})
target_link_libraries(net_application PUBLIC net::utils net::socket net::common OpenSSL::SSL OpenSSL::Crypto)
#demo test
add_executable(TcpServerTest ./demo/tcp_server.cpp)
target_link_libraries(TcpServerTest PUBLIC net::utils net::socket)
add_executable(TcpClientTest ./demo/tcp_client.cpp)
target_link_libraries(TcpClientTest PUBLIC net::utils net::socket)
add_executable(SSLServerTest ./demo/ssl_server.cpp)
target_link_libraries(SSLServerTest PUBLIC net::utils net::socket)
add_executable(SSLClientTest ./demo/ssl_client.cpp)
target_link_libraries(SSLClientTest PUBLIC net::utils net::socket)
add_executable(HttpServerTest ./demo/http_server.cpp)
target_link_libraries(HttpServerTest PUBLIC net::utils net::socket net::application)
add_executable(HttpClientTest ./demo/http_client.cpp)
target_link_libraries(HttpClientTest PUBLIC net::utils net::socket net::application)
add_executable(HttpsServerTest ./demo/https_server.cpp)
target_link_libraries(HttpsServerTest PUBLIC net::utils net::socket net::application)
add_executable(HttpsClientTest ./demo/https_client.cpp)
target_link_libraries(HttpsClientTest PUBLIC net::utils net::socket net::application)
add_executable(WebSocketServerTest ./demo/websocket_server.cpp)
target_link_libraries(WebSocketServerTest PUBLIC net::utils net::socket net::application)
add_executable(WebSocketClientTest ./demo/websocket_client.cpp)
target_link_libraries(WebSocketClientTest PUBLIC net::utils net::socket net::application)
add_executable(HttpForwardProxyServerTest ./demo/http_forward_proxy_server.cpp)
target_link_libraries(HttpForwardProxyServerTest PUBLIC net::utils net::socket net::application)
# install headers
install(DIRECTORY ${PROJECT_SOURCE_DIR}/utils/include/ DESTINATION ${INCLUDE_OUTPUT_PATH}/net/utils)
install(DIRECTORY ${PROJECT_SOURCE_DIR}/net/application/include/ DESTINATION ${INCLUDE_OUTPUT_PATH}/net/application)
install(DIRECTORY ${PROJECT_SOURCE_DIR}/net/socket/include/ DESTINATION ${INCLUDE_OUTPUT_PATH}/net/socket)
install(DIRECTORY ${PROJECT_SOURCE_DIR}/net/common/include/ DESTINATION ${INCLUDE_OUTPUT_PATH}/net/common)
# install template resources
install(DIRECTORY ${PROJECT_SOURCE_DIR}/demo/index/ DESTINATION ${TEMPLATE_OUTPUT_PATH}/index)
install(DIRECTORY ${PROJECT_SOURCE_DIR}/demo/keys/ DESTINATION ${TEMPLATE_OUTPUT_PATH}/keys)
# build test
find_package(GTest REQUIRED)
# utils tests
add_executable(LoggerTest tests/test_logger.cpp)
target_link_libraries(LoggerTest GTest::GTest net::utils)
add_executable(PrintTest tests/test_print.cpp)
target_link_libraries(PrintTest GTest::GTest net::utils)
add_executable(ThreadPoolTest tests/test_thread_pool.cpp)
target_link_libraries(ThreadPoolTest GTest::GTest net::utils)
add_executable(ParserTest tests/parser_test.cpp)
target_link_libraries(ParserTest PUBLIC net::utils net::socket net::application GTest::GTest)