Skip to content

Commit a2434df

Browse files
committed
cmake: update deps
1 parent 7cbbb37 commit a2434df

File tree

7 files changed

+389
-9
lines changed

7 files changed

+389
-9
lines changed

CMakeLists.txt

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,22 +74,33 @@ endif()
7474
# Enable CCache if any
7575
include(ccache)
7676

77+
# Build deps
78+
7779
# Disable CTest targets
7880
set_property(GLOBAL PROPERTY CTEST_TARGETS_ADDED 1)
7981
include(CTest)
8082

8183
if(BUILD_TESTING)
82-
option(BUILD_googletest "Build googletest" ON)
84+
option(BUILD_absl "Build the abseil-cpp dependency Library" ON)
85+
option(BUILD_re2 "Build the RE2 dependency Library" ON)
86+
option(BUILD_googletest "Build the googletest dependency Library" ON)
8387
else()
88+
set(BUILD_absl OFF)
89+
set(BUILD_re2 OFF)
8490
set(BUILD_googletest OFF)
8591
endif()
92+
message(STATUS "Build absl: ${BUILD_absl}")
93+
message(STATUS "Build re2: ${BUILD_re2}")
8694
message(STATUS "Build googletest: ${BUILD_googletest}")
8795

8896
option(BUILD_pybind11 "Build pybind11 library" ON)
8997
message(STATUS "Build pybind11: ${BUILD_pybind11}")
9098

99+
option(GENERATE_PYTHON_STUB "Generate Python stub file (.pyi)" ON)
100+
message(STATUS "Python: Generate stub file: ${GENERATE_PYTHON_STUB}")
101+
91102
option(FETCH_PYTHON_DEPS "Install python required modules if not available" ON)
92-
message(STATUS "Python fetch dependencies: ${FETCH_PYTHON_DEPS}")
103+
message(STATUS "Python: Fetch dependencies: ${FETCH_PYTHON_DEPS}")
93104

94105
option(VENV_USE_SYSTEM_SITE_PACKAGES "Python venv can use system site packages" OFF)
95106
message(STATUS "Python: Allow venv to use system site packages: ${VENV_USE_SYSTEM_SITE_PACKAGES}")

cmake/check_deps.cmake

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,58 @@
1+
# Check dependencies
12
# CXX Test
23
if(BUILD_TESTING)
4+
if(NOT TARGET absl::base)
5+
message(FATAL_ERROR "Target absl::base not available.")
6+
endif()
7+
set(ABSL_DEPS
8+
absl::base
9+
absl::core_headers
10+
absl::absl_check
11+
absl::absl_log
12+
absl::check
13+
absl::die_if_null
14+
absl::flags
15+
absl::flags_commandlineflag
16+
absl::flags_marshalling
17+
absl::flags_parse
18+
absl::flags_reflection
19+
absl::flags_usage
20+
absl::log
21+
absl::log_flags
22+
absl::log_globals
23+
absl::log_initialize
24+
absl::log_internal_message
25+
absl::cord
26+
absl::random_random
27+
absl::raw_hash_set
28+
absl::hash
29+
absl::leak_check
30+
absl::memory
31+
absl::meta
32+
absl::stacktrace
33+
absl::status
34+
absl::statusor
35+
absl::str_format
36+
absl::strings
37+
absl::synchronization
38+
absl::time
39+
absl::any
40+
)
41+
42+
if(NOT TARGET re2::re2)
43+
message(FATAL_ERROR "Target re2::re2 not available.")
44+
endif()
45+
set(RE2_DEPS re2::re2)
46+
347
if(NOT TARGET GTest::gtest)
448
message(FATAL_ERROR "Target GTest::gtest not available.")
549
endif()
650
if(NOT TARGET GTest::gtest_main)
751
message(FATAL_ERROR "Target GTest::gtest_main not available.")
852
endif()
953
endif()
54+
55+
# Check language Dependencies
56+
if(NOT TARGET pybind11::pybind11_headers)
57+
message(FATAL_ERROR "Target pybind11::pybind11_headers not available.")
58+
endif()

cmake/dependencies/CMakeLists.txt

Lines changed: 55 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,58 @@ set(CMAKE_POSITION_INDEPENDENT_CODE ON)
66
set(BUILD_TESTING OFF)
77
set(CMAKE_Fortran_COMPILER OFF)
88

