diff mbox series

[meta-arago,scarthgap/master,1/4] meta-arago-extras: Add recipe for arm-compute-library

Message ID 20250203185953.269693-2-afd@ti.com
State Accepted
Delegated to: Ryan Eatmon
Headers show
Series Add ML frameworks | expand

Commit Message

Andrew Davis Feb. 3, 2025, 6:59 p.m. UTC
The Compute Library is a collection of low-level machine learning
functions optimized for Arm. This will be used for ARMNN and
other machine learning applications and frameworks.

Signed-off-by: Andrew Davis <afd@ti.com>
---
 ...-indention-in-cmake-generator-script.patch | 130 ++++++++++++
 ...ENABLE_NEON-in-code-for-checking-NEO.patch | 114 ++++++++++
 ...ENABLE_SVE-in-code-for-checking-SVE-.patch | 197 ++++++++++++++++++
 ...rce-files-at-library-definition-time.patch | 167 +++++++++++++++
 ...ptions-for-SVE-SVE2-and-BF16-support.patch | 112 ++++++++++
 ...SVE2-support-to-be-disabled-in-CMake.patch |  91 ++++++++
 .../0007-Allow-ARMv7-builds-using-CMake.patch |  86 ++++++++
 ...ymbol-error-when-building-TensorInfo.patch |  46 ++++
 .../arm-compute-library_24.12.bb              |  89 ++++++++
 9 files changed, 1032 insertions(+)
 create mode 100644 meta-arago-extras/recipes-devtools/arm-compute-library/arm-compute-library/0001-fix-Fix-indention-in-cmake-generator-script.patch
 create mode 100644 meta-arago-extras/recipes-devtools/arm-compute-library/arm-compute-library/0002-Use-ARM_COMPUTE_ENABLE_NEON-in-code-for-checking-NEO.patch
 create mode 100644 meta-arago-extras/recipes-devtools/arm-compute-library/arm-compute-library/0003-Use-ARM_COMPUTE_ENABLE_SVE-in-code-for-checking-SVE-.patch
 create mode 100644 meta-arago-extras/recipes-devtools/arm-compute-library/arm-compute-library/0004-Add-source-files-at-library-definition-time.patch
 create mode 100644 meta-arago-extras/recipes-devtools/arm-compute-library/arm-compute-library/0005-Add-CMake-options-for-SVE-SVE2-and-BF16-support.patch
 create mode 100644 meta-arago-extras/recipes-devtools/arm-compute-library/arm-compute-library/0006-Allow-SVE-and-SVE2-support-to-be-disabled-in-CMake.patch
 create mode 100644 meta-arago-extras/recipes-devtools/arm-compute-library/arm-compute-library/0007-Allow-ARMv7-builds-using-CMake.patch
 create mode 100644 meta-arago-extras/recipes-devtools/arm-compute-library/arm-compute-library/0008-Fix-undefined-symbol-error-when-building-TensorInfo.patch
 create mode 100644 meta-arago-extras/recipes-devtools/arm-compute-library/arm-compute-library_24.12.bb

Comments

Denys Dmytriyenko Feb. 5, 2025, 8:07 p.m. UTC | #1
On Mon, Feb 03, 2025 at 12:59:50PM -0600, Andrew Davis via lists.yoctoproject.org wrote:
> The Compute Library is a collection of low-level machine learning
> functions optimized for Arm. This will be used for ARMNN and
> other machine learning applications and frameworks.
> 
> Signed-off-by: Andrew Davis <afd@ti.com>
> ---
>  ...-indention-in-cmake-generator-script.patch | 130 ++++++++++++
>  ...ENABLE_NEON-in-code-for-checking-NEO.patch | 114 ++++++++++
>  ...ENABLE_SVE-in-code-for-checking-SVE-.patch | 197 ++++++++++++++++++
>  ...rce-files-at-library-definition-time.patch | 167 +++++++++++++++
>  ...ptions-for-SVE-SVE2-and-BF16-support.patch | 112 ++++++++++
>  ...SVE2-support-to-be-disabled-in-CMake.patch |  91 ++++++++
>  .../0007-Allow-ARMv7-builds-using-CMake.patch |  86 ++++++++
>  ...ymbol-error-when-building-TensorInfo.patch |  46 ++++
>  .../arm-compute-library_24.12.bb              |  89 ++++++++
>  9 files changed, 1032 insertions(+)
>  create mode 100644 meta-arago-extras/recipes-devtools/arm-compute-library/arm-compute-library/0001-fix-Fix-indention-in-cmake-generator-script.patch
>  create mode 100644 meta-arago-extras/recipes-devtools/arm-compute-library/arm-compute-library/0002-Use-ARM_COMPUTE_ENABLE_NEON-in-code-for-checking-NEO.patch
>  create mode 100644 meta-arago-extras/recipes-devtools/arm-compute-library/arm-compute-library/0003-Use-ARM_COMPUTE_ENABLE_SVE-in-code-for-checking-SVE-.patch
>  create mode 100644 meta-arago-extras/recipes-devtools/arm-compute-library/arm-compute-library/0004-Add-source-files-at-library-definition-time.patch
>  create mode 100644 meta-arago-extras/recipes-devtools/arm-compute-library/arm-compute-library/0005-Add-CMake-options-for-SVE-SVE2-and-BF16-support.patch
>  create mode 100644 meta-arago-extras/recipes-devtools/arm-compute-library/arm-compute-library/0006-Allow-SVE-and-SVE2-support-to-be-disabled-in-CMake.patch
>  create mode 100644 meta-arago-extras/recipes-devtools/arm-compute-library/arm-compute-library/0007-Allow-ARMv7-builds-using-CMake.patch
>  create mode 100644 meta-arago-extras/recipes-devtools/arm-compute-library/arm-compute-library/0008-Fix-undefined-symbol-error-when-building-TensorInfo.patch
>  create mode 100644 meta-arago-extras/recipes-devtools/arm-compute-library/arm-compute-library_24.12.bb

> diff --git a/meta-arago-extras/recipes-devtools/arm-compute-library/arm-compute-library_24.12.bb b/meta-arago-extras/recipes-devtools/arm-compute-library/arm-compute-library_24.12.bb
> new file mode 100644
> index 00000000..383b02fb
> --- /dev/null
> +++ b/meta-arago-extras/recipes-devtools/arm-compute-library/arm-compute-library_24.12.bb
> @@ -0,0 +1,89 @@
> +SUMMARY = "The ARM Computer Vision and Machine Learning library"
> +DESCRIPTION = "The ARM Computer Vision and Machine Learning library is a set of functions optimised for both ARM CPUs and GPUs."
> +LICENSE = "MIT"
> +LIC_FILES_CHKSUM = "file://LICENSES/MIT.txt;md5=35f8944fae972976691f3483b0ac9dba"
> +
> +SRC_URI = " \
> +    git://github.com/ARM-software/ComputeLibrary.git;branch=main;protocol=https \
> +    file://0001-fix-Fix-indention-in-cmake-generator-script.patch \
> +    file://0002-Use-ARM_COMPUTE_ENABLE_NEON-in-code-for-checking-NEO.patch \
> +    file://0003-Use-ARM_COMPUTE_ENABLE_SVE-in-code-for-checking-SVE-.patch \
> +    file://0004-Add-source-files-at-library-definition-time.patch \
> +    file://0005-Add-CMake-options-for-SVE-SVE2-and-BF16-support.patch \
> +    file://0006-Allow-SVE-and-SVE2-support-to-be-disabled-in-CMake.patch \
> +    file://0007-Allow-ARMv7-builds-using-CMake.patch \
> +    file://0008-Fix-undefined-symbol-error-when-building-TensorInfo.patch \
> +"
> +SRCREV = "32bcced2af7feea6969dd1d22e58d0718dc488e3"
> +
> +S = "${WORKDIR}/git"
> +
> +# Only compatible with armv7, armv7ve, and aarch64
> +COMPATIBLE_MACHINE = "(^$)"
> +COMPATIBLE_MACHINE:aarch64 = "(.*)"
> +COMPATIBLE_MACHINE:armv7a = "${@bb.utils.contains("TUNE_FEATURES","neon","(.*)","(^$)",d)}"
> +COMPATIBLE_MACHINE:armv7ve = "${@bb.utils.contains("TUNE_FEATURES","neon","(.*)","(^$)",d)}"

Seems excessive...

Will this work:

COMPATIBLE_MACHINE = "(armv7a|aarch64)"

If you do want to specifically check for "neon" being enabled, you can still 
skip armv7ve, as armv7a check will also apply to armv7ve...


> +
> +inherit cmake
> +
> +PACKAGECONFIG ??= "examples tests cppthreads openmp"
> +
> +PACKAGECONFIG[Werror] = "-DARM_COMPUTE_WERROR=ON,-DARM_COMPUTE_WERROR=OFF"
> +PACKAGECONFIG[examples] = "-DARM_COMPUTE_BUILD_EXAMPLES=ON,-DARM_COMPUTE_BUILD_EXAMPLES=OFF"
> +PACKAGECONFIG[tests] = "-DARM_COMPUTE_BUILD_TESTING=ON,-DARM_COMPUTE_BUILD_TESTING=OFF"
> +PACKAGECONFIG[cppthreads] = "-DARM_COMPUTE_CPPTHREADS=ON,-DARM_COMPUTE_CPPTHREADS=OFF"
> +PACKAGECONFIG[openmp] = "-DARM_COMPUTE_OPENMP=ON,-DARM_COMPUTE_OPENMP=OFF"
> +
> +EXTRA_OECMAKE:append:aarch64 = " \
> +	-DARM_COMPUTE_ARCH=armv8-a \
> +	-DENABLE_NEON=ON \
> +	-DENABLE_SVE=OFF \
> +	-DENABLE_SVE2=OFF \
> +"
> +EXTRA_OECMAKE:append:arm = " \

