| Message ID | 20250721-mesa-libclc-panfrost-v2-5-f713d0858949@cherry.de |
|---|---|
| State | Under Review |
| Headers | show |
| Series | mesa: lighten up target's libclc dependencies and fix panfrost support | expand |
On 7/21/25 3:33 AM, Quentin Schulz via lists.openembedded.org 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. > libclc from clang ( native ) should be enough to use, we then do not need target clang versions, since we are cross compiling clang-native would be happy to use libclc-native backend for OpenCL and that would be all, we need to configure clang-native with AMDGPU and NVPTX targets of course. > 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 | 21 +++++++++++++++++++++ > meta/recipes-graphics/mesa/mesa.inc | 11 ++--------- > 2 files changed, 23 insertions(+), 9 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..5f7c3a2dc2338e328e0e30b93c263f6c87b61eaa > --- /dev/null > +++ b/meta/recipes-graphics/mesa/mesa-tools-native.bb > @@ -0,0 +1,21 @@ > +require mesa.inc > +inherit native > + > +SUMMARY += " (tools only)" > + > +S = "${UNPACKDIR}/mesa-${PV}" > + > +PACKAGECONFIG = "tools asahi intel 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 5295b70fc9b4bb9570d86333f9229aef9114d93d..0fdb6d19655a06b645c6ac8815dfc62fa7e0c9eb 100644 > --- a/meta/recipes-graphics/mesa/mesa.inc > +++ b/meta/recipes-graphics/mesa/mesa.inc > @@ -126,7 +126,7 @@ 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, -Dgallium-rusticl=false, bindgen-cli-native" > +PACKAGECONFIG[opencl] = "-Dgallium-rusticl=true, -Dgallium-rusticl=false, bindgen-cli-native libclc spirv-tools spirv-llvm-translator" > > PACKAGECONFIG[broadcom] = "" > PACKAGECONFIG[etnaviv] = ",,python3-pycparser-native" > @@ -165,16 +165,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" > > > > > -=-=-=-=-=-=-=-=-=-=-=- > Links: You receive all messages sent to this group. > View/Reply Online (#220678): https://lists.openembedded.org/g/openembedded-core/message/220678 > Mute This Topic: https://lists.openembedded.org/mt/114265791/1997914 > Group Owner: openembedded-core+owner@lists.openembedded.org > Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [raj.khem@gmail.com] > -=-=-=-=-=-=-=-=-=-=-=- >
On Mon, Jul 21, 2025 at 06:36:32PM -0700, Khem Raj wrote: > > > On 7/21/25 3:33 AM, Quentin Schulz via lists.openembedded.org 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. > > > > libclc from clang ( native ) should be enough to use, we then do > not need target clang versions, since we are cross compiling clang-native > would be happy to use libclc-native backend for OpenCL and that > would be all, we need to configure clang-native with AMDGPU and NVPTX > targets of course. RustiCL needs target libLLVM and target libLLVMSPIRVLib, so it doesn't make sense to hack it to use target clang, but libclc-native. Overall I think this patch makes sense as is. > > > 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 | 21 +++++++++++++++++++++ > > meta/recipes-graphics/mesa/mesa.inc | 11 ++--------- > > 2 files changed, 23 insertions(+), 9 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..5f7c3a2dc2338e328e0e30b93c263f6c87b61eaa > > --- /dev/null > > +++ b/meta/recipes-graphics/mesa/mesa-tools-native.bb > > @@ -0,0 +1,21 @@ > > +require mesa.inc > > +inherit native > > + > > +SUMMARY += " (tools only)" > > + > > +S = "${UNPACKDIR}/mesa-${PV}" > > + > > +PACKAGECONFIG = "tools asahi intel 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 5295b70fc9b4bb9570d86333f9229aef9114d93d..0fdb6d19655a06b645c6ac8815dfc62fa7e0c9eb 100644 > > --- a/meta/recipes-graphics/mesa/mesa.inc > > +++ b/meta/recipes-graphics/mesa/mesa.inc > > @@ -126,7 +126,7 @@ PACKAGECONFIG[egl] = "-Degl=enabled, -Degl=disabled" > > # "opencl" also requires libclc and gallium-llvm to be present in PKGCONFIG! This is no longer true. With these changes it requires only gallium-llvm, libclc PACKAGECONFIG is no longer required. > > # Be sure to enable them both for the target and for the native build. > > -PACKAGECONFIG[opencl] = "-Dgallium-rusticl=true, -Dgallium-rusticl=false, bindgen-cli-native" > > +PACKAGECONFIG[opencl] = "-Dgallium-rusticl=true, -Dgallium-rusticl=false, bindgen-cli-native libclc spirv-tools spirv-llvm-translator" > > PACKAGECONFIG[broadcom] = "" > > PACKAGECONFIG[etnaviv] = ",,python3-pycparser-native" > > @@ -165,16 +165,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" > > > > > > > > -=-=-=-=-=-=-=-=-=-=-=- > > Links: You receive all messages sent to this group. > > View/Reply Online (#220678): https://lists.openembedded.org/g/openembedded-core/message/220678 > > Mute This Topic: https://lists.openembedded.org/mt/114265791/1997914 > > Group Owner: openembedded-core+owner@lists.openembedded.org > > Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [raj.khem@gmail.com] > > -=-=-=-=-=-=-=-=-=-=-=- > > > >
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..5f7c3a2dc2338e328e0e30b93c263f6c87b61eaa --- /dev/null +++ b/meta/recipes-graphics/mesa/mesa-tools-native.bb @@ -0,0 +1,21 @@ +require mesa.inc +inherit native + +SUMMARY += " (tools only)" + +S = "${UNPACKDIR}/mesa-${PV}" + +PACKAGECONFIG = "tools asahi intel 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 5295b70fc9b4bb9570d86333f9229aef9114d93d..0fdb6d19655a06b645c6ac8815dfc62fa7e0c9eb 100644 --- a/meta/recipes-graphics/mesa/mesa.inc +++ b/meta/recipes-graphics/mesa/mesa.inc @@ -126,7 +126,7 @@ 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, -Dgallium-rusticl=false, bindgen-cli-native" +PACKAGECONFIG[opencl] = "-Dgallium-rusticl=true, -Dgallium-rusticl=false, bindgen-cli-native libclc spirv-tools spirv-llvm-translator" PACKAGECONFIG[broadcom] = "" PACKAGECONFIG[etnaviv] = ",,python3-pycparser-native" @@ -165,16 +165,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"