This recipe enables User Mode Driver for Intel® NPU device.
Intel® NPU device is an AI inference accelerator integrated
with Intel client CPUs, starting from Intel® Core™ Ultra generation
of CPUs (formerly known as Meteor Lake).
It enables energy-efficient execution of artificial neural network tasks.

https://github.com/intel/linux-npu-driver

Signed-off-by: Naveen Saini <[email protected]>
---
 ...ilation-warning-when-using-gcc-13-25.patch |  99 ++++++++++++++++
 ...-Fix-compilation-failure-with-GCC-14.patch | 110 ++++++++++++++++++
 .../linux-npu-driver_1.2.0.bb                 |  33 ++++++
 3 files changed, 242 insertions(+)
 create mode 100644 
dynamic-layers/openembedded-layer/recipes-core/linux-npu-driver/linux-npu-driver/0001-Fix-the-compilation-warning-when-using-gcc-13-25.patch
 create mode 100644 
dynamic-layers/openembedded-layer/recipes-core/linux-npu-driver/linux-npu-driver/0002-Fix-compilation-failure-with-GCC-14.patch
 create mode 100644 
dynamic-layers/openembedded-layer/recipes-core/linux-npu-driver/linux-npu-driver_1.2.0.bb

diff --git 
a/dynamic-layers/openembedded-layer/recipes-core/linux-npu-driver/linux-npu-driver/0001-Fix-the-compilation-warning-when-using-gcc-13-25.patch
 
b/dynamic-layers/openembedded-layer/recipes-core/linux-npu-driver/linux-npu-driver/0001-Fix-the-compilation-warning-when-using-gcc-13-25.patch
new file mode 100644
index 00000000..2748d7ab
--- /dev/null
+++ 
b/dynamic-layers/openembedded-layer/recipes-core/linux-npu-driver/linux-npu-driver/0001-Fix-the-compilation-warning-when-using-gcc-13-25.patch
@@ -0,0 +1,99 @@
+From b57297c14d94dac9bdef7570b7b33d70b10171f3 Mon Sep 17 00:00:00 2001
+From: Jozef Wludzik <[email protected]>
+Date: Tue, 26 Mar 2024 14:43:29 +0100
+Subject: [PATCH 1/2] Fix the compilation warning when using gcc-13 (#25)
+
+Added missing headers. Fixed compilation error about casting from
+unsigned to signed int.
+
+Upstream-Status: Backport 
[https://github.com/intel/linux-npu-driver/commit/4bcbf2abe94eb4d9c083bd616b58e309a82d008a]
+
+Signed-off-by: Jozef Wludzik <[email protected]>
+Signed-off-by: Naveen Saini <[email protected]>
+---
+ umd/level_zero_driver/ext/source/graph/vcl_symbols.hpp | 7 ++++---
+ umd/vpu_driver/include/umd_common.hpp                  | 1 +
+ validation/umd-test/umd_prime_buffers.h                | 9 +++++++--
+ validation/umd-test/utilities/data_handle.h            | 1 +
+ 4 files changed, 13 insertions(+), 5 deletions(-)
+
+diff --git a/umd/level_zero_driver/ext/source/graph/vcl_symbols.hpp 
b/umd/level_zero_driver/ext/source/graph/vcl_symbols.hpp
+index f206ebe..682e5b4 100644
+--- a/umd/level_zero_driver/ext/source/graph/vcl_symbols.hpp
++++ b/umd/level_zero_driver/ext/source/graph/vcl_symbols.hpp
+@@ -5,12 +5,13 @@
+  *
+  */
+ 
+-#include <dlfcn.h>
+-#include <memory>
+-
+ #include "vpux_driver_compiler.h"
+ #include "vpu_driver/source/utilities/log.hpp"
+ 
++#include <array>
++#include <dlfcn.h>
++#include <memory>
++
+ class Vcl {
+   public:
+     static Vcl &sym() {
+diff --git a/umd/vpu_driver/include/umd_common.hpp 
b/umd/vpu_driver/include/umd_common.hpp
+index 0c874a3..5ad9be2 100644
+--- a/umd/vpu_driver/include/umd_common.hpp
++++ b/umd/vpu_driver/include/umd_common.hpp
+@@ -7,6 +7,7 @@
+ 
+ #pragma once
+ 
++#include <cstdint>
+ #include <limits>
+ #include <linux/kernel.h>
+ #include <stdexcept>
+diff --git a/validation/umd-test/umd_prime_buffers.h 
b/validation/umd-test/umd_prime_buffers.h
+index 6f7c7de..ab4814c 100644
+--- a/validation/umd-test/umd_prime_buffers.h
++++ b/validation/umd-test/umd_prime_buffers.h
+@@ -6,12 +6,17 @@
+  */
+ 
+ #pragma once
++
++#include "umd_test.h"
++
+ #include <fcntl.h>
+-#include <linux/kernel.h>
+ #include <linux/dma-buf.h>
+ #include <linux/dma-heap.h>
++#include <linux/kernel.h>
++#include <stdint.h>
+ #include <sys/ioctl.h>
+ #include <sys/mman.h>
++#include <unistd.h>
+ 
+ #define ALLIGN_TO_PAGE(x) __ALIGN_KERNEL((x), (UmdTest::PAGE_SIZE))
+ 
+@@ -60,7 +65,7 @@ class PrimeBufferHelper {
+             return false;
+ 
+         bufferFd = heapAlloc.fd;
+-        buffers.insert({heapAlloc.fd, {size, nullptr}});
++        buffers.insert({static_cast<int>(heapAlloc.fd), {size, nullptr}});
+         return true;
+     }
+ 
+diff --git a/validation/umd-test/utilities/data_handle.h 
b/validation/umd-test/utilities/data_handle.h
+index d6e0ec0..5d937b2 100644
+--- a/validation/umd-test/utilities/data_handle.h
++++ b/validation/umd-test/utilities/data_handle.h
+@@ -6,6 +6,7 @@
+  */
+ 
+ #include <linux/kernel.h>
++#include <stdint.h>
+ #include <string>
+ #include <vector>
+ 
+-- 
+2.43.0
+
diff --git 
a/dynamic-layers/openembedded-layer/recipes-core/linux-npu-driver/linux-npu-driver/0002-Fix-compilation-failure-with-GCC-14.patch
 
b/dynamic-layers/openembedded-layer/recipes-core/linux-npu-driver/linux-npu-driver/0002-Fix-compilation-failure-with-GCC-14.patch
new file mode 100644
index 00000000..9fb97354
--- /dev/null
+++ 
b/dynamic-layers/openembedded-layer/recipes-core/linux-npu-driver/linux-npu-driver/0002-Fix-compilation-failure-with-GCC-14.patch
@@ -0,0 +1,110 @@
+From a9f51fd88effb7d324609e692ca7da576d6dad2e Mon Sep 17 00:00:00 2001
+From: Naveen Saini <[email protected]>
+Date: Tue, 28 May 2024 10:23:42 +0800
+Subject: [PATCH 2/2] Fix compilation failure with GCC-14
+
+umd/level_zero_driver/core/source/event/event.cpp:65:31: error: 'remove_if' is 
not a member of 'std'; did you mean 'remove_cv'?
+|    65 |     associatedJobs.erase(std::remove_if(associatedJobs.begin(),
+|       |                               ^~~~~~~~~
+|       |                               remove_cv
+
+| umd/vpu_driver/source/command/vpu_command.cpp: In member function 'void 
VPU::VPUCommand::appendAssociateBufferObject(VPU::VPUBufferObject*)':
+| umd/vpu_driver/source/command/vpu_command.cpp:126:20: error: 'find' is not a 
member of 'std'; did you mean 'bind'?
+|   126 |     auto it = std::find(bufferObjects.begin(), bufferObjects.end(), 
bo);
+|       |                    ^~~~
+|       |                    bind
+
+| umd/vpu_driver/source/command/vpu_command_buffer.cpp: In member function 
'bool VPU::VPUCommandBuffer::addCommand(VPU::VPUCommand*, uint64_t&, 
uint64_t&)':
+| umd/vpu_driver/source/command/vpu_command_buffer.cpp:185:24: error: 'find' 
is not a member of 'std'; did you mean 'bind'?
+|   185 |         auto it = std::find(bufferHandles.begin(), 
bufferHandles.end(), bo->getHandle());
+|       |                        ^~~~
+|       |                        bind
+
+| umd/level_zero_driver/ext/source/graph/elf_parser.cpp:301:32: error: 
'max_element' is not a member of 'std'; did you mean 'tuple_element'?
+|   301 |                           std::max_element(stride_begin + 
TENSOR_5D_STRIDE_C, stride_end));
+|       |                                ^~~~~~~~~~~
+|       |                                tuple_element
+| umd/level_zero_driver/ext/source/graph/elf_parser.cpp:315:37: error: 
'max_element' is not a member of 'std'; did you mean 'tuple_element'?
+|   315 |         auto max_stride_val = *std::max_element(stride_begin + 
TENSOR_4D_STRIDE_C, stride_end);
+|       |                                     ^~~~~~~~~~~
+
+| umd/level_zero_driver/tools/source/metrics/metric.cpp: In member function 
'void L0::MetricContext::deactivateMetricGroups(int)':
+| umd/level_zero_driver/tools/source/metrics/metric.cpp:275:38: error: 
'remove_if' is not a member of 'std'; did you mean 'remove_cv'?
+|   275 |     
activatedMetricGroups.erase(std::remove_if(activatedMetricGroups.begin(),
+|       |                                      ^~~~~~~~~
+|       |                                      remove_cv
+
+Upstream-Status: Submitted [https://github.com/intel/linux-npu-driver/pull/30]
+
+Signed-off-by: Naveen Saini <[email protected]>
+---
+ umd/level_zero_driver/core/source/event/event.cpp     | 1 +
+ umd/level_zero_driver/ext/source/graph/elf_parser.cpp | 1 +
+ umd/level_zero_driver/tools/source/metrics/metric.cpp | 1 +
+ umd/vpu_driver/source/command/vpu_command.cpp         | 1 +
+ umd/vpu_driver/source/command/vpu_command_buffer.cpp  | 1 +
+ 5 files changed, 5 insertions(+)
+
+diff --git a/umd/level_zero_driver/core/source/event/event.cpp 
b/umd/level_zero_driver/core/source/event/event.cpp
+index a92248f..196d176 100644
+--- a/umd/level_zero_driver/core/source/event/event.cpp
++++ b/umd/level_zero_driver/core/source/event/event.cpp
+@@ -14,6 +14,7 @@
+ 
+ #include <level_zero/ze_api.h>
+ #include <thread>
++#include <algorithm>
+ 
+ namespace L0 {
+ 
+diff --git a/umd/level_zero_driver/ext/source/graph/elf_parser.cpp 
b/umd/level_zero_driver/ext/source/graph/elf_parser.cpp
+index a1c8e14..dfbd61d 100644
+--- a/umd/level_zero_driver/ext/source/graph/elf_parser.cpp
++++ b/umd/level_zero_driver/ext/source/graph/elf_parser.cpp
+@@ -21,6 +21,7 @@
+ #include <vpux_headers/metadata.hpp>
+ #include <vpux_elf/types/vpu_extensions.hpp>
+ #include <vpux_elf/utils/error.hpp>
++#include <algorithm>
+ 
+ namespace L0 {
+ 
+diff --git a/umd/level_zero_driver/tools/source/metrics/metric.cpp 
b/umd/level_zero_driver/tools/source/metrics/metric.cpp
+index b67750f..9497311 100644
+--- a/umd/level_zero_driver/tools/source/metrics/metric.cpp
++++ b/umd/level_zero_driver/tools/source/metrics/metric.cpp
+@@ -7,6 +7,7 @@
+ 
+ #include "level_zero_driver/tools/source/metrics/metric.hpp"
+ #include "vpu_driver/source/utilities/log.hpp"
++#include <algorithm>
+ 
+ namespace L0 {
+ 
+diff --git a/umd/vpu_driver/source/command/vpu_command.cpp 
b/umd/vpu_driver/source/command/vpu_command.cpp
+index f4ca23f..75331d9 100644
+--- a/umd/vpu_driver/source/command/vpu_command.cpp
++++ b/umd/vpu_driver/source/command/vpu_command.cpp
+@@ -14,6 +14,7 @@
+ #include <cstdint>
+ #include <vector>
+ #include <map>
++#include <algorithm>
+ 
+ namespace VPU {
+ 
+diff --git a/umd/vpu_driver/source/command/vpu_command_buffer.cpp 
b/umd/vpu_driver/source/command/vpu_command_buffer.cpp
+index c4ad052..bbb80ec 100644
+--- a/umd/vpu_driver/source/command/vpu_command_buffer.cpp
++++ b/umd/vpu_driver/source/command/vpu_command_buffer.cpp
+@@ -11,6 +11,7 @@
+ #include "vpu_driver/source/command/vpu_command_buffer.hpp"
+ #include "vpu_driver/source/command/vpu_copy_command.hpp"
+ #include "vpu_driver/source/utilities/log.hpp"
++#include <algorithm>
+ 
+ namespace VPU {
+ 
+-- 
+2.43.0
+
diff --git 
a/dynamic-layers/openembedded-layer/recipes-core/linux-npu-driver/linux-npu-driver_1.2.0.bb
 
b/dynamic-layers/openembedded-layer/recipes-core/linux-npu-driver/linux-npu-driver_1.2.0.bb
new file mode 100644
index 00000000..03e409af
--- /dev/null
+++ 
b/dynamic-layers/openembedded-layer/recipes-core/linux-npu-driver/linux-npu-driver_1.2.0.bb
@@ -0,0 +1,33 @@
+SUMMARY = "User Mode Driver for Intel® NPU device"
+HOMEPAGE = "https://github.com/intel/linux-npu-driver";
+LICENSE = "MIT & Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE.md;md5=37acda99f3f9c108e62d970fe0e08027 \
+                    
file://third-party-programs.txt;md5=dbf0d7a91947cccc5410e9760d9acae5 \
+                    
file://third_party/vpux_elf/LICENSE;md5=86d3f3a95c324c9479bd8986968f4327"
+
+SRC_URI = 
"git://github.com/intel/linux-npu-driver.git;protocol=https;name=linux-npu-driver;branch=main;lfs=1
 \
+            
git://github.com/openvinotoolkit/npu_plugin_elf.git;protocol=https;destsuffix=git/third_party/vpux_elf;name=vpux-elf;nobranch=1
 \
+            
git://github.com/jbeder/yaml-cpp.git;protocol=https;destsuffix=git/third_party/yaml-cpp;name=yaml-cpp;nobranch=1
 \
+            
git://github.com/intel/level-zero-npu-extensions.git;protocol=https;destsuffix=git/third_party/level-zero-vpu-extensions;name=lzvext;nobranch=1
 \
+            
git://github.com/google/googletest.git;protocol=https;destsuffix=git/third_party/googletest;name=googletest;nobranch=1
 \
+            file://0001-Fix-the-compilation-warning-when-using-gcc-13-25.patch 
\
+            file://0002-Fix-compilation-failure-with-GCC-14.patch \
+        "
+
+SRCREV_linux-npu-driver = "9d1dd3daa01ebd97a4ac2e8279ddd6e2cb109244"
+SRCREV_vpux-elf = "03878c115d13aa1ce6af5329c5759fc1cc94a3fb"
+SRCREV_yaml-cpp = "0579ae3d976091d7d664aa9d2527e0d0cff25763"
+SRCREV_lzvext = "0e1c471356a724ef6d176ba027a68e210d90939e"
+SRCREV_googletest = "b796f7d44681514f58a683a3a71ff17c94edb0c1"
+SRCREV_FORMAT = "linux-npu-driver_vpux-elf_yaml-cpp_lzvext_googletest"
+
+S = "${WORKDIR}/git"
+
+inherit cmake
+
+DEPENDS = "level-zero"
+
+PACKAGES =+ "${PN}-firmware ${PN}-tests"
+
+FILES:${PN}-firmware = "${libdir}/firmware/updates/intel/vpu/*"
+FILES:${PN}-tests = "${bindir}"
-- 
2.44.0

-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#8338): 
https://lists.yoctoproject.org/g/meta-intel/message/8338
Mute This Topic: https://lists.yoctoproject.org/mt/106363005/21656
Group Owner: [email protected]
Unsubscribe: https://lists.yoctoproject.org/g/meta-intel/unsub 
[[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to