[rtsan] Remove mkfifoat interceptor (#116997)
[llvm-project.git] / mlir / cmake / modules / MLIRCheckHardwareFeatures.cmake
blob7bc13287cd655a895b0a40397432f3f983028b18
1 # A collection of helper CMake functions to detect hardware capabilities. At
2 # the moment these are used when configuring MLIR integration tests.
4 # Checks whether the specified hardware capability is supported by the host
5 # Linux system. This is implemented by checking auxiliary vector feature
6 # provided by the Linux kernel.
8 # check_hwcap(
9 #   hwcap_spec
10 #   output_var
11 # )
13 # hwcap_spec - HWCAP value to check - these are defined in hwcap.h in the Linux
14 #              kernel.
16 # output_var - Output variable to use to save the results (TRUE for supported,
17 #              FALSE for not supported).
19 # EXAMPLES:
21 # check_hwcap("HWCAP2_SME" SME_EMULATOR_REQUIRED)
23 function(check_hwcap hwcap_spec output)
24     set(hwcap_test_src
25       [====[
26       #include <asm/hwcap.h>
27       #include <sys/auxv.h>
29       int main(void)
30       {
31           long hwcaps = getauxval(AT_<HWCAP_VEC>);
32           return (hwcaps & <HWCAP_SPEC>) != 0;
33       }
34       ]====]
35     )
37     # Extract from $hwcap_spec whether this is AT_HWCAP or AT_HWCAP2
38     string(FIND ${hwcap_spec} "_" wsloc)
39     string(SUBSTRING ${hwcap_spec} 0 ${wsloc} hwcap_vec)
41     string(REPLACE "<HWCAP_VEC>" ${hwcap_vec} hwcap_test_src "${hwcap_test_src}")
42     string(REPLACE "<HWCAP_SPEC>" ${hwcap_spec} hwcap_test_src "${hwcap_test_src}")
44     set(hwcap_test_file ${CMAKE_BINARY_DIR}/temp/hwcap_check.c)
45     file(WRITE ${hwcap_test_file} "${hwcap_test_src}")
47     # Compile _and_ run
48     try_run(
49         test_run_result test_compile_result
50         "${CMAKE_BINARY_DIR}"
51         "${hwcap_test_file}"
52     )
53     # Compilation will fail if hwcap_spec is not defined - this usually means
54     # that your Linux kernel is too old.
55     if(${test_compile_result} AND (DEFINED test_run_result))
56       message(STATUS "Checking whether ${hwcap_spec} is supported by the host system: ${test_run_result}")
57       set(${output} ${test_run_result} PARENT_SCOPE)
58     else()
59       message(STATUS "Checking whether ${hwcap_spec} is supported by the host system: FALSE")
60     endif()
61 endfunction(check_hwcap)
63 # For the given group of e2e tests (defined by the `mlir_e2e_tests` flag),
64 # checks whether an emulator is required. If yes, verifies that the
65 # corresponding CMake var pointing to an emulator (`emulator_exec`) has been
66 # set.
68 # check_emulator(
69 #   mlir_e2e_tests
70 #   hwcap_spec
71 #   emulator_exec
72 # )
74 # mlir_e2e_tests  - MLIR CMake variables corresponding to the group of e2e tests
75 #                   to check
76 # hwcap_spec      - HWCAP value to check. This should correspond to the hardware
77 #                   capabilities required by the tests to be checked. Possible
78 #                   values are defined in hwcap.h in the Linux kernel.
79 # emulator_exec   - variable the defines the emulator (ought to be set if
80 #                   required, can be empty otherwise).
82 # EXAMPLES:
84 #  check_emulator(MLIR_RUN_ARM_SVE_TESTS "HWCAP_SVE" ARM_EMULATOR_EXECUTABLE)
86 function(check_emulator mlir_e2e_tests hwcap_spec emulator_exec)
87   if (NOT ${mlir_e2e_tests})
88     return()
89   endif()
91   check_hwcap(${hwcap_spec} emulator_not_required)
92   if (${emulator_not_required})
93     return()
94   endif()
96   if (${emulator_exec} STREQUAL "")
97     message(FATAL_ERROR "${mlir_e2e_tests} requires an emulator, but ${emulator_exec} is not set")
98   endif()
100 endfunction()