mirror of
https://github.com/VectorCamp/vectorscan.git
synced 2025-06-28 16:41:01 +03:00
83 lines
2.4 KiB
CMake
83 lines
2.4 KiB
CMake
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 "-march=${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 <arm_neon.h>
|
|
int main() {
|
|
int32x4_t a = vdupq_n_s32(1);
|
|
(void)a;
|
|
}" HAVE_NEON)
|
|
|
|
if (BUILD_SVE2_BITPERM)
|
|
set(CMAKE_REQUIRED_FLAGS "-march=${SVE2_BITPERM_ARCH}")
|
|
CHECK_C_SOURCE_COMPILES("#include <arm_sve.h>
|
|
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 "-march=${SVE2_ARCH}")
|
|
CHECK_C_SOURCE_COMPILES("#include <arm_sve.h>
|
|
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 "-march=${SVE_ARCH}")
|
|
CHECK_C_SOURCE_COMPILES("#include <arm_sve.h>
|
|
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 ()
|
|
|
|
|