]> git.ipfire.org Git - thirdparty/vectorscan.git/commitdiff
add BUILD_AVX2 definition, enable non-AVX2 building selectively
authorKonstantinos Margaritis <markos@freevec.org>
Mon, 15 Feb 2021 11:46:30 +0000 (13:46 +0200)
committerKonstantinos Margaritis <markos@users.noreply.github.com>
Mon, 15 Feb 2021 11:54:19 +0000 (13:54 +0200)
CMakeLists.txt
cmake/arch.cmake
cmake/config.h.in
src/util/arch/x86/x86.h
unit/CMakeLists.txt

index 3eeeb528a0e44ce37bba3eab266f5df49b12b96e..0c9b30fbdfe3032e559db16777cd304445dac2db 100644 (file)
@@ -1190,7 +1190,7 @@ if (NOT FAT_RUNTIME)
 
     set(hs_exec_SRCS ${hs_exec_SRCS} ${hs_exec_common_SRCS})
 
-    if (HAVE_AVX2)
+    if (BUILD_AVX2)
         set(hs_exec_SRCS ${hs_exec_SRCS} ${hs_exec_avx2_SRCS})
     endif()
 
@@ -1232,66 +1232,68 @@ else (FAT_RUNTIME)
         COMPILE_FLAGS "-Wno-unused-parameter -Wno-unused-function ${DISPATCHER_DEFINE}")
 
     if (BUILD_STATIC_LIBS)
-       add_library(hs_exec_core2 OBJECT ${hs_exec_SRCS})
-       list(APPEND RUNTIME_LIBS $<TARGET_OBJECTS:hs_exec_core2>)
-       set_target_properties(hs_exec_core2 PROPERTIES
-           COMPILE_FLAGS "-march=core2"
-           RULE_LAUNCH_COMPILE "${BUILD_WRAPPER} core2 ${CMAKE_MODULE_PATH}/keep.syms.in"
-           )
-
-       add_library(hs_exec_corei7 OBJECT ${hs_exec_SRCS})
-       list(APPEND RUNTIME_LIBS $<TARGET_OBJECTS:hs_exec_corei7>)
-       set_target_properties(hs_exec_corei7 PROPERTIES
-           COMPILE_FLAGS "-march=corei7"
-           RULE_LAUNCH_COMPILE "${BUILD_WRAPPER} corei7 ${CMAKE_MODULE_PATH}/keep.syms.in"
-           )
-
-       add_library(hs_exec_avx2 OBJECT ${hs_exec_SRCS} ${hs_exec_avx2_SRCS})
-       list(APPEND RUNTIME_LIBS $<TARGET_OBJECTS:hs_exec_avx2>)
-       set_target_properties(hs_exec_avx2 PROPERTIES
-           COMPILE_FLAGS "-march=core-avx2"
-           RULE_LAUNCH_COMPILE "${BUILD_WRAPPER} avx2 ${CMAKE_MODULE_PATH}/keep.syms.in"
-           )
-       if (BUILD_AVX512)
-           add_library(hs_exec_avx512 OBJECT ${hs_exec_SRCS} ${hs_exec_avx2_SRCS})
-           list(APPEND RUNTIME_LIBS $<TARGET_OBJECTS:hs_exec_avx512>)
-           set_target_properties(hs_exec_avx512 PROPERTIES
-               COMPILE_FLAGS "${SKYLAKE_FLAG}"
-               RULE_LAUNCH_COMPILE "${BUILD_WRAPPER} avx512 ${CMAKE_MODULE_PATH}/keep.syms.in"
-               )
-       endif (BUILD_AVX512)
-       if (BUILD_AVX512VBMI)
-           add_library(hs_exec_avx512vbmi OBJECT ${hs_exec_SRCS} ${hs_exec_avx2_SRCS})
-           list(APPEND RUNTIME_LIBS $<TARGET_OBJECTS:hs_exec_avx512vbmi>)
-           set_target_properties(hs_exec_avx512vbmi PROPERTIES
-               COMPILE_FLAGS "${ICELAKE_FLAG}"
-               RULE_LAUNCH_COMPILE "${BUILD_WRAPPER} avx512vbmi ${CMAKE_MODULE_PATH}/keep.syms.in"
-               )
-       endif (BUILD_AVX512VBMI)
-
-       add_library(hs_exec_common OBJECT
-           ${hs_exec_common_SRCS}
-           src/dispatcher.c
-           )
-
-       # hs_version.c is added explicitly to avoid some build systems that refuse to
-       # create a lib without any src (I'm looking at you Xcode)
-
-       add_library(hs_runtime STATIC src/hs_version.c
-           $<TARGET_OBJECTS:hs_exec_common>
-           ${RUNTIME_LIBS})
-       set_target_properties(hs_runtime PROPERTIES LINKER_LANGUAGE C)
-       add_library(hs_compile OBJECT ${hs_compile_SRCS})
-       if (ARCH_IA32)
-           set_target_properties(hs_exec_common PROPERTIES COMPILE_FLAGS "-mssse3")
-           set_target_properties(hs_compile PROPERTIES COMPILE_FLAGS "-mssse3")
-       endif (ARCH_IA32)
-
-       # we want the static lib for testing
-       add_library(hs STATIC src/hs_version.c src/hs_valid_platform.c
-           $<TARGET_OBJECTS:hs_compile>
-           $<TARGET_OBJECTS:hs_exec_common>
-           ${RUNTIME_LIBS})
+        add_library(hs_exec_core2 OBJECT ${hs_exec_SRCS})
+        list(APPEND RUNTIME_LIBS $<TARGET_OBJECTS:hs_exec_core2>)
+        set_target_properties(hs_exec_core2 PROPERTIES
+            COMPILE_FLAGS "-march=core2"
+            RULE_LAUNCH_COMPILE "${BUILD_WRAPPER} core2 ${CMAKE_MODULE_PATH}/keep.syms.in"
+            )
+
+        add_library(hs_exec_corei7 OBJECT ${hs_exec_SRCS})
+        list(APPEND RUNTIME_LIBS $<TARGET_OBJECTS:hs_exec_corei7>)
+        set_target_properties(hs_exec_corei7 PROPERTIES
+            COMPILE_FLAGS "-march=corei7"
+            RULE_LAUNCH_COMPILE "${BUILD_WRAPPER} corei7 ${CMAKE_MODULE_PATH}/keep.syms.in"
+            )
+
+        if (BUILD_AVX2)
+            add_library(hs_exec_avx2 OBJECT ${hs_exec_SRCS} ${hs_exec_avx2_SRCS})
+            list(APPEND RUNTIME_LIBS $<TARGET_OBJECTS:hs_exec_avx2>)
+            set_target_properties(hs_exec_avx2 PROPERTIES
+                COMPILE_FLAGS "-march=core-avx2"
+                RULE_LAUNCH_COMPILE "${BUILD_WRAPPER} avx2 ${CMAKE_MODULE_PATH}/keep.syms.in"
+                )
+        endif (BUILD_AVX2)
+        if (BUILD_AVX512)
+            add_library(hs_exec_avx512 OBJECT ${hs_exec_SRCS} ${hs_exec_avx2_SRCS})
+            list(APPEND RUNTIME_LIBS $<TARGET_OBJECTS:hs_exec_avx512>)
+            set_target_properties(hs_exec_avx512 PROPERTIES
+                COMPILE_FLAGS "${SKYLAKE_FLAG}"
+                RULE_LAUNCH_COMPILE "${BUILD_WRAPPER} avx512 ${CMAKE_MODULE_PATH}/keep.syms.in"
+                )
+        endif (BUILD_AVX512)
+        if (BUILD_AVX512VBMI)
+            add_library(hs_exec_avx512vbmi OBJECT ${hs_exec_SRCS} ${hs_exec_avx2_SRCS})
+            list(APPEND RUNTIME_LIBS $<TARGET_OBJECTS:hs_exec_avx512vbmi>)
+            set_target_properties(hs_exec_avx512vbmi PROPERTIES
+                COMPILE_FLAGS "${ICELAKE_FLAG}"
+                RULE_LAUNCH_COMPILE "${BUILD_WRAPPER} avx512vbmi ${CMAKE_MODULE_PATH}/keep.syms.in"
+                )
+        endif (BUILD_AVX512VBMI)
+
+        add_library(hs_exec_common OBJECT
+            ${hs_exec_common_SRCS}
+            src/dispatcher.c
+            )
+
+        # hs_version.c is added explicitly to avoid some build systems that refuse to
+        # create a lib without any src (I'm looking at you Xcode)
+
+        add_library(hs_runtime STATIC src/hs_version.c
+            $<TARGET_OBJECTS:hs_exec_common>
+            ${RUNTIME_LIBS})
+        set_target_properties(hs_runtime PROPERTIES LINKER_LANGUAGE C)
+        add_library(hs_compile OBJECT ${hs_compile_SRCS})
+        if (ARCH_IA32)
+            set_target_properties(hs_exec_common PROPERTIES COMPILE_FLAGS "-mssse3")
+            set_target_properties(hs_compile PROPERTIES COMPILE_FLAGS "-mssse3")
+        endif (ARCH_IA32)
+
+        # we want the static lib for testing
+        add_library(hs STATIC src/hs_version.c src/hs_valid_platform.c
+            $<TARGET_OBJECTS:hs_compile>
+            $<TARGET_OBJECTS:hs_exec_common>
+            ${RUNTIME_LIBS})
 
     endif (BUILD_STATIC_LIBS)
 
@@ -1313,14 +1315,16 @@ else (FAT_RUNTIME)
             POSITION_INDEPENDENT_CODE TRUE
             RULE_LAUNCH_COMPILE "${BUILD_WRAPPER} corei7 ${CMAKE_MODULE_PATH}/keep.syms.in"
             )
-        add_library(hs_exec_shared_avx2 OBJECT ${hs_exec_SRCS} ${hs_exec_avx2_SRCS})
-        list(APPEND RUNTIME_SHLIBS $<TARGET_OBJECTS:hs_exec_shared_avx2>)
-        set_target_properties(hs_exec_shared_avx2 PROPERTIES
-            COMPILE_FLAGS "-march=core-avx2"
-            POSITION_INDEPENDENT_CODE TRUE
-            RULE_LAUNCH_COMPILE "${BUILD_WRAPPER} avx2 ${CMAKE_MODULE_PATH}/keep.syms.in"
-            )
 
+        if (BUILD_AVX2)
+            add_library(hs_exec_shared_avx2 OBJECT ${hs_exec_SRCS} ${hs_exec_avx2_SRCS})
+            list(APPEND RUNTIME_SHLIBS $<TARGET_OBJECTS:hs_exec_shared_avx2>)
+            set_target_properties(hs_exec_shared_avx2 PROPERTIES
+                COMPILE_FLAGS "-march=core-avx2"
+                POSITION_INDEPENDENT_CODE TRUE
+                RULE_LAUNCH_COMPILE "${BUILD_WRAPPER} avx2 ${CMAKE_MODULE_PATH}/keep.syms.in"
+                )
+        endif (BUILD_AVX2)
         if (BUILD_AVX512)
             add_library(hs_exec_shared_avx512 OBJECT ${hs_exec_SRCS} ${hs_exec_avx2_SRCS})
             list(APPEND RUNTIME_SHLIBS $<TARGET_OBJECTS:hs_exec_shared_avx512>)
index b09307285bd3c9bce093e5c6940b25f78c55bb9a..691861d66338166b2be958a10ba076f9e23d297f 100644 (file)
@@ -28,6 +28,9 @@ if (BUILD_AVX512VBMI)
 endif ()
 
 if (FAT_RUNTIME)
+    if (NOT DEFINED(BUILD_AVX2))
+        set(BUILD_AVX2 TRUE)
+    endif ()
     # test the highest level microarch to make sure everything works
     if (BUILD_AVX512)
         if (BUILD_AVX512VBMI)
@@ -35,8 +38,10 @@ if (FAT_RUNTIME)
         else ()
             set (CMAKE_REQUIRED_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_C_FLAGS} ${SKYLAKE_FLAG}")
         endif (BUILD_AVX512VBMI)
-    else ()
+    elseif (BUILD_AVX2)
         set (CMAKE_REQUIRED_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_C_FLAGS} -march=core-avx2")
+    elseif ()
+        set (CMAKE_REQUIRED_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_C_FLAGS} -march=core-i7")
     endif ()
 else (NOT FAT_RUNTIME)
     # if not fat runtime, then test given cflags
