Home | History | Annotate | Download | only in cmake
      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