if (NOT FAT_RUNTIME) if (BUILD_SVE2_BITPERM) message (STATUS "SVE2_BITPERM implies SVE2, enabling BUILD_SVE2") set(BUILD_SVE2 ON) endif () if (BUILD_SVE2) message (STATUS "SVE2 implies SVE, enabling BUILD_SVE") set(BUILD_SVE ON) endif () endif () set(SVE2_BITPERM_ARCH "armv9-a+sve2-bitperm") set(SVE2_ARCH "armv9-a") set(SVE_ARCH "armv8-a+sve") set(ARMV8_ARCH "armv8-a") CHECK_INCLUDE_FILE_CXX(arm_neon.h HAVE_C_ARM_NEON_H) if (BUILD_SVE OR BUILD_SVE2 OR BUILD_SVE2_BITPERM OR FAT_RUNTIME) set(CMAKE_REQUIRED_FLAGS "-${ARCH_FLAG}=${SVE_ARCH}") CHECK_INCLUDE_FILE_CXX(arm_sve.h HAVE_C_ARM_SVE_H) if (NOT HAVE_C_ARM_SVE_H) message(FATAL_ERROR "arm_sve.h is required to build for SVE.") endif() endif() CHECK_C_SOURCE_COMPILES("#include int main() { int32x4_t a = vdupq_n_s32(1); (void)a; }" HAVE_NEON) if (BUILD_SVE2_BITPERM) set(CMAKE_REQUIRED_FLAGS "-${ARCH_FLAG}=${SVE2_BITPERM_ARCH}") CHECK_C_SOURCE_COMPILES("#include int main() { svuint8_t a = svbext(svdup_u8(1), svdup_u8(2)); (void)a; }" HAVE_SVE2_BITPERM) endif() if (BUILD_SVE2) set(CMAKE_REQUIRED_FLAGS "-${ARCH_FLAG}=${SVE2_ARCH}") CHECK_C_SOURCE_COMPILES("#include int main() { svuint8_t a = svbsl(svdup_u8(1), svdup_u8(2), svdup_u8(3)); (void)a; }" HAVE_SVE2) endif() if (BUILD_SVE) set(CMAKE_REQUIRED_FLAGS "-${ARCH_FLAG}=${SVE_ARCH}") CHECK_C_SOURCE_COMPILES("#include int main() { svuint8_t a = svdup_u8(1); (void)a; }" HAVE_SVE) endif () if (FAT_RUNTIME) if (NOT HAVE_NEON) message(FATAL_ERROR "NEON support required to build fat runtime") endif () if (BUILD_SVE AND NOT HAVE_SVE) message(FATAL_ERROR "SVE support required to build fat runtime") endif () if (BUILD_SVE2 AND NOT HAVE_SVE2) message(FATAL_ERROR "SVE2 support required to build fat runtime") endif () if (BUILD_SVE2_BITPERM AND NOT HAVE_SVE2_BITPERM) message(FATAL_ERROR "SVE2 support required to build fat runtime") endif () else (NOT FAT_RUNTIME) if (NOT BUILD_SVE) message(STATUS "Building without SVE support") endif () if (NOT BUILD_SVE2) message(STATUS "Building without SVE2 support") endif () if (NOT HAVE_NEON) message(FATAL_ERROR "Neon/ASIMD support required for Arm support") endif () endif ()