xref: /aosp_15_r20/external/libopus/cmake/CFeatureCheck.cmake (revision a58d3d2adb790c104798cd88c8a3aff4fa8b82cc)
1*a58d3d2aSXin Li# - Compile and run code to check for C features
2*a58d3d2aSXin Li#
3*a58d3d2aSXin Li# This functions compiles a source file under the `cmake` folder
4*a58d3d2aSXin Li# and adds the corresponding `HAVE_[FILENAME]` flag to the CMake
5*a58d3d2aSXin Li# environment
6*a58d3d2aSXin Li#
7*a58d3d2aSXin Li#  c_feature_check(<FLAG> [<VARIANT>])
8*a58d3d2aSXin Li#
9*a58d3d2aSXin Li# - Example
10*a58d3d2aSXin Li#
11*a58d3d2aSXin Li# include(CFeatureCheck)
12*a58d3d2aSXin Li# c_feature_check(VLA)
13*a58d3d2aSXin Li
14*a58d3d2aSXin Liif(__c_feature_check)
15*a58d3d2aSXin Li  return()
16*a58d3d2aSXin Liendif()
17*a58d3d2aSXin Liset(__c_feature_check INCLUDED)
18*a58d3d2aSXin Li
19*a58d3d2aSXin Lifunction(c_feature_check FILE)
20*a58d3d2aSXin Li  string(TOLOWER ${FILE} FILE)
21*a58d3d2aSXin Li  string(TOUPPER ${FILE} VAR)
22*a58d3d2aSXin Li  string(TOUPPER "${VAR}_SUPPORTED" FEATURE)
23*a58d3d2aSXin Li  if (DEFINED ${VAR}_SUPPORTED)
24*a58d3d2aSXin Li    set(${VAR}_SUPPORTED 1 PARENT_SCOPE)
25*a58d3d2aSXin Li    return()
26*a58d3d2aSXin Li  endif()
27*a58d3d2aSXin Li
28*a58d3d2aSXin Li  if (NOT DEFINED COMPILE_${FEATURE})
29*a58d3d2aSXin Li      message(STATUS "Performing Test ${FEATURE}")
30*a58d3d2aSXin Li      try_compile(COMPILE_${FEATURE} ${PROJECT_BINARY_DIR} ${PROJECT_SOURCE_DIR}/cmake/${FILE}.c)
31*a58d3d2aSXin Li  endif()
32*a58d3d2aSXin Li
33*a58d3d2aSXin Li  if(COMPILE_${FEATURE})
34*a58d3d2aSXin Li    message(STATUS "Performing Test ${FEATURE} -- success")
35*a58d3d2aSXin Li    set(${VAR}_SUPPORTED 1 PARENT_SCOPE)
36*a58d3d2aSXin Li  else()
37*a58d3d2aSXin Li    message(STATUS "Performing Test ${FEATURE} -- failed to compile")
38*a58d3d2aSXin Li  endif()
39*a58d3d2aSXin Liendfunction()
40