Skip to content

Commit 2402c08

Browse files
Copilot0xrinegade
andcommitted
Fix Windows build issues: vcpkg integration, MSVC compatibility fixes
Co-authored-by: 0xrinegade <[email protected]>
1 parent 85bc12d commit 2402c08

File tree

5 files changed

+88
-49
lines changed

5 files changed

+88
-49
lines changed

cpp_sdk/CMakeLists.txt

Lines changed: 59 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -51,48 +51,70 @@ endif()
5151
# Find required packages
5252
find_package(PkgConfig)
5353

54-
# Find libsodium
55-
if(PkgConfig_FOUND)
56-
pkg_check_modules(LIBSODIUM libsodium)
57-
if(LIBSODIUM_FOUND)
58-
message(STATUS "Found libsodium via pkg-config: ${LIBSODIUM_LIBRARIES}")
54+
# Find libsodium - handle vcpkg on Windows
55+
if(WIN32)
56+
# On Windows, prefer vcpkg find_package over pkg-config
57+
find_package(unofficial-sodium CONFIG)
58+
if(unofficial-sodium_FOUND)
59+
set(LIBSODIUM_FOUND TRUE)
60+
set(LIBSODIUM_LIBRARIES unofficial-sodium::sodium)
61+
set(LIBSODIUM_INCLUDE_DIRS "") # Handled by the target
62+
message(STATUS "Found libsodium via vcpkg: unofficial-sodium::sodium")
63+
else()
64+
# Fallback to manual search on Windows
65+
find_path(LIBSODIUM_INCLUDE_DIR sodium.h)
66+
find_library(LIBSODIUM_LIBRARY NAMES sodium libsodium)
67+
if(LIBSODIUM_INCLUDE_DIR AND LIBSODIUM_LIBRARY)
68+
set(LIBSODIUM_FOUND TRUE)
69+
set(LIBSODIUM_INCLUDE_DIRS ${LIBSODIUM_INCLUDE_DIR})
70+
set(LIBSODIUM_LIBRARIES ${LIBSODIUM_LIBRARY})
71+
message(STATUS "Found libsodium: ${LIBSODIUM_LIBRARY}")
72+
endif()
73+
endif()
74+
else()
75+
# Unix systems: prefer pkg-config
76+
if(PkgConfig_FOUND)
77+
pkg_check_modules(LIBSODIUM libsodium)
78+
if(LIBSODIUM_FOUND)
79+
message(STATUS "Found libsodium via pkg-config: ${LIBSODIUM_LIBRARIES}")
80+
endif()
5981
endif()
60-
endif()
6182

