-
Notifications
You must be signed in to change notification settings - Fork 27
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
161 lines (138 loc) · 3.7 KB
/
Copy pathCMakeLists.txt
File metadata and controls
161 lines (138 loc) · 3.7 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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
cmake_minimum_required(VERSION 3.24)
#
# Project details
#
project(
${CMAKE_PROJECT_NAME}Tests
LANGUAGES CXX
)
verbose_message("Adding tests under ${CMAKE_PROJECT_NAME}Tests...")
#
# Set the sources for the unit tests and add the executable(s)
#
set(
test_headers
include/mock/mock_http_server.hpp
include/mock/mock_log_receiver.hpp
include/mock/mock_lsg_server.hpp
include/mock/mock_tcp_server.hpp
include/temp_file.hpp
)
set(
test_sources
src/batch_tests.cpp
src/buffer_tests.cpp
src/datetime_tests.cpp
src/dbn_decoder_tests.cpp
src/dbn_encoder_tests.cpp
src/dbn_file_store_tests.cpp
src/dbn_tests.cpp
src/exception_tests.cpp
src/file_stream_tests.cpp
src/flag_set_tests.cpp
src/historical_tests.cpp
src/http_client_tests.cpp
src/live_blocking_tests.cpp
src/live_tests.cpp
src/live_threaded_tests.cpp
src/log_tests.cpp
src/metadata_tests.cpp
src/mock_http_server.cpp
src/mock_lsg_server.cpp
src/mock_tcp_server.cpp
src/pretty_tests.cpp
src/record_tests.cpp
src/scoped_thread_tests.cpp
src/sha256_hasher_tests.cpp
src/stream_op_helper_tests.cpp
src/symbol_map_tests.cpp
src/symbology_tests.cpp
src/tcp_client_tests.cpp
src/v1_tests.cpp
src/zstd_stream_tests.cpp
)
add_executable(${PROJECT_NAME} ${test_headers} ${test_sources})
if(WIN32)
# Disable warnings
target_compile_options(${PROJECT_NAME} PRIVATE /w)
endif()
find_package(Threads REQUIRED)
target_link_libraries(
${PROJECT_NAME}
PUBLIC
Threads::Threads
)
target_include_directories(
${PROJECT_NAME}
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
PRIVATE
${CMAKE_SOURCE_DIR}/src # allow testing of private classes
)
#
# Set the compiler standard
#
target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_17)
# Ensure std::string debug info is included
if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND CMAKE_BUILD_TYPE STREQUAL "Debug")
target_compile_options(${PROJECT_NAME} PRIVATE -fstandalone-debug)
endif()
#
# Setup code coverage if enabled
#
if (${CMAKE_PROJECT_NAME}_ENABLE_CODE_COVERAGE)
target_compile_options(${CMAKE_PROJECT_NAME} PUBLIC -O0 -g -fprofile-arcs -ftest-coverage)
target_link_options(${CMAKE_PROJECT_NAME} PUBLIC -fprofile-arcs -ftest-coverage)
verbose_message("Code coverage is enabled and provided with GCC.")
endif()
#
# Load gtest
#
if(${CMAKE_PROJECT_NAME}_BUILD_EXECUTABLE)
set(${CMAKE_PROJECT_NAME}_TEST_LIB ${CMAKE_PROJECT_NAME}_LIB)
else()
set(${CMAKE_PROJECT_NAME}_TEST_LIB ${CMAKE_PROJECT_NAME})
endif()
if(${PROJECT_NAME_UPPERCASE}_USE_EXTERNAL_GTEST)
find_package(GTest REQUIRED)
target_link_libraries(
${PROJECT_NAME}
PUBLIC
GTest::GTest
GTest::Main
${${CMAKE_PROJECT_NAME}_TEST_LIB}
)
else()
include(FetchContent)
if(WIN32)
# Visual Studio by default links C runtimes dynamically but gtest by default links them statically
set(gtest_force_shared_crt ON CACHE BOOL "Link dynamic CRT" FORCE)
endif()
FetchContent_Declare(
googletest
URL https://github.com/google/googletest/releases/download/v1.17.0/googletest-1.17.0.tar.gz
DOWNLOAD_EXTRACT_TIMESTAMP TRUE
)
FetchContent_MakeAvailable(googletest)
target_link_libraries(
${PROJECT_NAME}
PUBLIC
gmock_main
${${CMAKE_PROJECT_NAME}_TEST_LIB}
)
# Ignore compiler warnings in headers
add_system_include_property(gtest)
endif()
#
# Add the unit tests
#
include(GoogleTest)
gtest_discover_tests(${PROJECT_NAME})
#
# Copy test data
#
file(COPY data DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
add_compile_definitions(TEST_DATA_DIR="${CMAKE_CURRENT_SOURCE_DIR}/data")
verbose_message("Finished adding unit tests for ${CMAKE_PROJECT_NAME}.")
add_subdirectory(cmake_fetch_content)
add_subdirectory(cmake_import)