@@ -99,23 +104,23 @@ if (FAT_RUNTIME)
     if ((ARCH_IA32 OR ARCH_X86_64) AND NOT HAVE_SSSE3)
         message(FATAL_ERROR "SSSE3 support required to build fat runtime")
     endif ()
-    if ((ARCH_IA32 OR ARCH_X86_64) AND NOT HAVE_AVX2)
+    if ((ARCH_IA32 OR ARCH_X86_64) AND BUILD_AVX2 AND NOT HAVE_AVX2)
         message(FATAL_ERROR "AVX2 support required to build fat runtime")
     endif ()
     if ((ARCH_IA32 OR ARCH_X86_64) AND BUILD_AVX512 AND NOT HAVE_AVX512)
         message(FATAL_ERROR "AVX512 support requested but not supported")
     endif ()
-    if (BUILD_AVX512VBMI AND NOT HAVE_AVX512VBMI)
+    if ((ARCH_IA32 OR ARCH_X86_64) AND BUILD_AVX512VBMI AND NOT HAVE_AVX512VBMI)
         message(FATAL_ERROR "AVX512VBMI support requested but not supported")
     endif ()
 else (NOT FAT_RUNTIME)
-    if ((ARCH_IA32 OR ARCH_X86_64) AND NOT HAVE_AVX2)
+    if ((ARCH_IA32 OR ARCH_X86_64) AND NOT BUILD_AVX2)
         message(STATUS "Building without AVX2 support")
     endif ()
     if ((ARCH_IA32 OR ARCH_X86_64) AND NOT HAVE_AVX512)
         message(STATUS "Building without AVX512 support")
     endif ()
-    if (ARCH_IA32 OR ARCH_X86_64 AND NOT HAVE_AVX512VBMI)
+    if ((ARCH_IA32 OR ARCH_X86_64) AND NOT HAVE_AVX512VBMI)
         message(STATUS "Building without AVX512VBMI support")
     endif ()
     if ((ARCH_IA32 OR ARCH_X86_64) AND NOT HAVE_SSSE3)
index f974c0ad8a99a95932d80211f111c3fba80bd0b7..0de8cca2184741d920672f1c003d7b00a38ac70f 100644 (file)
@@ -27,6 +27,9 @@
 /* Define if building "fat" runtime. */
 #cmakedefine FAT_RUNTIME
 
+/* Define if building AVX2 in the fat runtime. */
+#cmakedefine BUILD_AVX2
+
 /* Define if building AVX-512 in the fat runtime. */
 #cmakedefine BUILD_AVX512
 
index 8126f14a15ad863baa1a34a777e10eca78e28413..dae08149b3084cd8ad9c00269fde42c0e2ae4786 100644 (file)
 #define HAVE_SIMD_128_BITS
 #endif
 
-#if defined(__AVX__)
+#if defined(__AVX__) && defined(BUILD_AVX2)
 #define HAVE_AVX
 #define HAVE_SIMD_256_BITS
 #endif
 
-#if defined(__AVX2__)
+#if defined(__AVX2__) && defined(BUILD_AVX2)
 #define HAVE_AVX2
 #define HAVE_SIMD_256_BITS
 #endif
index b0706fa8e6861bad629ae259a512edc796a42db8..a16042fe359b8cf19b4b7daa927f2fbb505346b3 100644 (file)
@@ -93,7 +93,6 @@ set(unit_internal_SOURCES
     internal/insertion_ordered.cpp
     internal/lbr.cpp
     internal/limex_nfa.cpp
-    internal/masked_move.cpp
     internal/multi_bit.cpp
     internal/multi_bit_compress.cpp
     internal/nfagraph_common.h
@@ -128,6 +127,12 @@ set(unit_internal_SOURCES
     internal/vermicelli.cpp
     internal/main.cpp
     )
+if (BUILD_AVX2)
+set(unit_internal_SOURCES
+    ${unit_internal_SOURCES}
+    internal/masked_move.cpp
+   )
+endif(BUILD_AVX2)
 
 if(WIN32 AND (BUILD_STATIC_AND_SHARED OR BUILD_SHARED_LIBS))
 add_executable(unit-internal ${unit_internal_SOURCES} $<TARGET_OBJECTS:hs_compile_shared> $<TARGET_OBJECTS:hs_exec_shared>)