Eric Fiselier | b08d8b1 | 2016-07-19 23:07:03 +0000 | [diff] [blame] | 1 | # - Compile and run code to check for C++ features |
| 2 | # |
| 3 | # This functions compiles a source file under the `cmake` folder |
| 4 | # and adds the corresponding `HAVE_[FILENAME]` flag to the CMake |
| 5 | # environment |
| 6 | # |
| 7 | # cxx_feature_check(<FLAG> [<VARIANT>]) |
| 8 | # |
| 9 | # - Example |
| 10 | # |
| 11 | # include(CXXFeatureCheck) |
| 12 | # cxx_feature_check(STD_REGEX) |
| 13 | # Requires CMake 2.6+ |
| 14 | |
| 15 | if(__cxx_feature_check) |
| 16 | return() |
| 17 | endif() |
| 18 | set(__cxx_feature_check INCLUDED) |
| 19 | |
| 20 | function(cxx_feature_check FILE) |
| 21 | string(TOLOWER ${FILE} FILE) |
| 22 | string(TOUPPER ${FILE} VAR) |
| 23 | string(TOUPPER "HAVE_${VAR}" FEATURE) |
| 24 | if (DEFINED HAVE_${VAR}) |
| 25 | return() |
| 26 | endif() |
| 27 | message("-- Performing Test ${FEATURE}") |
| 28 | try_run(RUN_${FEATURE} COMPILE_${FEATURE} |
Eric Fiselier | 4d5e91d | 2016-08-29 19:12:01 +0000 | [diff] [blame] | 29 | ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/cmake/${FILE}.cpp |
| 30 | CMAKE_FLAGS ${BENCHMARK_CXX_LINKER_FLAGS} |
| 31 | LINK_LIBRARIES ${BENCHMARK_CXX_LIBRARIES}) |
Eric Fiselier | b08d8b1 | 2016-07-19 23:07:03 +0000 | [diff] [blame] | 32 | if(RUN_${FEATURE} EQUAL 0) |
| 33 | message("-- Performing Test ${FEATURE} -- success") |
| 34 | set(HAVE_${VAR} 1 CACHE INTERNAL "Feature test for ${FILE}" PARENT_SCOPE) |
| 35 | add_definitions(-DHAVE_${VAR}) |
| 36 | else() |
| 37 | if(NOT COMPILE_${FEATURE}) |
| 38 | message("-- Performing Test ${FEATURE} -- failed to compile") |
| 39 | else() |
| 40 | message("-- Performing Test ${FEATURE} -- compiled but failed to run") |
| 41 | endif() |
| 42 | endif() |
| 43 | endfunction() |
| 44 | |