set(EXTRA_CXX_FLAGS "${EXTRA_CXX_FLAGS} -Wno-abi")
endif ()
+ if (CMAKE_C_COMPILER_ID MATCHES "Intel")
+ set(SKYLAKE_FLAG "-xCORE-AVX512")
+ else ()
+ set(SKYLAKE_FLAG "-march=skylake-avx512")
+ endif ()
endif()
CHECK_INCLUDE_FILES(unistd.h HAVE_UNISTD_H)
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
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)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EXTRA_CXX_FLAGS}")
endif()
-if(CMAKE_C_COMPILER_ID MATCHES "Intel")
- set(SKYLAKE_FLAG "-xCORE-AVX512")
-else()
- set(SKYLAKE_FLAG "-march=skylake-avx512")
-endif()
-
if(NOT WIN32)
set(RAGEL_C_FLAGS "-Wno-unused")
endif()
message (FATAL_ERROR "No intrinsics header found")
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 ()
-set (CMAKE_REQUIRED_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_C_FLAGS} ${ARCH_C_FLAGS}")
+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}")
+endif ()
# ensure we have the minimum of SSSE3 - call a SSSE3 intrinsic
CHECK_C_SOURCE_COMPILES("#include <${INTRIN_INC_H}>
(void)_mm256_xor_si256(z, z);
}" HAVE_AVX2)
-if (NOT HAVE_AVX2)
- message(STATUS "Building without AVX2 support")
-endif ()
-
# and now for AVX512
CHECK_C_SOURCE_COMPILES("#include <${INTRIN_INC_H}>
#if !defined(__AVX512BW__)
(void)_mm512_abs_epi8(z);
}" HAVE_AVX512)
-if (NOT HAVE_AVX512)
- message(STATUS "Building without AVX512 support")
+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)
+ message(STATUS "Building without AVX512 support")
+ 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)