-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
121 lines (102 loc) · 3.88 KB
/
CMakeLists.txt
File metadata and controls
121 lines (102 loc) · 3.88 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
cmake_minimum_required(VERSION 3.21)
project(polymarket-sdk-cpp
VERSION 0.1.0
LANGUAGES C CXX
)
set(CMAKE_CXX_STANDARD 23)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
# --- Options ---
# When included as subdirectory (FetchContent), disable tests/bench/examples by default.
if(CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR)
set(_POLYMARKET_IS_TOP_LEVEL ON)
else()
set(_POLYMARKET_IS_TOP_LEVEL OFF)
endif()
option(POLYMARKET_BUILD_TESTS "Build tests" ${_POLYMARKET_IS_TOP_LEVEL})
option(POLYMARKET_BUILD_BENCH "Build benchmarks" ${_POLYMARKET_IS_TOP_LEVEL})
option(POLYMARKET_BUILD_EXAMPLES "Build examples" ${_POLYMARKET_IS_TOP_LEVEL})
option(POLYMARKET_ENABLE_WS "Enable WebSocket" ON)
option(POLYMARKET_ENABLE_LTO "Link-Time Optimization" OFF)
option(POLYMARKET_ENABLE_MIMALLOC "Use mimalloc global allocator" ON)
option(POLYMARKET_ENABLE_SIMD "SIMD hex encode/decode" ON)
option(POLYMARKET_ENABLE_ASAN "Address sanitizer" OFF)
option(POLYMARKET_ENABLE_TSAN "Thread sanitizer" OFF)
# --- System dependencies (before Dependencies.cmake — uSockets needs OpenSSL) ---
find_package(OpenSSL REQUIRED)
find_package(CURL REQUIRED)
# --- Modules ---
include(cmake/CompilerWarnings.cmake)
include(cmake/Dependencies.cmake)
# --- Sanitizers ---
if(POLYMARKET_ENABLE_ASAN)
add_compile_options(-fsanitize=address,undefined -fno-omit-frame-pointer)
add_link_options(-fsanitize=address,undefined)
endif()
if(POLYMARKET_ENABLE_TSAN)
if(POLYMARKET_ENABLE_ASAN)
message(FATAL_ERROR "Cannot enable ASan and TSan simultaneously")
endif()
add_compile_options(-fsanitize=thread)
add_link_options(-fsanitize=thread)
endif()
# --- LTO ---
if(POLYMARKET_ENABLE_LTO)
include(CheckIPOSupported)
check_ipo_supported(RESULT lto_supported)
if(lto_supported)
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION ON)
endif()
endif()
# --- Main library ---
# Almost entirely header-only. Only ws_client.cpp has compiled code.
# src/polymarket.cpp is a minimal stub to create the static library target.
add_library(polymarket STATIC
src/polymarket.cpp
)
target_include_directories(polymarket PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>
)
target_link_libraries(polymarket
PUBLIC
unordered_dense # hash maps in public headers
glaze::glaze # CLOB/Data JSON parsing
simdjson # Gamma JSON parsing
keccak # Keccak-256 (in crypto headers)
secp256k1 # secp256k1 (in signer header)
OpenSSL::SSL OpenSSL::Crypto # HMAC + TLS (in auth/crypto headers)
PRIVATE
CURL::libcurl # HTTP client (internal)
)
if(POLYMARKET_ENABLE_MIMALLOC)
target_link_libraries(polymarket PRIVATE mimalloc-static)
target_compile_definitions(polymarket PRIVATE POLYMARKET_USE_MIMALLOC)
endif()
if(POLYMARKET_ENABLE_SIMD)
target_compile_definitions(polymarket PUBLIC POLYMARKET_USE_SIMD)
endif()
polymarket_set_warnings(polymarket)
# --- WebSocket ---
if(POLYMARKET_ENABLE_WS)
target_sources(polymarket PRIVATE src/ws/ws_client.cpp)
target_link_libraries(polymarket PRIVATE uSockets)
target_compile_definitions(polymarket PUBLIC POLYMARKET_USE_WS)
# OpenSSL headers use C-style casts internally — suppress for this file
set_source_files_properties(src/ws/ws_client.cpp PROPERTIES
COMPILE_OPTIONS "-Wno-old-style-cast")
endif()
# --- Tests ---
if(POLYMARKET_BUILD_TESTS)
enable_testing()
add_subdirectory(tests)
endif()
# --- Benchmarks ---
if(POLYMARKET_BUILD_BENCH)
add_subdirectory(bench)
endif()
# --- Examples ---
if(POLYMARKET_BUILD_EXAMPLES)
add_subdirectory(examples)
endif()