macro(check_nasm_support _object_format _support_x64 _support_x64_and_avx2 _support_x64_and_avx512) execute_process( COMMAND which nasm RESULT_VARIABLE no_nasm OUTPUT_QUIET ERROR_QUIET) if(NOT no_nasm) 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() {} " ${_support_x64}) set(CMAKE_REQUIRED_QUIET ${save_quiet}) if(${_support_x64}) execute_process(COMMAND nasm -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 ERROR_QUIET) if(NOT rc) set(${_support_x64_and_avx2} TRUE) endif() execute_process(COMMAND nasm -D HAVE_AS_KNOWS_AVX512 -f ${object_format} -i ${CMAKE_SOURCE_DIR}/src/isa-l/include/ ${CMAKE_SOURCE_DIR}/src/isa-l/erasure_code/gf_vect_dot_prod_avx512.asm -o /dev/null RESULT_VARIABLE rt OUTPUT_QUIET ERROR_QUIET) if(NOT rt) set(${_support_x64_and_avx512} TRUE) endif() endif(${_support_x64}) endif(CMAKE_SYSTEM_PROCESSOR MATCHES "amd64|x86_64") endif(NOT no_nasm) if(no_nasm) message(STATUS "Could NOT find nasm") elseif(NOT ${_support_x64}) message(STATUS "Found nasm: but x86_64 with x32 ABI is not supported") elseif(${_support_x64_and_avx512}) message(STATUS "Found nasm: best -- capable of assembling AVX512") elseif(${_support_x64_and_avx2}) message(STATUS "Found nasm: better -- capable of assembling AVX2") elseif(${_support_x64}) message(STATUS "Found nasm: good -- capable of assembling x86_64") endif() endmacro()