diff --git a/meta-arm/recipes-bsp/trusted-firmware-rmm/files/0001-build-lib-Add-extra-repositories-for-system-includes.patch b/meta-arm/recipes-bsp/trusted-firmware-rmm/files/0001-build-lib-Add-extra-repositories-for-system-includes.patch new file mode 100644 index 00000000..7c3e637f --- /dev/null +++ b/meta-arm/recipes-bsp/trusted-firmware-rmm/files/0001-build-lib-Add-extra-repositories-for-system-includes.patch @@ -0,0 +1,56 @@ +From bc7dbac20a6674eb2834bd6176665f1a2ae42edc Mon Sep 17 00:00:00 2001 +From: Mathieu Poirier +Date: Thu, 14 Mar 2024 14:59:30 -0600 +Subject: [PATCH] build(lib): Add extra repositories for system includes + +Toolchains such as aarch64-none-elf, aarch64-none-linux-gnu and +aarch64-linux-gnu include assert.h and limits.h in a directory that is +part of their search path. This is not the case when compiling with +Yocto where aarch64-poky-linux places those files in the sysroot +directory of the component being compiled. + +Since the sysroot directory of the component is not part of the cmake +search path, compiling the RMM in Yocto fails. This patch fixes the +problem by expanding the search path when needed, allowing the RMM to be +compiled in Yocto. + +Upstream-Status: Backport [bc7dbac20a6674eb2834bd6176665f1a2ae42edc] +Signed-off-by: Mathieu Poirier +--- + lib/arch/CMakeLists.txt | 3 +++ + lib/libc/CMakeLists.txt | 5 ++++- + 2 files changed, 7 insertions(+), 1 deletion(-) + +diff --git a/lib/arch/CMakeLists.txt b/lib/arch/CMakeLists.txt +index d3afc5f2bfc8..a52185f02695 100644 +--- a/lib/arch/CMakeLists.txt ++++ b/lib/arch/CMakeLists.txt +@@ -12,6 +12,9 @@ target_link_libraries(rmm-lib-arch + target_include_directories(rmm-lib-arch + PUBLIC "include" + "include/${RMM_ARCH}" ++ # The CMAKE_INCLUDE_PATH is included here for Yocto builds. the ++ # Yocto recipe will define this variable as part of the build. ++ ${CMAKE_INCLUDE_PATH} + PRIVATE "src/${RMM_ARCH}" + "src/include") + +diff --git a/lib/libc/CMakeLists.txt b/lib/libc/CMakeLists.txt +index 1631332dbc72..a2adf37f7cb8 100644 +--- a/lib/libc/CMakeLists.txt ++++ b/lib/libc/CMakeLists.txt +@@ -12,7 +12,10 @@ if(NOT RMM_ARCH STREQUAL fake_host) + rmm-lib-debug) + + target_include_directories(rmm-lib-libc SYSTEM +- PUBLIC "include") ++ PUBLIC "include" ++ # The CMAKE_INCLUDE_PATH is included here for Yocto builds. the ++ # Yocto recipe will define this variable as part of the build. ++ ${CMAKE_INCLUDE_PATH}) + + target_sources(rmm-lib-libc + PRIVATE "src/abort.c" +-- +2.34.1 + diff --git a/meta-arm/recipes-bsp/trusted-firmware-rmm/trusted-firmware-rmm_0.4.bb b/meta-arm/recipes-bsp/trusted-firmware-rmm/trusted-firmware-rmm_0.4.bb new file mode 100644 index 00000000..0726cd3d --- /dev/null +++ b/meta-arm/recipes-bsp/trusted-firmware-rmm/trusted-firmware-rmm_0.4.bb @@ -0,0 +1,50 @@ +SUMMARY = "RMM Firmware" +DESCRIPTION = "RMM Firmware for Arm reference platforms" +LICENSE = "BSD-3-Clause & MIT" + +SRC_URI = "gitsm://git.trustedfirmware.org/TF-RMM/tf-rmm.git;protocol=https;branch=main \ + file://0001-build-lib-Add-extra-repositories-for-system-includes.patch \ + " + +SRCREV = "0a02656945d69757b0779192cebb9b41dd9037d1" + +LIC_FILES_CHKSUM += "file://docs/about/license.rst;md5=1375c7c641558198ffe401c2a799d79b" + +inherit deploy cmake + +RMM_CONFIG ?= "" +RMM_CONFIG:qemuarm64 = "qemu_virt_defcfg" + +PACKAGE_ARCH = "${MACHINE_ARCH}" +COMPATIBLE_MACHINE = "qemuarm64" + +S = "${WORKDIR}/git" + +# Build for debug (set RMM_DEBUG to 1 to activate) +RMM_DEBUG ?= "0" +RMM_BUILD_MODE ?= "${@bb.utils.contains('RMM_DEBUG', '1', 'Debug', 'Release', d)}" + +# Handle RMM_DEBUG parameter +EXTRA_OECMAKE += "-DCMAKE_BUILD_TYPE=${RMM_BUILD_MODE}" +EXTRA_OECMAKE += "-DRMM_CONFIG=${RMM_CONFIG}" + +# Supplement include path +EXTRA_OECMAKE += "-DCMAKE_INCLUDE_PATH=${STAGING_INCDIR}" + +# When compiling for Aarch64 on non-native hosts, the RMM code base gets its +# toolchain from CROSS_COMPILE rather than CMAKE_TOOLCHAIN_FILE +export CROSS_COMPILE="${TARGET_PREFIX}" + +do_install() { + install -d -m 755 ${D}/firmware + install -m 0644 ${B}/${RMM_BUILD_MODE}/* ${D}/firmware/ +} + +FILES:${PN} = "/firmware" +SYSROOT_DIRS += "/firmware" + +do_deploy() { + cp -rf ${D}/firmware/* ${DEPLOYDIR}/ +} + +addtask deploy after do_install