brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.6 KiB · e514826 Raw
83 lines · plain
1# - Compile and run code to check for C++ features2#3# This functions compiles a source file under the `cmake` folder4# and adds the corresponding `HAVE_[FILENAME]` flag to the CMake5# environment6#7#  cxx_feature_check(<FLAG> [<VARIANT>])8#9# - Example10#11# include(CXXFeatureCheck)12# cxx_feature_check(STD_REGEX)13# Requires CMake 2.8.12+14 15if(__cxx_feature_check)16  return()17endif()18set(__cxx_feature_check INCLUDED)19 20option(CXXFEATURECHECK_DEBUG OFF)21 22function(cxx_feature_check FILE)23  string(TOLOWER ${FILE} FILE)24  string(TOUPPER ${FILE} VAR)25  string(TOUPPER "HAVE_${VAR}" FEATURE)26  if (DEFINED HAVE_${VAR})27    set(HAVE_${VAR} 1 PARENT_SCOPE)28    add_definitions(-DHAVE_${VAR})29    return()30  endif()31 32  set(FEATURE_CHECK_CMAKE_FLAGS ${BENCHMARK_CXX_LINKER_FLAGS})33  if (ARGC GREATER 1)34    message(STATUS "Enabling additional flags: ${ARGV1}")35    list(APPEND FEATURE_CHECK_CMAKE_FLAGS ${ARGV1})36  endif()37 38  if (NOT DEFINED COMPILE_${FEATURE})39    if(CMAKE_CROSSCOMPILING)40      message(STATUS "Cross-compiling to test ${FEATURE}")41      try_compile(COMPILE_${FEATURE}42              ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/cmake/${FILE}.cpp43              CXX_STANDARD 1144              CXX_STANDARD_REQUIRED ON45              CMAKE_FLAGS ${FEATURE_CHECK_CMAKE_FLAGS}46              LINK_LIBRARIES ${BENCHMARK_CXX_LIBRARIES}47              OUTPUT_VARIABLE COMPILE_OUTPUT_VAR)48      if(COMPILE_${FEATURE})49        message(WARNING50              "If you see build failures due to cross compilation, try setting HAVE_${VAR} to 0")51        set(RUN_${FEATURE} 0 CACHE INTERNAL "")52      else()53        set(RUN_${FEATURE} 1 CACHE INTERNAL "")54      endif()55    else()56      message(STATUS "Compiling and running to test ${FEATURE}")57      try_run(RUN_${FEATURE} COMPILE_${FEATURE}58              ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/cmake/${FILE}.cpp59              CXX_STANDARD 1160              CXX_STANDARD_REQUIRED ON61              CMAKE_FLAGS ${FEATURE_CHECK_CMAKE_FLAGS}62              LINK_LIBRARIES ${BENCHMARK_CXX_LIBRARIES}63              COMPILE_OUTPUT_VARIABLE COMPILE_OUTPUT_VAR)64    endif()65  endif()66 67  if(RUN_${FEATURE} EQUAL 0)68    message(STATUS "Performing Test ${FEATURE} -- success")69    set(HAVE_${VAR} 1 PARENT_SCOPE)70    add_definitions(-DHAVE_${VAR})71  else()72    if(NOT COMPILE_${FEATURE})73      if(CXXFEATURECHECK_DEBUG)74        message(STATUS "Performing Test ${FEATURE} -- failed to compile: ${COMPILE_OUTPUT_VAR}")75      else()76        message(STATUS "Performing Test ${FEATURE} -- failed to compile")77      endif()78    else()79      message(STATUS "Performing Test ${FEATURE} -- compiled but failed to run")80    endif()81  endif()82endfunction()83