[packages/x265] update arm flags patch
atler
atler at pld-linux.org
Sun Sep 15 21:06:54 CEST 2024
commit 76a09f3e8a8c596fc52be6f966af9843b064e896
Author: Jan Palus <atler at pld-linux.org>
Date: Sun Sep 15 21:04:07 2024 +0200
update arm flags patch
x265-arm_flags.patch | 122 +++++++++++++++++++++++++++++++++++++++++----------
1 file changed, 100 insertions(+), 22 deletions(-)
---
diff --git a/x265-arm_flags.patch b/x265-arm_flags.patch
index d7b7d1c..68c17ad 100644
--- a/x265-arm_flags.patch
+++ b/x265-arm_flags.patch
@@ -20,7 +20,7 @@
if(CROSS_COMPILE_ARM)
message(STATUS "Cross compiling for ARM arch")
else()
-@@ -244,45 +244,7 @@
+@@ -244,123 +244,7 @@
endif()
endif()
endif()
@@ -36,28 +36,106 @@
- set(ARM_ARGS -mcpu=native -mfloat-abi=hard -mfpu=vfp -marm)
- endif()
- endif()
-- if(ARM64 OR CROSS_COMPILE_ARM64)
-- find_package(Neon)
-- find_package(SVE)
-- find_package(SVE2)
-- if(CPU_HAS_SVE2 OR CROSS_COMPILE_SVE2)
-- message(STATUS "Found SVE2")
-- set(ARM_ARGS -O3 -march=armv8-a+sve2 -fPIC -flax-vector-conversions)
-- add_definitions(-DHAVE_SVE2)
-- add_definitions(-DHAVE_SVE)
-- add_definitions(-DHAVE_NEON) # for NEON c/c++ primitives, as currently there is no implementation that use SVE2
-- elseif(CPU_HAS_SVE OR CROSS_COMPILE_SVE)
-- message(STATUS "Found SVE")
-- set(ARM_ARGS -O3 -march=armv8-a+sve -fPIC -flax-vector-conversions)
-- add_definitions(-DHAVE_SVE)
-- add_definitions(-DHAVE_NEON) # for NEON c/c++ primitives, as currently there is no implementation that use SVE
-- elseif(CPU_HAS_NEON)
-- message(STATUS "Found NEON")
-- set(ARM_ARGS -fPIC -flax-vector-conversions)
-- add_definitions(-DHAVE_NEON)
+- if(ARM64)
+- message(STATUS "Found Neon")
+- set(CPU_HAS_NEON 1)
+- add_definitions(-DX265_ARCH_ARM64=1 -DHAVE_NEON=1)
+-
+- if(CROSS_COMPILE_ARM64)
+- # Handle cross-compilation options.
+- if(CROSS_COMPILE_NEON_DOTPROD)
+- set(CPU_HAS_NEON_DOTPROD 1)
+- endif()
+- if(CROSS_COMPILE_NEON_I8MM)
+- set(CPU_HAS_NEON_I8MM 1)
+- # Impose the constraint that Neon I8MM implies Neon DotProd.
+- set(CPU_HAS_NEON_DOTPROD 1)
+- endif()
+- if(CROSS_COMPILE_SVE)
+- set(CPU_HAS_SVE 1)
+- # Impose the constraint that SVE implies Neon DotProd and I8MM.
+- set(CPU_HAS_NEON_DOTPROD 1)
+- set(CPU_HAS_NEON_I8MM 1)
+- endif()
+- if(CROSS_COMPILE_SVE2)
+- set(CPU_HAS_SVE2 1)
+- # SVE2 implies SVE and Neon DotProd.
+- set(CPU_HAS_SVE 1)
+- set(CPU_HAS_NEON_DOTPROD 1)
+- # Impose the constraint that SVE2 implies Neon I8MM.
+- set(CPU_HAS_NEON_I8MM 1)
+- endif()
- else()
-- set(ARM_ARGS -fPIC -flax-vector-conversions)
-- endif()
+- if(CMAKE_SYSTEM_NAME MATCHES "Linux|Darwin")
+- find_package(NEON_DOTPROD)
+- find_package(NEON_I8MM)
+- find_package(SVE)
+- find_package(SVE2)
+- else()
+- message(STATUS "Compile time feature detection unsupported on this platform")
+- endif()
+- endif()
+-
+- if(CPU_HAS_NEON_DOTPROD)
+- # Neon DotProd is mandatory from Armv8.4.
+- message(STATUS "Found Neon DotProd")
+- set(ARM_ARGS -O3 -march=armv8.2-a+dotprod)
+- add_definitions(-DHAVE_NEON_DOTPROD=1)
+- endif()
+- if(CPU_HAS_NEON_I8MM)
+- # Neon I8MM is mandatory from Armv8.6.
+- message(STATUS "Found Neon I8MM")
+- # Impose the constraint that Neon I8MM implies Neon DotProd.
+- if(NOT CPU_HAS_NEON_DOTPROD)
+- message(FATAL_ERROR "Unsupported AArch64 feature combination (Neon I8MM without Neon DotProd)")
+- endif()
+- set(ARM_ARGS -O3 -march=armv8.2-a+dotprod+i8mm)
+- add_definitions(-DHAVE_NEON_I8MM=1)
+- endif()
+- if(CPU_HAS_SVE)
+- message(STATUS "Found SVE")
+- # Impose the constraint that SVE implies Neon I8MM.
+- if(NOT CPU_HAS_NEON_I8MM)
+- message(FATAL_ERROR "Unsupported AArch64 feature combination (SVE without Neon I8MM)")
+- endif()
+- set(ARM_ARGS -O3 -march=armv8.2-a+dotprod+i8mm+sve)
+- add_definitions(-DHAVE_SVE=1)
+- endif()
+- if(CPU_HAS_SVE2)
+- message(STATUS "Found SVE2")
+- # SVE2 is only available from Armv9.0, and armv9-a implies +dotprod
+- set(ARM_ARGS -O3 -march=armv9-a+i8mm+sve2)
+- add_definitions(-DHAVE_SVE2=1)
+- endif()
+- set(ARM_ARGS ${ARM_ARGS} -fPIC)
+- # Do not allow implicit vector type conversions in Clang builds (this
+- # is already the default in GCC builds).
+- check_cxx_compiler_flag(-flax-vector-conversions=none CC_HAS_FLAX_VEC_CONV_NONE)
+- if(CC_HAS_FLAX_VEC_CONV_NONE)
+- set(ARM_ARGS ${ARM_ARGS} -flax-vector-conversions=none)
+- endif()
+- if(CPU_HAS_SVE)
+- set(SVE_HEADER_TEST "
+-#ifndef __ARM_NEON_SVE_BRIDGE
+-#error 1
+-#endif
+-#include <arm_sve.h>
+-#include <arm_neon_sve_bridge.h>
+-int main() { return 0; }")
+- set(OLD_CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS})
+- # CMAKE_REQUIRED_FLAGS requires a space-delimited string, whereas
+- # ARM_ARGS is defined and used elsewhere as a ;-list.
+- foreach(ARM_ARG ${ARM_ARGS})
+- string(APPEND CMAKE_REQUIRED_FLAGS " ${ARM_ARG}")
+- endforeach()
+- check_c_source_compiles("${SVE_HEADER_TEST}" SVE_HEADER_C_TEST_COMPILED)
+- check_cxx_source_compiles("${SVE_HEADER_TEST}" SVE_HEADER_CXX_TEST_COMPILED)
+- set(CMAKE_REQUIRED_FLAGS ${OLD_CMAKE_REQUIRED_FLAGS})
+- if(SVE_HEADER_C_TEST_COMPILED AND SVE_HEADER_CXX_TEST_COMPILED)
+- add_definitions(-DHAVE_SVE_BRIDGE=1)
+- set(HAVE_SVE_BRIDGE 1)
+- endif()
+- endif()
- endif()
- if(ENABLE_PIC)
- list(APPEND ARM_ARGS -DPIC)
================================================================
---- gitweb:
http://git.pld-linux.org/gitweb.cgi/packages/x265.git/commitdiff/76a09f3e8a8c596fc52be6f966af9843b064e896
More information about the pld-cvs-commit
mailing list