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.
13 # hwcap_spec - HWCAP value to check - these are defined in hwcap.h in the Linux
16 # output_var - Output variable to use to save the results (TRUE for supported,
17 # FALSE for not supported).
21 # check_hwcap("HWCAP2_SME" SME_EMULATOR_REQUIRED)
23 function(check_hwcap hwcap_spec output)
26 #include <asm/hwcap.h>
31 long hwcaps = getauxval(AT_<HWCAP_VEC>);
32 return (hwcaps & <HWCAP_SPEC>) != 0;
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}")
49 test_run_result test_compile_result
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)
59 message(STATUS "Checking whether ${hwcap_spec} is supported by the host system: FALSE")
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
74 # mlir_e2e_tests - MLIR CMake variables corresponding to the group of e2e tests
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).
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})
91 check_hwcap(${hwcap_spec} emulator_not_required)
92 if (${emulator_not_required})
96 if (${emulator_exec} STREQUAL "")
97 message(FATAL_ERROR "${mlir_e2e_tests} requires an emulator, but ${emulator_exec} is not set")