9+
# ##############################################################################
10+
# ABSEIL-CPP
11+
# ##############################################################################
12+
if(BUILD_absl)
13+
message(CHECK_START "Fetching Abseil-cpp")
14+
list(APPEND CMAKE_MESSAGE_INDENT " ")
15+
FetchContent_Declare(
16+
absl
17+
GIT_REPOSITORY "https://github.com/abseil/abseil-cpp.git"
18+
GIT_TAG "20250814.0"
19+
GIT_SHALLOW TRUE
20+
UPDATE_COMMAND git reset --hard
21+
PATCH_COMMAND git apply --ignore-whitespace
22+
"${CMAKE_CURRENT_LIST_DIR}/../../patches/abseil-cpp-20250814.0.patch"
23+
OVERRIDE_FIND_PACKAGE
24+
)
25+
set(ABSL_USE_SYSTEM_INCLUDES ON)
26+
# We want Abseil to declare what C++ standard it was compiled with.
27+
set(ABSL_PROPAGATE_CXX_STD ON)
28+
# We want Abseil to keep the INSTALL rules enabled, even though it is a
29+
# subproject. Otherwise the install rules in this project break.
30+
set(ABSL_ENABLE_INSTALL ON)
31+
set(ABSL_BUILD_TESTING OFF)
32+
set(ABSL_BUILD_TEST_HELPERS OFF)
33+
set(ABSL_USE_EXTERNAL_GOOGLETEST ON)
34+
set(ABSL_FIND_GOOGLETEST OFF)
35+
FetchContent_MakeAvailable(absl)
36+
list(POP_BACK CMAKE_MESSAGE_INDENT)
37+
message(CHECK_PASS "fetched")
38+
endif()
39+
40+
# ##############################################################################
41+
# RE2
42+
# ##############################################################################
43+
if(BUILD_re2)
44+
message(CHECK_START "Fetching re2")
45+
list(APPEND CMAKE_MESSAGE_INDENT " ")
46+
FetchContent_Declare(
47+
re2
48+
GIT_REPOSITORY "https://github.com/google/re2.git"
49+
GIT_TAG "2025-08-12"
50+
GIT_SHALLOW TRUE
51+
UPDATE_COMMAND git reset --hard
52+
PATCH_COMMAND git apply --ignore-whitespace
53+
"${CMAKE_CURRENT_LIST_DIR}/../../patches/re2-2025-08-12.patch"
54+
)
55+
set(RE2_BUILD_TESTING OFF)
56+
FetchContent_MakeAvailable(re2)
57+
list(POP_BACK CMAKE_MESSAGE_INDENT)
58+
message(CHECK_PASS "fetched")
59+
endif()
60+
961
# ##############################################################################
1062
# pybind11
1163
# ##############################################################################
@@ -16,9 +68,6 @@ message(STATUS "Python: ${Python3_EXECUTABLE}")
1668
if(BUILD_pybind11)
1769
message(CHECK_START "Fetching pybind11")
1870
list(APPEND CMAKE_MESSAGE_INDENT " ")
19-
set(PYBIND11_FINDPYTHON ON)
20-
set(PYBIND11_INSTALL ON)
21-
set(PYBIND11_TEST OFF)
2271
FetchContent_Declare(
2372
pybind11
2473
GIT_REPOSITORY "https://github.com/pybind/pybind11.git"
@@ -28,6 +77,9 @@ if(BUILD_pybind11)
2877
#PATCH_COMMAND git apply --ignore-whitespace
2978
# "${CMAKE_CURRENT_LIST_DIR}/../../patches/pybind11-v3.0.0.patch"
3079
)
80+
set(PYBIND11_FINDPYTHON ON)
81+
set(PYBIND11_INSTALL ON)
82+
set(PYBIND11_TEST OFF)
3183
FetchContent_MakeAvailable(pybind11)
3284
list(POP_BACK CMAKE_MESSAGE_INDENT)
3385
message(CHECK_PASS "fetched")

