Skip to content

Commit 74e56aa

Browse files
authored
Improving the support for DLLs. (#543)
* Improving the support for DLLs. * typo * tweak * fixing the dependencies * tweak * disabling the tests when building a shared library * tweak
1 parent 45fd44d commit 74e56aa

File tree

7 files changed

+81
-46
lines changed

7 files changed

+81
-46
lines changed

.github/workflows/visual_studio.yml

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,15 @@ jobs:
2828
fail-fast: false
2929
matrix:
3030
include:
31-
- {gen: Visual Studio 17 2022, arch: x64, devchecks: ON}
31+
- {gen: Visual Studio 17 2022, arch: x64, devchecks: ON, shared: OFF}
32+
- {gen: Visual Studio 17 2022, arch: x64, devchecks: ON, shared: ON}
33+
- {gen: Visual Studio 17 2022, arch: Win32, devchecks: ON, shared: OFF}
34+
- {gen: Visual Studio 17 2022, arch: Win32, devchecks: ON, shared: ON}
3235
steps:
3336
- uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v3.6.0
3437
- name: Configure
3538
run: |
36-
cmake -DADA_DEVELOPMENT_CHECKS="${{matrix.devchecks}}" -G "${{matrix.gen}}" -A ${{matrix.arch}} -B build
39+
cmake -DADA_DEVELOPMENT_CHECKS="${{matrix.devchecks}}" -G "${{matrix.gen}}" -A ${{matrix.arch}} -DBUILD_SHARED_LIBS=${{matrix.shared}} -B build
3740
- name: Build Debug
3841
run: cmake --build build --config Debug --verbose
3942
- name: Run Debug tests

CMakeLists.txt

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,15 +27,21 @@ option(ADA_BENCHMARKS "Build benchmarks" OFF)
2727
include(cmake/CPM.cmake)
2828
# CPM requires git as an implicit dependency
2929
find_package(Git QUIET)
30-
# We use Google Benchmark, but it does not build under several 32-bit systems.
31-
if(Git_FOUND AND (BUILD_TESTING OR ADA_BENCHMARKS) AND (CMAKE_SIZEOF_VOID_P EQUAL 8))
32-
CPMAddPackage("gh:simdjson/simdjson@3.3.0")
30+
# We use googletest in the tests
31+
if(Git_FOUND AND BUILD_TESTING)
3332
CPMAddPackage(
3433
NAME GTest
3534
GITHUB_REPOSITORY google/googletest
3635
VERSION 1.14.0
3736
OPTIONS "BUILD_GMOCK OFF" "INSTALL_GTEST OFF"
3837
)
38+
endif()
39+
# We use simdjson in both the benchmarks and tests
40+
if(Git_FOUND AND (BUILD_TESTING OR ADA_BENCHMARKS))
41+
CPMAddPackage("gh:simdjson/simdjson@3.3.0")
42+
endif()
43+
# We use Google Benchmark, but it does not build under several 32-bit systems.
44+
if(Git_FOUND AND ADA_BENCHMARKS AND (CMAKE_SIZEOF_VOID_P EQUAL 8))
3945
CPMAddPackage(
4046
NAME benchmark
4147
GITHUB_REPOSITORY google/benchmark

benchmarks/CMakeLists.txt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,13 @@ add_executable(percent_encode percent_encode.cpp)
3535
target_link_libraries(percent_encode PRIVATE ada)
3636
target_include_directories(percent_encode PUBLIC "$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>")
3737
target_include_directories(percent_encode PUBLIC "$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/benchmarks>")
38-
38+
if(MSVC AND BUILD_SHARED_LIBS)
39+
# Copy the ada dll into the directory
40+
add_custom_command(TARGET percent_encode POST_BUILD # Adds a post-build event
41+
COMMAND ${CMAKE_COMMAND} -E copy_if_different # which executes "cmake -E copy_if_different..."
42+
"$<TARGET_FILE:ada>" # <--this is in-file
43+
"$<TARGET_FILE_DIR:percent_encode>") # <--this is out-file path
44+
endif()
3945

4046
if(CMAKE_SYSTEM_NAME MATCHES "Linux")
4147
# The model_bench program requires accurate/low-overhead performance counters.

singleheader/CMakeLists.txt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,15 +49,16 @@ if (Python3_Interpreter_FOUND)
4949
add_library(ada-singleheader-source INTERFACE)
5050
target_sources(ada-singleheader-source INTERFACE $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/ada.cpp>)
5151
target_link_libraries(ada-singleheader-source INTERFACE ada-singleheader-include-source)
52+
add_library(ada-singleheader-lib STATIC $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/ada.cpp>)
53+
5254
if (BUILD_TESTING)
5355
add_executable(demo $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/demo.cpp>)
5456
target_link_libraries(demo ada-singleheader-include-source)
5557

5658
add_test(demo demo)
5759

5860
add_executable(cdemo $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/demo.c>)
59-
target_link_libraries(cdemo ada)
60-
61+
target_link_libraries(cdemo ada-singleheader-lib)
6162
add_test(cdemo cdemo)
6263
endif()
6364
else()

tests/CMakeLists.txt

Lines changed: 49 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -10,44 +10,57 @@ endif()
1010
include(${PROJECT_SOURCE_DIR}/cmake/add-cpp-test.cmake)
1111
link_libraries(ada)
1212

13-
include(GoogleTest)
14-
15-
add_executable(wpt_tests wpt_tests.cpp)
16-
add_executable(url_components url_components.cpp)
17-
add_executable(basic_tests basic_tests.cpp)
18-
add_executable(from_file_tests from_file_tests.cpp)
19-
add_executable(ada_c ada_c.cpp)
20-
add_executable(url_search_params url_search_params.cpp)
21-
22-
target_link_libraries(wpt_tests PRIVATE simdjson GTest::gtest_main)
23-
target_link_libraries(url_components PRIVATE simdjson GTest::gtest_main)
24-
target_link_libraries(basic_tests PRIVATE simdjson GTest::gtest_main)
25-
target_link_libraries(from_file_tests PRIVATE simdjson GTest::gtest_main)
26-
target_link_libraries(ada_c PRIVATE simdjson GTest::gtest_main)
27-
target_link_libraries(url_search_params PRIVATE simdjson GTest::gtest_main)
28-
29-
gtest_discover_tests(wpt_tests)
30-
gtest_discover_tests(url_components)
31-
gtest_discover_tests(basic_tests)
32-
gtest_discover_tests(from_file_tests)
33-
gtest_discover_tests(ada_c)
34-
gtest_discover_tests(url_search_params)
35-
3613
add_cpp_test(basic_fuzzer)
3714

38-
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
39-
if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 9)
40-
target_link_libraries(wpt_tests PUBLIC stdc++fs)
41-
target_link_libraries(url_components PUBLIC stdc++fs)
42-
target_link_libraries(url_search_params PUBLIC stdc++fs)
43-
endif()
15+
if(MSVC AND BUILD_SHARED_LIBS)
16+
# Copy the ada dll into the directory
17+
add_custom_command(TARGET basic_fuzzer PRE_BUILD # Adds a pre-build event
18+
COMMAND ${CMAKE_COMMAND} -E copy_if_different # which executes "cmake -E copy_if_different..."
19+
"$<TARGET_FILE:ada>" # <--this is in-file
20+
"$<TARGET_FILE_DIR:basic_fuzzer>") # <--this is out-file path
4421
endif()
4522

46-
if(MSVC OR MINGW)
47-
target_compile_definitions(wpt_tests PRIVATE _CRT_SECURE_NO_WARNINGS)
48-
target_compile_definitions(url_components PRIVATE _CRT_SECURE_NO_WARNINGS)
49-
target_compile_definitions(basic_fuzzer PRIVATE _CRT_SECURE_NO_WARNINGS)
50-
target_compile_definitions(from_file_tests PRIVATE _CRT_SECURE_NO_WARNINGS)
51-
target_compile_definitions(basic_tests PRIVATE _CRT_SECURE_NO_WARNINGS)
52-
target_compile_definitions(url_search_params PRIVATE _CRT_SECURE_NO_WARNINGS)
23+
if(MSVC AND BUILD_SHARED_LIBS)
24+
message(STATUS "For some tests we use Google Test and it fails when building a DLL.")
25+
message(STATUS "Thus the tests are disabled. Sorry.")
26+
else()
27+
include(GoogleTest)
28+
add_executable(wpt_tests wpt_tests.cpp)
29+
add_executable(url_components url_components.cpp)
30+
add_executable(basic_tests basic_tests.cpp)
31+
add_executable(from_file_tests from_file_tests.cpp)
32+
add_executable(ada_c ada_c.cpp)
33+
add_executable(url_search_params url_search_params.cpp)
34+
35+
target_link_libraries(wpt_tests PRIVATE simdjson GTest::gtest_main)
36+
target_link_libraries(url_components PRIVATE simdjson GTest::gtest_main)
37+
target_link_libraries(basic_tests PRIVATE simdjson GTest::gtest_main)
38+
target_link_libraries(from_file_tests PRIVATE simdjson GTest::gtest_main)
39+
target_link_libraries(ada_c PRIVATE simdjson GTest::gtest_main)
40+
target_link_libraries(url_search_params PRIVATE simdjson GTest::gtest_main)
41+
42+
gtest_discover_tests(wpt_tests)
43+
gtest_discover_tests(url_components)
44+
gtest_discover_tests(basic_tests)
45+
gtest_discover_tests(from_file_tests)
46+
gtest_discover_tests(ada_c)
47+
gtest_discover_tests(url_search_params)
48+
49+
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
50+
if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 9)
51+
target_link_libraries(wpt_tests PUBLIC stdc++fs)
52+
target_link_libraries(url_components PUBLIC stdc++fs)
53+
target_link_libraries(url_search_params PUBLIC stdc++fs)
54+
endif()
55+
endif()
56+
57+
if(MSVC OR MINGW)
58+
target_compile_definitions(wpt_tests PRIVATE _CRT_SECURE_NO_WARNINGS)
59+
target_compile_definitions(url_components PRIVATE _CRT_SECURE_NO_WARNINGS)
60+
target_compile_definitions(basic_fuzzer PRIVATE _CRT_SECURE_NO_WARNINGS)
61+
target_compile_definitions(from_file_tests PRIVATE _CRT_SECURE_NO_WARNINGS)
62+
target_compile_definitions(basic_tests PRIVATE _CRT_SECURE_NO_WARNINGS)
63+
target_compile_definitions(url_search_params PRIVATE _CRT_SECURE_NO_WARNINGS)
64+
endif()
65+
5366
endif()

