From 6b9bead140676fa04d790a6d5e4625a2efb0cb27 Mon Sep 17 00:00:00 2001 From: Nicolas Morales Date: Fri, 14 Feb 2025 09:23:28 +0100 Subject: [PATCH 1/3] cmake: remove manual download for googletest and use fetchcontent instead --- cmake/googletest/CMakeLists.txt.in | 16 -------------- tests/CMakeLists.txt | 34 +++++++----------------------- 2 files changed, 8 insertions(+), 42 deletions(-) delete mode 100644 cmake/googletest/CMakeLists.txt.in diff --git a/cmake/googletest/CMakeLists.txt.in b/cmake/googletest/CMakeLists.txt.in deleted file mode 100644 index b25167b4..00000000 --- a/cmake/googletest/CMakeLists.txt.in +++ /dev/null @@ -1,16 +0,0 @@ -# from https://github.com/google/googletest/blob/master/googletest/README.md -cmake_minimum_required(VERSION 3.5) - -project(googletest-download NONE) - -include(ExternalProject) -ExternalProject_Add(googletest - GIT_REPOSITORY https://github.com/google/googletest.git - GIT_TAG main - SOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}/googletest-src" - BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/googletest-build" - CONFIGURE_COMMAND "" - BUILD_COMMAND "" - INSTALL_COMMAND "" - TEST_COMMAND "" -) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 14d61b2f..672d93cb 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -33,33 +33,15 @@ if(MDSPAN_USE_SYSTEM_GTEST) find_package(GTest CONFIG REQUIRED) add_library(gtest_main ALIAS GTest::gtest_main) else() - # adapted from https://github.com/google/googletest/blob/master/googletest/README.md - configure_file(${PROJECT_SOURCE_DIR}/cmake/googletest/CMakeLists.txt.in googletest-download/CMakeLists.txt) - execute_process(COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" . - RESULT_VARIABLE result - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/googletest-download - ) - if(result) - message(FATAL_ERROR "CMake step for googletest failed: ${result}") - endif() - execute_process(COMMAND ${CMAKE_COMMAND} --build . - RESULT_VARIABLE result - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/googletest-download - ) - if(result) - message(FATAL_ERROR "Build step for googletest failed: ${result}") - endif() - - # Prevent overriding the parent project's compiler/linker - # settings on Windows - set(gtest_force_shared_crt ON CACHE BOOL "" FORCE) - - # Add googletest directly to our build. This defines - # the gtest and gtest_main targets. - add_subdirectory(${CMAKE_CURRENT_BINARY_DIR}/googletest-src - ${CMAKE_CURRENT_BINARY_DIR}/googletest-build - EXCLUDE_FROM_ALL + include(FetchContent) + + fetchcontent_declare( + googletest + GIT_REPOSITORY https://github.com/google/googletest.git + GIT_TAG v1.16.0 ) + + fetchcontent_makeavailable(googletest) endif() # FIXME_MSVC From 920f2b9ab7b823cf68a388a438e283f0f0fe61cd Mon Sep 17 00:00:00 2001 From: Nicolas Morales Date: Fri, 14 Feb 2025 09:53:06 +0100 Subject: [PATCH 2/3] cmake: when linking googletest switch alias to fetchcontent side so that we use the namespaced target (and potentially avoid adding -lgtest_main to the command line) --- tests/CMakeLists.txt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 672d93cb..d10caa3a 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -20,7 +20,7 @@ function(mdspan_add_test name) set_source_files_properties(${name} PROPERTIES LANGUAGE ${MDSPAN_TEST_LANGUAGE}) endif() add_executable(${name} ${ARGUMENT_SOURCE}) - target_link_libraries(${name} mdspan gtest_main) + target_link_libraries(${name} mdspan GTest::gtest_main) add_test(${name} ${name}) set_property(TARGET ${name} PROPERTY COMPILE_WARNING_AS_ERROR ON) target_compile_definitions(${name} @@ -31,7 +31,6 @@ endfunction() if(MDSPAN_USE_SYSTEM_GTEST) find_package(GTest CONFIG REQUIRED) - add_library(gtest_main ALIAS GTest::gtest_main) else() include(FetchContent) @@ -42,6 +41,8 @@ else() ) fetchcontent_makeavailable(googletest) + + add_library(GTest::gtest_main ALIAS gtest_main) endif() # FIXME_MSVC From 03361cf3b2308ce98f5d570cd58375f218fef2bc Mon Sep 17 00:00:00 2001 From: Nicolas Morales Date: Fri, 14 Feb 2025 11:34:53 +0100 Subject: [PATCH 3/3] cmake: fix crt library on windows --- tests/CMakeLists.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index d10caa3a..201dac49 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -34,6 +34,9 @@ if(MDSPAN_USE_SYSTEM_GTEST) else() include(FetchContent) + if (MSVC) + set(gtest_force_shared_crt ON CACHE BOOL "" FORCE) + endif() fetchcontent_declare( googletest GIT_REPOSITORY https://github.com/google/googletest.git