From 7a2ccd7773d5e1fa46383fce01311e1e6970bb30 Mon Sep 17 00:00:00 2001 From: Konstantinos Margaritis Date: Sat, 7 Oct 2023 06:17:18 +0800 Subject: [PATCH] fix fat & normal build errors on arm --- CMakeLists.txt | 99 ++++++++++++++++++++++++++++-------------------- cmake/arch.cmake | 6 +-- 2 files changed, 61 insertions(+), 44 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 788551b3..5ad8e6e9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -137,6 +137,16 @@ if (BUILD_AVX512VBMI) set(BUILD_AVX512 ON) endif () +if (NOT FAT_RUNTIME) + if (BUILD_SVE2_BITPERM) + set(BUILD_SVE2 ON) + endif () + + if (BUILD_SVE2) + set(BUILD_SVE ON) + endif () +endif () + # TODO: per platform config files? # remove CMake's idea of optimisation @@ -636,7 +646,7 @@ set (hs_exec_common_SRCS ${hs_exec_common_SRCS} src/util/arch/x86/cpuid_flags.c ) -elseif (ARCH_ARM32 OR ARCH_AARCH64 OR ARCH_PPC64EL) +elseif (ARCH_ARM32 OR ARCH_AARCH64) set (hs_exec_common_SRCS ${hs_exec_common_SRCS} src/util/arch/arm/cpuid_flags.c @@ -801,11 +811,10 @@ set (hs_exec_SRCS endif () endif() -if (FAT_RUNTIME OR (NOT FAT_RUNTIME AND NOT BUILD_SVE2)) -set (hs_exec_SRCS - ${hs_exec_SRCS} +set (hs_exec_neon_SRCS + src/nfa/vermicelli_simd.cpp) +set (hs_exec_sve_SRCS src/nfa/vermicelli_simd.cpp) -endif() set (hs_exec_avx2_SRCS src/fdr/teddy_avx2.c @@ -1264,6 +1273,10 @@ if (NOT FAT_RUNTIME) set(hs_exec_SRCS ${hs_exec_SRCS} ${hs_exec_avx2_SRCS}) endif() + if (NOT BUILD_SVE2) + set(hs_exec_SRCS ${hs_exec_SRCS} ${hs_exec_neon_SRCS}) + endif() + if (BUILD_STATIC_LIBS) add_library(hs_exec OBJECT ${hs_exec_SRCS}) @@ -1416,29 +1429,31 @@ else () if (ARCH_AARCH64) set(BUILD_WRAPPER "${PROJECT_SOURCE_DIR}/cmake/build_wrapper.sh") if (BUILD_STATIC_LIBS) - add_library(hs_exec_neon OBJECT ${hs_exec_SRCS}) + set (BUILD_SVE OFF) + set (BUILD_SVE2 OFF) + set (BUILD_SVE2_BITPERM OFF) + add_library(hs_exec_neon OBJECT ${hs_exec_SRCS} ${hs_exec_neon_SRCS}) list(APPEND RUNTIME_LIBS $) set_target_properties(hs_exec_neon PROPERTIES COMPILE_FLAGS "-march=armv8-a" RULE_LAUNCH_COMPILE "${BUILD_WRAPPER} neon ${CMAKE_MODULE_PATH}/keep.syms.in" ) - if (BUILD_SVE) - add_library(hs_exec_sve OBJECT ${hs_exec_SRCS} ${hs_exec_sve_SRCS}) - list(APPEND RUNTIME_LIBS $) - set_target_properties(hs_exec_sve PROPERTIES - COMPILE_FLAGS "-march=armv8-a+sve" - RULE_LAUNCH_COMPILE "${BUILD_WRAPPER} sve ${CMAKE_MODULE_PATH}/keep.syms.in" - ) - endif (BUILD_SVE) - if (BUILD_SVE2) - add_library(hs_exec_sve2 OBJECT ${hs_exec_SRCS} ${hs_exec_sve2_SRCS}) - list(APPEND RUNTIME_LIBS $) - set_target_properties(hs_exec_sve2 PROPERTIES - COMPILE_FLAGS "-march=armv8-a+sve2" - RULE_LAUNCH_COMPILE "${BUILD_WRAPPER} sve2 ${CMAKE_MODULE_PATH}/keep.syms.in" - ) - endif (BUILD_SVE2) + set (BUILD_SVE ON) + add_library(hs_exec_sve OBJECT ${hs_exec_SRCS} ${hs_exec_sve_SRCS}) + list(APPEND RUNTIME_LIBS $) + set_target_properties(hs_exec_sve PROPERTIES + COMPILE_FLAGS "-march=armv8-a+sve -DHAVE_SVE" + RULE_LAUNCH_COMPILE "${BUILD_WRAPPER} sve ${CMAKE_MODULE_PATH}/keep.syms.in" + ) + set (BUILD_SVE2 ON) + set (BUILD_SVE2_BITPERM ON) + add_library(hs_exec_sve2 OBJECT ${hs_exec_SRCS} ${hs_exec_sve2_SRCS}) + list(APPEND RUNTIME_LIBS $) + set_target_properties(hs_exec_sve2 PROPERTIES + COMPILE_FLAGS "-march=armv8-a+sve+sve2+sve2-bitperm -DHAVE_SVE -DHAVE_SVE2" + RULE_LAUNCH_COMPILE "${BUILD_WRAPPER} sve2 ${CMAKE_MODULE_PATH}/keep.syms.in" + ) add_library(hs_exec_common OBJECT ${hs_exec_common_SRCS} @@ -1462,10 +1477,13 @@ else () endif (BUILD_STATIC_LIBS) if (BUILD_STATIC_AND_SHARED OR BUILD_SHARED_LIBS) + set (BUILD_SVE OFF) + set (BUILD_SVE2 OFF) + set (BUILD_SVE2_BITPERM OFF) # build shared libs add_library(hs_compile_shared OBJECT ${hs_compile_SRCS}) set_target_properties(hs_compile_shared PROPERTIES POSITION_INDEPENDENT_CODE TRUE) - add_library(hs_exec_shared_neon OBJECT ${hs_exec_SRCS}) + add_library(hs_exec_shared_neon OBJECT ${hs_exec_SRCS} ${hs_exec_neon_SRCS}) list(APPEND RUNTIME_SHLIBS $) set_target_properties(hs_exec_shared_neon PROPERTIES COMPILE_FLAGS "-march=armv8-a" @@ -1473,24 +1491,23 @@ else () RULE_LAUNCH_COMPILE "${BUILD_WRAPPER} neon ${CMAKE_MODULE_PATH}/keep.syms.in" ) - if (BUILD_SVE) - add_library(hs_exec_shared_sve OBJECT ${hs_exec_SRCS} ${hs_exec_sve_SRCS}) - list(APPEND RUNTIME_SHLIBS $) - set_target_properties(hs_exec_shared_sve PROPERTIES - COMPILE_FLAGS "-march=armv8-a+sve" - POSITION_INDEPENDENT_CODE TRUE - RULE_LAUNCH_COMPILE "${BUILD_WRAPPER} sve ${CMAKE_MODULE_PATH}/keep.syms.in" - ) - endif (BUILD_SVE) - if (BUILD_SVE2) - add_library(hs_exec_shared_sve2 OBJECT ${hs_exec_SRCS} ${hs_exec_sve2_SRCS}) - list(APPEND RUNTIME_SHLIBS $) - set_target_properties(hs_exec_shared_sve2 PROPERTIES - COMPILE_FLAGS "-march=armv8-a+sve2" - POSITION_INDEPENDENT_CODE TRUE - RULE_LAUNCH_COMPILE "${BUILD_WRAPPER} sve2 ${CMAKE_MODULE_PATH}/keep.syms.in" - ) - endif (BUILD_SVE2) + set (BUILD_SVE ON) + add_library(hs_exec_shared_sve OBJECT ${hs_exec_SRCS} ${hs_exec_sve_SRCS}) + list(APPEND RUNTIME_SHLIBS $) + set_target_properties(hs_exec_shared_sve PROPERTIES + COMPILE_FLAGS "-march=armv8-a+sve -DHAVE_SVE" + POSITION_INDEPENDENT_CODE TRUE + RULE_LAUNCH_COMPILE "${BUILD_WRAPPER} sve ${CMAKE_MODULE_PATH}/keep.syms.in" + ) + set (BUILD_SVE2 ON) + set (BUILD_SVE2_BITPERM ON) + add_library(hs_exec_shared_sve2 OBJECT ${hs_exec_SRCS} ${hs_exec_sve2_SRCS}) + list(APPEND RUNTIME_SHLIBS $) + set_target_properties(hs_exec_shared_sve2 PROPERTIES + COMPILE_FLAGS "-march=armv8-a+sve+sve2+sve2-bitperm -DHAVE_SVE -DHAVE_SVE2" + POSITION_INDEPENDENT_CODE TRUE + RULE_LAUNCH_COMPILE "${BUILD_WRAPPER} sve2 ${CMAKE_MODULE_PATH}/keep.syms.in" + ) add_library(hs_exec_common_shared OBJECT ${hs_exec_common_SRCS} src/dispatcher.c diff --git a/cmake/arch.cmake b/cmake/arch.cmake index 2a94e93f..f2c060ea 100644 --- a/cmake/arch.cmake +++ b/cmake/arch.cmake @@ -35,7 +35,7 @@ if (ARCH_AARCH64) svuint8_t a = svbext(svdup_u8(1), svdup_u8(2)); (void)a; }" HAVE_SVE2_BITPERM) - if (HAVE_SVE2_BITPERM) + if (HAVE_SVE2_BITPERM AND NOT FAT_RUNTIME) add_definitions(-DHAVE_SVE2_BITPERM) endif () endif() @@ -47,7 +47,7 @@ if (ARCH_AARCH64) (void)a; }" HAVE_SVE2) endif() - if (HAVE_SVE2 OR HAVE_SVE2_BITPERM) + if ((HAVE_SVE2 OR HAVE_SVE2_BITPERM) AND NOT FAT_RUNTIME) add_definitions(-DHAVE_SVE2) endif () if (BUILD_SVE) @@ -58,7 +58,7 @@ if (ARCH_AARCH64) (void)a; }" HAVE_SVE) endif () - if (HAVE_SVE OR HAVE_SVE2 OR HAVE_SVE2_BITPERM) + if ((HAVE_SVE OR HAVE_SVE2 OR HAVE_SVE2_BITPERM) AND NOT FAT_RUNTIME) add_definitions(-DHAVE_SVE) endif () set(CMAKE_C_FLAGS "${PREV_FLAGS}")