And here, the override should probably be armv7a, not arm? I know you set 
COMPATIBLE_MACHINE above to prevent armv4/v5/v6 from even coming here, but 
still...


> +	-DARM_COMPUTE_ARCH=armv7-a \
> +	-DENABLE_NEON=ON \
> +	-DENABLE_SVE=OFF \
> +	-DENABLE_SVE2=OFF \
> +	-DARM_COMPUTE_ENABLE_BF16=OFF \
> +	-DARM_COMPUTE_ENABLE_FIXED_FORMAT_KERNELS=OFF \
> +"
> +
> +INHIBIT_PACKAGE_DEBUG_SPLIT = "1"
Andrew Davis Feb. 5, 2025, 8:27 p.m. UTC | #2
On 2/5/25 2:07 PM, Denys Dmytriyenko wrote:
> On Mon, Feb 03, 2025 at 12:59:50PM -0600, Andrew Davis via lists.yoctoproject.org wrote:
>> The Compute Library is a collection of low-level machine learning
>> functions optimized for Arm. This will be used for ARMNN and
>> other machine learning applications and frameworks.
>>
>> Signed-off-by: Andrew Davis <afd@ti.com>
>> ---
>>   ...-indention-in-cmake-generator-script.patch | 130 ++++++++++++
>>   ...ENABLE_NEON-in-code-for-checking-NEO.patch | 114 ++++++++++
>>   ...ENABLE_SVE-in-code-for-checking-SVE-.patch | 197 ++++++++++++++++++
>>   ...rce-files-at-library-definition-time.patch | 167 +++++++++++++++
>>   ...ptions-for-SVE-SVE2-and-BF16-support.patch | 112 ++++++++++
>>   ...SVE2-support-to-be-disabled-in-CMake.patch |  91 ++++++++
>>   .../0007-Allow-ARMv7-builds-using-CMake.patch |  86 ++++++++
>>   ...ymbol-error-when-building-TensorInfo.patch |  46 ++++
>>   .../arm-compute-library_24.12.bb              |  89 ++++++++
>>   9 files changed, 1032 insertions(+)
>>   create mode 100644 meta-arago-extras/recipes-devtools/arm-compute-library/arm-compute-library/0001-fix-Fix-indention-in-cmake-generator-script.patch
>>   create mode 100644 meta-arago-extras/recipes-devtools/arm-compute-library/arm-compute-library/0002-Use-ARM_COMPUTE_ENABLE_NEON-in-code-for-checking-NEO.patch
>>   create mode 100644 meta-arago-extras/recipes-devtools/arm-compute-library/arm-compute-library/0003-Use-ARM_COMPUTE_ENABLE_SVE-in-code-for-checking-SVE-.patch
>>   create mode 100644 meta-arago-extras/recipes-devtools/arm-compute-library/arm-compute-library/0004-Add-source-files-at-library-definition-time.patch
>>   create mode 100644 meta-arago-extras/recipes-devtools/arm-compute-library/arm-compute-library/0005-Add-CMake-options-for-SVE-SVE2-and-BF16-support.patch
>>   create mode 100644 meta-arago-extras/recipes-devtools/arm-compute-library/arm-compute-library/0006-Allow-SVE-and-SVE2-support-to-be-disabled-in-CMake.patch
>>   create mode 100644 meta-arago-extras/recipes-devtools/arm-compute-library/arm-compute-library/0007-Allow-ARMv7-builds-using-CMake.patch
>>   create mode 100644 meta-arago-extras/recipes-devtools/arm-compute-library/arm-compute-library/0008-Fix-undefined-symbol-error-when-building-TensorInfo.patch
>>   create mode 100644 meta-arago-extras/recipes-devtools/arm-compute-library/arm-compute-library_24.12.bb
> 
>> diff --git a/meta-arago-extras/recipes-devtools/arm-compute-library/arm-compute-library_24.12.bb b/meta-arago-extras/recipes-devtools/arm-compute-library/arm-compute-library_24.12.bb
>> new file mode 100644
>> index 00000000..383b02fb
>> --- /dev/null
>> +++ b/meta-arago-extras/recipes-devtools/arm-compute-library/arm-compute-library_24.12.bb
>> @@ -0,0 +1,89 @@
>> +SUMMARY = "The ARM Computer Vision and Machine Learning library"
>> +DESCRIPTION = "The ARM Computer Vision and Machine Learning library is a set of functions optimised for both ARM CPUs and GPUs."
>> +LICENSE = "MIT"
>> +LIC_FILES_CHKSUM = "file://LICENSES/MIT.txt;md5=35f8944fae972976691f3483b0ac9dba"
>> +
>> +SRC_URI = " \
>> +    git://github.com/ARM-software/ComputeLibrary.git;branch=main;protocol=https \
>> +    file://0001-fix-Fix-indention-in-cmake-generator-script.patch \
>> +    file://0002-Use-ARM_COMPUTE_ENABLE_NEON-in-code-for-checking-NEO.patch \
>> +    file://0003-Use-ARM_COMPUTE_ENABLE_SVE-in-code-for-checking-SVE-.patch \
>> +    file://0004-Add-source-files-at-library-definition-time.patch \
>> +    file://0005-Add-CMake-options-for-SVE-SVE2-and-BF16-support.patch \
>> +    file://0006-Allow-SVE-and-SVE2-support-to-be-disabled-in-CMake.patch \
>> +    file://0007-Allow-ARMv7-builds-using-CMake.patch \
>> +    file://0008-Fix-undefined-symbol-error-when-building-TensorInfo.patch \
>> +"
>> +SRCREV = "32bcced2af7feea6969dd1d22e58d0718dc488e3"
>> +
>> +S = "${WORKDIR}/git"
>> +
>> +# Only compatible with armv7, armv7ve, and aarch64
>> +COMPATIBLE_MACHINE = "(^$)"
>> +COMPATIBLE_MACHINE:aarch64 = "(.*)"
>> +COMPATIBLE_MACHINE:armv7a = "${@bb.utils.contains("TUNE_FEATURES","neon","(.*)","(^$)",d)}"
>> +COMPATIBLE_MACHINE:armv7ve = "${@bb.utils.contains("TUNE_FEATURES","neon","(.*)","(^$)",d)}"
> 
> Seems excessive...
> 
> Will this work:
> 
> COMPATIBLE_MACHINE = "(armv7a|aarch64)"
> 
> If you do want to specifically check for "neon" being enabled, you can still
> skip armv7ve, as armv7a check will also apply to armv7ve...
> 

I do need to check for NEON specifically like this as there
are armv7a and armv7ve machines with it disabled, and this
will not work for them.

As for skipping the check armv7ve it does seem like that would
work, but I see them checked individually all over core layers
for some reason, so wanted to follow that. For a random example:

https://git.openembedded.org/openembedded-core/tree/meta/recipes-extended/ghostscript/ghostscript_10.04.0.bb#n47

> 
>> +
>> +inherit cmake
>> +
>> +PACKAGECONFIG ??= "examples tests cppthreads openmp"
>> +
>> +PACKAGECONFIG[Werror] = "-DARM_COMPUTE_WERROR=ON,-DARM_COMPUTE_WERROR=OFF"
>> +PACKAGECONFIG[examples] = "-DARM_COMPUTE_BUILD_EXAMPLES=ON,-DARM_COMPUTE_BUILD_EXAMPLES=OFF"
>> +PACKAGECONFIG[tests] = "-DARM_COMPUTE_BUILD_TESTING=ON,-DARM_COMPUTE_BUILD_TESTING=OFF"
>> +PACKAGECONFIG[cppthreads] = "-DARM_COMPUTE_CPPTHREADS=ON,-DARM_COMPUTE_CPPTHREADS=OFF"
>> +PACKAGECONFIG[openmp] = "-DARM_COMPUTE_OPENMP=ON,-DARM_COMPUTE_OPENMP=OFF"
>> +
>> +EXTRA_OECMAKE:append:aarch64 = " \
>> +	-DARM_COMPUTE_ARCH=armv8-a \
>> +	-DENABLE_NEON=ON \
>> +	-DENABLE_SVE=OFF \
>> +	-DENABLE_SVE2=OFF \
>> +"
>> +EXTRA_OECMAKE:append:arm = " \
> 
> And here, the override should probably be armv7a, not arm? I know you set
> COMPATIBLE_MACHINE above to prevent armv4/v5/v6 from even coming here, but
> still...
> 

Maybe, but that seems overly constraining then, for instance if this
package gains support for additional ARM versions like armv6, then I
would have to change this back to just arm, instead of just relaxing
the COMPATIBLE_MACHINE lines above.

Andrew

> 
>> +	-DARM_COMPUTE_ARCH=armv7-a \
>> +	-DENABLE_NEON=ON \
>> +	-DENABLE_SVE=OFF \
>> +	-DENABLE_SVE2=OFF \
>> +	-DARM_COMPUTE_ENABLE_BF16=OFF \
>> +	-DARM_COMPUTE_ENABLE_FIXED_FORMAT_KERNELS=OFF \
>> +"
>> +
>> +INHIBIT_PACKAGE_DEBUG_SPLIT = "1"
diff mbox series

Patch

diff --git a/meta-arago-extras/recipes-devtools/arm-compute-library/arm-compute-library/0001-fix-Fix-indention-in-cmake-generator-script.patch b/meta-arago-extras/recipes-devtools/arm-compute-library/arm-compute-library/0001-fix-Fix-indention-in-cmake-generator-script.patch
new file mode 100644
index 00000000..9e36d254
--- /dev/null
+++ b/meta-arago-extras/recipes-devtools/arm-compute-library/arm-compute-library/0001-fix-Fix-indention-in-cmake-generator-script.patch
@@ -0,0 +1,130 @@ 
+From 1e4c3016547b5f75e515d4b9a7202733c47f5a18 Mon Sep 17 00:00:00 2001
+From: Andrew Davis <afd@ti.com>
+Date: Wed, 4 Dec 2024 14:46:17 -0600
+Subject: [PATCH] fix: Fix indention in cmake generator script
+
+All other items in these lists use tabs, the first couple
+lines should match. Switch them to tabs then regenerate
+the CMakeLists.txt file.
+
+While here fix the missing ending newline.
+
+Upstream-Status: Pending
+
+Signed-off-by: Andrew Davis <afd@ti.com>
+Change-Id: Icab852fc43ae08e7858857881c996d233c835289
+---
+ scripts/generate_build_files.py | 27 ++++++++++++++-------------
+ src/CMakeLists.txt              | 26 +++++++++++++-------------
+ 2 files changed, 27 insertions(+), 26 deletions(-)
+
+diff --git a/scripts/generate_build_files.py b/scripts/generate_build_files.py
+index f88cf1af44..52a8cc14da 100644
+--- a/scripts/generate_build_files.py
++++ b/scripts/generate_build_files.py
+@@ -168,28 +168,29 @@ def build_from_template_cmake(srcs_graph, srcs_sve, srcs_sve2, srcs_core):
+     template = f"""{get_template_header()}
+ 
+ target_sources(
+-    arm_compute_graph
+-    PRIVATE
+-    {line_separator.join(srcs_graph)}
++	arm_compute_graph
++	PRIVATE
++	{line_separator.join(srcs_graph)}
+ )
+ 
+ target_sources(
+-    arm_compute_sve
+-    PRIVATE
+-    {line_separator.join(srcs_sve)}
++	arm_compute_sve
++	PRIVATE
++	{line_separator.join(srcs_sve)}
+ )
+ 
+ target_sources(
+-    arm_compute_sve2
+-    PRIVATE
+-    {line_separator.join(srcs_sve2)}
++	arm_compute_sve2
++	PRIVATE
++	{line_separator.join(srcs_sve2)}
+ )
+ 
+ target_sources(
+-    arm_compute
+-    PRIVATE
+-    {line_separator.join(srcs_core)}
+-)"""
++	arm_compute
++	PRIVATE
++	{line_separator.join(srcs_core)}
++)
++"""
+     return template
+ 
+ 
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index ff3bed96df..f1b275532a 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -21,9 +21,9 @@
+ # SOFTWARE.
+ 
+ target_sources(
+-    arm_compute_graph
+-    PRIVATE
+-    graph/DataLayerVisitor.cpp
++	arm_compute_graph
++	PRIVATE
++	graph/DataLayerVisitor.cpp
+ 	graph/Graph.cpp
+ 	graph/GraphBuilder.cpp
+ 	graph/GraphContext.cpp
+@@ -101,9 +101,9 @@ target_sources(
+ )
+ 
+ target_sources(
+-    arm_compute_sve
+-    PRIVATE
+-    core/NEON/kernels/arm_conv/depthwise/interleaves/sve_s8q_3x3_dot.cpp
++	arm_compute_sve
++	PRIVATE
++	core/NEON/kernels/arm_conv/depthwise/interleaves/sve_s8q_3x3_dot.cpp
+ 	core/NEON/kernels/arm_conv/depthwise/interleaves/sve_u8q_3x3_dot.cpp
+ 	core/NEON/kernels/arm_conv/depthwise/kernels/sme2_fp16_nhwc_3x3_s1_output2x2_mla_depthfirst/generic_direct.cpp
+ 	core/NEON/kernels/arm_conv/depthwise/kernels/sme2_fp16_nhwc_3x3_s1_output2x2_mla_depthfirst/generic_indirect.cpp
+@@ -332,9 +332,9 @@ target_sources(
+ )
+ 
+ target_sources(
+-    arm_compute_sve2
+-    PRIVATE
+-    cpu/kernels/activation/generic/sve2/lut.cpp
++	arm_compute_sve2
++	PRIVATE
++	cpu/kernels/activation/generic/sve2/lut.cpp
+ 	cpu/kernels/activation/generic/sve2/qasymm8.cpp
+ 	cpu/kernels/activation/generic/sve2/qasymm8_signed.cpp
+ 	cpu/kernels/activation/generic/sve2/qsymm16.cpp
+@@ -357,9 +357,9 @@ target_sources(
+ )
+ 
+ target_sources(
+-    arm_compute
+-    PRIVATE
+-    c/AclContext.cpp
++	arm_compute
++	PRIVATE
++	c/AclContext.cpp
+ 	c/AclOperator.cpp
+ 	c/AclQueue.cpp
+ 	c/AclTensor.cpp
+@@ -1049,4 +1049,4 @@ target_sources(
+ 	runtime/experimental/operators/CpuSub.cpp
+ 	runtime/experimental/operators/CpuTranspose.cpp
+ 	runtime/experimental/operators/CpuWinogradConv2d.cpp
+-)
+\ No newline at end of file
++)
diff --git a/meta-arago-extras/recipes-devtools/arm-compute-library/arm-compute-library/0002-Use-ARM_COMPUTE_ENABLE_NEON-in-code-for-checking-NEO.patch b/meta-arago-extras/recipes-devtools/arm-compute-library/arm-compute-library/0002-Use-ARM_COMPUTE_ENABLE_NEON-in-code-for-checking-NEO.patch
new file mode 100644
index 00000000..174327c5
--- /dev/null
+++ b/meta-arago-extras/recipes-devtools/arm-compute-library/arm-compute-library/0002-Use-ARM_COMPUTE_ENABLE_NEON-in-code-for-checking-NEO.patch
@@ -0,0 +1,114 @@ 
+From 4350c56d14b7b68acd060d8331f3ade1fb74e167 Mon Sep 17 00:00:00 2001
+From: Andrew Davis <afd@ti.com>
+Date: Thu, 5 Dec 2024 09:21:23 -0600
+Subject: [PATCH] Use ARM_COMPUTE_ENABLE_NEON in code for checking NEON support
+
+ENABLE_NEON is a flag used by the build systems. The flag is not used
+in code, instead ARM_COMPUTE_ENABLE_NEON is used everywhere.
+
+Drop the ENABLE_NEON compiler definition to prevent any accidental
+use in code.
+
+Upstream-Status: Pending
+
+Signed-off-by: Andrew Davis <afd@ti.com>
+Change-Id: I65f5e7411c99280e2dd8c187140909cefd1c6892
+---
+ Android.bp                     | 1 -
+ BUILD.bazel                    | 1 -
+ SConscript                     | 2 +-
+ SConstruct                     | 2 +-
+ cmake/Options.cmake            | 6 +-----
+ scripts/generate_android_bp.py | 1 -
+ 6 files changed, 3 insertions(+), 10 deletions(-)
+
+diff --git a/Android.bp b/Android.bp
+index 69379472b0..9288bba2d4 100644
+--- a/Android.bp
++++ b/Android.bp
+@@ -157,7 +157,6 @@ arm_compute_library_defaults {
+             "-DEMBEDDED_KERNELS",
+             "-DARM_COMPUTE_ASSERTS_ENABLED",
+             "-DARM_COMPUTE_CPP_SCHEDULER",
+-            "-DENABLE_NEON",
+             "-DARM_COMPUTE_ENABLE_NEON",
+             "-Wno-unused-parameter",
+             "-DNO_DOT_IN_TOOLCHAIN",
+diff --git a/BUILD.bazel b/BUILD.bazel
+index f553b7bfad..2262a09655 100644
+--- a/BUILD.bazel
++++ b/BUILD.bazel
+@@ -170,7 +170,6 @@ config_setting(
+ cc_library(
+     name = "common_defines",
+     defines = [
+-                  "ENABLE_NEON",
+                   "ARM_COMPUTE_CPU_ENABLED",
+                   "ARM_COMPUTE_ENABLE_NEON",
+                   "ARM_COMPUTE_ENABLE_I8MM",
+diff --git a/SConscript b/SConscript
+index 12e8fd1025..69a564873f 100644
+--- a/SConscript
++++ b/SConscript
+@@ -97,7 +97,7 @@ def build_multiisa_lib_objects():
+ 
+     # note that ARM_COMPUTE_ENABLE_FP16 is enabled in update_data_type_layout_flags() to make
+     # sure the environment is progated to the validation suite
+-    arm_compute_env.Append(CPPDEFINES = ['ENABLE_NEON', 'ARM_COMPUTE_ENABLE_NEON',
++    arm_compute_env.Append(CPPDEFINES = ['ARM_COMPUTE_ENABLE_NEON',
+                            'ENABLE_SVE', 'ARM_COMPUTE_ENABLE_SVE','ARM_COMPUTE_ENABLE_BF16',
+                            'ARM_COMPUTE_ENABLE_I8MM', 'ARM_COMPUTE_ENABLE_SVEF32MM'])
+ 
+diff --git a/SConstruct b/SConstruct
+index 8d7bd291e8..7381300fc8 100644
+--- a/SConstruct
++++ b/SConstruct
+@@ -302,7 +302,7 @@ if 'v7a' in env['estate'] and env['estate'] == '64':
+     print("ERROR: armv7a architecture has only 32-bit execution state")
+     Exit(1)
+ 
+-env.Append(CPPDEFINES = ['ENABLE_NEON', 'ARM_COMPUTE_ENABLE_NEON'])
++env.Append(CPPDEFINES = ['ARM_COMPUTE_ENABLE_NEON'])
+ 
+ if 'sve' in env['arch']:
+     env.Append(CPPDEFINES = ['ENABLE_SVE', 'ARM_COMPUTE_ENABLE_SVE'])
+diff --git a/cmake/Options.cmake b/cmake/Options.cmake
+index 5d685be48d..121d527718 100644
+--- a/cmake/Options.cmake
++++ b/cmake/Options.cmake
+@@ -53,7 +53,6 @@ option(ARM_COMPUTE_ENABLE_SVE_VALIDATION "" OFF)
+ 
+ option(ENABLE_NEON "Enable Arm® Neon™ support" ON)
+ option(ARM_COMPUTE_CPU_ENABLED "" ON)
+-option(ARM_COMPUTE_ENABLE_NEON "" ON)
+ option(ARM_COMPUTE_ENABLE_I8MM "" ON)
+ option(ENABLE_FP32_KERNELS "" ON)
+ option(ENABLE_QASYMM8_KERNELS "" ON)
+@@ -70,14 +69,11 @@ option(ENABLE_FP16_KERNELS "" OFF)
+ option(ARM_COMPUTE_ENABLE_FP16 "" OFF)
+ 
+ if(ENABLE_NEON)
+-  add_definitions(-DENABLE_NEON)
++  add_definitions(-DARM_COMPUTE_ENABLE_NEON)
+ endif()
+ if(ARM_COMPUTE_CPU_ENABLED)
+   add_definitions(-DARM_COMPUTE_CPU_ENABLED)
+ endif()
+-if(ARM_COMPUTE_ENABLE_NEON)
+-  add_definitions(-DARM_COMPUTE_ENABLE_NEON)
+-endif()
+ if(ARM_COMPUTE_ENABLE_FP16)
+   add_definitions(-DARM_COMPUTE_ENABLE_FP16)
+ endif()
+diff --git a/scripts/generate_android_bp.py b/scripts/generate_android_bp.py
+index d5b268f522..99a04e7071 100755
+--- a/scripts/generate_android_bp.py
++++ b/scripts/generate_android_bp.py
+@@ -94,7 +94,6 @@ arm_compute_library_defaults {
+             "-DEMBEDDED_KERNELS",
+             "-DARM_COMPUTE_ASSERTS_ENABLED",
+             "-DARM_COMPUTE_CPP_SCHEDULER",
+-            "-DENABLE_NEON",
+             "-DARM_COMPUTE_ENABLE_NEON",
+             "-Wno-unused-parameter",
+             "-DNO_DOT_IN_TOOLCHAIN",
diff --git a/meta-arago-extras/recipes-devtools/arm-compute-library/arm-compute-library/0003-Use-ARM_COMPUTE_ENABLE_SVE-in-code-for-checking-SVE-.patch b/meta-arago-extras/recipes-devtools/arm-compute-library/arm-compute-library/0003-Use-ARM_COMPUTE_ENABLE_SVE-in-code-for-checking-SVE-.patch
new file mode 100644
index 00000000..b51e4534
--- /dev/null
+++ b/meta-arago-extras/recipes-devtools/arm-compute-library/arm-compute-library/0003-Use-ARM_COMPUTE_ENABLE_SVE-in-code-for-checking-SVE-.patch
@@ -0,0 +1,197 @@ 
+From 92a881cebfee5504b188a046a96d39dd9361ddb1 Mon Sep 17 00:00:00 2001
+From: Andrew Davis <afd@ti.com>
+Date: Thu, 5 Dec 2024 08:57:38 -0600
+Subject: [PATCH] Use ARM_COMPUTE_ENABLE_SVE in code for checking SVE support
+
+ENABLE_SVE is a flag used by the build systems. The flag used in code
+is ARM_COMPUTE_ENABLE_SVE. There are just a couple spots where the
+build system flag is used instead causing the need to define both.
+
+Switch these last users of ENABLE_SVE over to ARM_COMPUTE_ENABLE_SVE
+then drop the ENABLE_SVE definition to prevent any more instances
+being added in the future.
+
+Upstream-Status: Pending
+
+Signed-off-by: Andrew Davis <afd@ti.com>
+Change-Id: I00da7580c4520647b62c6989bc7fbdd5efc7935e
+---
+ BUILD.bazel                                   |  3 ---
+ SConscript                                    |  2 +-
+ SConstruct                                    |  2 +-
+ .../batchnormalization/impl/SVE/fp16.cpp      |  2 +-
+ .../batchnormalization/impl/SVE/fp32.cpp      |  2 +-
+ tests/BUILD.bazel                             |  1 -
+ tests/validation/NEON/ActivationLayer.cpp     | 24 +++++++++----------
+ tests/validation/NEON/ArithmeticAddition.cpp  |  6 ++---
+ 8 files changed, 19 insertions(+), 23 deletions(-)
+
+diff --git a/BUILD.bazel b/BUILD.bazel
+index 2262a09655..c04a52e084 100644
+--- a/BUILD.bazel
++++ b/BUILD.bazel
+@@ -297,7 +297,6 @@ cc_library(
+         "//conditions:default": [],
+     }),
+     local_defines = [
+-        "ENABLE_SVE",
+         "ARM_COMPUTE_ENABLE_SVE",
+         "ARM_COMPUTE_ENABLE_SVE2",
+         "ARM_COMPUTE_ENABLE_BF16",
+@@ -348,7 +347,6 @@ cc_library(
+         "//conditions:default": [],
+     }),
+     local_defines = [
+-        "ENABLE_SVE",
+         "ARM_COMPUTE_ENABLE_SVE",
+         "ARM_COMPUTE_ENABLE_BF16",
+     ],
+@@ -409,7 +407,6 @@ cc_library(
+         "//conditions:default": [],
+     }),
+     local_defines = [
+-        "ENABLE_SVE",
+         "ARM_COMPUTE_ENABLE_SVE",
+         "ARM_COMPUTE_ENABLE_BF16",
+     ],
+diff --git a/SConscript b/SConscript
+index 69a564873f..c2ca549b71 100644
+--- a/SConscript
++++ b/SConscript
+@@ -98,7 +98,7 @@ def build_multiisa_lib_objects():
+     # note that ARM_COMPUTE_ENABLE_FP16 is enabled in update_data_type_layout_flags() to make
+     # sure the environment is progated to the validation suite
+     arm_compute_env.Append(CPPDEFINES = ['ARM_COMPUTE_ENABLE_NEON',
+-                           'ENABLE_SVE', 'ARM_COMPUTE_ENABLE_SVE','ARM_COMPUTE_ENABLE_BF16',
++                                         'ARM_COMPUTE_ENABLE_SVE','ARM_COMPUTE_ENABLE_BF16',
+                            'ARM_COMPUTE_ENABLE_I8MM', 'ARM_COMPUTE_ENABLE_SVEF32MM'])
+ 
+     # Build all the common files for the base architecture
+diff --git a/SConstruct b/SConstruct
+index 7381300fc8..17f5615acf 100644
+--- a/SConstruct
++++ b/SConstruct
+@@ -305,7 +305,7 @@ if 'v7a' in env['estate'] and env['estate'] == '64':
+ env.Append(CPPDEFINES = ['ARM_COMPUTE_ENABLE_NEON'])
+ 
+ if 'sve' in env['arch']:
+-    env.Append(CPPDEFINES = ['ENABLE_SVE', 'ARM_COMPUTE_ENABLE_SVE'])
++    env.Append(CPPDEFINES = ['ARM_COMPUTE_ENABLE_SVE'])
+     if 'sve2' in env['arch']:
+         env.Append(CPPDEFINES = ['ARM_COMPUTE_ENABLE_SVE2'])
+ 
+diff --git a/src/core/NEON/kernels/batchnormalization/impl/SVE/fp16.cpp b/src/core/NEON/kernels/batchnormalization/impl/SVE/fp16.cpp
+index 48caaa3e63..e07593312c 100644
+--- a/src/core/NEON/kernels/batchnormalization/impl/SVE/fp16.cpp
++++ b/src/core/NEON/kernels/batchnormalization/impl/SVE/fp16.cpp
+@@ -128,4 +128,4 @@ void fp16_sve_batch_normalization(ITensor             *src,
+ }
+ } // namespace cpu
+ } // namespace arm_compute
+-#endif // ENABLE_SVE
++#endif // ARM_COMPUTE_ENABLE_SVE
+diff --git a/src/core/NEON/kernels/batchnormalization/impl/SVE/fp32.cpp b/src/core/NEON/kernels/batchnormalization/impl/SVE/fp32.cpp
+index df4fbfe607..0d52d2c3c0 100644
+--- a/src/core/NEON/kernels/batchnormalization/impl/SVE/fp32.cpp
++++ b/src/core/NEON/kernels/batchnormalization/impl/SVE/fp32.cpp
+@@ -128,4 +128,4 @@ void fp32_sve_batch_normalization(ITensor             *src,
+ }
+ } // namespace cpu
+ } // namespace arm_compute
+-#endif // ENABLE_SVE
++#endif // ARM_COMPUTE_ENABLE_SVE
+diff --git a/tests/BUILD.bazel b/tests/BUILD.bazel
+index 7085f1facc..4b4be8b257 100644
+--- a/tests/BUILD.bazel
++++ b/tests/BUILD.bazel
+@@ -114,7 +114,6 @@ cc_binary(
+               }) +
+         select({
+                 "//:sve_validation_flag": [
+-                "ENABLE_SVE",
+                 "ARM_COMPUTE_ENABLE_SVE",
+                 ],
+                 "//conditions:default": [],
+diff --git a/tests/validation/NEON/ActivationLayer.cpp b/tests/validation/NEON/ActivationLayer.cpp
+index 119d51808a..69a8b52354 100644
+--- a/tests/validation/NEON/ActivationLayer.cpp
++++ b/tests/validation/NEON/ActivationLayer.cpp
+@@ -73,11 +73,11 @@ RelativeTolerance<float> relative_tolerance(DataType data_type, ActivationLayerI
+             switch(data_type)
+             {
+                 case DataType::F16:
+-#if defined(ENABLE_SVE)
++#if defined(ARM_COMPUTE_ENABLE_SVE)
+                     return RelativeTolerance<float>(0.25f);
+-#else  // !defined(ENABLE_SVE)
++#else  // !defined(ARM_COMPUTE_ENABLE_SVE)
+                     return RelativeTolerance<float>(0.1f);
+-#endif // defined(ENABLE_SVE)
++#endif // defined(ARM_COMPUTE_ENABLE_SVE)
+                 default:
+                     return RelativeTolerance<float>(0.05f);
+             }
+@@ -85,11 +85,11 @@ RelativeTolerance<float> relative_tolerance(DataType data_type, ActivationLayerI
+             switch(data_type)
+             {
+                 case DataType::F16:
+-#if defined(ENABLE_SVE)
++#if defined(ARM_COMPUTE_ENABLE_SVE)
+                     return RelativeTolerance<float>(0.9f);
+-#else  // !defined(ENABLE_SVE)
++#else  // !defined(ARM_COMPUTE_ENABLE_SVE)
+                     return RelativeTolerance<float>(0.01f);
+-#endif // defined(ENABLE_SVE)
++#endif // defined(ARM_COMPUTE_ENABLE_SVE)
+                 default:
+                     return RelativeTolerance<float>(0.00001f);
+             }
+@@ -117,11 +117,11 @@ AbsoluteTolerance<float> absolute_tolerance(DataType data_type, ActivationLayerI
+             switch(data_type)
+             {
+                 case DataType::F16:
+-#if defined(ENABLE_SVE)
++#if defined(ARM_COMPUTE_ENABLE_SVE)
+                     return AbsoluteTolerance<float>(0.25f);
+-#else  // !defined(ENABLE_SVE)
++#else  // !defined(ARM_COMPUTE_ENABLE_SVE)
+                     return AbsoluteTolerance<float>(0.01f);
+-#endif // defined(ENABLE_SVE)
++#endif // defined(ARM_COMPUTE_ENABLE_SVE)
+                 default:
+                     return AbsoluteTolerance<float>(0.00001f);
+             }
+@@ -129,11 +129,11 @@ AbsoluteTolerance<float> absolute_tolerance(DataType data_type, ActivationLayerI
+             switch(data_type)
+             {
+                 case DataType::F16:
+-#if defined(ENABLE_SVE)
++#if defined(ARM_COMPUTE_ENABLE_SVE)
+                     return AbsoluteTolerance<float>(0.9f);
+-#else  // !defined(ENABLE_SVE)
++#else  // !defined(ARM_COMPUTE_ENABLE_SVE)
+                     return AbsoluteTolerance<float>(0.01f);
+-#endif // defined(ENABLE_SVE)
++#endif // defined(ARM_COMPUTE_ENABLE_SVE)
+                 default:
+                     return AbsoluteTolerance<float>(0.00001f);
+             }
+diff --git a/tests/validation/NEON/ArithmeticAddition.cpp b/tests/validation/NEON/ArithmeticAddition.cpp
+index c0033daab0..bae8535ff3 100644
+--- a/tests/validation/NEON/ArithmeticAddition.cpp
++++ b/tests/validation/NEON/ArithmeticAddition.cpp
+@@ -48,11 +48,11 @@ namespace validation
+ using framework::dataset::make;
+ namespace
+ {
+-#if !defined(__aarch64__) || defined(ENABLE_SVE)
++#if !defined(__aarch64__) || defined(ARM_COMPUTE_ENABLE_SVE)
+ constexpr AbsoluteTolerance<float> tolerance_quant(1); /**< Tolerance value for comparing reference's output against implementation's output for quantized data types */
+-#else                                                  // !defined(__aarch64__) || defined(ENABLE_SVE)
++#else                                                  // !defined(__aarch64__) || defined(ARM_COMPUTE_ENABLE_SVE)
+ constexpr AbsoluteTolerance<float> tolerance_quant(1);
+-#endif                                                 // !defined(__aarch64__) || defined(ENABLE_SVE)
++#endif                                                 // !defined(__aarch64__) || defined(ARM_COMPUTE_ENABLE_SVE)
+ const auto InPlaceDataSet    = framework::dataset::make("InPlace", { false, true });
+ const auto OutOfPlaceDataSet = framework::dataset::make("InPlace", { false });
+ } // namespace
diff --git a/meta-arago-extras/recipes-devtools/arm-compute-library/arm-compute-library/0004-Add-source-files-at-library-definition-time.patch b/meta-arago-extras/recipes-devtools/arm-compute-library/arm-compute-library/0004-Add-source-files-at-library-definition-time.patch
new file mode 100644
index 00000000..971658b4
--- /dev/null
+++ b/meta-arago-extras/recipes-devtools/arm-compute-library/arm-compute-library/0004-Add-source-files-at-library-definition-time.patch
@@ -0,0 +1,167 @@ 
+From a3c7d6aefc289dcce6656fc6d9f9c8c9b1af8f0b Mon Sep 17 00:00:00 2001
+From: Andrew Davis <afd@ti.com>
+Date: Thu, 5 Dec 2024 09:38:26 -0600
+Subject: [PATCH] Add source files at library definition time
+
+This allows for easier conditional disabling of these libraries.
+
+Upstream-Status: Pending
+
+Signed-off-by: Andrew Davis <afd@ti.com>
+Change-Id: I442aaa03060f2cb7db4ed0c1d93e64dbc223fdc6
+---
+ CMakeLists.txt                  | 20 ++++++++++----------
+ scripts/generate_build_files.py | 16 ++++------------
+ src/CMakeLists.txt              | 16 ++++------------
+ 3 files changed, 18 insertions(+), 34 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index e8bdf2af1a..4073e06b17 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -46,6 +46,12 @@ set(CMAKE_CXX_EXTENSIONS OFF)
+ list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
+ include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/Options.cmake)
+ include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/Version.cmake)
++include(${CMAKE_CURRENT_SOURCE_DIR}/src/CMakeLists.txt)
++
++list(TRANSFORM ARM_COMPUTE_GRAPH_SOURCES PREPEND "src/")
++list(TRANSFORM ARM_COMPUTE_SVE_SOURCES PREPEND "src/")
++list(TRANSFORM ARM_COMPUTE_SVE2_SOURCES PREPEND "src/")
++list(TRANSFORM ARM_COMPUTE_SOURCES PREPEND "src/")
+ 
+ # Require at least gcc/g++ 11) CMAKE_CXX_COMPILER_VERSION OR
+ if(CMAKE_C_COMPILER_VERSION VERSION_LESS 10.2 OR CMAKE_CXX_COMPILER_VERSION
+@@ -139,8 +145,7 @@ endif()
+ 
+ # ---------------------------------------------------------------------
+ # SVE Object Library
+-
+-add_library(arm_compute_sve OBJECT "")
++add_library(arm_compute_sve OBJECT ${ARM_COMPUTE_SVE_SOURCES})
+ target_compile_options(arm_compute_sve
+                        PRIVATE "-march=armv8.2-a+sve+fp16+dotprod"
+                        PRIVATE "-fPIC")
+@@ -162,8 +167,7 @@ target_include_directories(
+ 
+ # ---------------------------------------------------------------------
+ # SVE2 Object Library
+-
+-add_library(arm_compute_sve2 OBJECT "")
++add_library(arm_compute_sve2 OBJECT ${ARM_COMPUTE_SVE2_SOURCES})
+ target_compile_options(arm_compute_sve2
+                        PRIVATE "-march=armv8.6-a+sve2+fp16+dotprod"
+                        PRIVATE "-fPIC")
+@@ -187,7 +191,7 @@ target_include_directories(
+ # ---------------------------------------------------------------------
+ # Core Library
+ 
+-add_library(arm_compute "")
++add_library(arm_compute ${ARM_COMPUTE_SOURCES})
+ target_compile_options(arm_compute PRIVATE "-march=${ARM_COMPUTE_ARCH}")
+ target_compile_definitions(arm_compute PRIVATE ARM_COMPUTE_ENABLE_BF16)
+ target_compile_definitions(arm_compute PRIVATE ENABLE_SVE)
+@@ -216,7 +220,7 @@ target_link_libraries(
+ # ---------------------------------------------------------------------
+ # Graph Library
+ 
+-add_library(arm_compute_graph "")
++add_library(arm_compute_graph ${ARM_COMPUTE_GRAPH_SOURCES})
+ target_compile_options(arm_compute_graph PRIVATE "-march=${ARM_COMPUTE_ARCH}")
+ target_compile_definitions(arm_compute_graph PRIVATE ENABLE_SVE)
+ target_compile_definitions(arm_compute_graph PRIVATE ARM_COMPUTE_ENABLE_SVE)
+@@ -238,10 +242,6 @@ target_compile_options(arm_compute_graph PUBLIC ${COMMON_CXX_FLAGS})
+ 
+ add_library(ArmCompute::Graph ALIAS arm_compute_graph)
+ 
+-# ---------------------------------------------------------------------
+-# Library Target Sources
+-add_subdirectory(src)
+-
+ if(ARM_COMPUTE_BUILD_TESTING)
+   # ---------------------------------------------------------------------
+   # Validation Framework Library
+diff --git a/scripts/generate_build_files.py b/scripts/generate_build_files.py
+index 52a8cc14da..4c4a14623f 100644
+--- a/scripts/generate_build_files.py
++++ b/scripts/generate_build_files.py
+@@ -167,27 +167,19 @@ def build_from_template_cmake(srcs_graph, srcs_sve, srcs_sve2, srcs_core):
+ 
+     template = f"""{get_template_header()}
+ 
+-target_sources(
+-	arm_compute_graph
+-	PRIVATE
++set(ARM_COMPUTE_GRAPH_SOURCES
+ 	{line_separator.join(srcs_graph)}
+ )
+ 
+-target_sources(
+-	arm_compute_sve
+-	PRIVATE
++set(ARM_COMPUTE_SVE_SOURCES
+ 	{line_separator.join(srcs_sve)}
+ )
+ 
+-target_sources(
+-	arm_compute_sve2
+-	PRIVATE
++set(ARM_COMPUTE_SVE2_SOURCES
+ 	{line_separator.join(srcs_sve2)}
+ )
+ 
+-target_sources(
+-	arm_compute
+-	PRIVATE
++set(ARM_COMPUTE_SOURCES
+ 	{line_separator.join(srcs_core)}
+ )
+ """
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index f1b275532a..73871563e1 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -20,9 +20,7 @@
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ # SOFTWARE.
+ 
+-target_sources(
+-	arm_compute_graph
+-	PRIVATE
++set(ARM_COMPUTE_GRAPH_SOURCES
+ 	graph/DataLayerVisitor.cpp
+ 	graph/Graph.cpp
+ 	graph/GraphBuilder.cpp
+@@ -100,9 +98,7 @@ target_sources(
+ 	graph/printers/DotGraphPrinter.cpp
+ )
+ 
+-target_sources(
+-	arm_compute_sve
+-	PRIVATE
++set(ARM_COMPUTE_SVE_SOURCES
+ 	core/NEON/kernels/arm_conv/depthwise/interleaves/sve_s8q_3x3_dot.cpp
+ 	core/NEON/kernels/arm_conv/depthwise/interleaves/sve_u8q_3x3_dot.cpp
+ 	core/NEON/kernels/arm_conv/depthwise/kernels/sme2_fp16_nhwc_3x3_s1_output2x2_mla_depthfirst/generic_direct.cpp
+@@ -331,9 +327,7 @@ target_sources(
+ 	cpu/kernels/softmax/generic/sve/impl_bf16.cpp
+ )
+ 
+-target_sources(
+-	arm_compute_sve2
+-	PRIVATE
++set(ARM_COMPUTE_SVE2_SOURCES
+ 	cpu/kernels/activation/generic/sve2/lut.cpp
+ 	cpu/kernels/activation/generic/sve2/qasymm8.cpp
+ 	cpu/kernels/activation/generic/sve2/qasymm8_signed.cpp
+@@ -356,9 +350,7 @@ target_sources(
+ 	cpu/kernels/softmax/generic/sve2/impl.cpp
+ )
+ 
+-target_sources(
+-	arm_compute
+-	PRIVATE
++set(ARM_COMPUTE_SOURCES
+ 	c/AclContext.cpp
+ 	c/AclOperator.cpp
+ 	c/AclQueue.cpp
diff --git a/meta-arago-extras/recipes-devtools/arm-compute-library/arm-compute-library/0005-Add-CMake-options-for-SVE-SVE2-and-BF16-support.patch b/meta-arago-extras/recipes-devtools/arm-compute-library/arm-compute-library/0005-Add-CMake-options-for-SVE-SVE2-and-BF16-support.patch
new file mode 100644
index 00000000..29ca02f5
--- /dev/null
+++ b/meta-arago-extras/recipes-devtools/arm-compute-library/arm-compute-library/0005-Add-CMake-options-for-SVE-SVE2-and-BF16-support.patch
@@ -0,0 +1,112 @@ 
+From cdb765df59d8ce5f388ac2a820b5da76eb8d610c Mon Sep 17 00:00:00 2001
+From: Andrew Davis <afd@ti.com>
+Date: Thu, 5 Dec 2024 09:47:25 -0600
+Subject: [PATCH] Add CMake options for SVE, SVE2, and BF16 support
+
+These should be optional, add options for these. Remove the hard-coded
+definitions of these for the libraries. This also makes it so validation
+options are not needed, if SVE is enabled it will be validated.
+
+Upstream-Status: Pending
+
+Signed-off-by: Andrew Davis <afd@ti.com>
+Change-Id: I03182ac6ece843e813c027ef6a573cbba254dee9
+---
+ CMakeLists.txt      | 19 -------------------
+ cmake/Options.cmake | 16 +++++++++++++---
+ 2 files changed, 13 insertions(+), 22 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 4073e06b17..4d95fb1bfd 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -149,9 +149,6 @@ add_library(arm_compute_sve OBJECT ${ARM_COMPUTE_SVE_SOURCES})
+ target_compile_options(arm_compute_sve
+                        PRIVATE "-march=armv8.2-a+sve+fp16+dotprod"
+                        PRIVATE "-fPIC")
+-target_compile_definitions(arm_compute_sve PRIVATE ARM_COMPUTE_ENABLE_BF16)
+-target_compile_definitions(arm_compute_sve PRIVATE ENABLE_SVE)
+-target_compile_definitions(arm_compute_sve PRIVATE ARM_COMPUTE_ENABLE_SVE)
+ target_include_directories(
+   arm_compute_sve
+   PUBLIC $<INSTALL_INTERFACE:include>
+@@ -171,10 +168,6 @@ add_library(arm_compute_sve2 OBJECT ${ARM_COMPUTE_SVE2_SOURCES})
+ target_compile_options(arm_compute_sve2
+                        PRIVATE "-march=armv8.6-a+sve2+fp16+dotprod"
+                        PRIVATE "-fPIC")
+-target_compile_definitions(arm_compute_sve2 PRIVATE ARM_COMPUTE_ENABLE_SVE2)
+-target_compile_definitions(arm_compute_sve2 PRIVATE ARM_COMPUTE_ENABLE_BF16)
+-target_compile_definitions(arm_compute_sve2 PRIVATE ENABLE_SVE)
+-target_compile_definitions(arm_compute_sve2 PRIVATE ARM_COMPUTE_ENABLE_SVE)
+ target_include_directories(
+   arm_compute_sve2
+   PUBLIC $<INSTALL_INTERFACE:include>
+@@ -193,9 +186,6 @@ target_include_directories(
+ 
+ add_library(arm_compute ${ARM_COMPUTE_SOURCES})
+ target_compile_options(arm_compute PRIVATE "-march=${ARM_COMPUTE_ARCH}")
+-target_compile_definitions(arm_compute PRIVATE ARM_COMPUTE_ENABLE_BF16)
+-target_compile_definitions(arm_compute PRIVATE ENABLE_SVE)
+-target_compile_definitions(arm_compute PRIVATE ARM_COMPUTE_ENABLE_SVE)
+ target_include_directories(
+   arm_compute
+   PUBLIC $<INSTALL_INTERFACE:include>
+@@ -222,8 +212,6 @@ target_link_libraries(
+ 
+ add_library(arm_compute_graph ${ARM_COMPUTE_GRAPH_SOURCES})
+ target_compile_options(arm_compute_graph PRIVATE "-march=${ARM_COMPUTE_ARCH}")
+-target_compile_definitions(arm_compute_graph PRIVATE ENABLE_SVE)
+-target_compile_definitions(arm_compute_graph PRIVATE ARM_COMPUTE_ENABLE_SVE)
+ # add_subdirectory(src/graph)
+ 
+ target_include_directories(
+@@ -268,13 +256,6 @@ if(ARM_COMPUTE_BUILD_TESTING)
+ 
+   add_executable(arm_compute_validation "")
+   target_compile_options(arm_compute_validation PRIVATE "-march=${ARM_COMPUTE_ARCH}")
+-  if(ARM_COMPUTE_ENABLE_BF16_VALIDATION)
+-    target_compile_definitions(arm_compute_validation PRIVATE ARM_COMPUTE_ENABLE_BF16)
+-  endif()
+-  if(ARM_COMPUTE_ENABLE_SVE_VALIDATION)
+-    target_compile_definitions(arm_compute_validation PRIVATE ENABLE_SVE)
+-    target_compile_definitions(arm_compute_validation PRIVATE ARM_COMPUTE_ENABLE_SVE)
+-  endif()
+   add_subdirectory(tests/validation)
+   target_compile_options(arm_compute_validation PUBLIC ${COMMON_CXX_FLAGS})
+   set_target_properties(
+diff --git a/cmake/Options.cmake b/cmake/Options.cmake
+index 121d527718..5c23fcb490 100644
+--- a/cmake/Options.cmake
++++ b/cmake/Options.cmake
+@@ -48,11 +48,12 @@ set(ARM_COMPUTE_ARCH armv8-a CACHE STRING "Architecture to use")
+ # ---------------------------------------------------------------------
+ # Backends
+ 
+-option(ARM_COMPUTE_ENABLE_BF16_VALIDATION "" ON)
+-option(ARM_COMPUTE_ENABLE_SVE_VALIDATION "" OFF)
+-
+ option(ENABLE_NEON "Enable Arm® Neon™ support" ON)
++option(ENABLE_SVE "Enable Arm® SVE support" ON)
++option(ENABLE_SVE2 "Enable Arm® SVE2 support" ON)
++
+ option(ARM_COMPUTE_CPU_ENABLED "" ON)
++option(ARM_COMPUTE_ENABLE_BF16 "" ON)
+ option(ARM_COMPUTE_ENABLE_I8MM "" ON)
+ option(ENABLE_FP32_KERNELS "" ON)
+ option(ENABLE_QASYMM8_KERNELS "" ON)
+@@ -74,6 +75,15 @@ endif()
+ if(ARM_COMPUTE_CPU_ENABLED)
+   add_definitions(-DARM_COMPUTE_CPU_ENABLED)
+ endif()
++if(ENABLE_SVE)
++  add_definitions(-DARM_COMPUTE_ENABLE_SVE)
++endif()
++if(ENABLE_SVE2)
++  add_definitions(-DARM_COMPUTE_ENABLE_SVE2)
++endif()
++if(ARM_COMPUTE_ENABLE_BF16)
++  add_definitions(-DARM_COMPUTE_ENABLE_BF16)
++endif()
+ if(ARM_COMPUTE_ENABLE_FP16)
+   add_definitions(-DARM_COMPUTE_ENABLE_FP16)
+ endif()
diff --git a/meta-arago-extras/recipes-devtools/arm-compute-library/arm-compute-library/0006-Allow-SVE-and-SVE2-support-to-be-disabled-in-CMake.patch b/meta-arago-extras/recipes-devtools/arm-compute-library/arm-compute-library/0006-Allow-SVE-and-SVE2-support-to-be-disabled-in-CMake.patch
new file mode 100644
index 00000000..06370adb
--- /dev/null
+++ b/meta-arago-extras/recipes-devtools/arm-compute-library/arm-compute-library/0006-Allow-SVE-and-SVE2-support-to-be-disabled-in-CMake.patch
@@ -0,0 +1,91 @@ 
+From ab5bf5b8f86337a31bfd48277650f583a040e658 Mon Sep 17 00:00:00 2001
+From: Andrew Davis <afd@ti.com>
+Date: Thu, 5 Dec 2024 09:59:48 -0600
+Subject: [PATCH] Allow SVE and SVE2 support to be disabled in CMake
+
+Currently these are hard-coded as enabled. The SVE and SVE2 libraries
+are built unconditionally. These should only be built when SVE or
+SVE2 is available.
+
+Upstream-Status: Pending
+
+Signed-off-by: Andrew Davis <afd@ti.com>
+Change-Id: I176259f872a84f736028622694d65d4c5b57e379
+---
+ CMakeLists.txt | 25 ++++++++++++++++++-------
+ 1 file changed, 18 insertions(+), 7 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 4d95fb1bfd..d233d6bc67 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -145,6 +145,7 @@ endif()
+ 
+ # ---------------------------------------------------------------------
+ # SVE Object Library
++if(ENABLE_SVE)
+ add_library(arm_compute_sve OBJECT ${ARM_COMPUTE_SVE_SOURCES})
+ target_compile_options(arm_compute_sve
+                        PRIVATE "-march=armv8.2-a+sve+fp16+dotprod"
+@@ -161,9 +162,11 @@ target_include_directories(
+          src/core/cpu/kernels/assembly
+          src/cpu/kernels/assembly
+          src/core/NEON/kernels/arm_gemm/merges)
++endif() # ENABLE_SVE
+ 
+ # ---------------------------------------------------------------------
+ # SVE2 Object Library
++if(ENABLE_SVE2)
+ add_library(arm_compute_sve2 OBJECT ${ARM_COMPUTE_SVE2_SOURCES})
+ target_compile_options(arm_compute_sve2
+                        PRIVATE "-march=armv8.6-a+sve2+fp16+dotprod"
+@@ -180,6 +183,7 @@ target_include_directories(
+          src/core/cpu/kernels/assembly
+          src/cpu/kernels/assembly
+          src/core/NEON/kernels/arm_gemm/merges)
++endif() # ENABLE_SVE2
+ 
+ # ---------------------------------------------------------------------
+ # Core Library
+@@ -203,9 +207,12 @@ target_compile_options(arm_compute PUBLIC ${COMMON_CXX_FLAGS})
+ add_library(ArmCompute::Core ALIAS arm_compute)
+ 
+ # arm_compute_sve and arm_compute_sve2 obj files will not be public in the arm_compute.so
+-target_link_libraries(
+-  arm_compute PRIVATE $<TARGET_OBJECTS:arm_compute_sve>
+-              PRIVATE $<TARGET_OBJECTS:arm_compute_sve2>)
++if(ENABLE_SVE)
++  target_link_libraries(arm_compute PRIVATE $<TARGET_OBJECTS:arm_compute_sve>)
++endif()
++if(ENABLE_SVE2)
++  target_link_libraries(arm_compute PRIVATE $<TARGET_OBJECTS:arm_compute_sve2>)
++endif()
+ 
+ # ---------------------------------------------------------------------
+ # Graph Library
+@@ -263,8 +270,10 @@ if(ARM_COMPUTE_BUILD_TESTING)
+                                       "${CMAKE_BINARY_DIR}/validation")
+   target_link_libraries(
+     arm_compute_validation
+-    PUBLIC arm_compute arm_compute_graph arm_compute_validation_framework
+-           arm_compute_sve)
++    PUBLIC arm_compute arm_compute_graph arm_compute_validation_framework)
++    if(ENABLE_SVE)
++      target_link_libraries(arm_compute_validation PUBLIC arm_compute_sve)
++    endif()
+   target_link_directories(arm_compute_validation PUBLIC tests)
+ 
+   # ---------------------------------------------------------------------
+@@ -299,8 +308,10 @@ if(ARM_COMPUTE_BUILD_EXAMPLES)
+     set_target_properties(
+       ${test_name} PROPERTIES RUNTIME_OUTPUT_DIRECTORY
+                               "${CMAKE_BINARY_DIR}/examples")
+-    target_link_libraries(${test_name} PUBLIC arm_compute
+-                                              arm_compute_graph arm_compute_sve)
++    target_link_libraries(${test_name} PUBLIC arm_compute arm_compute_graph)
++    if(ENABLE_SVE)
++      target_link_libraries(${test_name} PUBLIC arm_compute_sve)
++    endif()
+   endforeach()
+ 
+   # NEON Examples
diff --git a/meta-arago-extras/recipes-devtools/arm-compute-library/arm-compute-library/0007-Allow-ARMv7-builds-using-CMake.patch b/meta-arago-extras/recipes-devtools/arm-compute-library/arm-compute-library/0007-Allow-ARMv7-builds-using-CMake.patch
new file mode 100644
index 00000000..07dd4bee
--- /dev/null
+++ b/meta-arago-extras/recipes-devtools/arm-compute-library/arm-compute-library/0007-Allow-ARMv7-builds-using-CMake.patch
@@ -0,0 +1,86 @@ 
+From 416cffe2a75a4ec66a75e00bc00297f2f0187e0f Mon Sep 17 00:00:00 2001
+From: Andrew Davis <afd@ti.com>
+Date: Thu, 5 Dec 2024 10:05:03 -0600
+Subject: [PATCH] Allow ARMv7 builds using CMake
+
+Upstream-Status: Pending
+
+Signed-off-by: Andrew Davis <afd@ti.com>
+Change-Id: Ib6bae5820569a8eadd53afdfe31e611a3089140e
+---
+ CMakeLists.txt                                | 25 +++++++++++++++++--
+ .../fixtures/CpuGemmAssemblyDispatchFixture.h |  3 +++
+ 2 files changed, 26 insertions(+), 2 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index d233d6bc67..4fc27553f3 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -148,7 +148,7 @@ endif()
+ if(ENABLE_SVE)
+ add_library(arm_compute_sve OBJECT ${ARM_COMPUTE_SVE_SOURCES})
+ target_compile_options(arm_compute_sve
+-                       PRIVATE "-march=armv8.2-a+sve+fp16+dotprod"
++                       PRIVATE "-march=${ARM_COMPUTE_ARCH}"
+                        PRIVATE "-fPIC")
+ target_include_directories(
+   arm_compute_sve
+@@ -169,7 +169,7 @@ endif() # ENABLE_SVE
+ if(ENABLE_SVE2)
+ add_library(arm_compute_sve2 OBJECT ${ARM_COMPUTE_SVE2_SOURCES})
+ target_compile_options(arm_compute_sve2
+-                       PRIVATE "-march=armv8.6-a+sve2+fp16+dotprod"
++                       PRIVATE "-march=${ARM_COMPUTE_ARCH}"
+                        PRIVATE "-fPIC")
+ target_include_directories(
+   arm_compute_sve2
+@@ -204,6 +204,15 @@ target_include_directories(
+           src/core/NEON/kernels/convolution/winograd)
+ target_compile_options(arm_compute PUBLIC ${COMMON_CXX_FLAGS})
+ 
++if(ARM_COMPUTE_ARCH MATCHES "armv7")
++  target_sources(
++    arm_compute
++    PRIVATE
++      src/core/NEON/kernels/arm_gemm/kernels/a32_sgemm_8x6/a53.cpp
++      src/core/NEON/kernels/arm_gemm/kernels/a32_sgemm_8x6/a55r1.cpp
++      src/core/NEON/kernels/arm_gemm/kernels/a32_sgemm_8x6/generic.cpp)
++endif()
++
+ add_library(ArmCompute::Core ALIAS arm_compute)
+ 
+ # arm_compute_sve and arm_compute_sve2 obj files will not be public in the arm_compute.so
+@@ -264,6 +273,18 @@ if(ARM_COMPUTE_BUILD_TESTING)
+   add_executable(arm_compute_validation "")
+   target_compile_options(arm_compute_validation PRIVATE "-march=${ARM_COMPUTE_ARCH}")
+   add_subdirectory(tests/validation)
++  target_include_directories(
++    arm_compute_validation
++    PUBLIC $<INSTALL_INTERFACE:include>
++          $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
++          ${CMAKE_CURRENT_SOURCE_DIR}
++    PRIVATE src
++          src/cpu/kernels/assembly
++          src/core/NEON/kernels/arm_gemm
++          src/core/NEON/kernels/assembly
++          src/core/NEON/kernels/convolution/common
++          src/core/NEON/kernels/arm_conv/depthwise
++          src/core/NEON/kernels/convolution/winograd)
+   target_compile_options(arm_compute_validation PUBLIC ${COMMON_CXX_FLAGS})
+   set_target_properties(
+     arm_compute_validation PROPERTIES RUNTIME_OUTPUT_DIRECTORY
+diff --git a/tests/validation/fixtures/CpuGemmAssemblyDispatchFixture.h b/tests/validation/fixtures/CpuGemmAssemblyDispatchFixture.h
+index 5d74e210d5..0b45cdf356 100644
+--- a/tests/validation/fixtures/CpuGemmAssemblyDispatchFixture.h
++++ b/tests/validation/fixtures/CpuGemmAssemblyDispatchFixture.h
+@@ -25,7 +25,10 @@
+ #define ACL_TESTS_VALIDATION_FIXTURES_CPUGEMMASSEMBLYDISPATCHFIXTURE_H
+ 
+ #include "arm_compute/core/Helpers.h"
++
++#ifdef ARM_COMPUTE_ENABLE_FIXED_FORMAT_KERNELS
+ #include "arm_compute/runtime/NEON/functions/NEReorderLayer.h"
++#endif //ARM_COMPUTE_ENABLE_FIXED_FORMAT_KERNELS
+ #include "arm_compute/runtime/NEON/functions/NETranspose.h"
+ 
+ #include "src/core/NEON/kernels/arm_gemm/utils.hpp"
diff --git a/meta-arago-extras/recipes-devtools/arm-compute-library/arm-compute-library/0008-Fix-undefined-symbol-error-when-building-TensorInfo.patch b/meta-arago-extras/recipes-devtools/arm-compute-library/arm-compute-library/0008-Fix-undefined-symbol-error-when-building-TensorInfo.patch
new file mode 100644
index 00000000..9883a44d
--- /dev/null
+++ b/meta-arago-extras/recipes-devtools/arm-compute-library/arm-compute-library/0008-Fix-undefined-symbol-error-when-building-TensorInfo.patch
@@ -0,0 +1,46 @@ 
+From 58698788adaeb2f74cf9fcddf06f3e9a2e78b984 Mon Sep 17 00:00:00 2001
+From: Andrew Davis <afd@ti.com>
+Date: Mon, 16 Dec 2024 09:42:22 -0600
+Subject: [PATCH] Fix undefined symbol error when building TensorInfo
+
+Upstream-Status: Pending
+
+Signed-off-by: Andrew Davis <afd@ti.com>
+Change-Id: I657d1b7faaad94147c685c4826916d3c21da82e1
+---
+ arm_compute/core/TensorInfo.h | 5 +----
+ src/core/TensorInfo.cpp       | 5 +++++
+ 2 files changed, 6 insertions(+), 4 deletions(-)
+
+diff --git a/arm_compute/core/TensorInfo.h b/arm_compute/core/TensorInfo.h
+index e4c9cbe879..2bfe83c4b1 100644
+--- a/arm_compute/core/TensorInfo.h
++++ b/arm_compute/core/TensorInfo.h
+@@ -242,10 +242,7 @@ public:
+     {
+         return _num_channels;
+     }
+-    const TensorShape &tensor_shape() const override
+-    {
+-        return _tensor_shape;
+-    }
++    const TensorShape &tensor_shape() const override;
+     const TensorDimsState &tensor_dims_state() const override
+     {
+         return _dims_state;
+diff --git a/src/core/TensorInfo.cpp b/src/core/TensorInfo.cpp
+index 31bddbde40..884203fd7c 100644
+--- a/src/core/TensorInfo.cpp
++++ b/src/core/TensorInfo.cpp
+@@ -395,6 +395,11 @@ ITensorInfo &TensorInfo::set_tensor_dims_state(const TensorDimsState &state)
+     return *this;
+ }
+ 
++const TensorShape &TensorInfo::tensor_shape() const
++{
++    return _tensor_shape;
++}
++
+ ITensorInfo &TensorInfo::set_quantization_info(const QuantizationInfo &quantization_info)
+ {
+     _quantization_info = quantization_info;
diff --git a/meta-arago-extras/recipes-devtools/arm-compute-library/arm-compute-library_24.12.bb b/meta-arago-extras/recipes-devtools/arm-compute-library/arm-compute-library_24.12.bb
new file mode 100644
index 00000000..383b02fb
--- /dev/null
+++ b/meta-arago-extras/recipes-devtools/arm-compute-library/arm-compute-library_24.12.bb
@@ -0,0 +1,89 @@ 
+SUMMARY = "The ARM Computer Vision and Machine Learning library"
+DESCRIPTION = "The ARM Computer Vision and Machine Learning library is a set of functions optimised for both ARM CPUs and GPUs."
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSES/MIT.txt;md5=35f8944fae972976691f3483b0ac9dba"
+
+SRC_URI = " \
+    git://github.com/ARM-software/ComputeLibrary.git;branch=main;protocol=https \
+    file://0001-fix-Fix-indention-in-cmake-generator-script.patch \
+    file://0002-Use-ARM_COMPUTE_ENABLE_NEON-in-code-for-checking-NEO.patch \
+    file://0003-Use-ARM_COMPUTE_ENABLE_SVE-in-code-for-checking-SVE-.patch \
+    file://0004-Add-source-files-at-library-definition-time.patch \
+    file://0005-Add-CMake-options-for-SVE-SVE2-and-BF16-support.patch \
+    file://0006-Allow-SVE-and-SVE2-support-to-be-disabled-in-CMake.patch \
+    file://0007-Allow-ARMv7-builds-using-CMake.patch \
+    file://0008-Fix-undefined-symbol-error-when-building-TensorInfo.patch \
+"
+SRCREV = "32bcced2af7feea6969dd1d22e58d0718dc488e3"
+
+S = "${WORKDIR}/git"
+
+# Only compatible with armv7, armv7ve, and aarch64
+COMPATIBLE_MACHINE = "(^$)"
+COMPATIBLE_MACHINE:aarch64 = "(.*)"
+COMPATIBLE_MACHINE:armv7a = "${@bb.utils.contains("TUNE_FEATURES","neon","(.*)","(^$)",d)}"
+COMPATIBLE_MACHINE:armv7ve = "${@bb.utils.contains("TUNE_FEATURES","neon","(.*)","(^$)",d)}"
+
+inherit cmake
+
+PACKAGECONFIG ??= "examples tests cppthreads openmp"
+
+PACKAGECONFIG[Werror] = "-DARM_COMPUTE_WERROR=ON,-DARM_COMPUTE_WERROR=OFF"
+PACKAGECONFIG[examples] = "-DARM_COMPUTE_BUILD_EXAMPLES=ON,-DARM_COMPUTE_BUILD_EXAMPLES=OFF"
+PACKAGECONFIG[tests] = "-DARM_COMPUTE_BUILD_TESTING=ON,-DARM_COMPUTE_BUILD_TESTING=OFF"
+PACKAGECONFIG[cppthreads] = "-DARM_COMPUTE_CPPTHREADS=ON,-DARM_COMPUTE_CPPTHREADS=OFF"
+PACKAGECONFIG[openmp] = "-DARM_COMPUTE_OPENMP=ON,-DARM_COMPUTE_OPENMP=OFF"
+
+EXTRA_OECMAKE:append:aarch64 = " \
+	-DARM_COMPUTE_ARCH=armv8-a \
+	-DENABLE_NEON=ON \
+	-DENABLE_SVE=OFF \
+	-DENABLE_SVE2=OFF \
+"
+EXTRA_OECMAKE:append:arm = " \
+	-DARM_COMPUTE_ARCH=armv7-a \
+	-DENABLE_NEON=ON \
+	-DENABLE_SVE=OFF \
+	-DENABLE_SVE2=OFF \
+	-DARM_COMPUTE_ENABLE_BF16=OFF \
+	-DARM_COMPUTE_ENABLE_FIXED_FORMAT_KERNELS=OFF \
+"
+
+INHIBIT_PACKAGE_DEBUG_SPLIT = "1"
+
+# package unversioned .so files in PN (they are not dev symlinks)
+FILES_SOLIBSDEV = ""
+FILES:${PN} += "${libdir}/*.so"
+
+# Install headers and examples
+do_install:append() {
+	CP_ARGS="-Prf --preserve=mode,timestamps --no-preserve=ownership"
+
+	# Install headers
+	install -d ${D}${includedir}
+	cp $CP_ARGS ${S}/arm_compute ${D}${includedir}
+	cp $CP_ARGS ${S}/support ${D}${includedir}
+	cp $CP_ARGS ${S}/include/half ${D}${includedir}
+
+	# Latest ONNX Runtime uses some headers from the ACL source
+	install -d ${D}${includedir}/src
+	(cd ${S}/src; find -type f -name \*.h\* -exec install -D {} ${D}${includedir}/src/{} \;)
+
+	# Install examples
+	if ${@bb.utils.contains('PACKAGECONFIG', 'examples', 'true', 'false', d)}; then
+		install -d ${D}${bindir}/${PN}-${PV}/examples
+		for example in ${B}/examples/*; do
+			if [ -d "$example" ]; then
+				continue
+			fi
+			case "$example" in
+				(*.o|*.a|*.cmake) continue;;
+			esac
+			install -m 0555 $example ${D}${bindir}/${PN}-${PV}/examples
+		done
+	fi
+}
+
+PACKAGES =+ "${PN}-tests ${PN}-examples"
+FILES:${PN}-tests += "${libdir}/tests"
+FILES:${PN}-examples += "${bindir}/*/examples"