tests/basic_fuzzer.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ size_t roller_fuzz(size_t N) {
102102
size_t valid{};
103103

104104
for (std::string copy : url_examples) {
105-
for (int index = 0; index < copy.size(); index++) {
105+
for (size_t index = 0; index < copy.size(); index++) {
106106
char orig = copy[index];
107107
for (unsigned int value = 0; value < 255; value++) {
108108
copy[index] = char(value);

tools/cli/CMakeLists.txt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,13 @@
11
add_executable(adaparse adaparse.cpp line_iterator.h)
22
target_link_libraries(adaparse PRIVATE ada)
33
target_include_directories(adaparse PUBLIC "$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>")
4-
4+
if(MSVC AND BUILD_SHARED_LIBS)
5+
# Copy the ada dll into the directory
6+
add_custom_command(TARGET adaparse POST_BUILD # Adds a post-build event
7+
COMMAND ${CMAKE_COMMAND} -E copy_if_different # which executes "cmake -E copy_if_different..."
8+
"$<TARGET_FILE:ada>" # <--this is in-file
9+
"$<TARGET_FILE_DIR:adaparse>") # <--this is out-file path
10+
endif()
511
CPMAddPackage("gh:fmtlib/fmt#7.1.3")
612
CPMAddPackage(
713
GITHUB_REPOSITORY jarro2783/cxxopts

0 commit comments

Comments
 (0)