mirror of
https://github.com/VectorCamp/vectorscan.git
synced 2025-06-28 16:41:01 +03:00
cmake: Improve the microarch checks
This commit is contained in:
parent
a6f4394959
commit
73765f1f84
@ -253,6 +253,11 @@ else()
|
|||||||
set(EXTRA_CXX_FLAGS "${EXTRA_CXX_FLAGS} -Wno-abi")
|
set(EXTRA_CXX_FLAGS "${EXTRA_CXX_FLAGS} -Wno-abi")
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
|
if (CMAKE_C_COMPILER_ID MATCHES "Intel")
|
||||||
|
set(SKYLAKE_FLAG "-xCORE-AVX512")
|
||||||
|
else ()
|
||||||
|
set(SKYLAKE_FLAG "-march=skylake-avx512")
|
||||||
|
endif ()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
CHECK_INCLUDE_FILES(unistd.h HAVE_UNISTD_H)
|
CHECK_INCLUDE_FILES(unistd.h HAVE_UNISTD_H)
|
||||||
@ -306,10 +311,6 @@ endif ()
|
|||||||
|
|
||||||
include (${CMAKE_MODULE_PATH}/arch.cmake)
|
include (${CMAKE_MODULE_PATH}/arch.cmake)
|
||||||
|
|
||||||
if (NOT FAT_RUNTIME AND NOT HAVE_SSSE3)
|
|
||||||
message(FATAL_ERROR "A minimum of SSSE3 compiler support is required")
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
# testing a builtin takes a little more work
|
# testing a builtin takes a little more work
|
||||||
CHECK_C_SOURCE_COMPILES("void *aa_test(void *x) { return __builtin_assume_aligned(x, 16);}\nint main(void) { return 0; }" HAVE_CC_BUILTIN_ASSUME_ALIGNED)
|
CHECK_C_SOURCE_COMPILES("void *aa_test(void *x) { return __builtin_assume_aligned(x, 16);}\nint main(void) { return 0; }" HAVE_CC_BUILTIN_ASSUME_ALIGNED)
|
||||||
CHECK_CXX_SOURCE_COMPILES("void *aa_test(void *x) { return __builtin_assume_aligned(x, 16);}\nint main(void) { return 0; }" HAVE_CXX_BUILTIN_ASSUME_ALIGNED)
|
CHECK_CXX_SOURCE_COMPILES("void *aa_test(void *x) { return __builtin_assume_aligned(x, 16);}\nint main(void) { return 0; }" HAVE_CXX_BUILTIN_ASSUME_ALIGNED)
|
||||||
@ -460,12 +461,6 @@ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_C_FLAGS}")
|
|||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EXTRA_CXX_FLAGS}")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EXTRA_CXX_FLAGS}")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(CMAKE_C_COMPILER_ID MATCHES "Intel")
|
|
||||||
set(SKYLAKE_FLAG "-xCORE-AVX512")
|
|
||||||
else()
|
|
||||||
set(SKYLAKE_FLAG "-march=skylake-avx512")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(NOT WIN32)
|
if(NOT WIN32)
|
||||||
set(RAGEL_C_FLAGS "-Wno-unused")
|
set(RAGEL_C_FLAGS "-Wno-unused")
|
||||||
endif()
|
endif()
|
||||||
|
@ -10,8 +10,24 @@ else ()
|
|||||||
message (FATAL_ERROR "No intrinsics header found")
|
message (FATAL_ERROR "No intrinsics header found")
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
|
if (BUILD_AVX512)
|
||||||
|
CHECK_C_COMPILER_FLAG(${SKYLAKE_FLAG} HAS_ARCH_SKYLAKE)
|
||||||
|
if (NOT HAS_ARCH_SKYLAKE)
|
||||||
|
message (FATAL_ERROR "AVX512 not supported by compiler")
|
||||||
|
endif ()
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
if (FAT_RUNTIME)
|
||||||
|
# test the highest level microarch to make sure everything works
|
||||||
|
if (BUILD_AVX512)
|
||||||
|
set (CMAKE_REQUIRED_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_C_FLAGS} ${SKYLAKE_FLAG}")
|
||||||
|
else ()
|
||||||
|
set (CMAKE_REQUIRED_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_C_FLAGS} -march=core-avx2")
|
||||||
|
endif ()
|
||||||
|
else (NOT FAT_RUNTIME)
|
||||||
|
# if not fat runtime, then test given cflags
|
||||||
set (CMAKE_REQUIRED_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_C_FLAGS} ${ARCH_C_FLAGS}")
|
set (CMAKE_REQUIRED_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_C_FLAGS} ${ARCH_C_FLAGS}")
|
||||||
|
endif ()
|
||||||
|
|
||||||
# ensure we have the minimum of SSSE3 - call a SSSE3 intrinsic
|
# ensure we have the minimum of SSSE3 - call a SSSE3 intrinsic
|
||||||
CHECK_C_SOURCE_COMPILES("#include <${INTRIN_INC_H}>
|
CHECK_C_SOURCE_COMPILES("#include <${INTRIN_INC_H}>
|
||||||
@ -31,10 +47,6 @@ int main(){
|
|||||||
(void)_mm256_xor_si256(z, z);
|
(void)_mm256_xor_si256(z, z);
|
||||||
}" HAVE_AVX2)
|
}" HAVE_AVX2)
|
||||||
|
|
||||||
if (NOT HAVE_AVX2)
|
|
||||||
message(STATUS "Building without AVX2 support")
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
# and now for AVX512
|
# and now for AVX512
|
||||||
CHECK_C_SOURCE_COMPILES("#include <${INTRIN_INC_H}>
|
CHECK_C_SOURCE_COMPILES("#include <${INTRIN_INC_H}>
|
||||||
#if !defined(__AVX512BW__)
|
#if !defined(__AVX512BW__)
|
||||||
@ -46,9 +58,28 @@ int main(){
|
|||||||
(void)_mm512_abs_epi8(z);
|
(void)_mm512_abs_epi8(z);
|
||||||
}" HAVE_AVX512)
|
}" HAVE_AVX512)
|
||||||
|
|
||||||
|
if (FAT_RUNTIME)
|
||||||
|
if (NOT HAVE_SSSE3)
|
||||||
|
message(FATAL_ERROR "SSSE3 support required to build fat runtime")
|
||||||
|
endif ()
|
||||||
|
if (NOT HAVE_AVX2)
|
||||||
|
message(FATAL_ERROR "AVX2 support required to build fat runtime")
|
||||||
|
endif ()
|
||||||
|
if (BUILD_AVX512 AND NOT HAVE_AVX512)
|
||||||
|
message(FATAL_ERROR "AVX512 support requested but not supported")
|
||||||
|
endif ()
|
||||||
|
else (NOT FAT_RUNTIME)
|
||||||
|
if (NOT HAVE_AVX2)
|
||||||
|
message(STATUS "Building without AVX2 support")
|
||||||
|
endif ()
|
||||||
if (NOT HAVE_AVX512)
|
if (NOT HAVE_AVX512)
|
||||||
message(STATUS "Building without AVX512 support")
|
message(STATUS "Building without AVX512 support")
|
||||||
endif ()
|
endif ()
|
||||||
|
else (NOT FAT_RUNTIME)
|
||||||
|
if (NOT HAVE_SSSE3)
|
||||||
|
message(FATAL_ERROR "A minimum of SSSE3 compiler support is required")
|
||||||
|
endif ()
|
||||||
|
endif ()
|
||||||
|
|
||||||
unset (CMAKE_REQUIRED_FLAGS)
|
unset (CMAKE_REQUIRED_FLAGS)
|
||||||
unset (INTRIN_INC_H)
|
unset (INTRIN_INC_H)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user