mesa: add support for RustiCL under PACKAGECONFIG "opencl"

Mesa now has two OpenCL implementations: Clover (older one) and RustiCL
(newer one). Extend the "opencl" package config to include both
implementations into the libopencl-mesa (-dev) packages. As the Clover
implementation is in maintenance mode and is expected to be removed at
Mesa 25.2, it doesn't make sense to split the packages or to provide
two config options.

(From OE-Core rev: d76672d674b1e354ad774b8cef2d8b6cd4c9f400)

Signed-off-by: Zoltán Böszörményi <zboszor@gmail.com>
[DB: merged "rusticl" and "clover" back to "opencl", reworked rust inheritance]
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Zoltán Böszörményi 2025-04-10 05:54:51 +03:00 committed by Richard Purdie
parent 3db74e2818
commit d4ca7bede8
2 changed files with 83 additions and 5 deletions

View File

@ -0,0 +1,67 @@
From b9cf34f39ca7e7546508ce2ab1f053edef5fc201 Mon Sep 17 00:00:00 2001
From: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Date: Wed, 26 Mar 2025 17:47:09 +0200
Subject: [PATCH] rusticl: provide cross-compilation arguments to LLVM bindgen
invocation
Correctly generating LLVM bindings requires several croos-compilation
arguments. Provide them to rust.bindgen(). Karol Herbst on IRC suggested
that a proper fix should be to fix meson's rust.bindgen() to support
cross-compilation. Carry this patch until meson is fixed.
Upstream-Status: Inappropriate [OE-Specific]
Link: https://github.com/mesonbuild/meson/issues/13591
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
---
meson_options.txt | 14 ++++++++++++++
src/gallium/frontends/rusticl/meson.build | 8 ++++++++
2 files changed, 22 insertions(+)
diff --git a/meson_options.txt b/meson_options.txt
index 0147cafcb146..f73e83fded18 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -796,3 +796,17 @@ option(
value : false,
description : 'Install the drivers internal shader compilers (if needed for cross builds).'
)
+
+option(
+ 'bindgen-includedir',
+ type : 'string',
+ value : '',
+ description : 'system-wide include directory for cross-generating LLVM bindings'
+ )
+
+option(
+ 'bindgen-target',
+ type : 'string',
+ value : '',
+ description : 'Clang target for cross-generating LLVM bindings'
+ )
diff --git a/src/gallium/frontends/rusticl/meson.build b/src/gallium/frontends/rusticl/meson.build
index a5d1dcf3abb9..480c220b7f5f 100644
--- a/src/gallium/frontends/rusticl/meson.build
+++ b/src/gallium/frontends/rusticl/meson.build
@@ -115,6 +115,11 @@ rusticl_bindgen_c_args = [
'-fno-builtin-malloc',
]
+bindgen_target = get_option('bindgen-target')
+if bindgen_target != ''
+ rusticl_bindgen_c_args += [ '-target', bindgen_target ]
+endif
+
cl_c_args = [
'-DCL_USE_DEPRECATED_OPENCL_1_0_APIS',
'-DCL_USE_DEPRECATED_OPENCL_1_1_APIS',
@@ -187,6 +192,9 @@ rusticl_llvm_bindings_rs = rust.bindgen(
rusticl_bindgen_c_args,
pre_args,
],
+ include_directories : [
+ get_option('bindgen-includedir'),
+ ],
dependencies : [
dep_clang,
dep_llvm,

View File

@ -18,6 +18,7 @@ SRC_URI = "https://archive.mesa3d.org/mesa-${PV}.tar.xz \
file://0001-meson-misdetects-64bit-atomics-on-mips-clang.patch \
file://0001-meson-disable-SIMD-blake-optimisations-on-x32-host.patch \
file://0001-freedreno-don-t-encode-build-path-into-binaries.patch\
file://0001-rusticl-provide-cross-compilation-arguments-to-LLVM-.patch \
"
SRC_URI[sha256sum] = "adf904d083b308df95898600ffed435f4b5c600d95fb6ec6d4c45638627fdc97"
@ -46,7 +47,7 @@ PROVIDES = " \
virtual/mesa \
"
inherit meson pkgconfig python3native gettext features_check
inherit meson pkgconfig python3native gettext features_check rust
BBCLASSEXTEND = "native nativesdk"
@ -85,6 +86,9 @@ PACKAGECONFIG = " \
${@bb.utils.contains('DISTRO_FEATURES', 'vulkan', 'zink', '', d)} \
"
# skip all Rust dependencies if we are not building OpenCL"
INHIBIT_DEFAULT_RUST_DEPS = "${@bb.utils.contains('PACKAGECONFIG', 'opencl', '', '1', d)}"
PACKAGECONFIG:append:x86 = " libclc gallium-llvm"
PACKAGECONFIG:append:x86-64 = " libclc gallium-llvm"
PACKAGECONFIG:append:i686 = " libclc gallium-llvm"
@ -144,9 +148,16 @@ PACKAGECONFIG[gles] = "-Dgles1=enabled -Dgles2=enabled, -Dgles1=disabled -Dgles2
# "egl" requires "opengl"
PACKAGECONFIG[egl] = "-Degl=enabled, -Degl=disabled"
BINDGEN_TARGET = "${TARGET_ARCH}-${TARGET_OS}${@['-gnu', ''][d.getVar('LIBCEXTENSION') != '']}"
BINDGEN_TARGET:class-native = ""
# "opencl" also requires libclc and gallium-llvm to be present in PKGCONFIG!
# Be sure to enable them both for the target and for the native build.
PACKAGECONFIG[opencl] = "-Dgallium-opencl=icd,-Dgallium-opencl=disabled,"
PACKAGECONFIG[opencl] = " \
-Dgallium-opencl=icd -Dgallium-rusticl=true -Dbindgen-includedir=${STAGING_INCDIR} -Dbindgen-target=${BINDGEN_TARGET},\
-Dgallium-opencl=disabled -Dgallium-rusticl=false, \
bindgen-cli-native \
"
PACKAGECONFIG[broadcom] = ""
PACKAGECONFIG[etnaviv] = ",,python3-pycparser-native"
@ -249,7 +260,7 @@ RDEPENDS:libgles3-mesa-dev += "libgles2-mesa-dev"
RDEPENDS:libgles2-mesa += "libgles3-mesa"
ALLOW_EMPTY:libgles3-mesa = "1"
RDEPENDS:libopencl-mesa += "${@bb.utils.contains('PACKAGECONFIG', 'opencl', 'libclc spirv-tools', '', d)}"
RDEPENDS:libopencl-mesa += "${@bb.utils.contains('PACKAGECONFIG', 'opencl', 'libclc spirv-tools spirv-llvm-translator', '', d)}"
PACKAGES =+ "libegl-mesa libegl-mesa-dev \
libosmesa libosmesa-dev \
@ -355,7 +366,7 @@ FILES:libgles1-mesa = "${libdir}/libGLESv1*.so.*"
FILES:libgles2-mesa = "${libdir}/libGLESv2.so.*"
FILES:libgl-mesa = "${libdir}/libGL.so.*"
FILES:libglx-mesa = "${libdir}/libGLX*.so.*"
FILES:libopencl-mesa = "${libdir}/libMesaOpenCL.so.* ${libdir}/gallium-pipe/*.so ${sysconfdir}/OpenCL/vendors/mesa.icd"
FILES:libopencl-mesa = "${libdir}/lib*OpenCL.so.* ${libdir}/gallium-pipe/*.so ${sysconfdir}/OpenCL/vendors/*.icd"
FILES:libglapi = "${libdir}/libglapi.so.*"
FILES:libosmesa = "${libdir}/libOSMesa.so.*"
FILES:libxatracker = "${libdir}/libxatracker.so.*"
@ -369,7 +380,7 @@ FILES:libglapi-dev = "${libdir}/libglapi.*"
FILES:libgles1-mesa-dev = "${libdir}/libGLESv1*.* ${includedir}/GLES ${libdir}/pkgconfig/glesv1*.pc"
FILES:libgles2-mesa-dev = "${libdir}/libGLESv2.* ${includedir}/GLES2 ${libdir}/pkgconfig/glesv2.pc"
FILES:libgles3-mesa-dev = "${includedir}/GLES3"
FILES:libopencl-mesa-dev = "${libdir}/libMesaOpenCL.so"
FILES:libopencl-mesa-dev = "${libdir}/lib*OpenCL.so"
FILES:libosmesa-dev = "${libdir}/libOSMesa.* ${includedir}/GL/osmesa.h ${libdir}/pkgconfig/osmesa.pc"
FILES:libxatracker-dev = "${libdir}/libxatracker.so ${libdir}/libxatracker.la \
${includedir}/xa_tracker.h ${includedir}/xa_composite.h ${includedir}/xa_context.h \