diff mbox series

[meta-ti,master/kirkstone] ti-img-rogue-umlibs: make all components optional

Message ID 20230621182604.276697-1-rs@ti.com
State Accepted
Delegated to: Ryan Eatmon
Headers show
Series [meta-ti,master/kirkstone] ti-img-rogue-umlibs: make all components optional | expand

Commit Message

Randolph Sapp June 21, 2023, 6:26 p.m. UTC
From: Randolph Sapp <rs@ti.com>

Bumping into the limitations of the binary_package class. This change
allows all rogue components to be optionally packaged without blowing
out the dependency chain.

Add a python function to fetch file paths from the FILE vars for each
component so we don't end up double tracking files. Add variables to
track component packages if things split up more later. Add a package
config string to set runtime dependencies and recommendations. Change
all logic to revolve around the PACKAGECONFIG instead of distro
features.

Signed-off-by: Randolph Sapp <rs@ti.com>
---
 .../ti-img-rogue-umlibs_23.1.6404501.bb       | 58 ++++++++++++++++---
 1 file changed, 49 insertions(+), 9 deletions(-)
diff mbox series

Patch

diff --git a/meta-ti-bsp/recipes-graphics/powervr-umlibs/ti-img-rogue-umlibs_23.1.6404501.bb b/meta-ti-bsp/recipes-graphics/powervr-umlibs/ti-img-rogue-umlibs_23.1.6404501.bb
index b166736c..c012859f 100644
--- a/meta-ti-bsp/recipes-graphics/powervr-umlibs/ti-img-rogue-umlibs_23.1.6404501.bb
+++ b/meta-ti-bsp/recipes-graphics/powervr-umlibs/ti-img-rogue-umlibs_23.1.6404501.bb
@@ -28,20 +28,63 @@  RDEPENDS:${PN} = " \
     ${PN}-firmware \
 "
 
+PACKAGECONFIG ?= " \
+    ${@bb.utils.contains('DISTRO_FEATURES', 'vulkan x11 wayland', 'vulkan', '', d)} \
+    ${@bb.utils.filter('DISTRO_FEATURES', 'opengl opencl', d)} \
+"
+
+PACKAGECONFIG[opengl] = ",,,${GLES_LIB_PACKAGES}"
+PACKAGECONFIG[vulkan] = ",,,${VULKAN_LIB_PACKAGES}"
+PACKAGECONFIG[opencl] = ",,,${OPENCL_LIB_PACKAGES},libopencl-rogue-tools"
+
+def get_file_list(package_list_var, d):
+    file_list = []
+    package_list = d.getVar(package_list_var)
+    if package_list:
+        for package in package_list.split():
+            package_files = d.getVar(f"FILES:{package}")
+            if package_files:
+                file_list.append(package_files)
+    return " ".join(file_list)
+
 do_install:append() {
+    if ${@bb.utils.contains('PACKAGECONFIG', 'opengl', 'false', 'true', d)}; then
+        for file in ${@get_file_list('GLES_PACKAGES', d)}; do
+            rm -rf ${D}/${file}
+            rmdir --ignore-fail-on-non-empty $(dirname ${D}/${file})
+        done
+    fi
+    if ${@bb.utils.contains('PACKAGECONFIG', 'vulkan', 'false', 'true', d)}; then
+        for file in ${@get_file_list('VULKAN_PACKAGES', d)}; do
+            rm -rf ${D}/${file}
+            rmdir --ignore-fail-on-non-empty $(dirname ${D}/${file})
+        done
+    fi
+    if ${@bb.utils.contains('PACKAGECONFIG', 'opencl', 'false', 'true', d)}; then
+        for file in ${@get_file_list('OPENCL_PACKAGES', d)}; do
+            rm -rf ${D}/${file}
+            rmdir --ignore-fail-on-non-empty $(dirname ${D}/${file})
+        done
+    fi
     if ${@bb.utils.contains('DISTRO_FEATURES', 'usrmerge', 'true', 'false', d)}; then
         mv ${D}/lib/firmware ${D}${nonarch_base_libdir}
         rmdir ${D}/lib
     fi
 }
 
+GLES_LIB_PACKAGES = "libgles1-rogue libgles2-rogue libgles3-rogue"
+GLES_PACKAGES = "${GLES_LIB_PACKAGES}"
+
+VULKAN_LIB_PACKAGES = "libvk-rogue"
+VULKAN_PACKAGES = "${VULKAN_LIB_PACKAGES}"
+
+OPENCL_LIB_PACKAGES = "libopencl-rogue"
+OPENCL_PACKAGES = "${OPENCL_LIB_PACKAGES} libopencl-rogue-tools"
+
 PACKAGES = " \
-    libgles1-rogue \
-    libgles2-rogue \
-    libgles3-rogue \
-    libvk-rogue \
-    libopencl-rogue \
-    libopencl-rogue-tools \
+    ${@bb.utils.contains('PACKAGECONFIG', 'opengl', d.getVar('GLES_PACKAGES'), '', d)} \
+    ${@bb.utils.contains('PACKAGECONFIG', 'vulkan', d.getVar('VULKAN_PACKAGES'), '', d)} \
+    ${@bb.utils.contains('PACKAGECONFIG', 'opencl', d.getVar('OPENCL_PACKAGES'), '', d)} \
     ${PN}-tools \
     ${PN}-firmware \
     ${PN} \
@@ -94,9 +137,6 @@  FILES:${PN}-firmware = "${base_libdir}/firmware/*"
 INSANE_SKIP:${PN}-firmware += "arch"
 
 RRECOMMENDS:${PN} += " \
-    ${@bb.utils.contains("DISTRO_FEATURES", "opengl", "libgles1-rogue libgles2-rogue", "", d)} \
-    ${@bb.utils.contains("DISTRO_FEATURES", "vulkan x11 wayland", "libvk-rogue", "", d)} \
-    ${@bb.utils.contains("DISTRO_FEATURES", "opencl", "libopencl-rogue", "", d)} \
     ${PN}-tools \
 "