62-
# Fallback for systems without pkg-config or if libsodium is not found via pkg-config
63-
if(NOT LIBSODIUM_FOUND)
64-
# Add macOS brew paths
65-
if(APPLE)
66-
# Try to find brew prefix
67-
execute_process(
68-
COMMAND brew --prefix
69-
OUTPUT_VARIABLE BREW_PREFIX
70-
OUTPUT_STRIP_TRAILING_WHITESPACE
71-
ERROR_QUIET
83+
# Fallback for systems without pkg-config or if libsodium is not found via pkg-config
84+
if(NOT LIBSODIUM_FOUND)
85+
# Add macOS brew paths
86+
if(APPLE)
87+
# Try to find brew prefix
88+
execute_process(
89+
COMMAND brew --prefix
90+
OUTPUT_VARIABLE BREW_PREFIX
91+
OUTPUT_STRIP_TRAILING_WHITESPACE
92+
ERROR_QUIET
93+
)
94+
if(BREW_PREFIX)
95+
list(APPEND CMAKE_PREFIX_PATH ${BREW_PREFIX})
96+
endif()
97+
endif()
98+
99+
find_path(LIBSODIUM_INCLUDE_DIR sodium.h
100+
PATHS /usr/include /usr/local/include /opt/local/include /opt/homebrew/include
101+
${CMAKE_PREFIX_PATH}/include
102+
PATH_SUFFIXES sodium
72103
)
73-
if(BREW_PREFIX)
74-
list(APPEND CMAKE_PREFIX_PATH ${BREW_PREFIX})
104+
105+
find_library(LIBSODIUM_LIBRARY
106+
NAMES sodium libsodium
107+
PATHS /usr/lib /usr/local/lib /opt/local/lib /opt/homebrew/lib
108+
${CMAKE_PREFIX_PATH}/lib
109+
)
110+
111+
if(LIBSODIUM_INCLUDE_DIR AND LIBSODIUM_LIBRARY)
112+
set(LIBSODIUM_FOUND TRUE)
113+
set(LIBSODIUM_INCLUDE_DIRS ${LIBSODIUM_INCLUDE_DIR})
114+
set(LIBSODIUM_LIBRARIES ${LIBSODIUM_LIBRARY})
115+
message(STATUS "Found libsodium: ${LIBSODIUM_LIBRARY}")
75116
endif()
76117
endif()
77-
78-
find_path(LIBSODIUM_INCLUDE_DIR sodium.h
79-
PATHS /usr/include /usr/local/include /opt/local/include /opt/homebrew/include
80-
${CMAKE_PREFIX_PATH}/include
81-
PATH_SUFFIXES sodium
82-
)
83-
84-
find_library(LIBSODIUM_LIBRARY
85-
NAMES sodium libsodium
86-
PATHS /usr/lib /usr/local/lib /opt/local/lib /opt/homebrew/lib
87-
${CMAKE_PREFIX_PATH}/lib
88-
)
89-
90-
if(LIBSODIUM_INCLUDE_DIR AND LIBSODIUM_LIBRARY)
91-
set(LIBSODIUM_FOUND TRUE)
92-
set(LIBSODIUM_INCLUDE_DIRS ${LIBSODIUM_INCLUDE_DIR})
93-
set(LIBSODIUM_LIBRARIES ${LIBSODIUM_LIBRARY})
94-
message(STATUS "Found libsodium: ${LIBSODIUM_LIBRARY}")
95-
endif()
96118
endif()
97119

98120
if(NOT LIBSODIUM_FOUND)

cpp_sdk/examples/CMakeLists.txt

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,21 @@
11
cmake_minimum_required(VERSION 3.16)
22

3-
# Find required packages
4-
find_package(PkgConfig REQUIRED)
5-
pkg_check_modules(LIBSODIUM REQUIRED libsodium)
3+
# Find required packages - handle Windows/vcpkg differently
4+
if(WIN32)
5+
# On Windows, vcpkg should provide libsodium via find_package
6+
find_package(unofficial-sodium CONFIG)
7+
if(unofficial-sodium_FOUND)
8+
set(LIBSODIUM_FOUND TRUE)
9+
set(LIBSODIUM_LIBRARIES unofficial-sodium::sodium)
10+
message(STATUS "Found libsodium via vcpkg for examples")
11+
else()
12+
message(FATAL_ERROR "libsodium not found via vcpkg. Please install with: vcpkg install libsodium:x64-windows")
13+
endif()
14+
else()
15+
# Unix systems: use pkg-config
16+
find_package(PkgConfig REQUIRED)
17+
pkg_check_modules(LIBSODIUM REQUIRED libsodium)
18+
endif()
619

720
# Example executables
821
set(EXAMPLES

cpp_sdk/tests/CMakeLists.txt

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
cmake_minimum_required(VERSION 3.16)
22

3-
# Find Google Test
4-
find_package(GTest REQUIRED)
3+
# Find Google Test - handle vcpkg on Windows
4+
if(WIN32)
5+
find_package(GTest CONFIG REQUIRED)
6+
else()
7+
find_package(GTest REQUIRED)
8+
endif()
59
include(GoogleTest)
610

711
# Create test executable

cpp_sdk/tests/test_base58.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,9 @@ class Base58Test : public ::testing::Test {
2626
// Generate random bytes
2727
std::vector<uint8_t> generate_random_bytes(size_t size) {
2828
std::vector<uint8_t> bytes(size);
29-
std::uniform_int_distribution<uint8_t> dist(0, 255);
29+
std::uniform_int_distribution<int> dist(0, 255);
3030
for (size_t i = 0; i < size; ++i) {
31-
bytes[i] = dist(generator_);
31+
bytes[i] = static_cast<uint8_t>(dist(generator_));
3232
}
3333
return bytes;
3434
}
@@ -267,7 +267,7 @@ TEST_F(Base58Test, PerformanceTest) {
267267
test_keys.push_back(generate_random_bytes(32));
268268
}
269269

270-
auto start = std::chrono::high_resolution_clock::now();
270+
auto start = std::chrono::steady_clock::now();
271271

272272
// Encode all keys
273273
std::vector<std::string> encoded_keys;
@@ -276,15 +276,15 @@ TEST_F(Base58Test, PerformanceTest) {
276276
encoded_keys.push_back(key.to_base58());
277277
}
278278

279-
auto encode_end = std::chrono::high_resolution_clock::now();
279+
auto encode_end = std::chrono::steady_clock::now();
280280

281281
// Decode all keys
282282
std::vector<PublicKey> decoded_keys;
283283
for (const auto &encoded : encoded_keys) {
284284
decoded_keys.emplace_back(encoded);
285285
}
286286

287-
auto decode_end = std::chrono::high_resolution_clock::now();
287+
auto decode_end = std::chrono::steady_clock::now();
288288

289289
auto encode_time =
290290
std::chrono::duration_cast<std::chrono::microseconds>(encode_end - start);

cpp_sdk/tests/test_url_validation.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -450,7 +450,7 @@ TEST_F(UrlValidationTest, PerformanceTest) {
450450
".com/api/v1/endpoint");
451451
}
452452

453-
auto start = std::chrono::high_resolution_clock::now();
453+
auto start = std::chrono::steady_clock::now();
454454

455455
for (const auto &url : test_urls) {
456456
AgentRegistrationParams params;
@@ -465,7 +465,7 @@ TEST_F(UrlValidationTest, PerformanceTest) {
465465
EXPECT_NO_THROW(agent.validate_registration_params(params));
466466
}
467467

468-
auto end = std::chrono::high_resolution_clock::now();
468+
auto end = std::chrono::steady_clock::now();
469469
auto duration =
470470
std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
471471

0 commit comments

Comments
 (0)