Skip to content

Commit

Permalink
cmake: Fix pybind11_protobuf integration
Browse files Browse the repository at this point in the history
  • Loading branch information
Mizux committed Jul 19, 2024
1 parent 3d0d015 commit 8a1110e
Show file tree
Hide file tree
Showing 2 changed files with 108 additions and 5 deletions.
4 changes: 4 additions & 0 deletions cmake/check_deps.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,10 @@ endif()

# Check language Dependencies
if(BUILD_PYTHON)
if(NOT TARGET pybind11::pybind11_headers)
message(FATAL_ERROR "Target pybind11::pybind11_headers not available.")
endif()

if(NOT TARGET pybind11_abseil::absl_casters)
message(FATAL_ERROR "Target pybind11_abseil::absl_casters not available.")
endif()
Expand Down
109 changes: 104 additions & 5 deletions patches/pybind11_protobuf.patch
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 2139dc0..1942ad0 100644
index 2139dc0..df3f30a 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -27,7 +27,7 @@ include(CTest)
@@ -27,58 +27,64 @@ include(CTest)
# ============================================================================
# Find Python

Expand All @@ -11,7 +11,106 @@ index 2139dc0..1942ad0 100644

# ============================================================================
# Build dependencies
@@ -87,8 +87,10 @@ pybind11_add_module(
+include(FetchContent)

-if(USE_SYSTEM_ABSEIL)
- # Version omitted, as absl only allows EXACT version matches
- set(_absl_package_args REQUIRED)
-else()
- set(_absl_package_args 20230125)
-endif()
-if(USE_SYSTEM_PROTOBUF)
- set(_protobuf_package_args 4.23.3 REQUIRED)
-else()
- set(_protobuf_package_args 4.23.3)
-endif()
-if(USE_SYSTEM_PYBIND)
- set(_pybind11_package_args 2.11.1 REQUIRED)
-else()
- set(_pybind11_package_args 2.11.1)
+message(CHECK_START "Checking for external dependencies")
+list(APPEND CMAKE_MESSAGE_INDENT " ")
+
+if(NOT TARGET absl::base)
+ if(USE_SYSTEM_ABSEIL)
+ # Version omitted, as absl only allows EXACT version matches
+ set(_absl_package_args REQUIRED)
+ else()
+ set(_absl_package_args 20230125)
+ endif()
+ FetchContent_Declare(
+ absl
+ GIT_REPOSITORY "https://github.com/abseil/abseil-cpp.git"
+ GIT_TAG 20230125.3
+ FIND_PACKAGE_ARGS ${_absl_package_args} NAMES absl)
+ set(ABSL_PROPAGATE_CXX_STD ON)
+ set(ABSL_ENABLE_INSTALL ON)
+ FetchContent_MakeAvailable(absl)
endif()

-set(ABSL_PROPAGATE_CXX_STD ON)
-set(ABSL_ENABLE_INSTALL ON)
+if(NOT TARGET protobuf::libprotobuf)
+ if(USE_SYSTEM_PROTOBUF)
+ set(_protobuf_package_args 4.23.3 REQUIRED)
+ else()
+ set(_protobuf_package_args 4.23.3)
+ endif()
+ FetchContent_Declare(
+ Protobuf
+ GIT_REPOSITORY "https://github.com/protocolbuffers/protobuf.git"
+ GIT_TAG v23.3
+ GIT_SUBMODULES ""
+ FIND_PACKAGE_ARGS ${_protobuf_package_args} NAMES protobuf)
+ set(protobuf_BUILD_TESTS OFF CACHE INTERNAL "")
+ FetchContent_MakeAvailable(Protobuf)
+endif()

-include(FetchContent)
-FetchContent_Declare(
- absl
- GIT_REPOSITORY "https://github.com/abseil/abseil-cpp.git"
- GIT_TAG 20230125.3
- FIND_PACKAGE_ARGS ${_absl_package_args} NAMES absl)
-
-# cmake-format: off
-FetchContent_Declare(
- Protobuf
- GIT_REPOSITORY "https://github.com/protocolbuffers/protobuf.git"
- GIT_TAG v23.3
- GIT_SUBMODULES ""
- FIND_PACKAGE_ARGS ${_protobuf_package_args} NAMES protobuf)
-set(protobuf_BUILD_TESTS OFF CACHE INTERNAL "")
-# cmake-format: on
-
-FetchContent_Declare(
- pybind11
- GIT_REPOSITORY "https://github.com/pybind/pybind11.git"
- GIT_TAG v2.11.1
- FIND_PACKAGE_ARGS ${_pybind11_package_args} NAMES pybind11)
+if(NOT TARGET pybind11::pybind11_headers)
+ if(USE_SYSTEM_PYBIND)
+ set(_pybind11_package_args 2.11.1 REQUIRED)
+ else()
+ set(_pybind11_package_args 2.11.1)
+ endif()
+ FetchContent_Declare(
+ pybind11
+ GIT_REPOSITORY "https://github.com/pybind/pybind11.git"
+ GIT_TAG v2.11.1
+ FIND_PACKAGE_ARGS ${_pybind11_package_args} NAMES pybind11)
+ FetchContent_MakeAvailable(pybind11)
+endif()

-message(CHECK_START "Checking for external dependencies")
-list(APPEND CMAKE_MESSAGE_INDENT " ")
-FetchContent_MakeAvailable(absl Protobuf pybind11)
list(POP_BACK CMAKE_MESSAGE_INDENT)
+message(CHECK_PASS "found")

# ============================================================================
# pybind11_proto_utils pybind11 extension module
@@ -87,8 +93,10 @@ pybind11_add_module(
pybind11_protobuf/proto_utils.h)

target_link_libraries(
Expand All @@ -24,7 +123,7 @@ index 2139dc0..1942ad0 100644

target_include_directories(
pybind11_proto_utils PRIVATE ${PROJECT_SOURCE_DIR} ${protobuf_INCLUDE_DIRS}
@@ -116,10 +118,11 @@ target_link_libraries(
@@ -116,10 +124,11 @@ target_link_libraries(
absl::optional
protobuf::libprotobuf
pybind11::pybind11
Expand All @@ -37,7 +136,7 @@ index 2139dc0..1942ad0 100644
PRIVATE ${PROJECT_SOURCE_DIR} ${protobuf_INCLUDE_DIRS} ${protobuf_SOURCE_DIR}
${pybind11_INCLUDE_DIRS})

@@ -143,7 +146,7 @@ target_link_libraries(
@@ -143,7 +152,7 @@ target_link_libraries(
absl::optional
protobuf::libprotobuf
pybind11::pybind11
Expand Down

0 comments on commit 8a1110e

Please sign in to comment.