-
Notifications
You must be signed in to change notification settings - Fork 13
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
113 lines (100 loc) · 6.29 KB
/
Copy pathCMakeLists.txt
File metadata and controls
113 lines (100 loc) · 6.29 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
cmake_minimum_required(VERSION 3.31.2)
add_subdirectory("deps/linenoise")
project(fkvs-server C)
project(fkvs-cli C)
project(fkvs-benchmark C)
set(CMAKE_C_STANDARD 23)
set(CMAKE_C_STANDARD_REQUIRED ON)
set(CMAKE_C_EXTENSIONS OFF)
set(THREADS_PREFER_PTHREAD_FLAG ON)
find_package(Threads REQUIRED)
option(FKVS_ENABLE_WARNINGS "Enable strict compiler warnings" ON)
option(FKVS_WARNINGS_AS_ERRORS "Treat compiler warnings as errors" OFF)
option(FKVS_ENABLE_SANITIZERS "Enable AddressSanitizer and UndefinedBehaviorSanitizer" OFF)
function(fkvs_configure_target target_name)
target_compile_definitions(${target_name} PRIVATE _POSIX_C_SOURCE=200809L)
target_compile_features(${target_name} PRIVATE c_std_23)
if(FKVS_ENABLE_WARNINGS AND CMAKE_C_COMPILER_ID MATCHES "Clang|GNU")
target_compile_options(${target_name} PRIVATE -Wall -Wextra -Wpedantic)
if(FKVS_WARNINGS_AS_ERRORS)
target_compile_options(${target_name} PRIVATE -Werror)
endif()
endif()
if(FKVS_ENABLE_SANITIZERS AND CMAKE_C_COMPILER_ID MATCHES "Clang|GNU")
target_compile_options(${target_name} PRIVATE -fsanitize=address,undefined -fno-omit-frame-pointer)
target_link_options(${target_name} PRIVATE -fsanitize=address,undefined)
endif()
endfunction()
if(APPLE)
add_executable(fkvs-server src/memory.c src/counter.c src/client.c src/core/list.c src/config.c src/networking/networking.c src/server.c src/server_lifecycle.c src/server_limits.c src/core/hashtable.c src/commands/common/command_registry.c src/commands/server/server_command_handlers.c src/io/event_dispatcher_kqueue.c src/ttl.c src/numeric_parse.c)
target_compile_definitions(fkvs-server PRIVATE SERVER)
fkvs_configure_target(fkvs-server)
add_executable(fkvs-benchmark src/string_utils.c src/fkvs-benchmark.c src/client.c src/core/list.c src/networking/networking.c src/commands/common/command_parser.c src/commands/client/client_command_handlers.c)
target_compile_definitions(fkvs-benchmark PRIVATE CLI)
fkvs_configure_target(fkvs-benchmark)
elseif(LINUX)
find_library(LIBURING liburing)
if(LIBURING)
add_executable(fkvs-server src/memory.c src/counter.c src/client.c src/core/list.c src/config.c src/networking/networking.c src/server.c src/server_lifecycle.c src/server_limits.c src/core/hashtable.c src/commands/common/command_registry.c src/commands/server/server_command_handlers.c src/io/event_dispatcher_io_uring.c src/ttl.c src/numeric_parse.c)
target_link_libraries(fkvs-server PRIVATE LIBURING)
target_compile_definitions(fkvs-server PRIVATE SERVER IO_URING_ENABLED)
fkvs_configure_target(fkvs-server)
else()
add_executable(fkvs-server src/memory.c src/counter.c src/client.c src/core/list.c src/config.c src/networking/networking.c src/server.c src/server_lifecycle.c src/server_limits.c src/core/hashtable.c src/commands/common/command_registry.c src/commands/server/server_command_handlers.c src/io/event_dispatcher_epoll.c src/ttl.c src/numeric_parse.c)
target_compile_definitions(fkvs-server PRIVATE SERVER)
fkvs_configure_target(fkvs-server)
endif()
add_executable(fkvs-benchmark src/string_utils.c src/fkvs-benchmark.c src/client.c src/core/list.c src/networking/networking.c src/commands/common/command_parser.c src/commands/client/client_command_handlers.c)
target_compile_definitions(fkvs-benchmark PRIVATE CLI)
fkvs_configure_target(fkvs-benchmark)
endif()
# Add test executable
add_executable(test_counter tests/test_counter.c src/counter.c)
add_executable(test_string_utils tests/test_string_utils.c src/string_utils.c)
add_executable(test_hashtable tests/test_hashtable.c src/core/hashtable.c)
add_executable(test_response_writer tests/test_response_writer.c src/client.c src/commands/common/command_registry.c)
add_executable(test_server_lifecycle tests/test_server_lifecycle.c src/server_lifecycle.c src/client.c src/core/list.c src/core/hashtable.c)
add_executable(test_server_config tests/test_server_config.c src/config.c src/numeric_parse.c)
add_executable(test_server_limits tests/test_server_limits.c src/server_limits.c)
add_executable(test_integration tests/test_integration.c src/client.c src/core/hashtable.c src/commands/common/command_registry.c src/commands/common/command_parser.c src/commands/server/server_command_handlers.c src/counter.c src/ttl.c src/numeric_parse.c)
target_compile_definitions(test_server_config PRIVATE SERVER)
target_compile_definitions(test_integration PRIVATE SERVER)
fkvs_configure_target(test_counter)
fkvs_configure_target(test_string_utils)
fkvs_configure_target(test_hashtable)
fkvs_configure_target(test_response_writer)
fkvs_configure_target(test_server_lifecycle)
fkvs_configure_target(test_server_config)
fkvs_configure_target(test_server_limits)
fkvs_configure_target(test_integration)
target_compile_options(test_counter PRIVATE -UNDEBUG)
target_compile_options(test_string_utils PRIVATE -UNDEBUG)
target_compile_options(test_hashtable PRIVATE -UNDEBUG)
target_compile_options(test_response_writer PRIVATE -UNDEBUG)
target_compile_options(test_server_lifecycle PRIVATE -UNDEBUG)
target_compile_options(test_server_config PRIVATE -UNDEBUG)
target_compile_options(test_server_limits PRIVATE -UNDEBUG)
target_compile_options(test_integration PRIVATE -UNDEBUG)
target_link_libraries(test_counter)
target_link_libraries(test_string_utils)
target_link_libraries(test_hashtable)
target_link_libraries(test_response_writer)
target_link_libraries(test_server_lifecycle)
target_link_libraries(test_server_config)
target_link_libraries(test_server_limits)
target_link_libraries(test_integration)
# Enable testing
enable_testing()
add_test(NAME CounterTest COMMAND test_counter)
add_test(NAME StringUtilsTest COMMAND test_string_utils)
add_test(NAME HashtableTest COMMAND test_hashtable)
add_test(NAME ResponseWriterTest COMMAND test_response_writer)
add_test(NAME ServerLifecycleTest COMMAND test_server_lifecycle)
add_test(NAME ServerConfigTest COMMAND test_server_config)
add_test(NAME ServerLimitsTest COMMAND test_server_limits)
add_test(NAME IntegrationTest COMMAND test_integration)
add_executable(fkvs-cli src/string_utils.c src/fkvs-cli.c src/config.c src/commands/common/command_parser.c src/commands/client/client_command_handlers.c)
target_link_libraries(fkvs-benchmark PRIVATE Threads::Threads)
target_link_libraries(fkvs-cli PUBLIC linenoise)
target_compile_definitions(fkvs-cli PRIVATE CLI)
fkvs_configure_target(fkvs-cli)