diff mbox series

[meta-multimedia] openh264: make neon optional and disable if not supported

Message ID 20230831085411.3715616-1-bbara93@gmail.com
State Under Review
Headers show
Series [meta-multimedia] openh264: make neon optional and disable if not supported | expand

Commit Message

Benjamin Bara Aug. 31, 2023, 8:54 a.m. UTC
From: Benjamin Bara <benjamin.bara@skidata.com>

openh264 currently enforces neon on armv7, although it has fallbacks
implemented in C/C++ and it is mentioned in the README that it is
optional[1].

Therefore, make neon optional and disable it if the machine does not
support it.

[1] https://github.com/cisco/openh264/blob/v2.3.1/README.md?plain=1#L54

Signed-off-by: Benjamin Bara <benjamin.bara@skidata.com>
---
 ...ossibility-to-disable-NEON-extension.patch | 103 ++++++++++++++++++
 .../openh264/openh264_2.3.1.bb                |   4 +
 2 files changed, 107 insertions(+)
 create mode 100644 meta-multimedia/recipes-multimedia/openh264/openh264/0002-Makefile-add-possibility-to-disable-NEON-extension.patch
diff mbox series

Patch

diff --git a/meta-multimedia/recipes-multimedia/openh264/openh264/0002-Makefile-add-possibility-to-disable-NEON-extension.patch b/meta-multimedia/recipes-multimedia/openh264/openh264/0002-Makefile-add-possibility-to-disable-NEON-extension.patch
new file mode 100644
index 000000000..298ac1c01
--- /dev/null
+++ b/meta-multimedia/recipes-multimedia/openh264/openh264/0002-Makefile-add-possibility-to-disable-NEON-extension.patch
@@ -0,0 +1,103 @@ 
+From bc3a3baeaccfe9c1286848b348baf92dfbd05346 Mon Sep 17 00:00:00 2001
+From: Benjamin Bara <benjamin.bara@skidata.com>
+Date: Thu, 31 Aug 2023 09:27:31 +0200
+Subject: [PATCH 2/2] Makefile: add possibility to disable NEON extension
+
+README states that the NEON extension is optional. However, currently it
+cannot be turned off, therefore add an option to disable it.
+
+Upstream-Status: Submitted [https://github.com/cisco/openh264/pull/3679]
+Signed-off-by: Benjamin Bara <benjamin.bara@skidata.com>
+---
+ Makefile                   |  1 +
+ build/arch.mk              |  4 ++++
+ build/msvc-common.mk       | 10 ++++++++--
+ build/platform-mingw_nt.mk |  5 ++++-
+ 4 files changed, 17 insertions(+), 3 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index baed53a7..cc22c4aa 100644
+--- a/Makefile
++++ b/Makefile
+@@ -35,6 +35,7 @@ CCASFLAGS=$(CFLAGS)
+ STATIC_LDFLAGS=-lstdc++
+ STRIP ?= strip
+ USE_STACK_PROTECTOR = Yes
++USE_NEON=Yes
+ 
+ SHAREDLIB_MAJORVERSION=7
+ FULL_VERSION := 2.3.1
+diff --git a/build/arch.mk b/build/arch.mk
+index 4e1538c4..fd6a81e4 100644
+--- a/build/arch.mk
++++ b/build/arch.mk
+@@ -17,18 +17,22 @@ ifneq ($(filter-out arm64 arm64e, $(filter arm%, $(ARCH))),)
+ ifeq ($(USE_ASM), Yes)
+ ASM_ARCH = arm
+ ASMFLAGS += -I$(SRC_PATH)codec/common/arm/
++ifeq ($(USE_NEON), Yes)
+ CFLAGS += -DHAVE_NEON
+ endif
+ endif
++endif
+ 
+ #for arm64
+ ifneq ($(filter arm64 aarch64 arm64e, $(ARCH)),)
+ ifeq ($(USE_ASM), Yes)
+ ASM_ARCH = arm64
+ ASMFLAGS += -I$(SRC_PATH)codec/common/arm64/
++ifeq ($(USE_NEON), Yes)
+ CFLAGS += -DHAVE_NEON_AARCH64
+ endif
+ endif
++endif
+ 
+ #for mips
+ ifneq ($(filter mips mips64, $(ARCH)),)
+diff --git a/build/msvc-common.mk b/build/msvc-common.mk
+index 5891ea4e..5a1e2582 100644
+--- a/build/msvc-common.mk
++++ b/build/msvc-common.mk
+@@ -10,7 +10,10 @@ else
+ endif
+ ifeq ($(ASM_ARCH), arm)
+ CCAS = gas-preprocessor.pl -as-type armasm -force-thumb -- armasm
+-CCASFLAGS = -nologo -DHAVE_NEON -ignore 4509
++CCASFLAGS = -nologo -ignore 4509
++ifeq ($(USE_NEON), Yes)
++CCASFLAGS += -DHAVE_NEON
++endif
+ endif
+ 
+ CC=cl
+@@ -20,7 +23,10 @@ CXX_O=-Fo$@
+ 
+ ifeq ($(ASM_ARCH), arm64)
+ CCAS = clang-cl
+-CCASFLAGS = -nologo -DHAVE_NEON_AARCH64 --target=arm64-windows
++CCASFLAGS = -nologo --target=arm64-windows
++ifeq ($(USE_NEON), Yes)
++CCASFLAGS += -DHAVE_NEON_AARCH64
++endif
+ endif
+ 
+ 
+diff --git a/build/platform-mingw_nt.mk b/build/platform-mingw_nt.mk
+index b7a5495d..d73e362a 100644
+--- a/build/platform-mingw_nt.mk
++++ b/build/platform-mingw_nt.mk
+@@ -17,7 +17,10 @@ endif
+ endif
+ ifeq ($(ASM_ARCH), arm)
+ CCAS = gas-preprocessor.pl -as-type clang -force-thumb -- $(CC)
+-CCASFLAGS = -DHAVE_NEON -mimplicit-it=always
++CCASFLAGS = -mimplicit-it=always
++ifeq ($(USE_NEON), Yes)
++CCASFLAGS += -DHAVE_NEON
++endif
+ endif
+ EXEEXT = .exe
+ 
+-- 
+2.34.1
+
diff --git a/meta-multimedia/recipes-multimedia/openh264/openh264_2.3.1.bb b/meta-multimedia/recipes-multimedia/openh264/openh264_2.3.1.bb
index 89b1ea58c..6dfd75935 100644
--- a/meta-multimedia/recipes-multimedia/openh264/openh264_2.3.1.bb
+++ b/meta-multimedia/recipes-multimedia/openh264/openh264_2.3.1.bb
@@ -16,6 +16,7 @@  SRCREV = "0a48f4d2e9be2abb4fb01b4c3be83cf44ce91a6e"
 BRANCH = "openh264v${PV}"
 SRC_URI = "git://github.com/cisco/openh264.git;protocol=https;branch=${BRANCH} \
            file://0001-Makefile-Use-cp-options-to-preserve-file-mode.patch \
+           file://0002-Makefile-add-possibility-to-disable-NEON-extension.patch \
            "
 
 COMPATIBLE_MACHINE:armv7a = "(.*)"
@@ -35,6 +36,9 @@  EXTRA_OEMAKE:mips = "ARCH=mips"
 EXTRA_OEMAKE:mips64 = "ARCH=mips64"
 EXTRA_OEMAKE:riscv64 = "ARCH=riscv64"
 
+EXTRA_OEMAKE:append:armv7a = "${@bb.utils.contains("TUNE_FEATURES","neon",""," USE_NEON=No",d)}"
+EXTRA_OEMAKE:append:armv7ve = "${@bb.utils.contains("TUNE_FEATURES","neon",""," USE_NEON=No",d)}"
+
 EXTRA_OEMAKE:append = " ENABLEPIC=Yes"
 do_configure() {
     :