|
| 1 | + |
| 2 | +macro(split_list listname) |
| 3 | + string(REPLACE ";" " " ${listname} "${${listname}}") |
| 4 | +endmacro() |
| 5 | + |
| 6 | +macro(build_external_gtest) |
| 7 | + include(ExternalProject) |
| 8 | + set(GTEST_FLAGS "") |
| 9 | + if (BENCHMARK_USE_LIBCXX) |
| 10 | + if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") |
| 11 | + list(APPEND GTEST_FLAGS -stdlib=libc++) |
| 12 | + else() |
| 13 | + message(WARNING "Unsupported compiler (${CMAKE_CXX_COMPILER}) when using libc++") |
| 14 | + endif() |
| 15 | + endif() |
| 16 | + if (BENCHMARK_BUILD_32_BITS) |
| 17 | + list(APPEND GTEST_FLAGS -m32) |
| 18 | + endif() |
| 19 | + if (NOT "${CMAKE_CXX_FLAGS}" STREQUAL "") |
| 20 | + list(APPEND GTEST_FLAGS ${CMAKE_CXX_FLAGS}) |
| 21 | + endif() |
| 22 | + string(TOUPPER "${CMAKE_BUILD_TYPE}" GTEST_BUILD_TYPE) |
| 23 | + if ("${GTEST_BUILD_TYPE}" STREQUAL "COVERAGE") |
| 24 | + set(GTEST_BUILD_TYPE "DEBUG") |
| 25 | + endif() |
| 26 | + split_list(GTEST_FLAGS) |
| 27 | + ExternalProject_Add(googletest |
| 28 | + EXCLUDE_FROM_ALL ON |
| 29 | + GIT_REPOSITORY https://github.com/google/googletest.git |
| 30 | + GIT_TAG master |
| 31 | + PREFIX "${CMAKE_BINARY_DIR}/googletest" |
| 32 | + INSTALL_DIR "${CMAKE_BINARY_DIR}/googletest" |
| 33 | + CMAKE_CACHE_ARGS |
| 34 | + -DCMAKE_BUILD_TYPE:STRING=${GTEST_BUILD_TYPE} |
| 35 | + -DCMAKE_C_COMPILER:STRING=${CMAKE_C_COMPILER} |
| 36 | + -DCMAKE_CXX_COMPILER:STRING=${CMAKE_CXX_COMPILER} |
| 37 | + -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR> |
| 38 | + -DCMAKE_CXX_FLAGS:STRING=${GTEST_FLAGS} |
| 39 | + -Dgtest_force_shared_crt:BOOL=ON |
| 40 | + ) |
| 41 | + |
| 42 | + ExternalProject_Get_Property(googletest install_dir) |
| 43 | + |
| 44 | + add_library(gtest UNKNOWN IMPORTED) |
| 45 | + add_library(gtest_main UNKNOWN IMPORTED) |
| 46 | + |
| 47 | + set(LIB_SUFFIX "${CMAKE_STATIC_LIBRARY_SUFFIX}") |
| 48 | + set(LIB_PREFIX "${CMAKE_STATIC_LIBRARY_PREFIX}") |
| 49 | + |
| 50 | + if("${GTEST_BUILD_TYPE}" STREQUAL "DEBUG") |
| 51 | + set(LIB_SUFFIX "d${CMAKE_STATIC_LIBRARY_SUFFIX}") |
| 52 | + endif() |
| 53 | + file(MAKE_DIRECTORY ${install_dir}/include) |
| 54 | + set_target_properties(gtest PROPERTIES |
| 55 | + IMPORTED_LOCATION ${install_dir}/lib/${LIB_PREFIX}gtest${LIB_SUFFIX} |
| 56 | + INTERFACE_INCLUDE_DIRECTORIES ${install_dir}/include |
| 57 | + ) |
| 58 | + set_target_properties(gtest_main PROPERTIES |
| 59 | + IMPORTED_LOCATION ${install_dir}/lib/${LIB_PREFIX}gtest_main${LIB_SUFFIX} |
| 60 | + INTERFACE_INCLUDE_DIRECTORIES ${install_dir}/include |
| 61 | + ) |
| 62 | + add_dependencies(gtest googletest) |
| 63 | + add_dependencies(gtest_main googletest) |
| 64 | + set(GTEST_BOTH_LIBRARIES gtest gtest_main) |
| 65 | + #set(GTEST_INCLUDE_DIRS ${install_dir}/include) |
| 66 | +endmacro(build_external_gtest) |
| 67 | + |
| 68 | +if (BENCHMARK_ENABLE_GTEST_TESTS) |
| 69 | + if (IS_DIRECTORY ${CMAKE_SOURCE_DIR}/googletest) |
| 70 | + add_subdirectory(${CMAKE_SOURCE_DIR}/googletest) |
| 71 | + set(GTEST_BOTH_LIBRARIES gtest gtest_main) |
| 72 | + elseif(BENCHMARK_DOWNLOAD_DEPENDENCIES) |
| 73 | + build_external_gtest() |
| 74 | + else() |
| 75 | + find_package(GTest REQUIRED) |
| 76 | + endif() |
| 77 | +endif() |
0 commit comments