|
1 | | -cmake_minimum_required(VERSION 3.20) |
2 | | - |
3 | | -set(CMAKE_CXX_STANDARD 20) |
4 | | - |
5 | | -project(coinbase-advanced-cpp |
6 | | - VERSION 0.3.0 |
7 | | - LANGUAGES CXX) |
8 | | - |
9 | | -if (CMAKE_BUILD_TYPE MATCHES Debug) |
10 | | - add_definitions(-DDEBUG) |
11 | | -endif() |
12 | | - |
13 | | -if (CMAKE_BUILD_TYPE MATCHES Release) |
14 | | - add_definitions(-DNDEBUG) |
15 | | -endif() |
16 | | - |
17 | | -find_package(nlohmann_json CONFIG REQUIRED) |
18 | | -find_package(OpenSSL CONFIG REQUIRED) |
19 | | -find_package(jwt-cpp CONFIG REQUIRED) |
20 | | - |
21 | | -find_package(slick-net 2.1.0 CONFIG QUIET) |
22 | | -if (NOT slick-net_FOUND) |
23 | | - message(STATUS "fetching slick-net...") |
24 | | - include(FetchContent) |
25 | | - FetchContent_Declare( |
26 | | - slick-net |
27 | | - GIT_REPOSITORY https://github.com/SlickQuant/slick-net.git |
28 | | - GIT_TAG v2.1.0 |
29 | | - ) |
30 | | - FetchContent_MakeAvailable(slick-net) |
31 | | -else() |
32 | | - message(STATUS "Found slick-net: ${slick-net_VERSION}") |
33 | | -endif() |
34 | | - |
35 | | -add_library(coinbase-advanced-cpp STATIC |
36 | | - src/auth.cpp |
37 | | - src/rest.cpp |
38 | | - src/rest_awaitable.cpp |
39 | | - src/websocket.cpp |
40 | | - src/utils.cpp |
41 | | - src/logging.cpp |
42 | | -) |
43 | | -add_library(slick::coinbase-advanced-cpp ALIAS coinbase-advanced-cpp) |
44 | | -target_include_directories(coinbase-advanced-cpp PUBLIC |
45 | | - $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> |
46 | | - $<INSTALL_INTERFACE:include> |
47 | | -) |
48 | | -target_link_libraries(coinbase-advanced-cpp PUBLIC slick::net jwt-cpp::jwt-cpp) |
49 | | - |
50 | | -# PRIVATE precompiled headers for faster static library compilation |
51 | | -target_precompile_headers(coinbase-advanced-cpp PRIVATE |
52 | | - <nlohmann/json.hpp> |
53 | | - <string> |
54 | | - <vector> |
55 | | - <memory> |
56 | | - <coroutine> |
57 | | -) |
58 | | - |
59 | | -if (MSVC) |
60 | | - add_definitions(-D_WIN32_WINNT=0x0A00) |
61 | | - set(CMAKE_SUPPRESS_REGENERATION true) # supress zero_check |
62 | | - set_target_properties(coinbase-advanced-cpp PROPERTIES LINK_INCREMENTAL ON) |
63 | | - target_compile_options(coinbase-advanced-cpp PRIVATE |
64 | | - /MP |
65 | | - /FS |
66 | | - /bigobj |
67 | | - /wd4101 |
68 | | - /W4 |
69 | | - $<$<CONFIG:Release>:/O2> |
70 | | - $<$<CONFIG:Release>:/GL> # Whole program optimization |
71 | | - ) |
72 | | - # Faster linking |
73 | | - target_link_options(coinbase-advanced-cpp PRIVATE |
74 | | - $<$<CONFIG:Debug>:/DEBUG:FASTLINK> |
75 | | - ) |
76 | | -else() |
77 | | - target_compile_options(coinbase-advanced-cpp PRIVATE |
78 | | - -Wall -Wextra -Wpedantic |
79 | | - $<$<CONFIG:Release>:-O3> |
80 | | - ) |
81 | | -endif() |
82 | | - |
83 | | -set(BUILD_COINBASE_ADVANCED_TESTS_DEFAULT ON) |
84 | | -if (NOT CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME) |
85 | | - set(BUILD_COINBASE_ADVANCED_TESTS_DEFAULT OFF) |
86 | | -endif() |
87 | | -option(BUILD_COINBASE_ADVANCED_TESTS "Build tests" ${BUILD_COINBASE_ADVANCED_TESTS_DEFAULT}) |
88 | | -if (BUILD_COINBASE_ADVANCED_TESTS) |
89 | | - message(STATUS "Building coinbase-advanced-cpp tests") |
90 | | - enable_testing() |
91 | | - add_subdirectory(tests) |
92 | | -else() |
93 | | - message(STATUS "Skipping coinbase-advanced-cpp tests") |
94 | | -endif() |
95 | | - |
96 | | -# Installation rules |
97 | | -install(DIRECTORY include/ DESTINATION include) |
98 | | - |
99 | | -# Install CMake package configuration files for vcpkg |
100 | | -install(TARGETS coinbase-advanced-cpp EXPORT coinbase-advanced-cppTargets) |
101 | | - |
102 | | -install(EXPORT coinbase-advanced-cppTargets |
103 | | - FILE coinbase-advanced-cppTargets.cmake |
104 | | - NAMESPACE slick:: |
105 | | - DESTINATION lib/cmake/coinbase-advanced-cpp |
106 | | -) |
107 | | - |
108 | | -include(CMakePackageConfigHelpers) |
109 | | - |
110 | | -# Generate the config file |
111 | | -configure_package_config_file( |
112 | | - ${CMAKE_CURRENT_SOURCE_DIR}/cmake/coinbase-advanced-cppConfig.cmake.in |
113 | | - ${CMAKE_CURRENT_BINARY_DIR}/coinbase-advanced-cppConfig.cmake |
114 | | - INSTALL_DESTINATION lib/cmake/coinbase-advanced-cpp |
115 | | -) |
116 | | - |
117 | | -# Generate version file |
118 | | -write_basic_package_version_file( |
119 | | - ${CMAKE_CURRENT_BINARY_DIR}/coinbase-advanced-cppConfigVersion.cmake |
120 | | - VERSION ${PROJECT_VERSION} |
121 | | - COMPATIBILITY SameMajorVersion |
122 | | -) |
123 | | - |
124 | | -# Install config files |
125 | | -install(FILES |
126 | | - ${CMAKE_CURRENT_BINARY_DIR}/coinbase-advanced-cppConfig.cmake |
127 | | - ${CMAKE_CURRENT_BINARY_DIR}/coinbase-advanced-cppConfigVersion.cmake |
128 | | - DESTINATION lib/cmake/coinbase-advanced-cpp |
129 | | -) |
130 | | - |
131 | | -message(STATUS "${PROJECT_NAME}: ${PROJECT_VERSION}") |
| 1 | +cmake_minimum_required(VERSION 3.21) |
| 2 | + |
| 3 | +set(CMAKE_CXX_STANDARD 20) |
| 4 | + |
| 5 | +project(coinbase-advanced-cpp |
| 6 | + VERSION 1.0.0 |
| 7 | + LANGUAGES CXX) |
| 8 | + |
| 9 | +option(BUILD_COINBASE_ADVANCED_TESTS "Build coinbase advanced tests" ${PROJECT_IS_TOP_LEVEL}) |
| 10 | +option(BUILD_COINBASE_ADVANCED_EXAMPLES "Build coinbas advanced examples" ${PROJECT_IS_TOP_LEVEL}) |
| 11 | + |
| 12 | +if (CMAKE_BUILD_TYPE MATCHES Debug) |
| 13 | + add_definitions(-DDEBUG) |
| 14 | +endif() |
| 15 | + |
| 16 | +if (CMAKE_BUILD_TYPE MATCHES Release) |
| 17 | + add_definitions(-DNDEBUG) |
| 18 | +endif() |
| 19 | + |
| 20 | +find_package(nlohmann_json CONFIG REQUIRED) |
| 21 | +find_package(OpenSSL CONFIG REQUIRED) |
| 22 | +find_package(jwt-cpp CONFIG REQUIRED) |
| 23 | + |
| 24 | +find_package(slick-net 3.0.0 CONFIG QUIET) |
| 25 | +if (NOT slick-net_FOUND) |
| 26 | + message(STATUS "fetching slick-net...") |
| 27 | + include(FetchContent) |
| 28 | + FetchContent_Declare( |
| 29 | + slick-net |
| 30 | + GIT_REPOSITORY https://github.com/SlickQuant/slick-net.git |
| 31 | + GIT_TAG v3.0.0 |
| 32 | + ) |
| 33 | + FetchContent_MakeAvailable(slick-net) |
| 34 | +else() |
| 35 | + message(STATUS "Found slick-net ${slick-net_VERSION}: ${slick-net_DIR}") |
| 36 | +endif() |
| 37 | + |
| 38 | +add_library(coinbase-advanced-cpp STATIC |
| 39 | + src/auth.cpp |
| 40 | + src/rest.cpp |
| 41 | + src/rest_awaitable.cpp |
| 42 | + src/websocket.cpp |
| 43 | + src/utils.cpp |
| 44 | + src/logging.cpp |
| 45 | +) |
| 46 | +add_library(slick::coinbase-advanced-cpp ALIAS coinbase-advanced-cpp) |
| 47 | +target_include_directories(coinbase-advanced-cpp PUBLIC |
| 48 | + $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> |
| 49 | + $<INSTALL_INTERFACE:include> |
| 50 | +) |
| 51 | +target_link_libraries(coinbase-advanced-cpp PUBLIC slick::net slick::stream_buffer_multiplexer jwt-cpp::jwt-cpp) |
| 52 | + |
| 53 | +# PRIVATE precompiled headers for faster static library compilation |
| 54 | +target_precompile_headers(coinbase-advanced-cpp PRIVATE |
| 55 | + <nlohmann/json.hpp> |
| 56 | + <string> |
| 57 | + <vector> |
| 58 | + <memory> |
| 59 | + <coroutine> |
| 60 | +) |
| 61 | + |
| 62 | +if (MSVC) |
| 63 | + add_definitions(-D_WIN32_WINNT=0x0A00) |
| 64 | + set(CMAKE_SUPPRESS_REGENERATION true) # supress zero_check |
| 65 | + set_target_properties(coinbase-advanced-cpp PROPERTIES LINK_INCREMENTAL ON) |
| 66 | + target_compile_options(coinbase-advanced-cpp PRIVATE |
| 67 | + /MP |
| 68 | + /FS |
| 69 | + /bigobj |
| 70 | + /wd4101 |
| 71 | + /W4 |
| 72 | + $<$<CONFIG:Release>:/O2> |
| 73 | + $<$<CONFIG:Release>:/GL> # Whole program optimization |
| 74 | + ) |
| 75 | + # Faster linking |
| 76 | + target_link_options(coinbase-advanced-cpp PRIVATE |
| 77 | + $<$<CONFIG:Debug>:/DEBUG:FASTLINK> |
| 78 | + ) |
| 79 | +else() |
| 80 | + target_compile_options(coinbase-advanced-cpp PRIVATE |
| 81 | + -Wall -Wextra -Wpedantic |
| 82 | + $<$<CONFIG:Release>:-O3> |
| 83 | + ) |
| 84 | +endif() |
| 85 | + |
| 86 | +if (BUILD_COINBASE_ADVANCED_TESTS) |
| 87 | + message(STATUS "Building coinbase-advanced-cpp tests") |
| 88 | + enable_testing() |
| 89 | + add_subdirectory(tests) |
| 90 | +else() |
| 91 | + message(STATUS "Skipping coinbase-advanced-cpp tests") |
| 92 | +endif() |
| 93 | + |
| 94 | +if (BUILD_COINBASE_ADVANCED_EXAMPLES) |
| 95 | + message(STATUS "Building coinbase-advanced-cpp examples") |
| 96 | + add_subdirectory(examples) |
| 97 | +else() |
| 98 | + message(STATUS "Skipping coinbase-advanced-cpp examples") |
| 99 | +endif() |
| 100 | + |
| 101 | +# Installation rules |
| 102 | +install(DIRECTORY include/ DESTINATION include) |
| 103 | + |
| 104 | +# Install CMake package configuration files for vcpkg |
| 105 | +install(TARGETS coinbase-advanced-cpp EXPORT coinbase-advanced-cppTargets) |
| 106 | + |
| 107 | +install(EXPORT coinbase-advanced-cppTargets |
| 108 | + FILE coinbase-advanced-cppTargets.cmake |
| 109 | + NAMESPACE slick:: |
| 110 | + DESTINATION lib/cmake/coinbase-advanced-cpp |
| 111 | +) |
| 112 | + |
| 113 | +include(CMakePackageConfigHelpers) |
| 114 | + |
| 115 | +# Generate the config file |
| 116 | +configure_package_config_file( |
| 117 | + ${CMAKE_CURRENT_SOURCE_DIR}/cmake/coinbase-advanced-cppConfig.cmake.in |
| 118 | + ${CMAKE_CURRENT_BINARY_DIR}/coinbase-advanced-cppConfig.cmake |
| 119 | + INSTALL_DESTINATION lib/cmake/coinbase-advanced-cpp |
| 120 | +) |
| 121 | + |
| 122 | +# Generate version file |
| 123 | +write_basic_package_version_file( |
| 124 | + ${CMAKE_CURRENT_BINARY_DIR}/coinbase-advanced-cppConfigVersion.cmake |
| 125 | + VERSION ${PROJECT_VERSION} |
| 126 | + COMPATIBILITY SameMajorVersion |
| 127 | +) |
| 128 | + |
| 129 | +# Install config files |
| 130 | +install(FILES |
| 131 | + ${CMAKE_CURRENT_BINARY_DIR}/coinbase-advanced-cppConfig.cmake |
| 132 | + ${CMAKE_CURRENT_BINARY_DIR}/coinbase-advanced-cppConfigVersion.cmake |
| 133 | + DESTINATION lib/cmake/coinbase-advanced-cpp |
| 134 | +) |
| 135 | + |
| 136 | +message(STATUS "${PROJECT_NAME}: ${PROJECT_VERSION}") |
0 commit comments