[InstCombine] Signed saturation patterns
[llvm-complete.git] / utils / benchmark / cmake / CXXFeatureCheck.cmake
blobc4c4d660f1eba1a484fcd2c2c11f7e94115ace31
1 # - Compile and run code to check for C++ features
3 # This functions compiles a source file under the `cmake` folder
4 # and adds the corresponding `HAVE_[FILENAME]` flag to the CMake
5 # environment
7 #  cxx_feature_check(<FLAG> [<VARIANT>])
9 # - Example
11 # include(CXXFeatureCheck)
12 # cxx_feature_check(STD_REGEX)
13 # Requires CMake 2.8.12+
15 if(__cxx_feature_check)
16   return()
17 endif()
18 set(__cxx_feature_check INCLUDED)
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     set(HAVE_${VAR} 1 PARENT_SCOPE)
26     add_definitions(-DHAVE_${VAR})
27     return()
28   endif()
30   if (NOT DEFINED COMPILE_${FEATURE})
31     message("-- Performing Test ${FEATURE}")
32     if(CMAKE_CROSSCOMPILING)
33       try_compile(COMPILE_${FEATURE}
34               ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/cmake/${FILE}.cpp
35               CMAKE_FLAGS ${BENCHMARK_CXX_LINKER_FLAGS}
36               LINK_LIBRARIES ${BENCHMARK_CXX_LIBRARIES})
37       if(COMPILE_${FEATURE})
38         message(WARNING
39               "If you see build failures due to cross compilation, try setting HAVE_${VAR} to 0")
40         set(RUN_${FEATURE} 0)
41       else()
42         set(RUN_${FEATURE} 1)
43       endif()
44     else()
45       message("-- Performing Test ${FEATURE}")
46       try_run(RUN_${FEATURE} COMPILE_${FEATURE}
47               ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/cmake/${FILE}.cpp
48               CMAKE_FLAGS ${BENCHMARK_CXX_LINKER_FLAGS}
49               LINK_LIBRARIES ${BENCHMARK_CXX_LIBRARIES})
50     endif()
51   endif()
53   if(RUN_${FEATURE} EQUAL 0)
54     message("-- Performing Test ${FEATURE} -- success")
55     set(HAVE_${VAR} 1 PARENT_SCOPE)
56     add_definitions(-DHAVE_${VAR})
57   else()
58     if(NOT COMPILE_${FEATURE})
59       message("-- Performing Test ${FEATURE} -- failed to compile")
60     else()
61       message("-- Performing Test ${FEATURE} -- compiled but failed to run")
62     endif()
63   endif()
64 endfunction()