diff options
Diffstat (limited to '')
-rw-r--r-- | cmake/modules/CheckYasm.cmake | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/cmake/modules/CheckYasm.cmake b/cmake/modules/CheckYasm.cmake new file mode 100644 index 00000000..39a899e4 --- /dev/null +++ b/cmake/modules/CheckYasm.cmake @@ -0,0 +1,41 @@ +macro(check_yasm_support _object_format _good_result _better_result) + execute_process( + COMMAND yasm -f "${_object_format}" ${CMAKE_SOURCE_DIR}/src/common/crc32c_intel_fast_asm.s -o /dev/null + RESULT_VARIABLE no_yasm + OUTPUT_QUIET) + if(NOT no_yasm) + if(CMAKE_SYSTEM_PROCESSOR MATCHES "amd64|x86_64") + set(save_quiet ${CMAKE_REQUIRED_QUIET}) + set(CMAKE_REQUIRED_QUIET true) + include(CheckCXXSourceCompiles) + check_cxx_source_compiles(" + #if defined(__x86_64__) && defined(__ILP32__) + #error x32 + #endif + int main() {} + " not_arch_x32) + set(CMAKE_REQUIRED_QUIET ${save_quiet}) + if(not_arch_x32) + set(${_good_result} TRUE) + execute_process(COMMAND yasm -f ${object_format} -i + ${CMAKE_SOURCE_DIR}/src/isa-l/include/ + ${CMAKE_SOURCE_DIR}/src/isa-l/erasure_code/gf_vect_dot_prod_avx2.asm + -o /dev/null + RESULT_VARIABLE rc + OUTPUT_QUIET) + if(NOT rc) + set(${_better_result} TRUE) + endif(NOT rc) + endif(not_arch_x32) + endif(CMAKE_SYSTEM_PROCESSOR MATCHES "amd64|x86_64") + endif(NOT no_yasm) + if(no_yasm) + message(STATUS "Could NOT find Yasm") + elseif(NOT not_arch_x32) + message(STATUS "Found Yasm: but x86_64 with x32 ABI is not supported") + elseif(${_better_result}) + message(STATUS "Found Yasm: good -- capable of assembling x86_64") + elseif(${_good_result}) + message(STATUS "Found Yasm: better -- capable of assembling AVX2") + endif() +endmacro() |