diff --git a/CMakeLists.txt b/CMakeLists.txt index fa8c711..1bd1f0f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,10 +9,11 @@ project(phmap VERSION ${DETECTED_PHMAP_VERSION} LANGUAGES CXX) set(CMAKE_CXX_STANDARD 11) set(PHMAP_HEADERS phmap.h phmap_base.h phmap_bits.h phmap_utils.h phmap_config.h) set(PHMAP_DIR parallel_hashmap) -set(CMAKE_SUPPRESS_REGENERATION true) ## suppress ZERO_CHECK project +set(CMAKE_SUPPRESS_REGENERATION true) ## suppress ZERO_CHECK project include(GNUInstallDirs) include(CMakePackageConfigHelpers) +include(helpers) add_library(${PROJECT_NAME} INTERFACE) @@ -38,7 +39,31 @@ option(PHMAP_BUILD_TESTS "Whether or not to build the tests" OFF) option(PHMAP_BUILD_EXAMPLES "Whether or not to build the examples" OFF) if (PHMAP_BUILD_TESTS) - add_subdirectory(tests) + #add_subdirectory(tests) + include(cmake/DownloadGTest.cmake) + + check_target(gtest) + check_target(gtest_main) + check_target(gmock) + + list(APPEND ABSL_TEST_COMMON_LIBRARIES + gtest_main + gtest + gmock + ${CMAKE_THREAD_LIBS_INIT} + ) + +absl_cc_test( + NAME + flat_hash_set_test + SRCS + "tests/flat_hash_set_test.cc" + COPTS + "-DUNORDERED_SET_CXX17" + DEPS + gmock_main +) + endif() if (PHMAP_BUILD_EXAMPLES) diff --git a/cmake/helpers.cmake b/cmake/helpers.cmake new file mode 100644 index 0000000..b3053e0 --- /dev/null +++ b/cmake/helpers.cmake @@ -0,0 +1,57 @@ +#set_property(GLOBAL PROPERTY USE_FOLDERS ON) +set(ABSL_IDE_FOLDER Abseil) + +# absl_cc_test( +# NAME +# awesome_test +# SRCS +# "awesome_test.cc" +# DEPS +# absl::awesome +# gmock +# gtest_main +# ) +function(absl_cc_test) + cmake_parse_arguments(ABSL_CC_TEST + "" + "NAME" + "SRCS;COPTS;DEFINES;LINKOPTS;DEPS" + ${ARGN} + ) + + set(_NAME "absl_${ABSL_CC_TEST_NAME}") + add_executable(${_NAME} "") + target_sources(${_NAME} PRIVATE ${ABSL_CC_TEST_SRCS}) + target_include_directories(${_NAME} + PUBLIC ${ABSL_COMMON_INCLUDE_DIRS} + PRIVATE ${GMOCK_INCLUDE_DIRS} ${GTEST_INCLUDE_DIRS} + ) + target_compile_definitions(${_NAME} + PUBLIC ${ABSL_CC_TEST_DEFINES} + ) + target_compile_options(${_NAME} + PRIVATE ${ABSL_CC_TEST_COPTS} + ) + target_link_libraries(${_NAME} + PUBLIC ${ABSL_CC_TEST_DEPS} + PRIVATE ${ABSL_CC_TEST_LINKOPTS} + ) + # Add all Abseil targets to a a folder in the IDE for organization. + set_property(TARGET ${_NAME} PROPERTY FOLDER ${ABSL_IDE_FOLDER}/test) + + set_property(TARGET ${_NAME} PROPERTY CXX_STANDARD ${ABSL_CXX_STANDARD}) + set_property(TARGET ${_NAME} PROPERTY CXX_STANDARD_REQUIRED ON) + + add_test(NAME ${_NAME} COMMAND ${_NAME}) +endfunction() + + + +function(check_target my_target) + if(NOT TARGET ${my_target}) + message(FATAL_ERROR " ABSL: compiling absl requires a ${my_target} CMake target in your project, + see CMake/README.md for more details") + endif(NOT TARGET ${my_target}) +endfunction() + +