From 6d27bcc046683f0a8e87e1bbbf0ff3b68bd87497 Mon Sep 17 00:00:00 2001 From: Simone Caronni Date: Wed, 24 Sep 2025 09:17:37 +0200 Subject: [PATCH 1/2] Allow building on non-x86 systems Signed-off-by: KP Choi --- CMakeLists.txt | 12 ++++++++++++ src_base/CMakeLists.txt | 24 +++++++++++++++++++++--- src_base/xevd_def.h | 4 ++-- src_base/xevd_port.h | 4 ++-- src_main/CMakeLists.txt | 24 +++++++++++++++++++++--- 5 files changed, 58 insertions(+), 10 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5d2d804..23ad04c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -135,6 +135,18 @@ endif() message ("c Flags: " ${CMAKE_C_FLAGS}) message ("linker Flags: " ${CMAKE_EXE_LINKER_FLAGS}) +# To build for arm provide in command line: -DARM=TRUE +if(NOT ARM) + set(ARM "FALSE") +else() + add_definitions(-DARM=1) + set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -flax-vector-conversions") + if(NOT "${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin") + set(CMAKE_EXE_LINKER_FLAGS "-static") + endif() +endif() +message("ARM=${ARM}") + ######################################## # Configuration ######################################## diff --git a/src_base/CMakeLists.txt b/src_base/CMakeLists.txt index 5a2ff99..8c34a8c 100644 --- a/src_base/CMakeLists.txt +++ b/src_base/CMakeLists.txt @@ -15,14 +15,26 @@ file (GLOB LIB_NEON_INC "neon/xevd_*.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} ${XEVD_INC} ${LIB_BASE_SRC} ${LIB_BASE_INC} ${LIB_NEON_SRC} ${LIB_NEON_INC} ) add_library( ${LIB_NAME_BASE}_dynamic SHARED ${LIB_API_SRC} ${XEVD_INC} ${LIB_BASE_SRC} ${LIB_BASE_INC} ${LIB_NEON_SRC} ${LIB_NEON_INC} ) -else() +elseif(X86) add_library( ${LIB_NAME_BASE} STATIC ${LIB_API_SRC} ${XEVD_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} ${XEVD_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} ${XEVD_INC} ${LIB_BASE_SRC} ${LIB_BASE_INC} ) + add_library( ${LIB_NAME_BASE}_dynamic SHARED ${LIB_API_SRC} ${XEVD_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}) @@ -56,8 +68,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() @@ -86,7 +100,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") + 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/xevd_def.h b/src_base/xevd_def.h index c790c8a..188d1a2 100644 --- a/src_base/xevd_def.h +++ b/src_base/xevd_def.h @@ -1498,7 +1498,7 @@ int xevd_dec_slice(XEVD_CTX * ctx, XEVD_CORE * core); #include "xevd_mc.h" #include "xevd_eco.h" #include "xevd_df.h" -#ifndef ARM +#if defined(X86) #include "xevd_mc_sse.h" #include "xevd_mc_avx.h" #include "xevd_itdq_sse.h" @@ -1506,7 +1506,7 @@ int xevd_dec_slice(XEVD_CTX * ctx, XEVD_CORE * core); #include "xevd_recon_avx.h" #include "xevd_recon_sse.h" #include "xevd_dbk_sse.h" -#else +#elif defined(ARM) #include "xevd_mc_neon.h" #include "xevd_itdq_neon.h" #include "xevd_recon_neon.h" diff --git a/src_base/xevd_port.h b/src_base/xevd_port.h index 773853a..dcd916e 100644 --- a/src_base/xevd_port.h +++ b/src_base/xevd_port.h @@ -137,10 +137,10 @@ void xevd_trace_line(char * pre); #define xevd_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_main/CMakeLists.txt b/src_main/CMakeLists.txt index 05f6fec..5c33261 100644 --- a/src_main/CMakeLists.txt +++ b/src_main/CMakeLists.txt @@ -27,16 +27,27 @@ file (GLOB LIB_MAIN_NEON_INC "./neon/xevdm_*.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} ${XEVD_INC} ${LIB_BASE_SRC} ${LIB_BASE_INC} ${LIB_MAIN_SRC} ${LIB_MAIN_INC} ${LIB_NEON_SRC} ${LIB_NEON_INC} ${LIB_MAIN_NEON_SRC} ${LIB_MAIN_NEON_INC} ) add_library( ${LIB_NAME}_dynamic SHARED ${LIB_API_MAIN_SRC} ${XEVD_INC} ${LIB_BASE_SRC} ${LIB_BASE_INC} ${LIB_MAIN_SRC} ${LIB_MAIN_INC} ${LIB_NEON_SRC} ${LIB_NEON_INC} ${LIB_MAIN_NEON_SRC} ${LIB_MAIN_NEON_INC} ) -else() +elseif(X86) add_library( ${LIB_NAME} STATIC ${LIB_API_MAIN_SRC} ${XEVD_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} ${XEVD_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} ) +else() + add_library( ${LIB_NAME} STATIC ${LIB_API_MAIN_SRC} ${XEVD_INC} ${LIB_BASE_SRC} ${LIB_BASE_INC} ${LIB_MAIN_SRC} ${LIB_MAIN_INC} ) + add_library( ${LIB_NAME}_dynamic SHARED ${LIB_API_MAIN_SRC} ${XEVD_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}) @@ -79,12 +90,15 @@ source_group("main\\neon\\source" FILES ${LIB_MAIN_NEON_SRC}) if("${ARM}" STREQUAL "TRUE") include_directories( ${LIB_NAME} PUBLIC . .. ../inc ./neon ../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} ${LIB_MAIN_NEON_SRC}) set_target_properties(${LIB_NAME}_dynamic PROPERTIES OUTPUT_NAME ${LIB_NAME}) @@ -101,7 +115,11 @@ if( MSVC ) set_target_properties(${LIB_NAME}_dynamic PROPERTIES FOLDER lib 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") + 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() From f900c5884033757b9ac1c1ce751cc602f0d9cce5 Mon Sep 17 00:00:00 2001 From: KP Choi Date: Fri, 7 Aug 2026 07:14:46 +0900 Subject: [PATCH 2/2] Fix arch detection and generic C fallback for non-x86 builds Signed-off-by: KP Choi --- CMakeLists.txt | 33 +++++++++++++++------------------ src_base/CMakeLists.txt | 10 ---------- src_main/CMakeLists.txt | 10 ---------- 3 files changed, 15 insertions(+), 38 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 23ad04c..2105671 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -80,16 +80,25 @@ else() return() endif() -# To build for arm provide in command line: -DARM=TRUE -if(NOT ARM) - set(ARM "FALSE") -else() - add_definitions(-DARM=1) - set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -flax-vector-conversions") +# To cross-build for arm provide in command line: -DARM=TRUE +if(ARM) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -flax-vector-conversions") if(NOT "${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin") set(CMAKE_EXE_LINKER_FLAGS "-static") endif() endif() + +string(TOLOWER "${CMAKE_SYSTEM_PROCESSOR}" SYSTEM_PROCESSOR) +message("SYSTEM_PROCESSOR=${CMAKE_SYSTEM_PROCESSOR}") +if(ARM OR SYSTEM_PROCESSOR MATCHES "^(arm|aarch)") + set(ARM "TRUE") + add_definitions(-DARM=1) +elseif(SYSTEM_PROCESSOR MATCHES "^(x86|amd64|ia64|i386|i686)") + set(X86 "TRUE") + add_definitions(-DX86=1) +else() + set(ARM "FALSE") +endif() message("ARM=${ARM}") ######################################## @@ -135,18 +144,6 @@ endif() message ("c Flags: " ${CMAKE_C_FLAGS}) message ("linker Flags: " ${CMAKE_EXE_LINKER_FLAGS}) -# To build for arm provide in command line: -DARM=TRUE -if(NOT ARM) - set(ARM "FALSE") -else() - add_definitions(-DARM=1) - set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -flax-vector-conversions") - if(NOT "${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin") - set(CMAKE_EXE_LINKER_FLAGS "-static") - endif() -endif() -message("ARM=${ARM}") - ######################################## # Configuration ######################################## diff --git a/src_base/CMakeLists.txt b/src_base/CMakeLists.txt index 8c34a8c..243396e 100644 --- a/src_base/CMakeLists.txt +++ b/src_base/CMakeLists.txt @@ -16,14 +16,6 @@ file (GLOB LIB_NEON_INC "neon/xevd_*.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} ${XEVD_INC} ${LIB_BASE_SRC} ${LIB_BASE_INC} ${LIB_NEON_SRC} ${LIB_NEON_INC} ) add_library( ${LIB_NAME_BASE}_dynamic SHARED ${LIB_API_SRC} ${XEVD_INC} ${LIB_BASE_SRC} ${LIB_BASE_INC} ${LIB_NEON_SRC} ${LIB_NEON_INC} ) @@ -101,10 +93,8 @@ if( MSVC ) elseif( UNIX OR MINGW ) if(ARM) - add_definitions(-DARM=1) set_property( SOURCE ${NEON} APPEND PROPERTY COMPILE_FLAGS "-flax-vector-conversions") 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_main/CMakeLists.txt b/src_main/CMakeLists.txt index 5c33261..78ebbc7 100644 --- a/src_main/CMakeLists.txt +++ b/src_main/CMakeLists.txt @@ -27,14 +27,6 @@ file (GLOB LIB_MAIN_NEON_INC "./neon/xevdm_*.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} ${XEVD_INC} ${LIB_BASE_SRC} ${LIB_BASE_INC} ${LIB_MAIN_SRC} ${LIB_MAIN_INC} ${LIB_NEON_SRC} ${LIB_NEON_INC} ${LIB_MAIN_NEON_SRC} ${LIB_MAIN_NEON_INC} ) @@ -116,10 +108,8 @@ if( MSVC ) ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/import/lib) elseif( UNIX OR MINGW ) if(ARM) - add_definitions(-DARM=1) set_property( SOURCE ${NEON} APPEND PROPERTY COMPILE_FLAGS "-flax-vector-conversions") 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()