-
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
140 lines (119 loc) · 4.34 KB
/
Copy pathCMakeLists.txt
File metadata and controls
140 lines (119 loc) · 4.34 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
include(FetchContent)
# Fetch slick-queue from GitHub
set(BUILD_SLICK_QUEUE_TESTS OFF CACHE BOOL "" FORCE)
FetchContent_Declare(
slick-queue
GIT_REPOSITORY https://github.com/SlickQuant/slick-queue.git
GIT_TAG main
)
FetchContent_MakeAvailable(slick-queue)
set(SLICK_SHM_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
set(SLICK_SHM_BUILD_TESTS OFF CACHE BOOL "" FORCE)
set(SLICK_SHM_INSTALL OFF CACHE BOOL "" FORCE)
FetchContent_Declare(
slick-shm
GIT_REPOSITORY https://github.com/SlickQuant/slick-shm.git
GIT_TAG main
)
FetchContent_MakeAvailable(slick-shm)
# Find Python
find_package(Python3 COMPONENTS Interpreter Development REQUIRED)
# Create interop test executables
add_executable(cpp_producer cpp_producer.cpp)
target_link_libraries(cpp_producer PRIVATE slick::queue)
add_executable(cpp_consumer cpp_consumer.cpp)
target_link_libraries(cpp_consumer PRIVATE slick::queue)
add_executable(cpp_work_stealing_consumer cpp_work_stealing_consumer.cpp)
target_link_libraries(cpp_work_stealing_consumer PRIVATE slick::queue slick::shm)
add_executable(cpp_multi_producer cpp_multi_producer.cpp)
target_link_libraries(cpp_multi_producer PRIVATE slick::queue)
add_executable(cpp_read_last_tester cpp_read_last_tester.cpp)
target_link_libraries(cpp_read_last_tester PRIVATE slick::queue)
# Platform-specific linking and compilation flags
if(UNIX AND NOT APPLE)
# Link rt library on Linux (not needed on macOS)
target_link_libraries(cpp_producer PRIVATE pthread rt)
target_link_libraries(cpp_consumer PRIVATE pthread rt)
target_link_libraries(cpp_work_stealing_consumer PRIVATE pthread rt)
target_link_libraries(cpp_multi_producer PRIVATE pthread rt)
target_link_libraries(cpp_read_last_tester PRIVATE pthread rt)
elseif(APPLE)
# macOS only needs pthread
target_link_libraries(cpp_producer PRIVATE pthread)
target_link_libraries(cpp_consumer PRIVATE pthread)
target_link_libraries(cpp_work_stealing_consumer PRIVATE pthread)
target_link_libraries(cpp_multi_producer PRIVATE pthread)
target_link_libraries(cpp_read_last_tester PRIVATE pthread)
endif()
# Add Python interop tests
add_test(
NAME atomic_ops_test
COMMAND ${Python3_EXECUTABLE} ${CMAKE_SOURCE_DIR}/tests/test_atomic_ops.py
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
)
add_test(
NAME atomic_cursor_test
COMMAND ${Python3_EXECUTABLE} ${CMAKE_SOURCE_DIR}/tests/test_atomic_cursor.py
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
)
add_test(
NAME local_mode_test
COMMAND ${Python3_EXECUTABLE} ${CMAKE_SOURCE_DIR}/tests/test_local_mode.py
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
)
add_test(
NAME shm_mode_test
COMMAND ${Python3_EXECUTABLE} ${CMAKE_SOURCE_DIR}/tests/test_queue.py
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
)
add_test(
NAME multi_producer_test
COMMAND ${Python3_EXECUTABLE} ${CMAKE_SOURCE_DIR}/tests/test_multi_producer.py
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
)
# Python/C++ interop tests
add_test(
NAME python_producer_cpp_consumer
COMMAND ${Python3_EXECUTABLE} ${CMAKE_SOURCE_DIR}/tests/test_interop.py --test python_producer_cpp_consumer
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
)
add_test(
NAME cpp_producer_python_consumer
COMMAND ${Python3_EXECUTABLE} ${CMAKE_SOURCE_DIR}/tests/test_interop.py --test cpp_producer_python_consumer
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
)
add_test(
NAME multi_producer_interop
COMMAND ${Python3_EXECUTABLE} ${CMAKE_SOURCE_DIR}/tests/test_interop.py --test multi_producer_interop
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
)
add_test(
NAME read_last_test
COMMAND ${Python3_EXECUTABLE} ${CMAKE_SOURCE_DIR}/tests/test_read_last.py
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
)
add_test(
NAME read_last_interop_test
COMMAND ${Python3_EXECUTABLE} ${CMAKE_SOURCE_DIR}/tests/test_read_last_interop.py
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
)
add_test(
NAME modern_format_test
COMMAND ${Python3_EXECUTABLE} ${CMAKE_SOURCE_DIR}/tests/test_modern_format.py
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
)
# Set timeouts for all tests to prevent CI hangs
set_tests_properties(
atomic_ops_test
atomic_cursor_test
local_mode_test
shm_mode_test
multi_producer_test
python_producer_cpp_consumer
cpp_producer_python_consumer
multi_producer_interop
read_last_test
read_last_interop_test
modern_format_test
PROPERTIES TIMEOUT 120
)