Message ID | 20250822-mesa-libclc-panfrost-v6-12-393cf47e2fa2@cherry.de |
---|---|
State | New |
Headers | show |
Series | mesa: lighten up target's libclc dependencies and fix panfrost support | expand |
Hi all, On 8/22/25 2:53 PM, Quentin Schulz wrote: > From: Quentin Schulz <quentin.schulz@cherry.de> > > libclc is required for some drivers (asahi, panfrost and intel at the > very least). > libclc brings very expensive dependencies such as llvm and clang. > Building clang and llvm for each target architecture is very expensive, > but mesa allows to depend on prebuilt host binaries (mesa-clc and > precomp-compiler). Those are built by mesa as well, but can be compiled > in mesa-native instead of mesa, making the dependency expensive but only > once regardless of the number of target architectures to build for. > Ideally the mesa-clc and precomp-compiler would only be compiled in > mesa-native if target mesa requires libclc support, however this is not > possible as a target recipe cannot impact or depend on a native recipe's > configuration. We thus have two choices, always build libclc in > mesa-native with its heavy dependencies and impact every build or force > the user to modify the mesa-native recipe in a custom layer (as a native > recipe cannot use target's OVERRIDES). The latter is unacceptable so the > former seems to be the only option. Another big downside is that > mesa-native currently builds drivers (amd, nouveau, svga) which we may > have absolutely no interest in building, increasing the build time and > possibly dependencies list). > > A third choice is to spin-off the native mesa recipe with libclc support > into a new recipe without drivers and only what's necessary to build > mesa-clc and precomp-compiler binaries. > This allows to keep a "clean" mesa-native recipe for whoever needs those > drivers built-in (e.g. for testing, for qemu-native, or whatever else) > and only bring the libclc dependency when required by the target recipe. > > Because libclc is now only built for the host, opencl support now needs > to explicitly bring libclc and others to build as libclc won't bring it > in the build environment anymore. > > Suggested-by: Ross Burton <ross.burton@arm.com> > Signed-off-by: Quentin Schulz <quentin.schulz@cherry.de> > --- > meta/recipes-graphics/mesa/mesa-tools-native.bb | 19 +++++++++++++++++++ > meta/recipes-graphics/mesa/mesa.inc | 15 ++++----------- > 2 files changed, 23 insertions(+), 11 deletions(-) > > diff --git a/meta/recipes-graphics/mesa/mesa-tools-native.bb b/meta/recipes-graphics/mesa/mesa-tools-native.bb > new file mode 100644 > index 0000000000000000000000000000000000000000..dab1a037851cca6b33eae4b69a6a141fbbcd801b > --- /dev/null > +++ b/meta/recipes-graphics/mesa/mesa-tools-native.bb > @@ -0,0 +1,19 @@ > +require mesa.inc > +inherit native I think I should have inherit_defer native here instead? To make sure regardless of what the user does in a bbappend (well aside from using another inherit_defer), native is always the last inherited class? Cheers, Quentin
diff --git a/meta/recipes-graphics/mesa/mesa-tools-native.bb b/meta/recipes-graphics/mesa/mesa-tools-native.bb new file mode 100644 index 0000000000000000000000000000000000000000..dab1a037851cca6b33eae4b69a6a141fbbcd801b --- /dev/null +++ b/meta/recipes-graphics/mesa/mesa-tools-native.bb @@ -0,0 +1,19 @@ +require mesa.inc +inherit native + +SUMMARY += " (tools only)" + +PACKAGECONFIG = "tools asahi panfrost" +# llvm required for libclc +PACKAGECONFIG += "gallium-llvm" +# Doesn't compile without wayland-scanner if PLATFORMS has wayland in, and, +# doesn't compile at all if PLATFORMS is empty so add x11 and wayland +# to PACKAGECONFIG like in mesa.inc +PACKAGECONFIG += "${@bb.utils.filter('DISTRO_FEATURES', 'x11 wayland', d)}" + +DEPENDS += "libclc-native spirv-tools-native spirv-llvm-translator-native" + +EXTRA_OEMESON += " \ + -Dmesa-clc=enabled -Dinstall-mesa-clc=true -Dmesa-clc-bundle-headers=enabled \ + -Dprecomp-compiler=enabled -Dinstall-precomp-compiler=true \ +" diff --git a/meta/recipes-graphics/mesa/mesa.inc b/meta/recipes-graphics/mesa/mesa.inc index 54af134c77e90938534db1b0009ec08272f271e0..b38386977da2a2fa2409afaef036cd2c09a0cdbf 100644 --- a/meta/recipes-graphics/mesa/mesa.inc +++ b/meta/recipes-graphics/mesa/mesa.inc @@ -127,9 +127,9 @@ PACKAGECONFIG[gles] = "-Dgles1=enabled -Dgles2=enabled, -Dgles1=disabled -Dgles2 # "egl" requires "opengl" PACKAGECONFIG[egl] = "-Degl=enabled, -Degl=disabled" -# "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-rusticl=true -Dmesa-clc-bundle-headers=enabled, -Dgallium-rusticl=false, bindgen-cli-native" +# "opencl" also requires gallium-llvm to be present in PACKAGECONFIG! +# Be sure to enable it for the target and for the native build. +PACKAGECONFIG[opencl] = "-Dgallium-rusticl=true -Dmesa-clc-bundle-headers=enabled, -Dgallium-rusticl=false, bindgen-cli-native libclc spirv-tools spirv-llvm-translator" PACKAGECONFIG[broadcom] = "" PACKAGECONFIG[etnaviv] = ",,python3-pycparser-native" @@ -168,16 +168,9 @@ GALLIUMDRIVERS:append = "${@bb.utils.contains('PACKAGECONFIG', 'gallium-llvm', ' GALLIUMDRIVERS:append = "${@bb.utils.contains('PACKAGECONFIG', 'amd', ',r600', '', d)}" GALLIUMDRIVERS:append = "${@bb.utils.contains('PACKAGECONFIG', 'virgl', ',virgl', '', d)}" -MESA_CLC = "system" -MESA_CLC:class-native = "enabled" -INSTALL_MESA_CLC = "false" -INSTALL_MESA_CLC:class-native = "true" -MESA_NATIVE = "mesa-native" -MESA_NATIVE:class-native = "" - PACKAGECONFIG[gallium] = "-Dgallium-drivers=${@strip_comma('${GALLIUMDRIVERS}')}, -Dgallium-drivers='', libdrm" PACKAGECONFIG[gallium-llvm] = "-Dllvm=enabled -Dshared-llvm=enabled, -Dllvm=disabled, llvm llvm-native elfutils" -PACKAGECONFIG[libclc] = "-Dmesa-clc=${MESA_CLC} -Dinstall-mesa-clc=${INSTALL_MESA_CLC} -Dmesa-clc-bundle-headers=enabled,,libclc spirv-tools spirv-llvm-translator ${MESA_NATIVE}" +PACKAGECONFIG[libclc] = "-Dmesa-clc=system -Dprecomp-compiler=system,,mesa-tools-native" PACKAGECONFIG[va] = "-Dgallium-va=enabled,-Dgallium-va=disabled,libva-initial" PACKAGECONFIG[vdpau] = "-Dgallium-vdpau=enabled,-Dgallium-vdpau=disabled,libvdpau"