Skip to content

Commit a4fde0d

Browse files
authored
Moving to CPM. (#537)
1 parent ece13bb commit a4fde0d

File tree

6 files changed

+104
-95
lines changed

6 files changed

+104
-95
lines changed

.github/workflows/ubuntu-s390x.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ jobs:
3434
githubToken: ${{ github.token }}
3535
install: |
3636
apt-get update -q -y
37-
apt-get install -y cmake make g++
37+
apt-get install -y cmake make g++ git
3838
apt-get install -y ninja-build
3939
run: |
4040
cmake -DCMAKE_BUILD_TYPE=Release -G Ninja -B build

CMakeLists.txt

Lines changed: 37 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -24,27 +24,49 @@ set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/scripts/cmake)
2424

2525
option(ADA_BENCHMARKS "Build benchmarks" OFF)
2626

27+
include(cmake/CPM.cmake)
28+
# CPM requires git as an implicit dependency
29+
find_package(Git QUIET)
2730
# We use Google Benchmark, but it does not build under several 32-bit systems.
28-
if((BUILD_TESTING OR ADA_BENCHMARKS) AND (CMAKE_SIZEOF_VOID_P EQUAL 8))
29-
include(${PROJECT_SOURCE_DIR}/cmake/import.cmake)
30-
import_dependency(simdjson simdjson/simdjson 14d927128ba14e13913fc0e7c2cf538790bd1622)
31-
add_dependency(simdjson)
32-
import_dependency(gtest google/googletest 797b0ad2a3a45608ecf5c67e6e289d377a3521ca)
33-
add_dependency(gtest)
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")
33+
CPMAddPackage(
34+
NAME GTest
35+
GITHUB_REPOSITORY google/googletest
36+
VERSION 1.14.0
37+
OPTIONS "BUILD_GMOCK OFF" "INSTALL_GTEST OFF"
38+
)
39+
CPMAddPackage(
40+
NAME benchmark
41+
GITHUB_REPOSITORY google/benchmark
42+
GIT_TAG f91b6b4
43+
OPTIONS "BENCHMARK_ENABLE_TESTING OFF"
44+
"BENCHMARK_ENABLE_INSTALL OFF"
45+
"BENCHMARK_ENABLE_WERROR OFF"
46+
47+
)
3448
endif()
3549

3650
if (BUILD_TESTING AND NOT EMSCRIPTEN)
37-
message(STATUS "The tests are enabled.")
38-
add_subdirectory(tests)
51+
if(Git_FOUND)
52+
message(STATUS "The tests are enabled.")
53+
add_subdirectory(tests)
54+
else()
55+
message(STATUS "The tests are disabled because git was not found.")
56+
endif()
3957
else()
4058
if(is_top_project)
4159
message(STATUS "The tests are disabled.")
4260
endif()
4361
endif(BUILD_TESTING AND NOT EMSCRIPTEN)
4462

4563
If(ADA_BENCHMARKS AND NOT EMSCRIPTEN)
46-
message(STATUS "Ada benchmarks enabled.")
47-
add_subdirectory(benchmarks)
64+
if(Git_FOUND)
65+
message(STATUS "Ada benchmarks enabled.")
66+
add_subdirectory(benchmarks)
67+
else()
68+
message(STATUS "The benchmarks are disabled because git was not found.")
69+
endif()
4870
else(ADA_BENCHMARKS AND NOT EMSCRIPTEN)
4971
if(is_top_project)
5072
message(STATUS "Ada benchmarks disabled. Set ADA_BENCHMARKS=ON to enable them.")
@@ -72,7 +94,11 @@ if(NOT ADA_COVERAGE AND NOT EMSCRIPTEN)
7294
endif()
7395

7496
if(ADA_TOOLS)
75-
add_subdirectory(tools)
97+
if(Git_FOUND)
98+
add_subdirectory(tools)
99+
else()
100+
message(STATUS "The tools are disabled because git was not found.")
101+
endif()
76102
endif()
77103

