-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
151 lines (129 loc) · 5.05 KB
/
Copy pathCMakeLists.txt
File metadata and controls
151 lines (129 loc) · 5.05 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
cmake_minimum_required(VERSION 3.21)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
project(alpaca-cpp
VERSION 0.1.0
LANGUAGES CXX)
# Each package can be built independently so it can be shipped as its own vcpkg port.
# Turning BUILD_ALPACA_CORE off makes the satellites resolve alpaca-cpp via find_package.
option(BUILD_ALPACA_CORE "Build alpaca-cpp (Trading + Market Data + JSON streams)" ON)
# Default OFF until the satellite libraries land (Phase 4 / Phase 5).
option(BUILD_ALPACA_BROKER "Build alpaca-broker-cpp" OFF)
option(BUILD_ALPACA_OPTIONS_STREAMING "Build alpaca-options-streaming-cpp" OFF)
option(BUILD_ALPACA_TESTS "Build tests for the enabled packages" ${PROJECT_IS_TOP_LEVEL})
option(BUILD_ALPACA_EXAMPLES "Build examples for the enabled packages" ${PROJECT_IS_TOP_LEVEL})
if (CMAKE_BUILD_TYPE MATCHES Debug)
add_definitions(-DDEBUG)
endif()
if (CMAKE_BUILD_TYPE MATCHES Release)
add_definitions(-DNDEBUG)
endif()
if (MSVC)
add_definitions(-D_WIN32_WINNT=0x0A00) # Windows 10
endif()
# Suppresses the ZERO_CHECK project. Only valid for the Visual Studio generator: under
# Ninja it also removes the rule that regenerates build.ninja, so CMakeLists.txt edits
# would be silently ignored.
if (CMAKE_GENERATOR MATCHES "Visual Studio")
set(CMAKE_SUPPRESS_REGENERATION true)
endif()
# ---------------------------------------------------------------------------
# Shared helper: apply the project-wide warning/optimization flags to a target.
# ---------------------------------------------------------------------------
function(alpaca_set_target_options tgt)
if (MSVC)
target_compile_options(${tgt} PRIVATE
/MP
/FS
/bigobj
/W4
$<$<CONFIG:Release>:/O2>
$<$<CONFIG:Release>:/GL> # whole program optimization
)
target_link_options(${tgt} PRIVATE
$<$<CONFIG:Debug>:/DEBUG:FASTLINK>
)
set_target_properties(${tgt} PROPERTIES LINK_INCREMENTAL ON)
else()
target_compile_options(${tgt} PRIVATE
-Wall -Wextra -Wpedantic
$<$<CONFIG:Release>:-O3>
)
endif()
endfunction()
# ---------------------------------------------------------------------------
# Shared helper: generate + install the CMake package config for one library.
# ---------------------------------------------------------------------------
include(CMakePackageConfigHelpers)
function(alpaca_install_package tgt)
install(TARGETS ${tgt} EXPORT ${tgt}Targets)
install(EXPORT ${tgt}Targets
FILE ${tgt}Targets.cmake
NAMESPACE slick::
DESTINATION lib/cmake/${tgt}
)
configure_package_config_file(
${CMAKE_CURRENT_FUNCTION_LIST_DIR}/cmake/${tgt}Config.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/${tgt}Config.cmake
INSTALL_DESTINATION lib/cmake/${tgt}
)
write_basic_package_version_file(
${CMAKE_CURRENT_BINARY_DIR}/${tgt}ConfigVersion.cmake
VERSION ${PROJECT_VERSION}
COMPATIBILITY SameMajorVersion
)
install(FILES
${CMAKE_CURRENT_BINARY_DIR}/${tgt}Config.cmake
${CMAKE_CURRENT_BINARY_DIR}/${tgt}ConfigVersion.cmake
DESTINATION lib/cmake/${tgt}
)
endfunction()
# ---------------------------------------------------------------------------
# Dependencies shared by every package.
# ---------------------------------------------------------------------------
find_package(nlohmann_json CONFIG REQUIRED)
find_package(OpenSSL CONFIG REQUIRED)
find_package(slick-net 3.1.0 CONFIG QUIET)
if (NOT slick-net_FOUND)
message(STATUS "Fetching slick-net...")
include(FetchContent)
set(BUILD_SLICK_NET_EXAMPLES OFF CACHE BOOL "" FORCE)
set(BUILD_SLICK_NET_TESTS OFF CACHE BOOL "" FORCE)
FetchContent_Declare(
slick-net
GIT_REPOSITORY https://github.com/SlickQuant/slick-net.git
GIT_TAG v3.1.0
)
FetchContent_MakeAvailable(slick-net)
else()
message(STATUS "Found slick-net ${slick-net_VERSION}: ${slick-net_DIR}")
endif()
# ---------------------------------------------------------------------------
# Packages
# ---------------------------------------------------------------------------
if (BUILD_ALPACA_CORE)
add_subdirectory(core)
endif()
if (BUILD_ALPACA_BROKER)
add_subdirectory(broker)
endif()
if (BUILD_ALPACA_OPTIONS_STREAMING)
add_subdirectory(options-streaming)
endif()
if (BUILD_ALPACA_TESTS)
message(STATUS "Building alpaca-cpp tests")
enable_testing()
add_subdirectory(tests)
else()
message(STATUS "Skipping alpaca-cpp tests")
endif()
if (BUILD_ALPACA_EXAMPLES)
message(STATUS "Building alpaca-cpp examples")
add_subdirectory(examples)
else()
message(STATUS "Skipping alpaca-cpp examples")
endif()
message(STATUS "${PROJECT_NAME}: ${PROJECT_VERSION}")
message(STATUS " core : ${BUILD_ALPACA_CORE}")
message(STATUS " broker : ${BUILD_ALPACA_BROKER}")
message(STATUS " options-streaming : ${BUILD_ALPACA_OPTIONS_STREAMING}")