Eric Fiselier | 688edc7 | 2017-04-18 07:17:20 +0000 | [diff] [blame] | 1 | cmake_minimum_required (VERSION 2.8.12) |
Eric Fiselier | fd2e3e9 | 2018-01-18 04:23:01 +0000 | [diff] [blame] | 2 | |
Eric Fiselier | d9b9ef7 | 2016-07-19 23:07:03 +0000 | [diff] [blame] | 3 | project (benchmark) |
| 4 | |
| 5 | foreach(p |
| 6 | CMP0054 # CMake 3.1 |
| 7 | CMP0056 # export EXE_LINKER_FLAGS to try_run |
Eric Fiselier | fd2e3e9 | 2018-01-18 04:23:01 +0000 | [diff] [blame] | 8 | CMP0057 # Support no if() IN_LIST operator |
Eric Fiselier | d9b9ef7 | 2016-07-19 23:07:03 +0000 | [diff] [blame] | 9 | ) |
| 10 | if(POLICY ${p}) |
| 11 | cmake_policy(SET ${p} NEW) |
| 12 | endif() |
| 13 | endforeach() |
| 14 | |
| 15 | option(BENCHMARK_ENABLE_TESTING "Enable testing of the benchmark library." ON) |
Eric Fiselier | 688edc7 | 2017-04-18 07:17:20 +0000 | [diff] [blame] | 16 | option(BENCHMARK_ENABLE_EXCEPTIONS "Enable the use of exceptions in the benchmark library." ON) |
Eric Fiselier | d9b9ef7 | 2016-07-19 23:07:03 +0000 | [diff] [blame] | 17 | option(BENCHMARK_ENABLE_LTO "Enable link time optimisation of the benchmark library." OFF) |
Eric Fiselier | f76a087 | 2016-08-29 19:12:01 +0000 | [diff] [blame] | 18 | option(BENCHMARK_USE_LIBCXX "Build and test using libc++ as the standard library." OFF) |
Eric Fiselier | 622fc11 | 2018-11-15 19:22:53 +0000 | [diff] [blame] | 19 | if(NOT MSVC) |
| 20 | option(BENCHMARK_BUILD_32_BITS "Build a 32 bit version of the library." OFF) |
| 21 | else() |
| 22 | set(BENCHMARK_BUILD_32_BITS OFF CACHE BOOL "Build a 32 bit version of the library - unsupported when using MSVC)" FORCE) |
| 23 | endif() |
Eric Fiselier | fd2e3e9 | 2018-01-18 04:23:01 +0000 | [diff] [blame] | 24 | option(BENCHMARK_ENABLE_INSTALL "Enable installation of benchmark. (Projects embedding benchmark may want to turn this OFF.)" ON) |
| 25 | |
| 26 | # Allow unmet dependencies to be met using CMake's ExternalProject mechanics, which |
| 27 | # may require downloading the source code. |
| 28 | option(BENCHMARK_DOWNLOAD_DEPENDENCIES "Allow the downloading and in-tree building of unmet dependencies" OFF) |
| 29 | |
| 30 | # This option can be used to disable building and running unit tests which depend on gtest |
| 31 | # in cases where it is not possible to build or find a valid version of gtest. |
| 32 | option(BENCHMARK_ENABLE_GTEST_TESTS "Enable building the unit tests which depend on gtest" ON) |
Eric Fiselier | 688edc7 | 2017-04-18 07:17:20 +0000 | [diff] [blame] | 33 | |
Eric Fiselier | ffc31db | 2018-07-10 04:02:00 +0000 | [diff] [blame] | 34 | set(ENABLE_ASSEMBLY_TESTS_DEFAULT OFF) |
| 35 | function(should_enable_assembly_tests) |
| 36 | if(CMAKE_BUILD_TYPE) |
| 37 | string(TOLOWER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE_LOWER) |
| 38 | if (${CMAKE_BUILD_TYPE_LOWER} MATCHES "coverage") |
| 39 | # FIXME: The --coverage flag needs to be removed when building assembly |
| 40 | # tests for this to work. |
| 41 | return() |
| 42 | endif() |
| 43 | endif() |
| 44 | if (MSVC) |
| 45 | return() |
| 46 | elseif(NOT CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64") |
| 47 | return() |
| 48 | elseif(NOT CMAKE_SIZEOF_VOID_P EQUAL 8) |
| 49 | # FIXME: Make these work on 32 bit builds |
| 50 | return() |
| 51 | elseif(BENCHMARK_BUILD_32_BITS) |
| 52 | # FIXME: Make these work on 32 bit builds |
| 53 | return() |
| 54 | endif() |
| 55 | find_program(LLVM_FILECHECK_EXE FileCheck) |
| 56 | if (LLVM_FILECHECK_EXE) |
| 57 | set(LLVM_FILECHECK_EXE "${LLVM_FILECHECK_EXE}" CACHE PATH "llvm filecheck" FORCE) |
| 58 | message(STATUS "LLVM FileCheck Found: ${LLVM_FILECHECK_EXE}") |
| 59 | else() |
| 60 | message(STATUS "Failed to find LLVM FileCheck") |
| 61 | return() |
| 62 | endif() |
| 63 | set(ENABLE_ASSEMBLY_TESTS_DEFAULT ON PARENT_SCOPE) |
| 64 | endfunction() |
| 65 | should_enable_assembly_tests() |
| 66 | |
| 67 | # This option disables the building and running of the assembly verification tests |
| 68 | option(BENCHMARK_ENABLE_ASSEMBLY_TESTS "Enable building and running the assembly tests" |
| 69 | ${ENABLE_ASSEMBLY_TESTS_DEFAULT}) |
| 70 | |
Eric Fiselier | d9b9ef7 | 2016-07-19 23:07:03 +0000 | [diff] [blame] | 71 | # Make sure we can import out CMake functions |
Eric Fiselier | fd2e3e9 | 2018-01-18 04:23:01 +0000 | [diff] [blame] | 72 | list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules") |
Eric Fiselier | d9b9ef7 | 2016-07-19 23:07:03 +0000 | [diff] [blame] | 73 | list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") |
| 74 | |
Eric Fiselier | ffc31db | 2018-07-10 04:02:00 +0000 | [diff] [blame] | 75 | |
Eric Fiselier | d9b9ef7 | 2016-07-19 23:07:03 +0000 | [diff] [blame] | 76 | # Read the git tags to determine the project version |
| 77 | include(GetGitVersion) |
| 78 | get_git_version(GIT_VERSION) |
| 79 | |
| 80 | # Tell the user what versions we are using |
| 81 | string(REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]+" VERSION ${GIT_VERSION}) |
Eric Fiselier | 622fc11 | 2018-11-15 19:22:53 +0000 | [diff] [blame] | 82 | message(STATUS "Version: ${VERSION}") |
Eric Fiselier | d9b9ef7 | 2016-07-19 23:07:03 +0000 | [diff] [blame] | 83 | |
| 84 | # The version of the libraries |
| 85 | set(GENERIC_LIB_VERSION ${VERSION}) |
| 86 | string(SUBSTRING ${VERSION} 0 1 GENERIC_LIB_SOVERSION) |
| 87 | |
| 88 | # Import our CMake modules |
| 89 | include(CheckCXXCompilerFlag) |
| 90 | include(AddCXXCompilerFlag) |
| 91 | include(CXXFeatureCheck) |
| 92 | |
Eric Fiselier | 688edc7 | 2017-04-18 07:17:20 +0000 | [diff] [blame] | 93 | if (BENCHMARK_BUILD_32_BITS) |
| 94 | add_required_cxx_compiler_flag(-m32) |
| 95 | endif() |
| 96 | |
Eric Fiselier | 622fc11 | 2018-11-15 19:22:53 +0000 | [diff] [blame] | 97 | if (MSVC) |
Eric Fiselier | d9b9ef7 | 2016-07-19 23:07:03 +0000 | [diff] [blame] | 98 | # Turn compiler warnings up to 11 |
| 99 | string(REGEX REPLACE "[-/]W[1-4]" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") |
| 100 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4") |
| 101 | add_definitions(-D_CRT_SECURE_NO_WARNINGS) |
| 102 | |
Eric Fiselier | 688edc7 | 2017-04-18 07:17:20 +0000 | [diff] [blame] | 103 | if (NOT BENCHMARK_ENABLE_EXCEPTIONS) |
| 104 | add_cxx_compiler_flag(-EHs-) |
| 105 | add_cxx_compiler_flag(-EHa-) |
Eric Fiselier | 622fc11 | 2018-11-15 19:22:53 +0000 | [diff] [blame] | 106 | add_definitions(-D_HAS_EXCEPTIONS=0) |
Eric Fiselier | 688edc7 | 2017-04-18 07:17:20 +0000 | [diff] [blame] | 107 | endif() |
Eric Fiselier | d9b9ef7 | 2016-07-19 23:07:03 +0000 | [diff] [blame] | 108 | # Link time optimisation |
| 109 | if (BENCHMARK_ENABLE_LTO) |
| 110 | set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /GL") |
| 111 | set(CMAKE_STATIC_LINKER_FLAGS_RELEASE "${CMAKE_STATIC_LINKER_FLAGS_RELEASE} /LTCG") |
| 112 | set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /LTCG") |
| 113 | set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /LTCG") |
| 114 | |
| 115 | set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /GL") |
| 116 | string(REGEX REPLACE "[-/]INCREMENTAL" "/INCREMENTAL:NO" CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO}") |
| 117 | set(CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO} /LTCG") |
| 118 | string(REGEX REPLACE "[-/]INCREMENTAL" "/INCREMENTAL:NO" CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO}") |
| 119 | set(CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO} /LTCG") |
| 120 | string(REGEX REPLACE "[-/]INCREMENTAL" "/INCREMENTAL:NO" CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO}") |
| 121 | set(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO} /LTCG") |
| 122 | |
| 123 | set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} /GL") |
| 124 | set(CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL "${CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL} /LTCG") |
| 125 | set(CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL "${CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL} /LTCG") |
| 126 | set(CMAKE_EXE_LINKER_FLAGS_MINSIZEREL "${CMAKE_EXE_LINKER_FLAGS_MINSIZEREL} /LTCG") |
| 127 | endif() |
| 128 | else() |
| 129 | # Try and enable C++11. Don't use C++14 because it doesn't work in some |
| 130 | # configurations. |
| 131 | add_cxx_compiler_flag(-std=c++11) |
| 132 | if (NOT HAVE_CXX_FLAG_STD_CXX11) |
| 133 | add_cxx_compiler_flag(-std=c++0x) |
| 134 | endif() |
| 135 | |
| 136 | # Turn compiler warnings up to 11 |
| 137 | add_cxx_compiler_flag(-Wall) |
Eric Fiselier | d9b9ef7 | 2016-07-19 23:07:03 +0000 | [diff] [blame] | 138 | add_cxx_compiler_flag(-Wextra) |
| 139 | add_cxx_compiler_flag(-Wshadow) |
| 140 | add_cxx_compiler_flag(-Werror RELEASE) |
| 141 | add_cxx_compiler_flag(-Werror RELWITHDEBINFO) |
| 142 | add_cxx_compiler_flag(-Werror MINSIZEREL) |
| 143 | add_cxx_compiler_flag(-pedantic) |
| 144 | add_cxx_compiler_flag(-pedantic-errors) |
| 145 | add_cxx_compiler_flag(-Wshorten-64-to-32) |
Eric Fiselier | d9b9ef7 | 2016-07-19 23:07:03 +0000 | [diff] [blame] | 146 | add_cxx_compiler_flag(-fstrict-aliasing) |
Eric Fiselier | ffc31db | 2018-07-10 04:02:00 +0000 | [diff] [blame] | 147 | # Disable warnings regarding deprecated parts of the library while building |
| 148 | # and testing those parts of the library. |
| 149 | add_cxx_compiler_flag(-Wno-deprecated-declarations) |
| 150 | if (CMAKE_CXX_COMPILER_ID STREQUAL "Intel") |
| 151 | # Intel silently ignores '-Wno-deprecated-declarations', |
| 152 | # warning no. 1786 must be explicitly disabled. |
| 153 | # See #631 for rationale. |
| 154 | add_cxx_compiler_flag(-wd1786) |
| 155 | endif() |
| 156 | # Disable deprecation warnings for release builds (when -Werror is enabled). |
| 157 | add_cxx_compiler_flag(-Wno-deprecated RELEASE) |
| 158 | add_cxx_compiler_flag(-Wno-deprecated RELWITHDEBINFO) |
| 159 | add_cxx_compiler_flag(-Wno-deprecated MINSIZEREL) |
Eric Fiselier | 688edc7 | 2017-04-18 07:17:20 +0000 | [diff] [blame] | 160 | if (NOT BENCHMARK_ENABLE_EXCEPTIONS) |
| 161 | add_cxx_compiler_flag(-fno-exceptions) |
| 162 | endif() |
Eric Fiselier | fd2e3e9 | 2018-01-18 04:23:01 +0000 | [diff] [blame] | 163 | |
Eric Fiselier | d9b9ef7 | 2016-07-19 23:07:03 +0000 | [diff] [blame] | 164 | if (HAVE_CXX_FLAG_FSTRICT_ALIASING) |
Eric Fiselier | 688edc7 | 2017-04-18 07:17:20 +0000 | [diff] [blame] | 165 | if (NOT CMAKE_CXX_COMPILER_ID STREQUAL "Intel") #ICC17u2: Many false positives for Wstrict-aliasing |
| 166 | add_cxx_compiler_flag(-Wstrict-aliasing) |
| 167 | endif() |
Eric Fiselier | d9b9ef7 | 2016-07-19 23:07:03 +0000 | [diff] [blame] | 168 | endif() |
Eric Fiselier | 688edc7 | 2017-04-18 07:17:20 +0000 | [diff] [blame] | 169 | # ICC17u2: overloaded virtual function "benchmark::Fixture::SetUp" is only partially overridden |
| 170 | # (because of deprecated overload) |
Eric Fiselier | 622fc11 | 2018-11-15 19:22:53 +0000 | [diff] [blame] | 171 | add_cxx_compiler_flag(-wd654) |
Eric Fiselier | d9b9ef7 | 2016-07-19 23:07:03 +0000 | [diff] [blame] | 172 | add_cxx_compiler_flag(-Wthread-safety) |
Eric Fiselier | d87eb99 | 2016-11-05 00:30:27 +0000 | [diff] [blame] | 173 | if (HAVE_CXX_FLAG_WTHREAD_SAFETY) |
Eric Fiselier | d9b9ef7 | 2016-07-19 23:07:03 +0000 | [diff] [blame] | 174 | cxx_feature_check(THREAD_SAFETY_ATTRIBUTES) |
| 175 | endif() |
| 176 | |
Eric Fiselier | d87eb99 | 2016-11-05 00:30:27 +0000 | [diff] [blame] | 177 | # On most UNIX like platforms g++ and clang++ define _GNU_SOURCE as a |
| 178 | # predefined macro, which turns on all of the wonderful libc extensions. |
| 179 | # However g++ doesn't do this in Cygwin so we have to define it ourselfs |
| 180 | # since we depend on GNU/POSIX/BSD extensions. |
| 181 | if (CYGWIN) |
| 182 | add_definitions(-D_GNU_SOURCE=1) |
| 183 | endif() |
| 184 | |
Eric Fiselier | d9b9ef7 | 2016-07-19 23:07:03 +0000 | [diff] [blame] | 185 | # Link time optimisation |
| 186 | if (BENCHMARK_ENABLE_LTO) |
| 187 | add_cxx_compiler_flag(-flto) |
| 188 | if ("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU") |
| 189 | find_program(GCC_AR gcc-ar) |
| 190 | if (GCC_AR) |
| 191 | set(CMAKE_AR ${GCC_AR}) |
| 192 | endif() |
| 193 | find_program(GCC_RANLIB gcc-ranlib) |
| 194 | if (GCC_RANLIB) |
| 195 | set(CMAKE_RANLIB ${GCC_RANLIB}) |
| 196 | endif() |
Eric Fiselier | 622fc11 | 2018-11-15 19:22:53 +0000 | [diff] [blame] | 197 | elseif("${CMAKE_C_COMPILER_ID}" MATCHES "Clang") |
Eric Fiselier | fd2e3e9 | 2018-01-18 04:23:01 +0000 | [diff] [blame] | 198 | include(llvm-toolchain) |
Eric Fiselier | d9b9ef7 | 2016-07-19 23:07:03 +0000 | [diff] [blame] | 199 | endif() |
| 200 | endif() |
| 201 | |
| 202 | # Coverage build type |
Eric Fiselier | fd2e3e9 | 2018-01-18 04:23:01 +0000 | [diff] [blame] | 203 | set(BENCHMARK_CXX_FLAGS_COVERAGE "${CMAKE_CXX_FLAGS_DEBUG}" |
| 204 | CACHE STRING "Flags used by the C++ compiler during coverage builds." |
Eric Fiselier | d9b9ef7 | 2016-07-19 23:07:03 +0000 | [diff] [blame] | 205 | FORCE) |
Eric Fiselier | fd2e3e9 | 2018-01-18 04:23:01 +0000 | [diff] [blame] | 206 | set(BENCHMARK_EXE_LINKER_FLAGS_COVERAGE "${CMAKE_EXE_LINKER_FLAGS_DEBUG}" |
| 207 | CACHE STRING "Flags used for linking binaries during coverage builds." |
Eric Fiselier | d9b9ef7 | 2016-07-19 23:07:03 +0000 | [diff] [blame] | 208 | FORCE) |
Eric Fiselier | fd2e3e9 | 2018-01-18 04:23:01 +0000 | [diff] [blame] | 209 | set(BENCHMARK_SHARED_LINKER_FLAGS_COVERAGE "${CMAKE_SHARED_LINKER_FLAGS_DEBUG}" |
| 210 | CACHE STRING "Flags used by the shared libraries linker during coverage builds." |
Eric Fiselier | d9b9ef7 | 2016-07-19 23:07:03 +0000 | [diff] [blame] | 211 | FORCE) |
| 212 | mark_as_advanced( |
Eric Fiselier | fd2e3e9 | 2018-01-18 04:23:01 +0000 | [diff] [blame] | 213 | BENCHMARK_CXX_FLAGS_COVERAGE |
| 214 | BENCHMARK_EXE_LINKER_FLAGS_COVERAGE |
| 215 | BENCHMARK_SHARED_LINKER_FLAGS_COVERAGE) |
Eric Fiselier | d9b9ef7 | 2016-07-19 23:07:03 +0000 | [diff] [blame] | 216 | set(CMAKE_BUILD_TYPE "${CMAKE_BUILD_TYPE}" CACHE STRING |
Eric Fiselier | fd2e3e9 | 2018-01-18 04:23:01 +0000 | [diff] [blame] | 217 | "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel Coverage.") |
Eric Fiselier | d9b9ef7 | 2016-07-19 23:07:03 +0000 | [diff] [blame] | 218 | add_cxx_compiler_flag(--coverage COVERAGE) |
| 219 | endif() |
| 220 | |
Eric Fiselier | f76a087 | 2016-08-29 19:12:01 +0000 | [diff] [blame] | 221 | if (BENCHMARK_USE_LIBCXX) |
Eric Fiselier | 622fc11 | 2018-11-15 19:22:53 +0000 | [diff] [blame] | 222 | if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") |
Eric Fiselier | f76a087 | 2016-08-29 19:12:01 +0000 | [diff] [blame] | 223 | add_cxx_compiler_flag(-stdlib=libc++) |
| 224 | elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR |
| 225 | "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel") |
| 226 | add_cxx_compiler_flag(-nostdinc++) |
Eric Fiselier | 622fc11 | 2018-11-15 19:22:53 +0000 | [diff] [blame] | 227 | message(WARNING "libc++ header path must be manually specified using CMAKE_CXX_FLAGS") |
Eric Fiselier | f76a087 | 2016-08-29 19:12:01 +0000 | [diff] [blame] | 228 | # Adding -nodefaultlibs directly to CMAKE_<TYPE>_LINKER_FLAGS will break |
| 229 | # configuration checks such as 'find_package(Threads)' |
| 230 | list(APPEND BENCHMARK_CXX_LINKER_FLAGS -nodefaultlibs) |
| 231 | # -lc++ cannot be added directly to CMAKE_<TYPE>_LINKER_FLAGS because |
| 232 | # linker flags appear before all linker inputs and -lc++ must appear after. |
| 233 | list(APPEND BENCHMARK_CXX_LIBRARIES c++) |
| 234 | else() |
Eric Fiselier | ffc31db | 2018-07-10 04:02:00 +0000 | [diff] [blame] | 235 | message(FATAL_ERROR "-DBENCHMARK_USE_LIBCXX:BOOL=ON is not supported for compiler") |
Eric Fiselier | f76a087 | 2016-08-29 19:12:01 +0000 | [diff] [blame] | 236 | endif() |
| 237 | endif(BENCHMARK_USE_LIBCXX) |
| 238 | |
Eric Fiselier | d9b9ef7 | 2016-07-19 23:07:03 +0000 | [diff] [blame] | 239 | # C++ feature checks |
Eric Fiselier | d87eb99 | 2016-11-05 00:30:27 +0000 | [diff] [blame] | 240 | # Determine the correct regular expression engine to use |
Eric Fiselier | d9b9ef7 | 2016-07-19 23:07:03 +0000 | [diff] [blame] | 241 | cxx_feature_check(STD_REGEX) |
| 242 | cxx_feature_check(GNU_POSIX_REGEX) |
| 243 | cxx_feature_check(POSIX_REGEX) |
Eric Fiselier | d87eb99 | 2016-11-05 00:30:27 +0000 | [diff] [blame] | 244 | if(NOT HAVE_STD_REGEX AND NOT HAVE_GNU_POSIX_REGEX AND NOT HAVE_POSIX_REGEX) |
| 245 | message(FATAL_ERROR "Failed to determine the source files for the regular expression backend") |
| 246 | endif() |
Eric Fiselier | 688edc7 | 2017-04-18 07:17:20 +0000 | [diff] [blame] | 247 | if (NOT BENCHMARK_ENABLE_EXCEPTIONS AND HAVE_STD_REGEX |
| 248 | AND NOT HAVE_GNU_POSIX_REGEX AND NOT HAVE_POSIX_REGEX) |
| 249 | message(WARNING "Using std::regex with exceptions disabled is not fully supported") |
| 250 | endif() |
Eric Fiselier | d87eb99 | 2016-11-05 00:30:27 +0000 | [diff] [blame] | 251 | cxx_feature_check(STEADY_CLOCK) |
Eric Fiselier | d9b9ef7 | 2016-07-19 23:07:03 +0000 | [diff] [blame] | 252 | # Ensure we have pthreads |
| 253 | find_package(Threads REQUIRED) |
| 254 | |
| 255 | # Set up directories |
| 256 | include_directories(${PROJECT_SOURCE_DIR}/include) |
| 257 | |
| 258 | # Build the targets |
| 259 | add_subdirectory(src) |
| 260 | |
| 261 | if (BENCHMARK_ENABLE_TESTING) |
| 262 | enable_testing() |
Eric Fiselier | fd2e3e9 | 2018-01-18 04:23:01 +0000 | [diff] [blame] | 263 | if (BENCHMARK_ENABLE_GTEST_TESTS) |
| 264 | include(HandleGTest) |
| 265 | endif() |
Eric Fiselier | d9b9ef7 | 2016-07-19 23:07:03 +0000 | [diff] [blame] | 266 | add_subdirectory(test) |
| 267 | endif() |