Unverified Commit 01c0ab7c by Jeremy Ong Committed by GitHub

Fix Clang builds on Windows (#1021)

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.
parent 48579623
...@@ -245,11 +245,17 @@ if (BENCHMARK_USE_LIBCXX) ...@@ -245,11 +245,17 @@ if (BENCHMARK_USE_LIBCXX)
endif() endif()
endif(BENCHMARK_USE_LIBCXX) endif(BENCHMARK_USE_LIBCXX)
set(EXTRA_CXX_FLAGS "")
if (WIN32 AND "${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")
# Clang on Windows fails to compile the regex feature check under C++11
set(EXTRA_CXX_FLAGS "-DCMAKE_CXX_STANDARD=14")
endif()
# C++ feature checks # C++ feature checks
# Determine the correct regular expression engine to use # Determine the correct regular expression engine to use
cxx_feature_check(STD_REGEX) cxx_feature_check(STD_REGEX ${EXTRA_CXX_FLAGS})
cxx_feature_check(GNU_POSIX_REGEX) cxx_feature_check(GNU_POSIX_REGEX ${EXTRA_CXX_FLAGS})
cxx_feature_check(POSIX_REGEX) cxx_feature_check(POSIX_REGEX ${EXTRA_CXX_FLAGS})
if(NOT HAVE_STD_REGEX AND NOT HAVE_GNU_POSIX_REGEX AND NOT HAVE_POSIX_REGEX) if(NOT HAVE_STD_REGEX AND NOT HAVE_GNU_POSIX_REGEX AND NOT HAVE_POSIX_REGEX)
message(FATAL_ERROR "Failed to determine the source files for the regular expression backend") message(FATAL_ERROR "Failed to determine the source files for the regular expression backend")
endif() endif()
...@@ -257,6 +263,7 @@ if (NOT BENCHMARK_ENABLE_EXCEPTIONS AND HAVE_STD_REGEX ...@@ -257,6 +263,7 @@ if (NOT BENCHMARK_ENABLE_EXCEPTIONS AND HAVE_STD_REGEX
AND NOT HAVE_GNU_POSIX_REGEX AND NOT HAVE_POSIX_REGEX) AND NOT HAVE_GNU_POSIX_REGEX AND NOT HAVE_POSIX_REGEX)
message(WARNING "Using std::regex with exceptions disabled is not fully supported") message(WARNING "Using std::regex with exceptions disabled is not fully supported")
endif() endif()
cxx_feature_check(STEADY_CLOCK) cxx_feature_check(STEADY_CLOCK)
# Ensure we have pthreads # Ensure we have pthreads
set(THREADS_PREFER_PTHREAD_FLAG ON) set(THREADS_PREFER_PTHREAD_FLAG ON)
......
...@@ -27,6 +27,11 @@ function(cxx_feature_check FILE) ...@@ -27,6 +27,11 @@ function(cxx_feature_check FILE)
return() return()
endif() endif()
if (ARGC GREATER 1)
message(STATUS "Enabling additional flags: ${ARGV1}")
list(APPEND BENCHMARK_CXX_LINKER_FLAGS ${ARGV1})
endif()
if (NOT DEFINED COMPILE_${FEATURE}) if (NOT DEFINED COMPILE_${FEATURE})
message(STATUS "Performing Test ${FEATURE}") message(STATUS "Performing Test ${FEATURE}")
if(CMAKE_CROSSCOMPILING) if(CMAKE_CROSSCOMPILING)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment