diff mbox series

[meta-arago,scarthgap/master,5/6] meta-arago-extras: Add recipe for ONNX

Message ID 20250117002520.627504-6-afd@ti.com
State Superseded
Delegated to: Ryan Eatmon
Headers show
Series Add ONNX Runtime | expand

Commit Message

Andrew Davis Jan. 17, 2025, 12:25 a.m. UTC
ONNX provides an open source format for AI models, both deep learning
and traditional ML. It defines an extensible computation graph model,
as well as definitions of built-in operators and standard data types.

Signed-off-by: Andrew Davis <afd@ti.com>
---
 ...age-Protobuf-before-checking-if-it-w.patch |  25 ++++
 .../recipes-framework/onnx/onnx_1.16.1.bb     | 107 ++++++++++++++++++
 2 files changed, 132 insertions(+)
 create mode 100644 meta-arago-extras/recipes-framework/onnx/onnx/0001-Try-to-find-package-Protobuf-before-checking-if-it-w.patch
 create mode 100644 meta-arago-extras/recipes-framework/onnx/onnx_1.16.1.bb

Comments

Chirag Shilwant Jan. 18, 2025, 7:48 p.m. UTC | #1
Hi Andrew,

On 17/01/25 05:55, Andrew Davis wrote:
> ONNX provides an open source format for AI models, both deep learning
> and traditional ML. It defines an extensible computation graph model,
> as well as definitions of built-in operators and standard data types.
>
> Signed-off-by: Andrew Davis <afd@ti.com>
> ---
>   ...age-Protobuf-before-checking-if-it-w.patch |  25 ++++
>   .../recipes-framework/onnx/onnx_1.16.1.bb     | 107 ++++++++++++++++++
>   2 files changed, 132 insertions(+)
>   create mode 100644 meta-arago-extras/recipes-framework/onnx/onnx/0001-Try-to-find-package-Protobuf-before-checking-if-it-w.patch
>   create mode 100644 meta-arago-extras/recipes-framework/onnx/onnx_1.16.1.bb
>
> diff --git a/meta-arago-extras/recipes-framework/onnx/onnx/0001-Try-to-find-package-Protobuf-before-checking-if-it-w.patch b/meta-arago-extras/recipes-framework/onnx/onnx/0001-Try-to-find-package-Protobuf-before-checking-if-it-w.patch
> new file mode 100644
> index 00000000..dceac1f4
> --- /dev/null
> +++ b/meta-arago-extras/recipes-framework/onnx/onnx/0001-Try-to-find-package-Protobuf-before-checking-if-it-w.patch
> @@ -0,0 +1,25 @@
> +From 7e118775c120ec802d13ac3e0125d726323aee87 Mon Sep 17 00:00:00 2001
> +From: Andrew Davis <afd@ti.com>
> +Date: Thu, 16 Jan 2025 11:44:56 -0600
> +Subject: [PATCH] Try to find package Protobuf before checking if it was found
> +
> +Upstream-Status: Pending
> +
> +Signed-off-by: Andrew Davis <afd@ti.com>
> +---
> + CMakeLists.txt | 2 ++
> + 1 file changed, 2 insertions(+)
> +
> +diff --git a/CMakeLists.txt b/CMakeLists.txt
> +index b666eec4..f6fbf159 100644
> +--- a/CMakeLists.txt
> ++++ b/CMakeLists.txt
> +@@ -127,6 +127,8 @@ if(ONNX_BUILD_TESTS)
> +   set(googletest_STATIC_LIBRARIES GTest::gtest)
> + endif()
> +
> ++find_package(Protobuf)
> ++
> + if((ONNX_USE_LITE_PROTO AND TARGET protobuf::libprotobuf-lite) OR ((NOT ONNX_USE_LITE_PROTO) AND TARGET protobuf::libprotobuf))
> +   # Sometimes we need to use protoc compiled for host architecture while linking
> +   # libprotobuf against target architecture. See https://github.com/caffe2/caffe
> diff --git a/meta-arago-extras/recipes-framework/onnx/onnx_1.16.1.bb b/meta-arago-extras/recipes-framework/onnx/onnx_1.16.1.bb
> new file mode 100644
> index 00000000..9624d061
> --- /dev/null
> +++ b/meta-arago-extras/recipes-framework/onnx/onnx_1.16.1.bb
> @@ -0,0 +1,107 @@
> +DESCRIPTION = "Open standard for machine learning interoperability"
> +SUMMARY = "ONNX Python package & C++ library"
> +HOMEPAGE = "https://www.onnx.ai/"
> +LICENSE = "Apache-2.0"
> +LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
> +
> +FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
> +
> +SRC_URI = "git://github.com/onnx/onnx.git;protocol=https;branch=rel-1.16.1"
> +SRC_URI += "file://0001-Try-to-find-package-Protobuf-before-checking-if-it-w.patch"
> +SRCREV = "595228d99e3977ac27cb79d5963adda262af99ad"
> +
> +S = "${WORKDIR}/git"
> +
> +DEPENDS += "\
> +	abseil-cpp \
> +	protobuf \
> +	protobuf-native \
> +	python3-protobuf \
> +	python3-protobuf-native \
> +"
> +
> +PYTHON_DEPENDS = "\
> +	python3 \



Nitpick,

To have a consistency across the entire recipe,
I think it would be better to use PYTHON_PN (as done at PACKAGE_BEFORE_PN)
OR keep it static as python3 for all references


--
Chirag



> +	python3-numpy \
> +	python3-numpy-native \
> +	python3-pybind11 \
> +	python3-pybind11-native \
> +"
> +
> +PYTHON_RDEPENDS = "\
> +	python3 \
> +	python3-numpy \
> +	python3-protobuf \
> +	python3-coloredlogs \
> +	python3-flatbuffers \
> +	python3-sympy \
> +"
> +
> +PACKAGECONFIG ??= "python sharedlib unittests"
> +
> +PACKAGECONFIG[python] = "\
> +	-DBUILD_ONNX_PYTHON=ON \
> +	-DPYTHON_LIBRARY=${PYTHON_LIBRARY} \
> +	-DPYTHON_INCLUDE_DIRS=${PYTHON_INCLUDE_DIR}, \
> +	-DBUILD_ONNX_PYTHON=OFF, \
> +	${PYTHON_DEPENDS} \
> +"
> +
> +PACKAGECONFIG[sharedlib] = "-DBUILD_SHARED_LIBS=ON, -D-DBUILD_SHARED_LIBS=OFF"
> +PACKAGECONFIG[unittests] = "-DONNX_BUILD_TESTS=ON, -DONNX_BUILD_TESTS=OFF, googletest"
> +
> +EXTRA_OECMAKE:append = " \
> +	-DONNX_CUSTOM_PROTOC_EXECUTABLE=${STAGING_BINDIR_NATIVE}/protoc \
> +	-DONNX_USE_PROTOBUF_SHARED_LIBS=ON \
> +	-DONNX_DISABLE_STATIC_REGISTRATION=ON \
> +	-DONNX_ML=1 \
> +	-DCMAKE_VERBOSE_MAKEFILE=ON \
> +	--log-level=VERBOSE \
> +"
> +
> +inherit python3native cmake
> +
> +python do_build_version_file() {
> +    import os
> +    import textwrap
> +
> +    version_file_path = os.path.join(d.getVar('B'), "onnx", "version.py")
> +    os.makedirs(os.path.dirname(version_file_path), exist_ok=True)
> +    with open(version_file_path, "w", encoding="utf-8") as f:
> +        f.write(
> +            textwrap.dedent(
> +                f"""\
> +                # This file is generated. DO NOT EDIT!
> +
> +
> +                version = "{d.getVar('PV')}"
> +                git_version = "{d.getVar('SRCREV')}"
> +                """
> +            )
> +        )
> +}
> +addtask build_version_file before do_install after do_compile
> +
> +do_install:append() {
> +	CP_ARGS="-Prf --preserve=mode,timestamps --no-preserve=ownership"
> +
> +	# Install the Python package.
> +	if ${@bb.utils.contains('PACKAGECONFIG', 'python', 'true', 'false', d)}; then
> +		install -d ${D}${PYTHON_SITEPACKAGES_DIR}/onnx
> +		(cd ${S}/onnx; cp --parents $(find . -name "*.py*") ${D}${PYTHON_SITEPACKAGES_DIR}/onnx)
> +		cp $CP_ARGS ${B}/onnx ${D}${PYTHON_SITEPACKAGES_DIR}
> +		cp $CP_ARGS ${B}/onnx_cpp2py_export.so ${D}${PYTHON_SITEPACKAGES_DIR}/onnx
> +	fi
> +}
> +
> +# Add Python package
> +PACKAGE_BEFORE_PN += "${PYTHON_PN}-${PN}"
> +FILES:${PYTHON_PN}-${PN} += "${PYTHON_SITEPACKAGES_DIR}"
> +RDEPENDS:${PYTHON_PN}-${PN} += "${PYTHON_RDEPENDS} onnx"
> +
> +# Output library is unversioned
> +SOLIBS = ".so"
> +FILES_SOLIBSDEV = ""
> +
> +# TODO: ONNXConfig.cmake in package onnx-dev contains reference to TMPDIR
> +INSANE_SKIP:${PN}-dev = "buildpaths"
Andrew Davis Jan. 21, 2025, 6:59 p.m. UTC | #2
On 1/18/25 1:48 PM, Chirag Shilwant wrote:
> Hi Andrew,
> 
> On 17/01/25 05:55, Andrew Davis wrote:
>> ONNX provides an open source format for AI models, both deep learning
>> and traditional ML. It defines an extensible computation graph model,
>> as well as definitions of built-in operators and standard data types.
>>
>> Signed-off-by: Andrew Davis <afd@ti.com>
>> ---
>>   ...age-Protobuf-before-checking-if-it-w.patch |  25 ++++
>>   .../recipes-framework/onnx/onnx_1.16.1.bb     | 107 ++++++++++++++++++
>>   2 files changed, 132 insertions(+)
>>   create mode 100644 meta-arago-extras/recipes-framework/onnx/onnx/0001-Try-to-find-package-Protobuf-before-checking-if-it-w.patch
>>   create mode 100644 meta-arago-extras/recipes-framework/onnx/onnx_1.16.1.bb
>>
>> diff --git a/meta-arago-extras/recipes-framework/onnx/onnx/0001-Try-to-find-package-Protobuf-before-checking-if-it-w.patch b/meta-arago-extras/recipes-framework/onnx/onnx/0001-Try-to-find-package-Protobuf-before-checking-if-it-w.patch
>> new file mode 100644
>> index 00000000..dceac1f4
>> --- /dev/null
>> +++ b/meta-arago-extras/recipes-framework/onnx/onnx/0001-Try-to-find-package-Protobuf-before-checking-if-it-w.patch
>> @@ -0,0 +1,25 @@
>> +From 7e118775c120ec802d13ac3e0125d726323aee87 Mon Sep 17 00:00:00 2001
>> +From: Andrew Davis <afd@ti.com>
>> +Date: Thu, 16 Jan 2025 11:44:56 -0600
>> +Subject: [PATCH] Try to find package Protobuf before checking if it was found
>> +
>> +Upstream-Status: Pending
>> +
>> +Signed-off-by: Andrew Davis <afd@ti.com>
>> +---
>> + CMakeLists.txt | 2 ++
>> + 1 file changed, 2 insertions(+)
>> +
>> +diff --git a/CMakeLists.txt b/CMakeLists.txt
>> +index b666eec4..f6fbf159 100644
>> +--- a/CMakeLists.txt
>> ++++ b/CMakeLists.txt
>> +@@ -127,6 +127,8 @@ if(ONNX_BUILD_TESTS)
>> +   set(googletest_STATIC_LIBRARIES GTest::gtest)
>> + endif()
>> +
>> ++find_package(Protobuf)
>> ++
>> + if((ONNX_USE_LITE_PROTO AND TARGET protobuf::libprotobuf-lite) OR ((NOT ONNX_USE_LITE_PROTO) AND TARGET protobuf::libprotobuf))
>> +   # Sometimes we need to use protoc compiled for host architecture while linking
>> +   # libprotobuf against target architecture. See https://github.com/caffe2/caffe
>> diff --git a/meta-arago-extras/recipes-framework/onnx/onnx_1.16.1.bb b/meta-arago-extras/recipes-framework/onnx/onnx_1.16.1.bb
>> new file mode 100644
>> index 00000000..9624d061
>> --- /dev/null
>> +++ b/meta-arago-extras/recipes-framework/onnx/onnx_1.16.1.bb
>> @@ -0,0 +1,107 @@
>> +DESCRIPTION = "Open standard for machine learning interoperability"
>> +SUMMARY = "ONNX Python package & C++ library"
>> +HOMEPAGE = "https://www.onnx.ai/"
>> +LICENSE = "Apache-2.0"
>> +LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
>> +
>> +FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
>> +
>> +SRC_URI = "git://github.com/onnx/onnx.git;protocol=https;branch=rel-1.16.1"
>> +SRC_URI += "file://0001-Try-to-find-package-Protobuf-before-checking-if-it-w.patch"
>> +SRCREV = "595228d99e3977ac27cb79d5963adda262af99ad"
>> +
>> +S = "${WORKDIR}/git"
>> +
>> +DEPENDS += "\
>> +    abseil-cpp \
>> +    protobuf \
>> +    protobuf-native \
>> +    python3-protobuf \
>> +    python3-protobuf-native \
>> +"
>> +
>> +PYTHON_DEPENDS = "\
>> +    python3 \
> 
> 
> 
> Nitpick,
> 
> To have a consistency across the entire recipe,
> I think it would be better to use PYTHON_PN (as done at PACKAGE_BEFORE_PN)
> OR keep it static as python3 for all references
> 

Good idea, seems most recipes just use "python3" and not PYTHON_PN, so I'll
switch to that. Better to be explicit on which python we need. (I just hope
we never have to deal with a python4 someday :D)

Andrew

> 
> -- 
> Chirag
> 
> 
> 
>> +    python3-numpy \
>> +    python3-numpy-native \
>> +    python3-pybind11 \
>> +    python3-pybind11-native \
>> +"
>> +
>> +PYTHON_RDEPENDS = "\
>> +    python3 \
>> +    python3-numpy \
>> +    python3-protobuf \
>> +    python3-coloredlogs \
>> +    python3-flatbuffers \
>> +    python3-sympy \
>> +"
>> +
>> +PACKAGECONFIG ??= "python sharedlib unittests"
>> +
>> +PACKAGECONFIG[python] = "\
>> +    -DBUILD_ONNX_PYTHON=ON \
>> +    -DPYTHON_LIBRARY=${PYTHON_LIBRARY} \
>> +    -DPYTHON_INCLUDE_DIRS=${PYTHON_INCLUDE_DIR}, \
>> +    -DBUILD_ONNX_PYTHON=OFF, \
>> +    ${PYTHON_DEPENDS} \
>> +"
>> +
>> +PACKAGECONFIG[sharedlib] = "-DBUILD_SHARED_LIBS=ON, -D-DBUILD_SHARED_LIBS=OFF"
>> +PACKAGECONFIG[unittests] = "-DONNX_BUILD_TESTS=ON, -DONNX_BUILD_TESTS=OFF, googletest"
>> +
>> +EXTRA_OECMAKE:append = " \
>> +    -DONNX_CUSTOM_PROTOC_EXECUTABLE=${STAGING_BINDIR_NATIVE}/protoc \
>> +    -DONNX_USE_PROTOBUF_SHARED_LIBS=ON \
>> +    -DONNX_DISABLE_STATIC_REGISTRATION=ON \
>> +    -DONNX_ML=1 \
>> +    -DCMAKE_VERBOSE_MAKEFILE=ON \
>> +    --log-level=VERBOSE \
>> +"
>> +
>> +inherit python3native cmake
>> +
>> +python do_build_version_file() {
>> +    import os
>> +    import textwrap
>> +
>> +    version_file_path = os.path.join(d.getVar('B'), "onnx", "version.py")
>> +    os.makedirs(os.path.dirname(version_file_path), exist_ok=True)
>> +    with open(version_file_path, "w", encoding="utf-8") as f:
>> +        f.write(
>> +            textwrap.dedent(
>> +                f"""\
>> +                # This file is generated. DO NOT EDIT!
>> +
>> +
>> +                version = "{d.getVar('PV')}"
>> +                git_version = "{d.getVar('SRCREV')}"
>> +                """
>> +            )
>> +        )
>> +}
>> +addtask build_version_file before do_install after do_compile
>> +
>> +do_install:append() {
>> +    CP_ARGS="-Prf --preserve=mode,timestamps --no-preserve=ownership"
>> +
>> +    # Install the Python package.
>> +    if ${@bb.utils.contains('PACKAGECONFIG', 'python', 'true', 'false', d)}; then
>> +        install -d ${D}${PYTHON_SITEPACKAGES_DIR}/onnx
>> +        (cd ${S}/onnx; cp --parents $(find . -name "*.py*") ${D}${PYTHON_SITEPACKAGES_DIR}/onnx)
>> +        cp $CP_ARGS ${B}/onnx ${D}${PYTHON_SITEPACKAGES_DIR}
>> +        cp $CP_ARGS ${B}/onnx_cpp2py_export.so ${D}${PYTHON_SITEPACKAGES_DIR}/onnx
>> +    fi
>> +}
>> +
>> +# Add Python package
>> +PACKAGE_BEFORE_PN += "${PYTHON_PN}-${PN}"
>> +FILES:${PYTHON_PN}-${PN} += "${PYTHON_SITEPACKAGES_DIR}"
>> +RDEPENDS:${PYTHON_PN}-${PN} += "${PYTHON_RDEPENDS} onnx"
>> +
>> +# Output library is unversioned
>> +SOLIBS = ".so"
>> +FILES_SOLIBSDEV = ""
>> +
>> +# TODO: ONNXConfig.cmake in package onnx-dev contains reference to TMPDIR
>> +INSANE_SKIP:${PN}-dev = "buildpaths"
Denys Dmytriyenko Jan. 21, 2025, 7:25 p.m. UTC | #3
On Tue, Jan 21, 2025 at 12:59:59PM -0600, Andrew Davis via lists.yoctoproject.org wrote:
> On 1/18/25 1:48 PM, Chirag Shilwant wrote:
> >Hi Andrew,
> >
> >On 17/01/25 05:55, Andrew Davis wrote:
> >>ONNX provides an open source format for AI models, both deep learning
> >>and traditional ML. It defines an extensible computation graph model,
> >>as well as definitions of built-in operators and standard data types.
> >>
> >>Signed-off-by: Andrew Davis <afd@ti.com>
> >>---
> >>  ...age-Protobuf-before-checking-if-it-w.patch |  25 ++++
> >>  .../recipes-framework/onnx/onnx_1.16.1.bb     | 107 ++++++++++++++++++
> >>  2 files changed, 132 insertions(+)
> >>  create mode 100644 meta-arago-extras/recipes-framework/onnx/onnx/0001-Try-to-find-package-Protobuf-before-checking-if-it-w.patch
> >>  create mode 100644 meta-arago-extras/recipes-framework/onnx/onnx_1.16.1.bb
> >>
> >>diff --git a/meta-arago-extras/recipes-framework/onnx/onnx/0001-Try-to-find-package-Protobuf-before-checking-if-it-w.patch b/meta-arago-extras/recipes-framework/onnx/onnx/0001-Try-to-find-package-Protobuf-before-checking-if-it-w.patch
> >>new file mode 100644
> >>index 00000000..dceac1f4
> >>--- /dev/null
> >>+++ b/meta-arago-extras/recipes-framework/onnx/onnx/0001-Try-to-find-package-Protobuf-before-checking-if-it-w.patch
> >>@@ -0,0 +1,25 @@
> >>+From 7e118775c120ec802d13ac3e0125d726323aee87 Mon Sep 17 00:00:00 2001
> >>+From: Andrew Davis <afd@ti.com>
> >>+Date: Thu, 16 Jan 2025 11:44:56 -0600
> >>+Subject: [PATCH] Try to find package Protobuf before checking if it was found
> >>+
> >>+Upstream-Status: Pending
> >>+
> >>+Signed-off-by: Andrew Davis <afd@ti.com>
> >>+---
> >>+ CMakeLists.txt | 2 ++
> >>+ 1 file changed, 2 insertions(+)
> >>+
> >>+diff --git a/CMakeLists.txt b/CMakeLists.txt
> >>+index b666eec4..f6fbf159 100644
> >>+--- a/CMakeLists.txt
> >>++++ b/CMakeLists.txt
> >>+@@ -127,6 +127,8 @@ if(ONNX_BUILD_TESTS)
> >>+   set(googletest_STATIC_LIBRARIES GTest::gtest)
> >>+ endif()
> >>+
> >>++find_package(Protobuf)
> >>++
> >>+ if((ONNX_USE_LITE_PROTO AND TARGET protobuf::libprotobuf-lite) OR ((NOT ONNX_USE_LITE_PROTO) AND TARGET protobuf::libprotobuf))
> >>+   # Sometimes we need to use protoc compiled for host architecture while linking
> >>+   # libprotobuf against target architecture. See https://github.com/caffe2/caffe
> >>diff --git a/meta-arago-extras/recipes-framework/onnx/onnx_1.16.1.bb b/meta-arago-extras/recipes-framework/onnx/onnx_1.16.1.bb
> >>new file mode 100644
> >>index 00000000..9624d061
> >>--- /dev/null
> >>+++ b/meta-arago-extras/recipes-framework/onnx/onnx_1.16.1.bb
> >>@@ -0,0 +1,107 @@
> >>+DESCRIPTION = "Open standard for machine learning interoperability"
> >>+SUMMARY = "ONNX Python package & C++ library"
> >>+HOMEPAGE = "https://www.onnx.ai/"
> >>+LICENSE = "Apache-2.0"
> >>+LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
> >>+
> >>+FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
> >>+
> >>+SRC_URI = "git://github.com/onnx/onnx.git;protocol=https;branch=rel-1.16.1"
> >>+SRC_URI += "file://0001-Try-to-find-package-Protobuf-before-checking-if-it-w.patch"
> >>+SRCREV = "595228d99e3977ac27cb79d5963adda262af99ad"
> >>+
> >>+S = "${WORKDIR}/git"
> >>+
> >>+DEPENDS += "\
> >>+    abseil-cpp \
> >>+    protobuf \
> >>+    protobuf-native \
> >>+    python3-protobuf \
> >>+    python3-protobuf-native \
> >>+"
> >>+
> >>+PYTHON_DEPENDS = "\
> >>+    python3 \
> >
> >
> >
> >Nitpick,
> >
> >To have a consistency across the entire recipe,
> >I think it would be better to use PYTHON_PN (as done at PACKAGE_BEFORE_PN)
> >OR keep it static as python3 for all references
> >
> 
> Good idea, seems most recipes just use "python3" and not PYTHON_PN, so I'll
> switch to that. Better to be explicit on which python we need. (I just hope
> we never have to deal with a python4 someday :D)

Heh, you never know. We've dealt with python2/python3 and needing to support 
both, as well as Qt3/Qt4/Qt5 (and Qt6 now), and gstreamer 0.10 vs. 1.0...


> >
> >>+    python3-numpy \
> >>+    python3-numpy-native \
> >>+    python3-pybind11 \
> >>+    python3-pybind11-native \
> >>+"
> >>+
> >>+PYTHON_RDEPENDS = "\
> >>+    python3 \
> >>+    python3-numpy \
> >>+    python3-protobuf \
> >>+    python3-coloredlogs \
> >>+    python3-flatbuffers \
> >>+    python3-sympy \
> >>+"
> >>+
> >>+PACKAGECONFIG ??= "python sharedlib unittests"
> >>+
> >>+PACKAGECONFIG[python] = "\
> >>+    -DBUILD_ONNX_PYTHON=ON \
> >>+    -DPYTHON_LIBRARY=${PYTHON_LIBRARY} \
> >>+    -DPYTHON_INCLUDE_DIRS=${PYTHON_INCLUDE_DIR}, \
> >>+    -DBUILD_ONNX_PYTHON=OFF, \
> >>+    ${PYTHON_DEPENDS} \
> >>+"
> >>+
> >>+PACKAGECONFIG[sharedlib] = "-DBUILD_SHARED_LIBS=ON, -D-DBUILD_SHARED_LIBS=OFF"
> >>+PACKAGECONFIG[unittests] = "-DONNX_BUILD_TESTS=ON, -DONNX_BUILD_TESTS=OFF, googletest"
> >>+
> >>+EXTRA_OECMAKE:append = " \
> >>+    -DONNX_CUSTOM_PROTOC_EXECUTABLE=${STAGING_BINDIR_NATIVE}/protoc \
> >>+    -DONNX_USE_PROTOBUF_SHARED_LIBS=ON \
> >>+    -DONNX_DISABLE_STATIC_REGISTRATION=ON \
> >>+    -DONNX_ML=1 \
> >>+    -DCMAKE_VERBOSE_MAKEFILE=ON \
> >>+    --log-level=VERBOSE \
> >>+"
> >>+
> >>+inherit python3native cmake
> >>+
> >>+python do_build_version_file() {
> >>+    import os
> >>+    import textwrap
> >>+
> >>+    version_file_path = os.path.join(d.getVar('B'), "onnx", "version.py")
> >>+    os.makedirs(os.path.dirname(version_file_path), exist_ok=True)
> >>+    with open(version_file_path, "w", encoding="utf-8") as f:
> >>+        f.write(
> >>+            textwrap.dedent(
> >>+                f"""\
> >>+                # This file is generated. DO NOT EDIT!
> >>+
> >>+
> >>+                version = "{d.getVar('PV')}"
> >>+                git_version = "{d.getVar('SRCREV')}"
> >>+                """
> >>+            )
> >>+        )
> >>+}
> >>+addtask build_version_file before do_install after do_compile
> >>+
> >>+do_install:append() {
> >>+    CP_ARGS="-Prf --preserve=mode,timestamps --no-preserve=ownership"
> >>+
> >>+    # Install the Python package.
> >>+    if ${@bb.utils.contains('PACKAGECONFIG', 'python', 'true', 'false', d)}; then
> >>+        install -d ${D}${PYTHON_SITEPACKAGES_DIR}/onnx
> >>+        (cd ${S}/onnx; cp --parents $(find . -name "*.py*") ${D}${PYTHON_SITEPACKAGES_DIR}/onnx)
> >>+        cp $CP_ARGS ${B}/onnx ${D}${PYTHON_SITEPACKAGES_DIR}
> >>+        cp $CP_ARGS ${B}/onnx_cpp2py_export.so ${D}${PYTHON_SITEPACKAGES_DIR}/onnx
> >>+    fi
> >>+}
> >>+
> >>+# Add Python package
> >>+PACKAGE_BEFORE_PN += "${PYTHON_PN}-${PN}"
> >>+FILES:${PYTHON_PN}-${PN} += "${PYTHON_SITEPACKAGES_DIR}"
> >>+RDEPENDS:${PYTHON_PN}-${PN} += "${PYTHON_RDEPENDS} onnx"
> >>+
> >>+# Output library is unversioned
> >>+SOLIBS = ".so"
> >>+FILES_SOLIBSDEV = ""
> >>+
> >>+# TODO: ONNXConfig.cmake in package onnx-dev contains reference to TMPDIR
> >>+INSANE_SKIP:${PN}-dev = "buildpaths"
Ryan Eatmon Jan. 22, 2025, 4:30 p.m. UTC | #4
On 1/21/2025 12:59 PM, Andrew Davis wrote:
> On 1/18/25 1:48 PM, Chirag Shilwant wrote:
>> Hi Andrew,
>>
>> On 17/01/25 05:55, Andrew Davis wrote:
>>> ONNX provides an open source format for AI models, both deep learning
>>> and traditional ML. It defines an extensible computation graph model,
>>> as well as definitions of built-in operators and standard data types.
>>>
>>> Signed-off-by: Andrew Davis <afd@ti.com>
>>> ---
>>>   ...age-Protobuf-before-checking-if-it-w.patch |  25 ++++
>>>   .../recipes-framework/onnx/onnx_1.16.1.bb     | 107 ++++++++++++++++++
>>>   2 files changed, 132 insertions(+)
>>>   create mode 100644 
>>> meta-arago-extras/recipes-framework/onnx/onnx/0001-Try-to-find-package-Protobuf-before-checking-if-it-w.patch
>>>   create mode 100644 
>>> meta-arago-extras/recipes-framework/onnx/onnx_1.16.1.bb
>>>
>>> diff --git 
>>> a/meta-arago-extras/recipes-framework/onnx/onnx/0001-Try-to-find-package-Protobuf-before-checking-if-it-w.patch b/meta-arago-extras/recipes-framework/onnx/onnx/0001-Try-to-find-package-Protobuf-before-checking-if-it-w.patch
>>> new file mode 100644
>>> index 00000000..dceac1f4
>>> --- /dev/null
>>> +++ 
>>> b/meta-arago-extras/recipes-framework/onnx/onnx/0001-Try-to-find-package-Protobuf-before-checking-if-it-w.patch
>>> @@ -0,0 +1,25 @@
>>> +From 7e118775c120ec802d13ac3e0125d726323aee87 Mon Sep 17 00:00:00 2001
>>> +From: Andrew Davis <afd@ti.com>
>>> +Date: Thu, 16 Jan 2025 11:44:56 -0600
>>> +Subject: [PATCH] Try to find package Protobuf before checking if it 
>>> was found
>>> +
>>> +Upstream-Status: Pending
>>> +
>>> +Signed-off-by: Andrew Davis <afd@ti.com>
>>> +---
>>> + CMakeLists.txt | 2 ++
>>> + 1 file changed, 2 insertions(+)
>>> +
>>> +diff --git a/CMakeLists.txt b/CMakeLists.txt
>>> +index b666eec4..f6fbf159 100644
>>> +--- a/CMakeLists.txt
>>> ++++ b/CMakeLists.txt
>>> +@@ -127,6 +127,8 @@ if(ONNX_BUILD_TESTS)
>>> +   set(googletest_STATIC_LIBRARIES GTest::gtest)
>>> + endif()
>>> +
>>> ++find_package(Protobuf)
>>> ++
>>> + if((ONNX_USE_LITE_PROTO AND TARGET protobuf::libprotobuf-lite) OR 
>>> ((NOT ONNX_USE_LITE_PROTO) AND TARGET protobuf::libprotobuf))
>>> +   # Sometimes we need to use protoc compiled for host architecture 
>>> while linking
>>> +   # libprotobuf against target architecture. See 
>>> https://github.com/caffe2/caffe
>>> diff --git a/meta-arago-extras/recipes-framework/onnx/onnx_1.16.1.bb 
>>> b/meta-arago-extras/recipes-framework/onnx/onnx_1.16.1.bb
>>> new file mode 100644
>>> index 00000000..9624d061
>>> --- /dev/null
>>> +++ b/meta-arago-extras/recipes-framework/onnx/onnx_1.16.1.bb
>>> @@ -0,0 +1,107 @@
>>> +DESCRIPTION = "Open standard for machine learning interoperability"
>>> +SUMMARY = "ONNX Python package & C++ library"
>>> +HOMEPAGE = "https://www.onnx.ai/"
>>> +LICENSE = "Apache-2.0"
>>> +LIC_FILES_CHKSUM = 
>>> "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
>>> +
>>> +FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
>>> +
>>> +SRC_URI = 
>>> "git://github.com/onnx/onnx.git;protocol=https;branch=rel-1.16.1"
>>> +SRC_URI += 
>>> "file://0001-Try-to-find-package-Protobuf-before-checking-if-it-w.patch"
>>> +SRCREV = "595228d99e3977ac27cb79d5963adda262af99ad"
>>> +
>>> +S = "${WORKDIR}/git"
>>> +
>>> +DEPENDS += "\
>>> +    abseil-cpp \
>>> +    protobuf \
>>> +    protobuf-native \
>>> +    python3-protobuf \
>>> +    python3-protobuf-native \
>>> +"
>>> +
>>> +PYTHON_DEPENDS = "\
>>> +    python3 \
>>
>>
>>
>> Nitpick,
>>
>> To have a consistency across the entire recipe,
>> I think it would be better to use PYTHON_PN (as done at 
>> PACKAGE_BEFORE_PN)
>> OR keep it static as python3 for all references
>>
> 
> Good idea, seems most recipes just use "python3" and not PYTHON_PN, so I'll
> switch to that. Better to be explicit on which python we need. (I just hope
> we never have to deal with a python4 someday :D)
> 
> Andrew

Does this mean a v2 is coming for this series?  I'm getting a little 
lost since you keep sending some of the same patches under new series 
names...  I'll wait to process all of these until we get the v2.



>>
>> -- 
>> Chirag
>>
>>
>>
>>> +    python3-numpy \
>>> +    python3-numpy-native \
>>> +    python3-pybind11 \
>>> +    python3-pybind11-native \
>>> +"
>>> +
>>> +PYTHON_RDEPENDS = "\
>>> +    python3 \
>>> +    python3-numpy \
>>> +    python3-protobuf \
>>> +    python3-coloredlogs \
>>> +    python3-flatbuffers \
>>> +    python3-sympy \
>>> +"
>>> +
>>> +PACKAGECONFIG ??= "python sharedlib unittests"
>>> +
>>> +PACKAGECONFIG[python] = "\
>>> +    -DBUILD_ONNX_PYTHON=ON \
>>> +    -DPYTHON_LIBRARY=${PYTHON_LIBRARY} \
>>> +    -DPYTHON_INCLUDE_DIRS=${PYTHON_INCLUDE_DIR}, \
>>> +    -DBUILD_ONNX_PYTHON=OFF, \
>>> +    ${PYTHON_DEPENDS} \
>>> +"
>>> +
>>> +PACKAGECONFIG[sharedlib] = "-DBUILD_SHARED_LIBS=ON, 
>>> -D-DBUILD_SHARED_LIBS=OFF"
>>> +PACKAGECONFIG[unittests] = "-DONNX_BUILD_TESTS=ON, 
>>> -DONNX_BUILD_TESTS=OFF, googletest"
>>> +
>>> +EXTRA_OECMAKE:append = " \
>>> +    -DONNX_CUSTOM_PROTOC_EXECUTABLE=${STAGING_BINDIR_NATIVE}/protoc \
>>> +    -DONNX_USE_PROTOBUF_SHARED_LIBS=ON \
>>> +    -DONNX_DISABLE_STATIC_REGISTRATION=ON \
>>> +    -DONNX_ML=1 \
>>> +    -DCMAKE_VERBOSE_MAKEFILE=ON \
>>> +    --log-level=VERBOSE \
>>> +"
>>> +
>>> +inherit python3native cmake
>>> +
>>> +python do_build_version_file() {
>>> +    import os
>>> +    import textwrap
>>> +
>>> +    version_file_path = os.path.join(d.getVar('B'), "onnx", 
>>> "version.py")
>>> +    os.makedirs(os.path.dirname(version_file_path), exist_ok=True)
>>> +    with open(version_file_path, "w", encoding="utf-8") as f:
>>> +        f.write(
>>> +            textwrap.dedent(
>>> +                f"""\
>>> +                # This file is generated. DO NOT EDIT!
>>> +
>>> +
>>> +                version = "{d.getVar('PV')}"
>>> +                git_version = "{d.getVar('SRCREV')}"
>>> +                """
>>> +            )
>>> +        )
>>> +}
>>> +addtask build_version_file before do_install after do_compile
>>> +
>>> +do_install:append() {
>>> +    CP_ARGS="-Prf --preserve=mode,timestamps --no-preserve=ownership"
>>> +
>>> +    # Install the Python package.
>>> +    if ${@bb.utils.contains('PACKAGECONFIG', 'python', 'true', 
>>> 'false', d)}; then
>>> +        install -d ${D}${PYTHON_SITEPACKAGES_DIR}/onnx
>>> +        (cd ${S}/onnx; cp --parents $(find . -name "*.py*") 
>>> ${D}${PYTHON_SITEPACKAGES_DIR}/onnx)
>>> +        cp $CP_ARGS ${B}/onnx ${D}${PYTHON_SITEPACKAGES_DIR}
>>> +        cp $CP_ARGS ${B}/onnx_cpp2py_export.so 
>>> ${D}${PYTHON_SITEPACKAGES_DIR}/onnx
>>> +    fi
>>> +}
>>> +
>>> +# Add Python package
>>> +PACKAGE_BEFORE_PN += "${PYTHON_PN}-${PN}"
>>> +FILES:${PYTHON_PN}-${PN} += "${PYTHON_SITEPACKAGES_DIR}"
>>> +RDEPENDS:${PYTHON_PN}-${PN} += "${PYTHON_RDEPENDS} onnx"
>>> +
>>> +# Output library is unversioned
>>> +SOLIBS = ".so"
>>> +FILES_SOLIBSDEV = ""
>>> +
>>> +# TODO: ONNXConfig.cmake in package onnx-dev contains reference to 
>>> TMPDIR
>>> +INSANE_SKIP:${PN}-dev = "buildpaths"
Andrew Davis Jan. 24, 2025, 9:14 p.m. UTC | #5
On 1/22/25 10:30 AM, Ryan Eatmon wrote:
> 
> 
> On 1/21/2025 12:59 PM, Andrew Davis wrote:
>> On 1/18/25 1:48 PM, Chirag Shilwant wrote:
>>> Hi Andrew,
>>>
>>> On 17/01/25 05:55, Andrew Davis wrote:
>>>> ONNX provides an open source format for AI models, both deep learning
>>>> and traditional ML. It defines an extensible computation graph model,
>>>> as well as definitions of built-in operators and standard data types.
>>>>
>>>> Signed-off-by: Andrew Davis <afd@ti.com>
>>>> ---
>>>>   ...age-Protobuf-before-checking-if-it-w.patch |  25 ++++
>>>>   .../recipes-framework/onnx/onnx_1.16.1.bb     | 107 ++++++++++++++++++
>>>>   2 files changed, 132 insertions(+)
>>>>   create mode 100644 meta-arago-extras/recipes-framework/onnx/onnx/0001-Try-to-find-package-Protobuf-before-checking-if-it-w.patch
>>>>   create mode 100644 meta-arago-extras/recipes-framework/onnx/onnx_1.16.1.bb
>>>>
>>>> diff --git a/meta-arago-extras/recipes-framework/onnx/onnx/0001-Try-to-find-package-Protobuf-before-checking-if-it-w.patch b/meta-arago-extras/recipes-framework/onnx/onnx/0001-Try-to-find-package-Protobuf-before-checking-if-it-w.patch
>>>> new file mode 100644
>>>> index 00000000..dceac1f4
>>>> --- /dev/null
>>>> +++ b/meta-arago-extras/recipes-framework/onnx/onnx/0001-Try-to-find-package-Protobuf-before-checking-if-it-w.patch
>>>> @@ -0,0 +1,25 @@
>>>> +From 7e118775c120ec802d13ac3e0125d726323aee87 Mon Sep 17 00:00:00 2001
>>>> +From: Andrew Davis <afd@ti.com>
>>>> +Date: Thu, 16 Jan 2025 11:44:56 -0600
>>>> +Subject: [PATCH] Try to find package Protobuf before checking if it was found
>>>> +
>>>> +Upstream-Status: Pending
>>>> +
>>>> +Signed-off-by: Andrew Davis <afd@ti.com>
>>>> +---
>>>> + CMakeLists.txt | 2 ++
>>>> + 1 file changed, 2 insertions(+)
>>>> +
>>>> +diff --git a/CMakeLists.txt b/CMakeLists.txt
>>>> +index b666eec4..f6fbf159 100644
>>>> +--- a/CMakeLists.txt
>>>> ++++ b/CMakeLists.txt
>>>> +@@ -127,6 +127,8 @@ if(ONNX_BUILD_TESTS)
>>>> +   set(googletest_STATIC_LIBRARIES GTest::gtest)
>>>> + endif()
>>>> +
>>>> ++find_package(Protobuf)
>>>> ++
>>>> + if((ONNX_USE_LITE_PROTO AND TARGET protobuf::libprotobuf-lite) OR ((NOT ONNX_USE_LITE_PROTO) AND TARGET protobuf::libprotobuf))
>>>> +   # Sometimes we need to use protoc compiled for host architecture while linking
>>>> +   # libprotobuf against target architecture. See https://github.com/caffe2/caffe
>>>> diff --git a/meta-arago-extras/recipes-framework/onnx/onnx_1.16.1.bb b/meta-arago-extras/recipes-framework/onnx/onnx_1.16.1.bb
>>>> new file mode 100644
>>>> index 00000000..9624d061
>>>> --- /dev/null
>>>> +++ b/meta-arago-extras/recipes-framework/onnx/onnx_1.16.1.bb
>>>> @@ -0,0 +1,107 @@
>>>> +DESCRIPTION = "Open standard for machine learning interoperability"
>>>> +SUMMARY = "ONNX Python package & C++ library"
>>>> +HOMEPAGE = "https://www.onnx.ai/"
>>>> +LICENSE = "Apache-2.0"
>>>> +LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
>>>> +
>>>> +FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
>>>> +
>>>> +SRC_URI = "git://github.com/onnx/onnx.git;protocol=https;branch=rel-1.16.1"
>>>> +SRC_URI += "file://0001-Try-to-find-package-Protobuf-before-checking-if-it-w.patch"
>>>> +SRCREV = "595228d99e3977ac27cb79d5963adda262af99ad"
>>>> +
>>>> +S = "${WORKDIR}/git"
>>>> +
>>>> +DEPENDS += "\
>>>> +    abseil-cpp \
>>>> +    protobuf \
>>>> +    protobuf-native \
>>>> +    python3-protobuf \
>>>> +    python3-protobuf-native \
>>>> +"
>>>> +
>>>> +PYTHON_DEPENDS = "\
>>>> +    python3 \
>>>
>>>
>>>
>>> Nitpick,
>>>
>>> To have a consistency across the entire recipe,
>>> I think it would be better to use PYTHON_PN (as done at PACKAGE_BEFORE_PN)
>>> OR keep it static as python3 for all references
>>>
>>
>> Good idea, seems most recipes just use "python3" and not PYTHON_PN, so I'll
>> switch to that. Better to be explicit on which python we need. (I just hope
>> we never have to deal with a python4 someday :D)
>>
>> Andrew
> 
> Does this mean a v2 is coming for this series?  I'm getting a little lost since you keep sending some of the same patches under new series names...  I'll wait to process all of these until we get the v2.
> 

Yes, I'll send a v2 once things settle down in -next/-wip. I see my
ArmNN package got dropped (which is fine, I have a newer version anyway),
but it also means until something goes into master I can't consider it
done and drop from my queue. Which means I'll end up resending it if I
send against scarthgap/master.

I could base my series against your -next/-wip branches, but as above
they are not stable branches and things can get lost..

Scarthgap/master have not moved in ~7 weeks now, so my patch backlog
is getting a bit out of hand now. Maybe we should look into a manual
promotion if LTS migration/testing is going to hold us up this long :/

Andrew

> 
> 
>>>
>>> -- 
>>> Chirag
>>>
>>>
>>>
>>>> +    python3-numpy \
>>>> +    python3-numpy-native \
>>>> +    python3-pybind11 \
>>>> +    python3-pybind11-native \
>>>> +"
>>>> +
>>>> +PYTHON_RDEPENDS = "\
>>>> +    python3 \
>>>> +    python3-numpy \
>>>> +    python3-protobuf \
>>>> +    python3-coloredlogs \
>>>> +    python3-flatbuffers \
>>>> +    python3-sympy \
>>>> +"
>>>> +
>>>> +PACKAGECONFIG ??= "python sharedlib unittests"
>>>> +
>>>> +PACKAGECONFIG[python] = "\
>>>> +    -DBUILD_ONNX_PYTHON=ON \
>>>> +    -DPYTHON_LIBRARY=${PYTHON_LIBRARY} \
>>>> +    -DPYTHON_INCLUDE_DIRS=${PYTHON_INCLUDE_DIR}, \
>>>> +    -DBUILD_ONNX_PYTHON=OFF, \
>>>> +    ${PYTHON_DEPENDS} \
>>>> +"
>>>> +
>>>> +PACKAGECONFIG[sharedlib] = "-DBUILD_SHARED_LIBS=ON, -D-DBUILD_SHARED_LIBS=OFF"
>>>> +PACKAGECONFIG[unittests] = "-DONNX_BUILD_TESTS=ON, -DONNX_BUILD_TESTS=OFF, googletest"
>>>> +
>>>> +EXTRA_OECMAKE:append = " \
>>>> +    -DONNX_CUSTOM_PROTOC_EXECUTABLE=${STAGING_BINDIR_NATIVE}/protoc \
>>>> +    -DONNX_USE_PROTOBUF_SHARED_LIBS=ON \
>>>> +    -DONNX_DISABLE_STATIC_REGISTRATION=ON \
>>>> +    -DONNX_ML=1 \
>>>> +    -DCMAKE_VERBOSE_MAKEFILE=ON \
>>>> +    --log-level=VERBOSE \
>>>> +"
>>>> +
>>>> +inherit python3native cmake
>>>> +
>>>> +python do_build_version_file() {
>>>> +    import os
>>>> +    import textwrap
>>>> +
>>>> +    version_file_path = os.path.join(d.getVar('B'), "onnx", "version.py")
>>>> +    os.makedirs(os.path.dirname(version_file_path), exist_ok=True)
>>>> +    with open(version_file_path, "w", encoding="utf-8") as f:
>>>> +        f.write(
>>>> +            textwrap.dedent(
>>>> +                f"""\
>>>> +                # This file is generated. DO NOT EDIT!
>>>> +
>>>> +
>>>> +                version = "{d.getVar('PV')}"
>>>> +                git_version = "{d.getVar('SRCREV')}"
>>>> +                """
>>>> +            )
>>>> +        )
>>>> +}
>>>> +addtask build_version_file before do_install after do_compile
>>>> +
>>>> +do_install:append() {
>>>> +    CP_ARGS="-Prf --preserve=mode,timestamps --no-preserve=ownership"
>>>> +
>>>> +    # Install the Python package.
>>>> +    if ${@bb.utils.contains('PACKAGECONFIG', 'python', 'true', 'false', d)}; then
>>>> +        install -d ${D}${PYTHON_SITEPACKAGES_DIR}/onnx
>>>> +        (cd ${S}/onnx; cp --parents $(find . -name "*.py*") ${D}${PYTHON_SITEPACKAGES_DIR}/onnx)
>>>> +        cp $CP_ARGS ${B}/onnx ${D}${PYTHON_SITEPACKAGES_DIR}
>>>> +        cp $CP_ARGS ${B}/onnx_cpp2py_export.so ${D}${PYTHON_SITEPACKAGES_DIR}/onnx
>>>> +    fi
>>>> +}
>>>> +
>>>> +# Add Python package
>>>> +PACKAGE_BEFORE_PN += "${PYTHON_PN}-${PN}"
>>>> +FILES:${PYTHON_PN}-${PN} += "${PYTHON_SITEPACKAGES_DIR}"
>>>> +RDEPENDS:${PYTHON_PN}-${PN} += "${PYTHON_RDEPENDS} onnx"
>>>> +
>>>> +# Output library is unversioned
>>>> +SOLIBS = ".so"
>>>> +FILES_SOLIBSDEV = ""
>>>> +
>>>> +# TODO: ONNXConfig.cmake in package onnx-dev contains reference to TMPDIR
>>>> +INSANE_SKIP:${PN}-dev = "buildpaths"
>
diff mbox series

Patch

diff --git a/meta-arago-extras/recipes-framework/onnx/onnx/0001-Try-to-find-package-Protobuf-before-checking-if-it-w.patch b/meta-arago-extras/recipes-framework/onnx/onnx/0001-Try-to-find-package-Protobuf-before-checking-if-it-w.patch
new file mode 100644
index 00000000..dceac1f4
--- /dev/null
+++ b/meta-arago-extras/recipes-framework/onnx/onnx/0001-Try-to-find-package-Protobuf-before-checking-if-it-w.patch
@@ -0,0 +1,25 @@ 
+From 7e118775c120ec802d13ac3e0125d726323aee87 Mon Sep 17 00:00:00 2001
+From: Andrew Davis <afd@ti.com>
+Date: Thu, 16 Jan 2025 11:44:56 -0600
+Subject: [PATCH] Try to find package Protobuf before checking if it was found
+
+Upstream-Status: Pending
+
+Signed-off-by: Andrew Davis <afd@ti.com>
+---
+ CMakeLists.txt | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index b666eec4..f6fbf159 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -127,6 +127,8 @@ if(ONNX_BUILD_TESTS)
+   set(googletest_STATIC_LIBRARIES GTest::gtest)
+ endif()
+ 
++find_package(Protobuf)
++
+ if((ONNX_USE_LITE_PROTO AND TARGET protobuf::libprotobuf-lite) OR ((NOT ONNX_USE_LITE_PROTO) AND TARGET protobuf::libprotobuf))
+   # Sometimes we need to use protoc compiled for host architecture while linking
+   # libprotobuf against target architecture. See https://github.com/caffe2/caffe
diff --git a/meta-arago-extras/recipes-framework/onnx/onnx_1.16.1.bb b/meta-arago-extras/recipes-framework/onnx/onnx_1.16.1.bb
new file mode 100644
index 00000000..9624d061
--- /dev/null
+++ b/meta-arago-extras/recipes-framework/onnx/onnx_1.16.1.bb
@@ -0,0 +1,107 @@ 
+DESCRIPTION = "Open standard for machine learning interoperability"
+SUMMARY = "ONNX Python package & C++ library"
+HOMEPAGE = "https://www.onnx.ai/"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
+
+FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
+
+SRC_URI = "git://github.com/onnx/onnx.git;protocol=https;branch=rel-1.16.1"
+SRC_URI += "file://0001-Try-to-find-package-Protobuf-before-checking-if-it-w.patch"
+SRCREV = "595228d99e3977ac27cb79d5963adda262af99ad"
+
+S = "${WORKDIR}/git"
+
+DEPENDS += "\
+	abseil-cpp \
+	protobuf \
+	protobuf-native \
+	python3-protobuf \
+	python3-protobuf-native \
+"
+
+PYTHON_DEPENDS = "\
+	python3 \
+	python3-numpy \
+	python3-numpy-native \
+	python3-pybind11 \
+	python3-pybind11-native \
+"
+
+PYTHON_RDEPENDS = "\
+	python3 \
+	python3-numpy \
+	python3-protobuf \
+	python3-coloredlogs \
+	python3-flatbuffers \
+	python3-sympy \
+"
+
+PACKAGECONFIG ??= "python sharedlib unittests"
+
+PACKAGECONFIG[python] = "\
+	-DBUILD_ONNX_PYTHON=ON \
+	-DPYTHON_LIBRARY=${PYTHON_LIBRARY} \
+	-DPYTHON_INCLUDE_DIRS=${PYTHON_INCLUDE_DIR}, \
+	-DBUILD_ONNX_PYTHON=OFF, \
+	${PYTHON_DEPENDS} \
+"
+
+PACKAGECONFIG[sharedlib] = "-DBUILD_SHARED_LIBS=ON, -D-DBUILD_SHARED_LIBS=OFF"
+PACKAGECONFIG[unittests] = "-DONNX_BUILD_TESTS=ON, -DONNX_BUILD_TESTS=OFF, googletest"
+
+EXTRA_OECMAKE:append = " \
+	-DONNX_CUSTOM_PROTOC_EXECUTABLE=${STAGING_BINDIR_NATIVE}/protoc \
+	-DONNX_USE_PROTOBUF_SHARED_LIBS=ON \
+	-DONNX_DISABLE_STATIC_REGISTRATION=ON \
+	-DONNX_ML=1 \
+	-DCMAKE_VERBOSE_MAKEFILE=ON \
+	--log-level=VERBOSE \
+"
+
+inherit python3native cmake
+
+python do_build_version_file() {
+    import os
+    import textwrap
+
+    version_file_path = os.path.join(d.getVar('B'), "onnx", "version.py")
+    os.makedirs(os.path.dirname(version_file_path), exist_ok=True)
+    with open(version_file_path, "w", encoding="utf-8") as f:
+        f.write(
+            textwrap.dedent(
+                f"""\
+                # This file is generated. DO NOT EDIT!
+
+
+                version = "{d.getVar('PV')}"
+                git_version = "{d.getVar('SRCREV')}"
+                """
+            )
+        )
+}
+addtask build_version_file before do_install after do_compile
+
+do_install:append() {
+	CP_ARGS="-Prf --preserve=mode,timestamps --no-preserve=ownership"
+
+	# Install the Python package.
+	if ${@bb.utils.contains('PACKAGECONFIG', 'python', 'true', 'false', d)}; then
+		install -d ${D}${PYTHON_SITEPACKAGES_DIR}/onnx
+		(cd ${S}/onnx; cp --parents $(find . -name "*.py*") ${D}${PYTHON_SITEPACKAGES_DIR}/onnx)
+		cp $CP_ARGS ${B}/onnx ${D}${PYTHON_SITEPACKAGES_DIR}
+		cp $CP_ARGS ${B}/onnx_cpp2py_export.so ${D}${PYTHON_SITEPACKAGES_DIR}/onnx
+	fi
+}
+
+# Add Python package
+PACKAGE_BEFORE_PN += "${PYTHON_PN}-${PN}"
+FILES:${PYTHON_PN}-${PN} += "${PYTHON_SITEPACKAGES_DIR}"
+RDEPENDS:${PYTHON_PN}-${PN} += "${PYTHON_RDEPENDS} onnx"
+
+# Output library is unversioned
+SOLIBS = ".so"
+FILES_SOLIBSDEV = ""
+
+# TODO: ONNXConfig.cmake in package onnx-dev contains reference to TMPDIR
+INSANE_SKIP:${PN}-dev = "buildpaths"