]> git.proxmox.com Git - ceph.git/blob - ceph/cmake/modules/CheckNasm.cmake
import ceph quincy 17.2.1
[ceph.git] / ceph / cmake / modules / CheckNasm.cmake
1 macro(check_nasm_support _object_format _support_x64 _support_x64_and_avx2 _support_x64_and_avx512)
2 execute_process(
3 COMMAND which nasm
4 RESULT_VARIABLE no_nasm
5 OUTPUT_QUIET
6 ERROR_QUIET)
7 if(NOT no_nasm)
8 if(CMAKE_SYSTEM_PROCESSOR MATCHES "amd64|x86_64")
9 set(save_quiet ${CMAKE_REQUIRED_QUIET})
10 set(CMAKE_REQUIRED_QUIET true)
11 include(CheckCXXSourceCompiles)
12 check_cxx_source_compiles("
13 #if defined(__x86_64__) && defined(__ILP32__)
14 #error x32
15 #endif
16 int main() {}
17 " ${_support_x64})
18 set(CMAKE_REQUIRED_QUIET ${save_quiet})
19 if(${_support_x64})
20 execute_process(COMMAND nasm -f ${object_format} -i
21 ${CMAKE_SOURCE_DIR}/src/isa-l/include/
22 ${CMAKE_SOURCE_DIR}/src/isa-l/erasure_code/gf_vect_dot_prod_avx2.asm
23 -o /dev/null
24 RESULT_VARIABLE rc
25 OUTPUT_QUIET
26 ERROR_QUIET)
27 if(NOT rc)
28 set(${_support_x64_and_avx2} TRUE)
29 endif()
30 execute_process(COMMAND nasm -D HAVE_AS_KNOWS_AVX512 -f ${object_format}
31 -i ${CMAKE_SOURCE_DIR}/src/isa-l/include/
32 ${CMAKE_SOURCE_DIR}/src/isa-l/erasure_code/gf_vect_dot_prod_avx512.asm
33 -o /dev/null
34 RESULT_VARIABLE rt
35 OUTPUT_QUIET
36 ERROR_QUIET)
37 if(NOT rt)
38 set(${_support_x64_and_avx512} TRUE)
39 endif()
40 endif(${_support_x64})
41 endif(CMAKE_SYSTEM_PROCESSOR MATCHES "amd64|x86_64")
42 endif(NOT no_nasm)
43 if(no_nasm)
44 message(STATUS "Could NOT find nasm")
45 elseif(NOT ${_support_x64})
46 message(STATUS "Found nasm: but x86_64 with x32 ABI is not supported")
47 elseif(${_support_x64_and_avx512})
48 message(STATUS "Found nasm: best -- capable of assembling AVX512")
49 elseif(${_support_x64_and_avx2})
50 message(STATUS "Found nasm: better -- capable of assembling AVX2")
51 elseif(${_support_x64})
52 message(STATUS "Found nasm: good -- capable of assembling x86_64")
53 endif()
54 endmacro()