mirror of
https://github.com/greg7mdp/parallel-hashmap.git
synced 2026-08-29 08:34:39 +08:00
Modernize CMakeLists.txt and make gtest download optional
This commit is contained in:
Vendored
+69
-26
@@ -1,3 +1,22 @@
|
||||
#[===================================================================[
|
||||
parallel-hashmap library by Gregory Popovitch
|
||||
|
||||
CMake projects that wish to use this library may do
|
||||
something like :
|
||||
|
||||
include(FetchContent)
|
||||
FetchContent_Declare(
|
||||
parallel-hashmap
|
||||
GIT_REPOSITORY https://github.com/greg7mdp/parallel-hashmap.git
|
||||
GIT_TAG v1.3.7 # adjust tag/branch/commit as needed
|
||||
)
|
||||
FetchContent_MakeAvailable(parallel-hashmap)
|
||||
|
||||
...
|
||||
target_link_libraries (my_target PRIVATE parallel-hashmap)
|
||||
|
||||
#]===================================================================]
|
||||
|
||||
cmake_minimum_required(VERSION 3.8)
|
||||
|
||||
list (APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
|
||||
@@ -6,24 +25,40 @@ include(DetectVersion)
|
||||
|
||||
cmake_policy(SET CMP0048 NEW) ## set VERSION as documented by the project() command.
|
||||
cmake_policy(SET CMP0076 NEW) ## accept new policy
|
||||
|
||||
if(NOT CMAKE_CXX_STANDARD)
|
||||
set(CMAKE_CXX_STANDARD 11) ## compile with C++11 support
|
||||
endif()
|
||||
|
||||
if(NOT CMAKE_CXX_STANDARD_REQUIRED)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
endif()
|
||||
|
||||
if(NOT DEFINED PHMAP_MASTER_PROJECT)
|
||||
set(PHMAP_MASTER_PROJECT OFF)
|
||||
if(CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR)
|
||||
set(PHMAP_MASTER_PROJECT ON)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
project(phmap VERSION ${DETECTED_PHMAP_VERSION} LANGUAGES CXX)
|
||||
|
||||
## ----------------------------- options -----------------------------
|
||||
option(PHMAP_INSTALL "Enable installation" ${PHMAP_MASTER_PROJECT})
|
||||
|
||||
|
||||
set(PHMAP_DIR parallel_hashmap)
|
||||
set(PHMAP_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/${PHMAP_DIR}/phmap.h
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/${PHMAP_DIR}/phmap_base.h
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/${PHMAP_DIR}/phmap_bits.h
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/${PHMAP_DIR}/phmap_config.h
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/${PHMAP_DIR}/phmap_dump.h
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/${PHMAP_DIR}/phmap_fwd_decl.h
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/${PHMAP_DIR}/phmap_utils.h
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/${PHMAP_DIR}/phmap_config.h)
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/${PHMAP_DIR}/meminfo.h
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/${PHMAP_DIR}/btree.h)
|
||||
|
||||
set(CMAKE_SUPPRESS_REGENERATION true) ## suppress ZERO_CHECK project
|
||||
|
||||
include(GNUInstallDirs)
|
||||
include(CMakePackageConfigHelpers)
|
||||
include(helpers)
|
||||
include_directories("${CMAKE_CURRENT_SOURCE_DIR}")
|
||||
|
||||
add_library(${PROJECT_NAME} INTERFACE)
|
||||
|
||||
@@ -34,6 +69,10 @@ target_include_directories(
|
||||
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}>
|
||||
$<INSTALL_INTERFACE:include>)
|
||||
|
||||
if(PHMAP_INSTALL)
|
||||
include(GNUInstallDirs)
|
||||
include(CMakePackageConfigHelpers)
|
||||
|
||||
install(
|
||||
DIRECTORY ${PROJECT_SOURCE_DIR}/${PHMAP_DIR}/
|
||||
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PHMAP_DIR})
|
||||
@@ -43,10 +82,11 @@ install(TARGETS ${PROJECT_NAME}
|
||||
|
||||
export(EXPORT ${PROJECT_NAME}-targets
|
||||
FILE "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Targets.cmake")
|
||||
endif()
|
||||
|
||||
## ------------------------- building tests and examples -------------
|
||||
option(PHMAP_BUILD_TESTS "Whether or not to build the tests" ON)
|
||||
option(PHMAP_BUILD_EXAMPLES "Whether or not to build the examples" ON)
|
||||
option(PHMAP_BUILD_TESTS "Whether or not to build the tests" ${PHMAP_MASTER_PROJECT})
|
||||
option(PHMAP_BUILD_EXAMPLES "Whether or not to build the examples" ${PHMAP_MASTER_PROJECT})
|
||||
|
||||
if(MSVC)
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /bigobj")
|
||||
@@ -54,72 +94,75 @@ endif()
|
||||
|
||||
if (PHMAP_BUILD_TESTS)
|
||||
|
||||
if (NOT PHMAP_GTEST_LIBS)
|
||||
include(cmake/DownloadGTest.cmake)
|
||||
include_directories(${PROJECT_SOURCE_DIR})
|
||||
|
||||
check_target(gtest)
|
||||
check_target(gtest_main)
|
||||
check_target(gmock)
|
||||
set(PHMAP_GTEST_LIBS gmock_main)
|
||||
endif()
|
||||
|
||||
enable_testing()
|
||||
|
||||
## ---------------- regular hash maps ----------------------------
|
||||
phmap_cc_test(NAME compressed_tuple SRCS "tests/compressed_tuple_test.cc"
|
||||
DEPS gmock_main)
|
||||
DEPS ${PHMAP_GTEST_LIBS})
|
||||
|
||||
phmap_cc_test(NAME container_memory SRCS "tests/container_memory_test.cc"
|
||||
DEPS gmock_main)
|
||||
DEPS ${PHMAP_GTEST_LIBS})
|
||||
|
||||
phmap_cc_test(NAME hash_policy_testing SRCS "tests/hash_policy_testing_test.cc"
|
||||
DEPS gmock_main)
|
||||
DEPS ${PHMAP_GTEST_LIBS})
|
||||
|
||||
phmap_cc_test(NAME node_hash_policy SRCS "tests/node_hash_policy_test.cc"
|
||||
DEPS gmock_main)
|
||||
DEPS ${PHMAP_GTEST_LIBS})
|
||||
|
||||
phmap_cc_test(NAME raw_hash_set SRCS "tests/raw_hash_set_test.cc"
|
||||
DEPS gmock_main)
|
||||
DEPS ${PHMAP_GTEST_LIBS})
|
||||
|
||||
phmap_cc_test(NAME raw_hash_set_allocator SRCS "tests/raw_hash_set_allocator_test.cc"
|
||||
DEPS gmock_main)
|
||||
DEPS ${PHMAP_GTEST_LIBS})
|
||||
|
||||
## ---------------- regular hash maps ----------------------------
|
||||
phmap_cc_test(NAME flat_hash_set SRCS "tests/flat_hash_set_test.cc"
|
||||
COPTS "-DUNORDERED_SET_CXX17" DEPS gmock_main)
|
||||
COPTS "-DUNORDERED_SET_CXX17" DEPS ${PHMAP_GTEST_LIBS})
|
||||
|
||||
phmap_cc_test(NAME flat_hash_map SRCS "tests/flat_hash_map_test.cc"
|
||||
DEPS gmock_main)
|
||||
DEPS ${PHMAP_GTEST_LIBS})
|
||||
|
||||
phmap_cc_test(NAME node_hash_map SRCS "tests/node_hash_map_test.cc"
|
||||
DEPS gmock_main)
|
||||
DEPS ${PHMAP_GTEST_LIBS})
|
||||
|
||||
phmap_cc_test(NAME node_hash_set SRCS "tests/node_hash_set_test.cc"
|
||||
COPTS "-DUNORDERED_SET_CXX17" DEPS gmock_main)
|
||||
COPTS "-DUNORDERED_SET_CXX17" DEPS ${PHMAP_GTEST_LIBS})
|
||||
|
||||
## --------------- parallel hash maps -----------------------------------------------
|
||||
phmap_cc_test(NAME parallel_flat_hash_map SRCS "tests/parallel_flat_hash_map_test.cc"
|
||||
COPTS "-DUNORDERED_MAP_CXX17" DEPS gmock_main)
|
||||
COPTS "-DUNORDERED_MAP_CXX17" DEPS ${PHMAP_GTEST_LIBS})
|
||||
|
||||
phmap_cc_test(NAME parallel_flat_hash_set SRCS "tests/parallel_flat_hash_set_test.cc"
|
||||
COPTS "-DUNORDERED_SET_CXX17" DEPS gmock_main)
|
||||
COPTS "-DUNORDERED_SET_CXX17" DEPS ${PHMAP_GTEST_LIBS})
|
||||
|
||||
phmap_cc_test(NAME parallel_node_hash_map SRCS "tests/parallel_node_hash_map_test.cc"
|
||||
DEPS gmock_main)
|
||||
DEPS ${PHMAP_GTEST_LIBS})
|
||||
|
||||
phmap_cc_test(NAME parallel_node_hash_set SRCS "tests/parallel_node_hash_set_test.cc"
|
||||
COPTS "-DUNORDERED_SET_CXX17" DEPS gmock_main)
|
||||
COPTS "-DUNORDERED_SET_CXX17" DEPS ${PHMAP_GTEST_LIBS})
|
||||
|
||||
phmap_cc_test(NAME parallel_flat_hash_map_mutex SRCS "tests/parallel_flat_hash_map_mutex_test.cc"
|
||||
COPTS "-DUNORDERED_MAP_CXX17" DEPS gmock_main)
|
||||
COPTS "-DUNORDERED_MAP_CXX17" DEPS ${PHMAP_GTEST_LIBS})
|
||||
|
||||
phmap_cc_test(NAME dump_load SRCS "tests/dump_load_test.cc"
|
||||
COPTS "-DUNORDERED_MAP_CXX17" DEPS gmock_main)
|
||||
COPTS "-DUNORDERED_MAP_CXX17" DEPS ${PHMAP_GTEST_LIBS})
|
||||
|
||||
phmap_cc_test(NAME erase_if SRCS "tests/erase_if_test.cc"
|
||||
COPTS "-DUNORDERED_MAP_CXX17" DEPS gmock_main)
|
||||
COPTS "-DUNORDERED_MAP_CXX17" DEPS ${PHMAP_GTEST_LIBS})
|
||||
|
||||
## --------------- btree -----------------------------------------------
|
||||
phmap_cc_test(NAME btree SRCS "tests/btree_test.cc"
|
||||
DEPS gmock_main)
|
||||
DEPS ${PHMAP_GTEST_LIBS})
|
||||
|
||||
|
||||
endif()
|
||||
|
||||
Vendored
+6
@@ -7,6 +7,9 @@ configure_file(
|
||||
${CMAKE_BINARY_DIR}/googletest-download/CMakeLists.txt
|
||||
)
|
||||
|
||||
set(PHMAP_SAVE_CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
|
||||
set(PHMAP_SAVE_CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
|
||||
|
||||
# Configure and build the downloaded googletest source
|
||||
execute_process(COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" .
|
||||
RESULT_VARIABLE result
|
||||
@@ -24,6 +27,9 @@ if(result)
|
||||
message(FATAL_ERROR "Build step for googletest failed: ${result}")
|
||||
endif()
|
||||
|
||||
set(CMAKE_CXX_FLAGS ${PHMAP_SAVE_CMAKE_CXX_FLAGS})
|
||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PHMAP_SAVE_CMAKE_RUNTIME_OUTPUT_DIRECTORY})
|
||||
|
||||
# Prevent overriding the parent project's compiler/linker settings on Windows
|
||||
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
|
||||
|
||||
|
||||
Vendored
+1
-2
@@ -15,8 +15,7 @@ function(phmap_cc_test)
|
||||
)
|
||||
|
||||
set(_NAME "test_${PHMAP_CC_TEST_NAME}")
|
||||
add_executable(${_NAME} "")
|
||||
target_sources(${_NAME} PRIVATE ${PHMAP_CC_TEST_SRCS})
|
||||
add_executable(${_NAME} ${PHMAP_CC_TEST_SRCS})
|
||||
target_include_directories(${_NAME}
|
||||
PUBLIC ${PHMAP_COMMON_INCLUDE_DIRS}
|
||||
PRIVATE ${GMOCK_INCLUDE_DIRS} ${GTEST_INCLUDE_DIRS}
|
||||
|
||||
Reference in New Issue
Block a user