brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.2 KiB · 7bc1328 Raw
101 lines · plain
1# A collection of helper CMake functions to detect hardware capabilities. At2# the moment these are used when configuring MLIR integration tests.3 4# Checks whether the specified hardware capability is supported by the host5# Linux system. This is implemented by checking auxiliary vector feature6# provided by the Linux kernel.7#8# check_hwcap(9#   hwcap_spec10#   output_var11# )12#13# hwcap_spec - HWCAP value to check - these are defined in hwcap.h in the Linux14#              kernel.15#16# output_var - Output variable to use to save the results (TRUE for supported,17#              FALSE for not supported).18#19# EXAMPLES:20#21# check_hwcap("HWCAP2_SME" SME_EMULATOR_REQUIRED)22#23function(check_hwcap hwcap_spec output)24    set(hwcap_test_src25      [====[26      #include <asm/hwcap.h>27      #include <sys/auxv.h>28 29      int main(void)30      {31          long hwcaps = getauxval(AT_<HWCAP_VEC>);32          return (hwcaps & <HWCAP_SPEC>) != 0;33      }34      ]====]35    )36 37    # Extract from $hwcap_spec whether this is AT_HWCAP or AT_HWCAP238    string(FIND ${hwcap_spec} "_" wsloc)39    string(SUBSTRING ${hwcap_spec} 0 ${wsloc} hwcap_vec)40 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}")43 44    set(hwcap_test_file ${CMAKE_BINARY_DIR}/temp/hwcap_check.c)45    file(WRITE ${hwcap_test_file} "${hwcap_test_src}")46 47    # Compile _and_ run48    try_run(49        test_run_result test_compile_result50        "${CMAKE_BINARY_DIR}"51        "${hwcap_test_file}"52    )53    # Compilation will fail if hwcap_spec is not defined - this usually means54    # 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()61endfunction(check_hwcap)62 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 the65# corresponding CMake var pointing to an emulator (`emulator_exec`) has been66# set.67#68# check_emulator(69#   mlir_e2e_tests70#   hwcap_spec71#   emulator_exec72# )73#74# mlir_e2e_tests  - MLIR CMake variables corresponding to the group of e2e tests75#                   to check76# hwcap_spec      - HWCAP value to check. This should correspond to the hardware77#                   capabilities required by the tests to be checked. Possible78#                   values are defined in hwcap.h in the Linux kernel.79# emulator_exec   - variable the defines the emulator (ought to be set if80#                   required, can be empty otherwise).81#82# EXAMPLES:83#84#  check_emulator(MLIR_RUN_ARM_SVE_TESTS "HWCAP_SVE" ARM_EMULATOR_EXECUTABLE)85#86function(check_emulator mlir_e2e_tests hwcap_spec emulator_exec)87  if (NOT ${mlir_e2e_tests})88    return()89  endif()90 91  check_hwcap(${hwcap_spec} emulator_not_required)92  if (${emulator_not_required})93    return()94  endif()95 96  if (${emulator_exec} STREQUAL "")97    message(FATAL_ERROR "${mlir_e2e_tests} requires an emulator, but ${emulator_exec} is not set")98  endif()99 100endfunction()101