cmake/python.cmake

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,9 @@ file(GENERATE
200200
set(is_windows "$<PLATFORM_ID:Windows>")
201201
set(is_not_windows "$<NOT:$<PLATFORM_ID:Windows>>")
202202

203+
set(need_unix_absl_lib "$<AND:${is_not_windows},$<BOOL:${BUILD_absl}>>")
204+
set(need_windows_absl_lib "$<AND:${is_windows},$<BOOL:${BUILD_absl}>>")
205+
203206
set(is_foo_shared "$<STREQUAL:$<TARGET_PROPERTY:Foo,TYPE>,SHARED_LIBRARY>")
204207
set(need_unix_foo_lib "$<AND:${is_not_windows},${is_foo_shared}>")
205208
set(need_windows_foo_lib "$<AND:${is_windows},${is_foo_shared}>")
@@ -217,6 +220,93 @@ add_custom_command(
217220
COMMAND ${CMAKE_COMMAND} -E remove -f libs_timestamp
218221
COMMAND ${CMAKE_COMMAND} -E make_directory ${PYTHON_PROJECT}/.libs
219222

223+
COMMAND ${CMAKE_COMMAND} -E
224+
$<IF:$<BOOL:${BUILD_absl}>,copy,true>
225+
$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::base>>
226+
$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::city>>
227+
#$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::civil_time>>
228+
#$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::cord>>
229+
#$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::cord_internal>>
230+
#$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::cordz_functions>>
231+
#$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::cordz_handle>>
232+
#$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::cordz_info>>
233+
#$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::crc32c>>
234+
#$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::crc_cord_state>>
235+
#$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::crc_cpu_detect>>
236+
#$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::crc_internal>>
237+
$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::debugging_internal>>
238+
$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::decode_rust_punycode>>
239+
$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::demangle_internal>>
240+
$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::demangle_rust>>
241+
#$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::die_if_null>>
242+
$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::examine_stack>>
243+
#$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::exponential_biased>>
244+
#$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::flags_commandlineflag>>
245+
#$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::flags_commandlineflag_internal>>
246+
#$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::flags_config>>
247+
#$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::flags_internal>>
248+
#$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::flags_marshalling>>
249+
#$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::flags_parse>>
250+
#$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::flags_private_handle_accessor>>
251+
#$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::flags_program_name>>
252+
#$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::flags_reflection>>
253+
#$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::flags_usage>>
254+
#$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::flags_usage_internal>>
255+
#$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::graphcycles_internal>>
256+
$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::hash>>
257+
#$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::hashtablez_sampler>>
258+
$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::int128>>
259+
$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::kernel_timeout_internal>>
260+
#$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::leak_check>>
261+
#$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::log_entry>>
262+
#$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::log_flags>>
263+
$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::log_globals>>
264+
#$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::log_initialize>>
265+
#$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::log_internal_check_op>>
266+
#$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::log_internal_conditions>>
267+
#$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::log_internal_fnmatch>>
268+
$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::log_internal_format>>
269+
$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::log_internal_globals>>
270+
$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::log_internal_log_sink_set>>
271+
$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::log_internal_structured_proto>>
272+
$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::log_internal_message>>
273+
$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::log_internal_nullguard>>
274+
$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::log_internal_proto>>
275+
#$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::log_severity>>
276+
$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::log_sink>>
277+
$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::malloc_internal>>
278+
#$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::random_distributions>>
279+
#$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::random_internal_entropy_pool>>
280+
#$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::random_internal_platform>>
281+
#$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::random_internal_randen>>
282+
#$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::random_internal_randen_hwaes>>
283+
#$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::random_internal_randen_hwaes_impl>>
284+
#$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::random_internal_randen_slow>>
285+
#$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::random_internal_seed_material>>
286+
#$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::random_seed_gen_exception>>
287+
#$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::random_seed_sequences>>
288+
#$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::raw_hash_set>>
289+
$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::raw_logging_internal>>
290+
$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::spinlock_wait>>
291+
$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::stacktrace>>
292+
#$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::status>>
293+
#$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::statusor>>
294+
$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::str_format_internal>>
295+
$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::strerror>>
296+
#$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::string_view>>
297+
$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::strings>>
298+
$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::strings_internal>>
299+
$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::symbolize>>
300+
$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::synchronization>>
301+
#$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::throw_delegate>>
302+
$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::time>>
303+
$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::time_zone>>
304+
$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::tracing_internal>>
305+
$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::utf8_for_code_point>>
306+
#$<${need_unix_absl_lib}:$<TARGET_SONAME_FILE:absl::vlog_config_internal>>
307+
$<${need_windows_absl_lib}:$<TARGET_FILE:absl::abseil_dll>>
308+
${PYTHON_PROJECT}/.libs
309+
220310
COMMAND ${CMAKE_COMMAND} -E
221311
$<IF:${is_foo_shared},copy,true>
222312
$<${need_unix_foo_lib}:$<TARGET_SONAME_FILE:Foo>>

cmake/system_deps.cmake

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,22 @@ find_package(Threads REQUIRED)
88
# distro package already provide a CMake config file...
99
set(CMAKE_FIND_PACKAGE_PREFER_CONFIG TRUE)
1010

11-
if(NOT BUILD_pybind11)
12-
find_package(pybind11 REQUIRED)
13-
endif()
14-
1511
# CXX Test
1612
if(BUILD_TESTING)
13+
if(NOT BUILD_absl AND NOT TARGET absl::base)
14+
find_package(absl REQUIRED)
15+
endif()
16+
17+
if(NOT BUILD_re2 AND NOT TARGET re2::re2)
18+
find_package(re2 REQUIRED)
19+
endif()
20+
1721
if(NOT BUILD_googletest AND NOT TARGET GTest::gtest_main)
1822
find_package(GTest REQUIRED)
1923
endif()
2024
endif()
25+
26+
# Check language Dependencies
27+
if(NOT BUILD_pybind11 AND NOT TARGET pybind11::pybind11_headers)
28+
find_package(pybind11 REQUIRED)
29+
endif()

0 commit comments

Comments
 (0)