mirror of
https://github.com/google/benchmark.git
synced 2024-12-27 13:00:36 +08:00
01c0ab7cbb
Fixes #974. The `cxx_feature_check` now has an additional optional argument which can be used to supply extra cmake flags to pass to the `try_compile` command. The `CMAKE_CXX_STANDARD=14` flag was determined to be the minimum flag necessary to correctly compile and run the regex feature checks when compiling with Clang under Windows (n.b. this does *not* refer to clang-cl, the frontend to the MSVC compiler). The additional flag is not enabled for any other compiler/platform tuple.
70 lines
2.1 KiB
CMake
70 lines
2.1 KiB
CMake
# - Compile and run code to check for C++ features
|
|
#
|
|
# This functions compiles a source file under the `cmake` folder
|
|
# and adds the corresponding `HAVE_[FILENAME]` flag to the CMake
|
|
# environment
|
|
#
|
|
# cxx_feature_check(<FLAG> [<VARIANT>])
|
|
#
|
|
# - Example
|
|
#
|
|
# include(CXXFeatureCheck)
|
|
# cxx_feature_check(STD_REGEX)
|
|
# Requires CMake 2.8.12+
|
|
|
|
if(__cxx_feature_check)
|
|
return()
|
|
endif()
|
|
set(__cxx_feature_check INCLUDED)
|
|
|
|
function(cxx_feature_check FILE)
|
|
string(TOLOWER ${FILE} FILE)
|
|
string(TOUPPER ${FILE} VAR)
|
|
string(TOUPPER "HAVE_${VAR}" FEATURE)
|
|
if (DEFINED HAVE_${VAR})
|
|
set(HAVE_${VAR} 1 PARENT_SCOPE)
|
|
add_definitions(-DHAVE_${VAR})
|
|
return()
|
|
endif()
|
|
|
|
if (ARGC GREATER 1)
|
|
message(STATUS "Enabling additional flags: ${ARGV1}")
|
|
list(APPEND BENCHMARK_CXX_LINKER_FLAGS ${ARGV1})
|
|
endif()
|
|
|
|
if (NOT DEFINED COMPILE_${FEATURE})
|
|
message(STATUS "Performing Test ${FEATURE}")
|
|
if(CMAKE_CROSSCOMPILING)
|
|
try_compile(COMPILE_${FEATURE}
|
|
${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/cmake/${FILE}.cpp
|
|
CMAKE_FLAGS ${BENCHMARK_CXX_LINKER_FLAGS}
|
|
LINK_LIBRARIES ${BENCHMARK_CXX_LIBRARIES})
|
|
if(COMPILE_${FEATURE})
|
|
message(WARNING
|
|
"If you see build failures due to cross compilation, try setting HAVE_${VAR} to 0")
|
|
set(RUN_${FEATURE} 0 CACHE INTERNAL "")
|
|
else()
|
|
set(RUN_${FEATURE} 1 CACHE INTERNAL "")
|
|
endif()
|
|
else()
|
|
message(STATUS "Performing Test ${FEATURE}")
|
|
try_run(RUN_${FEATURE} COMPILE_${FEATURE}
|
|
${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/cmake/${FILE}.cpp
|
|
CMAKE_FLAGS ${BENCHMARK_CXX_LINKER_FLAGS}
|
|
LINK_LIBRARIES ${BENCHMARK_CXX_LIBRARIES})
|
|
endif()
|
|
endif()
|
|
|
|
if(RUN_${FEATURE} EQUAL 0)
|
|
message(STATUS "Performing Test ${FEATURE} -- success")
|
|
set(HAVE_${VAR} 1 PARENT_SCOPE)
|
|
add_definitions(-DHAVE_${VAR})
|
|
else()
|
|
if(NOT COMPILE_${FEATURE})
|
|
message(STATUS "Performing Test ${FEATURE} -- failed to compile")
|
|
else()
|
|
message(STATUS "Performing Test ${FEATURE} -- compiled but failed to run")
|
|
endif()
|
|
endif()
|
|
endfunction()
|