From 822392dd0aed93321beda5855b41378f63727911 Mon Sep 17 00:00:00 2001 From: Simone Caronni Date: Wed, 24 Sep 2025 09:22:18 +0200 Subject: [PATCH] Allow building on non-x86 systems --- src_base/CMakeLists.txt | 22 +++++++++++++++++++--- src_base/xeve_def.h | 4 ++-- src_base/xeve_port.h | 4 ++-- src_base/xeve_type.h | 8 ++++---- src_main/CMakeLists.txt | 32 ++++++++++++++++++++++++++------ 5 files changed, 53 insertions(+), 17 deletions(-) diff --git a/src_base/CMakeLists.txt b/src_base/CMakeLists.txt index ae2ba2d..8f0d2e1 100644 --- a/src_base/CMakeLists.txt +++ b/src_base/CMakeLists.txt @@ -17,15 +17,25 @@ file (GLOB LIB_NEON_INC "./neon/xeve_*.h" ) include(GenerateExportHeader) include_directories("${CMAKE_BINARY_DIR}") +set(ARM "FALSE") +message("SYSTEM_PROCESSOR=${CMAKE_SYSTEM_PROCESSOR}") +if(${CMAKE_SYSTEM_PROCESSOR} MATCHES "^(arm|aarch)") + set(ARM "TRUE") +elseif(${CMAKE_SYSTEM_PROCESSOR} MATCHES "^(x86|ia64|i386|i686)") + set(X86 "TRUE") +endif() if("${ARM}" STREQUAL "TRUE") add_library( ${LIB_NAME_BASE} STATIC ${LIB_API_SRC} ${XEVE_INC} ${LIB_BASE_SRC} ${LIB_BASE_INC} ${LIB_NEON_INC} ${LIB_NEON_SRC}) add_library( ${LIB_NAME_BASE}_dynamic SHARED ${LIB_API_SRC} ${XEVE_INC} ${LIB_BASE_SRC} ${LIB_BASE_INC} ${LIB_NEON_INC} ${LIB_NEON_SRC}) -else() +elseif(X86) add_library( ${LIB_NAME_BASE} STATIC ${LIB_API_SRC} ${XEVE_INC} ${LIB_BASE_SRC} ${LIB_BASE_INC} ${LIB_SSE_SRC} ${LIB_SSE_INC} ${LIB_AVX_SRC} ${LIB_AVX_INC} ) add_library( ${LIB_NAME_BASE}_dynamic SHARED ${LIB_API_SRC} ${XEVE_INC} ${LIB_BASE_SRC} ${LIB_BASE_INC} ${LIB_SSE_SRC} ${LIB_SSE_INC} ${LIB_AVX_SRC} ${LIB_AVX_INC} ) +else() + add_library( ${LIB_NAME_BASE} STATIC ${LIB_API_SRC} ${XEVE_INC} ${LIB_BASE_SRC} ${LIB_BASE_INC} ) + add_library( ${LIB_NAME_BASE}_dynamic SHARED ${LIB_API_SRC} ${XEVE_INC} ${LIB_BASE_SRC} ${LIB_BASE_INC} ) endif() set_target_properties(${LIB_NAME_BASE}_dynamic PROPERTIES VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR} SOVERSION ${LIB_SOVERSION}) @@ -59,8 +69,10 @@ source_group("base\\neon\\source" FILES ${LIB_NEON_SRC}) if("${ARM}" STREQUAL "TRUE") include_directories( ${LIB_NAME_BASE} PUBLIC . .. ../inc ./neon) -else() +elseif(X86) include_directories( ${LIB_NAME_BASE} PUBLIC . .. ../inc ./sse ./avx) +else() + include_directories( ${LIB_NAME_BASE} PUBLIC . .. ../inc) endif() set( SSE ${BASE_INC_FILES} ${LIB_SSE_SRC}) @@ -83,7 +95,11 @@ if( MSVC ) ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/import/lib) elseif( UNIX OR MINGW ) - if("${ARM}" STREQUAL "FALSE") + if(ARM) + add_definitions(-DARM=1) + set_property( SOURCE ${NEON} APPEND PROPERTY COMPILE_FLAGS "-flax-vector-conversions -Wno-cpp") + elseif(X86) + add_definitions(-DX86=1) set_property( SOURCE ${SSE} APPEND PROPERTY COMPILE_FLAGS "-msse4.1" ) set_property( SOURCE ${AVX} APPEND PROPERTY COMPILE_FLAGS " -mavx2" ) endif() diff --git a/src_base/xeve_def.h b/src_base/xeve_def.h index 8089a9c..6fee5d0 100644 --- a/src_base/xeve_def.h +++ b/src_base/xeve_def.h @@ -1515,10 +1515,10 @@ enum TQC_RUN { #include "xeve_ipred.h" #include "xeve_picman.h" #include "xeve_mc.h" -#ifndef ARM +#if defined(X86) #include "xeve_mc_sse.h" #include "xeve_mc_avx.h" -#else +#elif defined(ARM) #include "xeve_mc_neon.h" #endif #include "xeve_type.h" diff --git a/src_base/xeve_port.h b/src_base/xeve_port.h index f349f6a..63e7ae1 100644 --- a/src_base/xeve_port.h +++ b/src_base/xeve_port.h @@ -140,10 +140,10 @@ void xeve_trace_line(char * pre); #define xeve_assert_gv(x,r,v,g) \ {if(!(x)){assert(x); (r)=(v); goto g;}} -#ifndef ARM +#if defined(X86) #define X86_SSE 1 #define ARM_NEON 0 -#else +#elif defined (ARM) #define X86_SSE 0 #define ARM_NEON 1 #endif diff --git a/src_base/xeve_type.h b/src_base/xeve_type.h index 8cf5d98..87d99a7 100644 --- a/src_base/xeve_type.h +++ b/src_base/xeve_type.h @@ -36,10 +36,10 @@ #include "xeve_def.h" #include "xeve_bsw.h" #include "xeve_sad.h" -#ifndef ARM +#if defined(X86) #include "xeve_sad_sse.h" #include "xeve_sad_avx.h" -#else +#elif defined(ARM) #include "xeve_sad_neon.h" #endif @@ -1018,11 +1018,11 @@ typedef struct _ALF_SLICE_PARAM ALF_SLICE_PARAM; #include "xeve_tbl.h" #include "xeve_itdq.h" -#ifndef ARM +#if defined(X86) #include "xeve_itdq_sse.h" #include "xeve_itdq_avx.h" #include "xeve_tq_avx.h" -#else +#elif defined(ARM) #include "xeve_itdq_neon.h" #include "xeve_tq_neon.h" #endif diff --git a/src_main/CMakeLists.txt b/src_main/CMakeLists.txt index 366a3c3..04a272e 100644 --- a/src_main/CMakeLists.txt +++ b/src_main/CMakeLists.txt @@ -19,18 +19,31 @@ file (GLOB LIB_MAIN_SSE_SRC "./sse/xevem_*.c") file (GLOB LIB_MAIN_SSE_INC "./sse/xevem_*.h" ) file (GLOB LIB_MAIN_AVX_SRC "./avx/xevem_*.c") file (GLOB LIB_MAIN_AVX_INC "./avx/xevem_*.h" ) +file (GLOB LIB_MAIN_NEON_SRC "./neon/xevem_*.c") +file (GLOB LIB_MAIN_NEON_INC "./neon/xevem_*.h" ) include(GenerateExportHeader) include_directories("${CMAKE_BINARY_DIR}") +set(ARM "FALSE") +message("SYSTEM_PROCESSOR=${CMAKE_SYSTEM_PROCESSOR}") +if(${CMAKE_SYSTEM_PROCESSOR} MATCHES "^(arm|aarch)") + set(ARM "TRUE") +elseif(${CMAKE_SYSTEM_PROCESSOR} MATCHES "^(x86|ia64|i386|i686)") + set(X86 "TRUE") +endif() + if("${ARM}" STREQUAL "TRUE") - add_library( ${LIB_NAME} STATIC ${LIB_API_MAIN_SRC} ${ETM_INC} ${LIB_BASE_SRC} ${LIB_BASE_INC} ${LIB_MAIN_SRC} ${LIB_MAIN_INC} ${LIB_NEON_INC} ${LIB_NEON_SRC} ) - add_library( ${LIB_NAME}_dynamic SHARED ${LIB_API_MAIN_SRC} ${ETM_INC} ${LIB_BASE_SRC} ${LIB_BASE_INC} ${LIB_MAIN_SRC} ${LIB_MAIN_INC} ${LIB_NEON_INC} ${LIB_NEON_SRC}) -else() + add_library( ${LIB_NAME} STATIC ${LIB_API_MAIN_SRC} ${ETM_INC} ${LIB_BASE_SRC} ${LIB_BASE_INC} ${LIB_MAIN_SRC} ${LIB_MAIN_INC} ${LIB_NEON_SRC} ${LIB_NEON_INC} ) + add_library( ${LIB_NAME}_dynamic SHARED ${LIB_API_MAIN_SRC} ${ETM_INC} ${LIB_BASE_SRC} ${LIB_BASE_INC} ${LIB_MAIN_SRC} ${LIB_MAIN_INC} ${LIB_NEON_SRC} ${LIB_NEON_INC}) +elseif(X86) add_library( ${LIB_NAME} STATIC ${LIB_API_MAIN_SRC} ${ETM_INC} ${LIB_BASE_SRC} ${LIB_BASE_INC} ${LIB_MAIN_SRC} ${LIB_MAIN_INC} ${LIB_SSE_SRC} ${LIB_SSE_INC} ${LIB_MAIN_SSE_SRC} ${LIB_MAIN_SSE_INC} ${LIB_AVX_SRC} ${LIB_AVX_INC} ${LIB_MAIN_AVX_SRC} ${LIB_MAIN_AVX_INC} ) add_library( ${LIB_NAME}_dynamic SHARED ${LIB_API_MAIN_SRC} ${ETM_INC} ${LIB_BASE_SRC} ${LIB_BASE_INC} ${LIB_MAIN_SRC} ${LIB_MAIN_INC} - ${LIB_SSE_SRC} ${LIB_SSE_INC} ${LIB_MAIN_SSE_SRC} ${LIB_MAIN_SSE_INC} ${LIB_AVX_SRC} ${LIB_AVX_SRC} ${LIB_AVX_INC} ${LIB_MAIN_AVX_SRC} ${LIB_MAIN_AVX_INC}) + ${LIB_SSE_SRC} ${LIB_SSE_INC} ${LIB_MAIN_SSE_SRC} ${LIB_MAIN_SSE_INC} ${LIB_AVX_SRC} ${LIB_AVX_INC} ${LIB_MAIN_AVX_SRC} ${LIB_MAIN_AVX_INC}) +else() + add_library( ${LIB_NAME} STATIC ${LIB_API_MAIN_SRC} ${ETM_INC} ${LIB_BASE_SRC} ${LIB_BASE_INC} ${LIB_MAIN_SRC} ${LIB_MAIN_INC} ) + add_library( ${LIB_NAME}_dynamic SHARED ${LIB_API_MAIN_SRC} ${ETM_INC} ${LIB_BASE_SRC} ${LIB_BASE_INC} ${LIB_MAIN_SRC} ${LIB_MAIN_INC} ) endif() set_target_properties(${LIB_NAME}_dynamic PROPERTIES VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR} SOVERSION ${LIB_SOVERSION}) @@ -71,12 +84,15 @@ source_group("base\\neon\\source" FILES ${LIB_NEON_SRC}) if("${ARM}" STREQUAL "TRUE") include_directories( ${LIB_NAME} PUBLIC . .. ../inc ../src_base ../src_base/neon) -else() +elseif(X86) include_directories( ${LIB_NAME} PUBLIC . .. ../inc ./sse ./avx ../src_base ../src_base/sse ../src_base/avx) +else() + include_directories( ${LIB_NAME} PUBLIC . .. ../inc ../src_base) endif() set( SSE ${BASE_INC_FILES} ${LIB_SSE_SRC} ${LIB_MAIN_SSE_SRC}) set( AVX ${LIB_AVX_SRC} ${LIB_MAIN_AVX_SRC}) +set( NEON ${LIB_NEON_SRC}) set_target_properties(${LIB_NAME}_dynamic PROPERTIES OUTPUT_NAME ${LIB_NAME}) @@ -94,7 +110,11 @@ if( MSVC ) ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/import/lib) elseif( UNIX OR MINGW ) - if("${ARM}" STREQUAL "FALSE") + if(ARM) + add_definitions(-DARM=1) + set_property( SOURCE ${NEON} APPEND PROPERTY COMPILE_FLAGS "-flax-vector-conversions -Wno-cpp") + elseif(X86) + add_definitions(-DX86=1) set_property( SOURCE ${SSE} APPEND PROPERTY COMPILE_FLAGS "-msse4.1" ) set_property( SOURCE ${AVX} APPEND PROPERTY COMPILE_FLAGS " -mavx2" ) endif()