1 # - Check the username performing the build, as well as date and time
3 # GMX_DETECT_ACCELERATION(GMX_SUGGESTED_ACCELERATION)
5 # Try to detect CPU information and suggest an acceleration option
6 # (such as SSE/AVX) that fits the current CPU.
8 # GMX_SUGGESTED_ACCELERATION
11 # we rely on inline asm support for GNU!
12 include(gmxTestInlineASM)
14 macro(gmx_detect_acceleration GMX_SUGGESTED_ACCELERATION)
15 IF(NOT DEFINED ${GMX_SUGGESTED_ACCELERATION})
17 gmx_test_inline_asm_gcc_x86(GMX_X86_GCC_INLINE_ASM)
19 if(GMX_X86_GCC_INLINE_ASM)
20 set(GCC_INLINE_ASM_DEFINE "-DGMX_X86_GCC_INLINE_ASM")
21 else(GMX_X86_GCC_INLINE_ASM)
22 set(GCC_INLINE_ASM_DEFINE "")
23 endif(GMX_X86_GCC_INLINE_ASM)
25 message(STATUS "Detecting best acceleration for this CPU")
27 # Get CPU acceleration information
28 try_run(GMX_CPUID_RUN_ACC GMX_CPUID_COMPILED
30 ${CMAKE_SOURCE_DIR}/src/gmxlib/gmx_cpuid.c
31 COMPILE_DEFINITIONS "@GCC_INLINE_ASM_DEFINE@ -I${CMAKE_SOURCE_DIR}/include -DGMX_CPUID_STANDALONE"
32 RUN_OUTPUT_VARIABLE OUTPUT_TMP
33 COMPILE_OUTPUT_VARIABLE GMX_CPUID_COMPILE_OUTPUT
36 if(NOT GMX_CPUID_COMPILED)
37 message(WARNING "Cannot compile CPUID code, which means no CPU-specific acceleration.")
38 message(STATUS "Compile output: ${GMX_CPUID_COMPILE_OUTPUT}")
39 set(OUTPUT_TMP "None")
40 elseif(NOT GMX_CPUID_RUN_ACC EQUAL 0)
41 message(WARNING "Cannot run CPUID code, which means no CPU-specific optimization.")
42 message(STATUS "Run output: ${OUTPUT_TMP}")
43 set(OUTPUT_TMP "None")
44 endif(NOT GMX_CPUID_COMPILED)
46 string(STRIP "@OUTPUT_TMP@" OUTPUT_ACC)
48 message(STATUS "Detecting best acceleration for this CPU - @OUTPUT_ACC@")
50 set(${GMX_SUGGESTED_ACCELERATION} "@OUTPUT_ACC@" CACHE INTERNAL "GROMACS CPU-specific acceleration")
52 ENDIF(NOT DEFINED ${GMX_SUGGESTED_ACCELERATION})
53 endmacro(gmx_detect_acceleration GMX_SUGGESTED_ACCELERATION)