78104
install(

benchmarks/CMakeLists.txt

Lines changed: 36 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ target_include_directories(bench PUBLIC "$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}
1616
target_include_directories(bench PUBLIC "$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/benchmarks>")
1717

1818
# Benchdata
19-
import_dependency(url-dataset ada-url/url-dataset 9749b92c13e970e70409948fa862461191504ccc)
19+
CPMAddPackage("gh:ada-url/url-dataset#9749b92c13e970e70409948fa862461191504ccc")
2020
add_executable(benchdata bench.cpp)
2121
target_link_libraries(benchdata PRIVATE ada)
2222
target_include_directories(benchdata PUBLIC "$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>")
@@ -45,14 +45,6 @@ if(CMAKE_SYSTEM_NAME MATCHES "Linux")
4545
target_compile_definitions(model_bench PRIVATE ADA_URL_FILE="${url-dataset_SOURCE_DIR}/out.txt")
4646
endif()
4747

48-
include(${PROJECT_SOURCE_DIR}/cmake/import.cmake)
49-
50-
set_off(BENCHMARK_ENABLE_TESTING)
51-
set_off(BENCHMARK_ENABLE_INSTALL)
52-
set_off(BENCHMARK_ENABLE_WERROR)
53-
54-
import_dependency(google_benchmarks google/benchmark f91b6b4)
55-
add_dependency(google_benchmarks)
5648
target_link_libraries(wpt_bench PRIVATE benchmark::benchmark)
5749
target_link_libraries(bench PRIVATE benchmark::benchmark)
5850
target_link_libraries(benchdata PRIVATE benchmark::benchmark)
@@ -96,10 +88,12 @@ if(NOT ICU_FOUND)
9688
endif(NOT ICU_FOUND)
9789

9890
if(ICU_FOUND)
99-
set_off(URL_BUILD_TESTS)
100-
set_off(URL_USE_LIBS)
101-
import_dependency(url_whatwg rmisev/url_whatwg cbcf3043eccb380cb4bef7486465ac3b02d2f674)
102-
add_dependency(url_whatwg)
91+
CPMAddPackage(
92+
NAME url_whatwg
93+
GITHUB_REPOSITORY rmisev/url_whatwg
94+
GIT_TAG cbcf3043eccb380cb4bef7486465ac3b02d2f674
95+
OPTIONS "URL_BUILD_TESTS OFF" "URL_USE_LIBS OFF"
96+
)
10397
add_library(url_whatwg_lib STATIC "${url_whatwg_SOURCE_DIR}/src/url.cpp"
10498
"${url_whatwg_SOURCE_DIR}/src/url_idna.cpp"
10599
"${url_whatwg_SOURCE_DIR}/src/url_ip.cpp"
@@ -129,22 +123,31 @@ endif(ICU_FOUND)
129123

130124
if(ADA_COMPETITION)
131125
# URI Parser
132-
set_off(URIPARSER_BUILD_TESTS)
133-
set_off(URIPARSER_BUILD_DOCS)
134-
import_dependency(uriparser uriparser/uriparser 634b678)
135-
add_dependency(uriparser)
126+
CPMAddPackage(
127+
NAME uriparser
128+
GITHUB_REPOSITORY uriparser/uriparser
129+
GIT_TAG 634b678
130+
OPTIONS "URIPARSER_BUILD_TESTS OFF" "URIPARSER_BUILD_DOCS OFF"
131+
)
136132
target_link_libraries(bench PRIVATE uriparser)
137133
target_link_libraries(bbc_bench PRIVATE uriparser)
138-
139134
# URL Parser
140-
import_dependency(urlparser netmindms/urlparser 69c09ed)
135+
CPMAddPackage(
136+
NAME urlparser
137+
GITHUB_REPOSITORY netmindms/urlparser
138+
GIT_TAG 69c09ed
139+
)
141140
add_library(urlparser STATIC "${urlparser_SOURCE_DIR}/src/EdUrlParser.cpp")
142141
target_include_directories(urlparser PUBLIC "${urlparser_SOURCE_DIR}/src")
143142
target_link_libraries(bench PRIVATE urlparser)
144143
target_link_libraries(bbc_bench PRIVATE urlparser)
145144

146145
# HTTP Parser
147-
import_dependency(httpparser nodejs/http-parser v2.9.4)
146+
CPMAddPackage(
147+
NAME httpparser
148+
GITHUB_REPOSITORY nodejs/http-parser
149+
VERSION 2.9.4
150+
)
148151
add_library(httpparser STATIC "${httpparser_SOURCE_DIR}/http_parser.c")
149152
set_source_files_properties("${httpparser_SOURCE_DIR}/http_parser.c" PROPERTIES LANGUAGE C)
150153
target_include_directories(httpparser PUBLIC "${httpparser_SOURCE_DIR}")
@@ -203,7 +206,11 @@ find_package(
203206
endif(ADA_BOOST_URL)
204207

205208
if(Boost_FOUND)
206-
import_dependency(boost_url boostorg/url boost-1.81.0)
209+
CPMAddPackage(
210+
NAME boost_url
211+
GITHUB_REPOSITORY boostorg/url
212+
GIT_TAG boost-1.81.0
213+
)
207214
add_library(boost_url INTERFACE)
208215
target_include_directories(boost_url INTERFACE
209216
"${boost_url_SOURCE_DIR}/include")
@@ -241,16 +248,19 @@ endif(ZURI_FOUND)
241248

242249

243250
# We want the check whether Rust is available before trying to build a crate.
244-
set(Rust_FIND_QUIETLY ON) # No need to alarm the user if rust is not available.
245-
import_dependency(corrosion corrosion-rs/corrosion v0.3.4)
251+
CPMAddPackage(
252+
NAME corrosion
253+
GITHUB_REPOSITORY corrosion-rs/corrosion
254+
VERSION 0.4.4
255+
DOWNLOAD_ONLY ON
256+
OPTIONS "Rust_FIND_QUIETLY OFF"
257+
)
246258
include("${corrosion_SOURCE_DIR}/cmake/FindRust.cmake")
247259

248260

249261
if(RUST_FOUND)
250262
message(STATUS "Rust found: " ${Rust_VERSION} )
251-
# Important: we only want to include corrosion *if* rust is available.
252-
# Otherwise, it is impossible to run ada benchmarks without rust.
253-
add_dependency(corrosion)
263+
add_subdirectory("${corrosion_SOURCE_DIR}" "${PROJECT_BINARY_DIR}/_deps/corrosion" EXCLUDE_FROM_ALL)
254264
# Important: we want to build in release mode!
255265
corrosion_import_crate(MANIFEST_PATH "competitors/servo-url/Cargo.toml" NO_LINKER_OVERRIDE PROFILE release)
256266

cmake/CPM.cmake

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# SPDX-License-Identifier: MIT
2+
#
3+
# SPDX-FileCopyrightText: Copyright (c) 2019-2023 Lars Melchior and contributors
4+
5+
set(CPM_DOWNLOAD_VERSION 0.38.6)
6+
set(CPM_HASH_SUM "11c3fa5f1ba14f15d31c2fb63dbc8628ee133d81c8d764caad9a8db9e0bacb07")
7+
8+
if(CPM_SOURCE_CACHE)
9+
set(CPM_DOWNLOAD_LOCATION "${CPM_SOURCE_CACHE}/cpm/CPM_${CPM_DOWNLOAD_VERSION}.cmake")
10+
elseif(DEFINED ENV{CPM_SOURCE_CACHE})
11+
set(CPM_DOWNLOAD_LOCATION "$ENV{CPM_SOURCE_CACHE}/cpm/CPM_${CPM_DOWNLOAD_VERSION}.cmake")
12+
else()
13+
set(CPM_DOWNLOAD_LOCATION "${CMAKE_BINARY_DIR}/cmake/CPM_${CPM_DOWNLOAD_VERSION}.cmake")
14+
endif()
15+
16+
# Expand relative path. This is important if the provided path contains a tilde (~)
17+
get_filename_component(CPM_DOWNLOAD_LOCATION ${CPM_DOWNLOAD_LOCATION} ABSOLUTE)
18+
19+
file(DOWNLOAD
20+
https://github.com/cpm-cmake/CPM.cmake/releases/download/v${CPM_DOWNLOAD_VERSION}/CPM.cmake
21+
${CPM_DOWNLOAD_LOCATION} EXPECTED_HASH SHA256=${CPM_HASH_SUM}
22+
)
23+
24+
include(${CPM_DOWNLOAD_LOCATION})

cmake/import.cmake

Lines changed: 0 additions & 52 deletions
This file was deleted.

tools/cli/CMakeLists.txt

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,12 @@ 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>")
44

5-
include(${PROJECT_SOURCE_DIR}/cmake/import.cmake)
6-
import_dependency(cxxopts jarro2783/cxxopts eb78730)
7-
add_dependency(cxxopts)
8-
import_dependency(fmt fmtlib/fmt a337011)
9-
add_dependency(fmt)
5+
CPMAddPackage("gh:fmtlib/fmt#7.1.3")
6+
CPMAddPackage(
7+
GITHUB_REPOSITORY jarro2783/cxxopts
8+
VERSION 3.1.1
9+
OPTIONS "CXXOPTS_BUILD_EXAMPLES NO" "CXXOPTS_BUILD_TESTS NO" "CXXOPTS_ENABLE_INSTALL YES"
10+
)
1011
target_link_libraries(adaparse PRIVATE cxxopts::cxxopts fmt::fmt)
1112

1213
if(MSVC OR MINGW)

0 commit comments

Comments
 (0)