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() 78