Skip to content

Commit a196af3

Browse files
committed
Merge branch 'rc-1.0.0'
2 parents f1f370b + ce65947 commit a196af3

17 files changed

Lines changed: 3814 additions & 2290 deletions

.github/workflows/ci.yml

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
name: CI
2+
3+
on:
4+
push:
5+
branches: [main]
6+
pull_request:
7+
branches: [main]
8+
9+
jobs:
10+
build:
11+
name: ${{ matrix.os }} / ${{ matrix.build_type }}
12+
runs-on: ${{ matrix.os }}
13+
strategy:
14+
fail-fast: false
15+
matrix:
16+
os: [ubuntu-latest, windows-latest]
17+
build_type: [Debug, Release]
18+
19+
env:
20+
VCPKG_DIR: ${{ github.workspace }}/vcpkg
21+
22+
steps:
23+
- uses: actions/checkout@v4
24+
25+
- name: Cache vcpkg
26+
uses: actions/cache@v4
27+
with:
28+
path: ${{ github.workspace }}/vcpkg
29+
key: vcpkg-${{ runner.os }}-${{ hashFiles('**/CMakeLists.txt') }}
30+
restore-keys: vcpkg-${{ runner.os }}-
31+
32+
- name: Bootstrap vcpkg (Linux)
33+
if: runner.os == 'Linux'
34+
run: |
35+
if [ ! -f "${{ env.VCPKG_DIR }}/vcpkg" ]; then
36+
git clone https://github.com/microsoft/vcpkg.git "${{ env.VCPKG_DIR }}"
37+
"${{ env.VCPKG_DIR }}/bootstrap-vcpkg.sh" -disableMetrics
38+
fi
39+
"${{ env.VCPKG_DIR }}/vcpkg" install nlohmann-json openssl jwt-cpp
40+
41+
- name: Bootstrap vcpkg (Windows)
42+
if: runner.os == 'Windows'
43+
shell: pwsh
44+
run: |
45+
$vcpkgDir = "${{ env.VCPKG_DIR }}"
46+
if (-not (Test-Path "$vcpkgDir\vcpkg.exe")) {
47+
git clone https://github.com/microsoft/vcpkg.git $vcpkgDir
48+
& "$vcpkgDir\bootstrap-vcpkg.bat" -disableMetrics
49+
}
50+
& "$vcpkgDir\vcpkg.exe" install nlohmann-json:x64-windows openssl:x64-windows jwt-cpp:x64-windows
51+
52+
- name: Configure (Linux)
53+
if: runner.os == 'Linux'
54+
run: |
55+
cmake -S . -B build \
56+
-DCMAKE_BUILD_TYPE=${{ matrix.build_type }} \
57+
-DCMAKE_TOOLCHAIN_FILE="${{ env.VCPKG_DIR }}/scripts/buildsystems/vcpkg.cmake" \
58+
-DBUILD_COINBASE_ADVANCED_TESTS=ON \
59+
-DBUILD_COINBASE_ADVANCED_EXAMPLES=OFF
60+
61+
- name: Configure (Windows)
62+
if: runner.os == 'Windows'
63+
shell: pwsh
64+
run: |
65+
cmake -S . -B build `
66+
-DCMAKE_BUILD_TYPE=${{ matrix.build_type }} `
67+
"-DCMAKE_TOOLCHAIN_FILE=${{ env.VCPKG_DIR }}\scripts\buildsystems\vcpkg.cmake" `
68+
-DVCPKG_TARGET_TRIPLET=x64-windows `
69+
-DBUILD_COINBASE_ADVANCED_TESTS=ON `
70+
-DBUILD_COINBASE_ADVANCED_EXAMPLES=OFF
71+
72+
- name: Build
73+
run: cmake --build build --config ${{ matrix.build_type }} -j 4
74+
75+
- name: Test
76+
run: ctest --test-dir build -C ${{ matrix.build_type }} -E "(Order|Fill)" --output-on-failure

CHANGELOG.md

Lines changed: 200 additions & 175 deletions
Large diffs are not rendered by default.

CMakeLists.txt

Lines changed: 136 additions & 131 deletions
Original file line numberDiff line numberDiff line change
@@ -1,131 +1,136 @@
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

Comments
 (0)