mirror of
https://github.com/VectorCamp/vectorscan.git
synced 2025-06-28 16:41:01 +03:00
fix cflags detection for x86
This commit is contained in:
parent
0d5ce27df4
commit
ee8a3c29cc
@ -1,38 +1,36 @@
|
|||||||
option(BUILD_AVX512 "Enabling support for AVX512" OFF)
|
option(BUILD_AVX512 "Enabling support for AVX512" OFF)
|
||||||
option(BUILD_AVX512VBMI "Enabling support for AVX512VBMI" OFF)
|
option(BUILD_AVX512VBMI "Enabling support for AVX512VBMI" OFF)
|
||||||
|
|
||||||
|
set(SKYLAKE_FLAG "-march=skylake-avx512")
|
||||||
|
set(ICELAKE_FLAG "-march=icelake-server")
|
||||||
|
|
||||||
if (NOT FAT_RUNTIME)
|
if (NOT FAT_RUNTIME)
|
||||||
if (BUILD_AVX512VBMI)
|
if (BUILD_AVX512VBMI)
|
||||||
message (STATUS "AVX512VBMI implies AVX512, enabling BUILD_AVX512")
|
message (STATUS "AVX512VBMI implies AVX512, enabling BUILD_AVX512")
|
||||||
set(BUILD_AVX512 ON)
|
set(BUILD_AVX512 ON)
|
||||||
|
set(ARCH_C_FLAGS "${ICELAKE_FLAG}")
|
||||||
|
set(ARCH_CXX_FLAGS "${ICELAKE_FLAG}")
|
||||||
endif ()
|
endif ()
|
||||||
if (BUILD_AVX512)
|
if (BUILD_AVX512)
|
||||||
message (STATUS "AVX512 implies AVX2, enabling BUILD_AVX2")
|
message (STATUS "AVX512 implies AVX2, enabling BUILD_AVX2")
|
||||||
set(BUILD_AVX2 ON)
|
set(BUILD_AVX2 ON)
|
||||||
|
set(ARCH_C_FLAGS "${SKYLAKE_FLAG}")
|
||||||
|
set(ARCH_CXX_FLAGS "${SKYLAKE_FLAG}")
|
||||||
endif ()
|
endif ()
|
||||||
endif()
|
if (BUILD_AVX2)
|
||||||
|
message (STATUS "Enabling BUILD_AVX2")
|
||||||
set(SKYLAKE_FLAG "-march=skylake-avx512")
|
set(ARCH_C_FLAGS "-mavx2")
|
||||||
set(ICELAKE_FLAG "-march=icelake-server")
|
set(ARCH_CXX_FLAGS "-mavx2")
|
||||||
|
|
||||||
if (ARCH_IA32 OR ARCH_X86_64)
|
|
||||||
if (NOT FAT_RUNTIME)
|
|
||||||
if (BUILD_AVX512)
|
|
||||||
set(ARCH_C_FLAGS "${SKYLAKE_FLAG}")
|
|
||||||
set(ARCH_CXX_FLAGS "${SKYLAKE_FLAG}")
|
|
||||||
elseif (BUILD_AVX2)
|
|
||||||
set(ARCH_C_FLAGS "-mavx2")
|
|
||||||
set(ARCH_CXX_FLAGS "-mavx2")
|
|
||||||
else()
|
|
||||||
set(ARCH_C_FLAGS "-msse4.2")
|
|
||||||
set(ARCH_CXX_FLAGS "-msse4.2")
|
|
||||||
endif()
|
|
||||||
else()
|
else()
|
||||||
set(ARCH_C_FLAGS "-msse4.2")
|
set(ARCH_C_FLAGS "-msse4.2")
|
||||||
set(ARCH_CXX_FLAGS "-msse4.2")
|
set(ARCH_CXX_FLAGS "-msse4.2")
|
||||||
endif()
|
endif()
|
||||||
|
else()
|
||||||
|
set(ARCH_C_FLAGS "-msse4.2")
|
||||||
|
set(ARCH_CXX_FLAGS "-msse4.2")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
set(CMAKE_REQUIRED_FLAGS "${ARCH_C_FLAGS}")
|
||||||
CHECK_INCLUDE_FILES(intrin.h HAVE_C_INTRIN_H)
|
CHECK_INCLUDE_FILES(intrin.h HAVE_C_INTRIN_H)
|
||||||
CHECK_INCLUDE_FILE_CXX(intrin.h HAVE_CXX_INTRIN_H)
|
CHECK_INCLUDE_FILE_CXX(intrin.h HAVE_CXX_INTRIN_H)
|
||||||
CHECK_INCLUDE_FILES(x86intrin.h HAVE_C_X86INTRIN_H)
|
CHECK_INCLUDE_FILES(x86intrin.h HAVE_C_X86INTRIN_H)
|
||||||
@ -60,16 +58,15 @@ if (BUILD_AVX512VBMI)
|
|||||||
endif ()
|
endif ()
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
if (ARCH_IA32 OR ARCH_X86_64)
|
# ensure we have the minimum of SSE4.2 - call a SSE4.2 intrinsic
|
||||||
# ensure we have the minimum of SSE4.2 - call a SSE4.2 intrinsic
|
CHECK_C_SOURCE_COMPILES("#include <${INTRIN_INC_H}>
|
||||||
CHECK_C_SOURCE_COMPILES("#include <${INTRIN_INC_H}>
|
|
||||||
int main() {
|
int main() {
|
||||||
__m128i a = _mm_set1_epi8(1);
|
__m128i a = _mm_set1_epi8(1);
|
||||||
(void)_mm_shuffle_epi8(a, a);
|
(void)_mm_shuffle_epi8(a, a);
|
||||||
}" HAVE_SSE42)
|
}" HAVE_SSE42)
|
||||||
|
|
||||||
# now look for AVX2
|
# now look for AVX2
|
||||||
CHECK_C_SOURCE_COMPILES("#include <${INTRIN_INC_H}>
|
CHECK_C_SOURCE_COMPILES("#include <${INTRIN_INC_H}>
|
||||||
#if !defined(__AVX2__)
|
#if !defined(__AVX2__)
|
||||||
#error no avx2
|
#error no avx2
|
||||||
#endif
|
#endif
|
||||||
@ -79,8 +76,8 @@ int main(){
|
|||||||
(void)_mm256_xor_si256(z, z);
|
(void)_mm256_xor_si256(z, z);
|
||||||
}" HAVE_AVX2)
|
}" HAVE_AVX2)
|
||||||
|
|
||||||
# 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__)
|
||||||
#error no avx512bw
|
#error no avx512bw
|
||||||
#endif
|
#endif
|
||||||
@ -90,8 +87,8 @@ int main(){
|
|||||||
(void)_mm512_abs_epi8(z);
|
(void)_mm512_abs_epi8(z);
|
||||||
}" HAVE_AVX512)
|
}" HAVE_AVX512)
|
||||||
|
|
||||||
# and now for AVX512VBMI
|
# and now for AVX512VBMI
|
||||||
CHECK_C_SOURCE_COMPILES("#include <${INTRIN_INC_H}>
|
CHECK_C_SOURCE_COMPILES("#include <${INTRIN_INC_H}>
|
||||||
#if !defined(__AVX512VBMI__)
|
#if !defined(__AVX512VBMI__)
|
||||||
#error no avx512vbmi
|
#error no avx512vbmi
|
||||||
#endif
|
#endif
|
||||||
@ -103,29 +100,29 @@ int main(){
|
|||||||
}" HAVE_AVX512VBMI)
|
}" HAVE_AVX512VBMI)
|
||||||
|
|
||||||
if (FAT_RUNTIME)
|
if (FAT_RUNTIME)
|
||||||
if ((ARCH_IA32 OR ARCH_X86_64) AND NOT HAVE_SSE42)
|
if (NOT HAVE_SSE42)
|
||||||
message(FATAL_ERROR "SSE4.2 support required to build fat runtime")
|
message(FATAL_ERROR "SSE4.2 support required to build fat runtime")
|
||||||
endif ()
|
endif ()
|
||||||
if ((ARCH_IA32 OR ARCH_X86_64) AND BUILD_AVX2 AND NOT HAVE_AVX2)
|
if (BUILD_AVX2 AND NOT HAVE_AVX2)
|
||||||
message(FATAL_ERROR "AVX2 support required to build fat runtime")
|
message(FATAL_ERROR "AVX2 support required to build fat runtime")
|
||||||
endif ()
|
endif ()
|
||||||
if ((ARCH_IA32 OR ARCH_X86_64) AND BUILD_AVX512 AND NOT HAVE_AVX512)
|
if (BUILD_AVX512 AND NOT HAVE_AVX512)
|
||||||
message(FATAL_ERROR "AVX512 support requested but not supported")
|
message(FATAL_ERROR "AVX512 support requested but not supported")
|
||||||
endif ()
|
endif ()
|
||||||
if ((ARCH_IA32 OR ARCH_X86_64) AND BUILD_AVX512VBMI AND NOT HAVE_AVX512VBMI)
|
if (BUILD_AVX512VBMI AND NOT HAVE_AVX512VBMI)
|
||||||
message(FATAL_ERROR "AVX512VBMI support requested but not supported")
|
message(FATAL_ERROR "AVX512VBMI support requested but not supported")
|
||||||
endif ()
|
endif ()
|
||||||
else (NOT FAT_RUNTIME)
|
else (NOT FAT_RUNTIME)
|
||||||
if ((ARCH_IA32 OR ARCH_X86_64) AND NOT BUILD_AVX2)
|
if (NOT BUILD_AVX2)
|
||||||
message(STATUS "Building without AVX2 support")
|
message(STATUS "Building without AVX2 support")
|
||||||
endif ()
|
endif ()
|
||||||
if ((ARCH_IA32 OR ARCH_X86_64) AND NOT HAVE_AVX512)
|
if (NOT HAVE_AVX512)
|
||||||
message(STATUS "Building without AVX512 support")
|
message(STATUS "Building without AVX512 support")
|
||||||
endif ()
|
endif ()
|
||||||
if ((ARCH_IA32 OR ARCH_X86_64) AND NOT HAVE_AVX512VBMI)
|
if (NOT HAVE_AVX512VBMI)
|
||||||
message(STATUS "Building without AVX512VBMI support")
|
message(STATUS "Building without AVX512VBMI support")
|
||||||
endif ()
|
endif ()
|
||||||
if ((ARCH_IA32 OR ARCH_X86_64) AND NOT HAVE_SSE42)
|
if (NOT HAVE_SSE42)
|
||||||
message(FATAL_ERROR "A minimum of SSE4.2 compiler support is required")
|
message(FATAL_ERROR "A minimum of SSE4.2 compiler support is required")
|
||||||
endif ()
|
endif ()
|
||||||
endif ()
|
endif ()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user