at 24.05-pre 4.9 kB view raw
1diff --git a/tree/CMakeLists.txt b/tree/CMakeLists.txt 2index 4fd1b1a..f0d072b 100644 3--- a/tree/CMakeLists.txt 4+++ b/tree/CMakeLists.txt 5@@ -50,70 +50,79 @@ if(APPLE) 6 set (CMAKE_FIND_FRAMEWORK LAST) 7 endif() 8 9-# Fetch pybind to be able to use pybind11_add_module symbol. 10-set(PYBIND_VER v2.10.1) 11-include(FetchContent) 12-FetchContent_Declare( 13- pybind11 14- GIT_REPOSITORY https://github.com/pybind/pybind11 15- GIT_TAG ${PYBIND_VER} 16-) 17-if(NOT pybind11_POPULATED) 18- FetchContent_Populate(pybind11) 19- add_subdirectory(${pybind11_SOURCE_DIR} ${pybind11_BINARY_DIR}) 20- include_directories(${pybind11_INCLUDE_DIR}) 21-endif() 22- 23-# Needed to disable Abseil tests. 24-set (BUILD_TESTING OFF) 25- 26-# Include abseil-cpp. 27-set(ABSEIL_VER 20210324.2) 28-include(ExternalProject) 29-set(ABSEIL_CMAKE_ARGS 30- "-DCMAKE_INSTALL_PREFIX=${CMAKE_SOURCE_DIR}/abseil-cpp" 31- "-DCMAKE_CXX_STANDARD=${CMAKE_CXX_STANDARD}" 32- "-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}" 33- "-DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS}" 34- "-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}" 35- "-DCMAKE_POSITION_INDEPENDENT_CODE=${CMAKE_POSITION_INDEPENDENT_CODE}" 36- "-DLIBRARY_OUTPUT_PATH=${CMAKE_SOURCE_DIR}/abseil-cpp/lib") 37-if(DEFINED CMAKE_OSX_ARCHITECTURES) 38- set(ABSEIL_CMAKE_ARGS 39- ${ABSEIL_CMAKE_ARGS} 40- "-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}") 41+find_package(pybind11 CONFIG) 42+ 43+if (NOT pybind11_FOUND) 44+ # Fetch pybind to be able to use pybind11_add_module symbol. 45+ set(PYBIND_VER v2.10.1) 46+ include(FetchContent) 47+ FetchContent_Declare( 48+ pybind11 49+ GIT_REPOSITORY https://github.com/pybind/pybind11 50+ GIT_TAG ${PYBIND_VER} 51+ ) 52+ if(NOT pybind11_POPULATED) 53+ FetchContent_Populate(pybind11) 54+ add_subdirectory(${pybind11_SOURCE_DIR} ${pybind11_BINARY_DIR}) 55+ include_directories(${pybind11_INCLUDE_DIR}) 56+ endif() 57 endif() 58-ExternalProject_Add(abseil-cpp 59- GIT_REPOSITORY https://github.com/abseil/abseil-cpp.git 60- GIT_TAG ${ABSEIL_VER} 61- PREFIX ${CMAKE_SOURCE_DIR}/abseil-cpp 62- CMAKE_ARGS ${ABSEIL_CMAKE_ARGS} 63-) 64-ExternalProject_Get_Property(abseil-cpp install_dir) 65-set(abseil_install_dir ${install_dir}) 66-include_directories (${abseil_install_dir}/include) 67- 68 69 # Define pybind11 tree module. 70 pybind11_add_module(_tree tree.h tree.cc) 71-add_dependencies(_tree abseil-cpp) 72- 73+find_package(absl) 74+ 75+if (NOT absl_FOUND) 76+ # Needed to disable Abseil tests. 77+ set (BUILD_TESTING OFF) 78+ 79+ # Include abseil-cpp. 80+ set(ABSEIL_VER 20210324.2) 81+ include(ExternalProject) 82+ set(ABSEIL_CMAKE_ARGS 83+ "-DCMAKE_INSTALL_PREFIX=${CMAKE_SOURCE_DIR}/abseil-cpp" 84+ "-DCMAKE_CXX_STANDARD=${CMAKE_CXX_STANDARD}" 85+ "-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}" 86+ "-DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS}" 87+ "-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}" 88+ "-DCMAKE_POSITION_INDEPENDENT_CODE=${CMAKE_POSITION_INDEPENDENT_CODE}" 89+ "-DLIBRARY_OUTPUT_PATH=${CMAKE_SOURCE_DIR}/abseil-cpp/lib") 90+ if(DEFINED CMAKE_OSX_ARCHITECTURES) 91+ set(ABSEIL_CMAKE_ARGS 92+ ${ABSEIL_CMAKE_ARGS} 93+ "-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}") 94+ endif() 95+ ExternalProject_Add(abseil-cpp 96+ GIT_REPOSITORY https://github.com/abseil/abseil-cpp.git 97+ GIT_TAG ${ABSEIL_VER} 98+ PREFIX ${CMAKE_SOURCE_DIR}/abseil-cpp 99+ CMAKE_ARGS ${ABSEIL_CMAKE_ARGS} 100+ ) 101+ ExternalProject_Get_Property(abseil-cpp install_dir) 102+ set(abseil_install_dir ${install_dir}) 103+ include_directories (${abseil_install_dir}/include) 104+ 105+ add_dependencies(_tree abseil-cpp) 106+ 107+ if (WIN32 OR MSVC) 108+ set(ABSEIL_LIB_PREF "absl") 109+ set(LIB_SUFF "lib") 110+ else() 111+ set(ABSEIL_LIB_PREF "libabsl") 112+ set(LIB_SUFF "a") 113+ endif() 114+ 115-if (WIN32 OR MSVC) 116- set(ABSEIL_LIB_PREF "absl") 117- set(LIB_SUFF "lib") 118+ # Link abseil static libs. 119+ # We don't use find_library here to force cmake to build abseil before linking. 120+ set(ABSEIL_LIBS int128 raw_hash_set raw_logging_internal strings throw_delegate) 121+ foreach(ABSEIL_LIB IN LISTS ABSEIL_LIBS) 122+ target_link_libraries(_tree PRIVATE 123+ "${abseil_install_dir}/lib/${ABSEIL_LIB_PREF}_${ABSEIL_LIB}.${LIB_SUFF}") 124+ endforeach() 125 else() 126- set(ABSEIL_LIB_PREF "libabsl") 127- set(LIB_SUFF "a") 128+ target_link_libraries(_tree PRIVATE absl::int128 absl::raw_hash_set absl::raw_logging_internal absl::strings absl::throw_delegate) 129 endif() 130 131-# Link abseil static libs. 132-# We don't use find_library here to force cmake to build abseil before linking. 133-set(ABSEIL_LIBS int128 raw_hash_set raw_logging_internal strings throw_delegate) 134-foreach(ABSEIL_LIB IN LISTS ABSEIL_LIBS) 135- target_link_libraries(_tree PRIVATE 136- "${abseil_install_dir}/lib/${ABSEIL_LIB_PREF}_${ABSEIL_LIB}.${LIB_SUFF}") 137-endforeach() 138- 139 # Make the module private to tree package. 140 set_target_properties(_tree PROPERTIES OUTPUT_NAME tree/_tree) 141