From: Quentin Schulz <foss+yocto@0leil.net>
To: openembedded-core@lists.openembedded.org
Cc: Quentin Schulz <quentin.schulz@cherry.de>,
Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>,
Ross Burton <ross.burton@arm.com>
Subject: [PATCH 0/7] mesa: bump + lighten mesa libclc dependency
Date: Fri, 06 Feb 2026 18:23:52 +0100 [thread overview]
Message-ID: <20260206-mesa-tools-native-v1-0-166935b0e379@cherry.de> (raw)
This bumps mesa to 25.3.4, the latest available stable release.
This removes an unnecessary native dependency (libxml2) which is only
required for unit tests, which we don't build or run yet.
This migrates mesa libclc PACKAGECONFIG to stop depending on mesa-native
recipe and instead depend on a newly introduced mesa-tools-native. The
benefits are:
- instead of building mesa-native with many drivers like we do
currently, we only build (with mesa-tools-native) tools necessary to
build libclc-dependent drivers in mesa,
- removing libclc, spirv-tools and spirv-llvm-translator target recipes
from dependencies. Those target recipes would be built for every
different CPU tune incurring a very high cost of building mesa for
separate machines. These dependencies will now only be necessary to
build in mesa-tools-native, in their native variant, which is shared
for all CPU tunes as it's only dependent on the host CPU architecture.
Unfortunately, those dependencies in their target variant are still
required for building rusticl (opencl),
libclc PACKAGECONFIG being selected by default for x86, x86-64 and i686
CPU TUNEs as well as for all Panthor/Panfrost-supported Rockchip SoCs,
the mesa-native dependency is now removed and only mesa-tools-native
will be built for those.
For a PX30 Rockchip SoC-based machine (default mesa PACKAGECONFIG for
poky + panfrost + libclc (see meta-rockchip mesa.bbappend)), the
difference in dependencies is the following (according to pn-buildlist
(bitbake -g mesa) before last two patches/after this series):
Removed: libclc, llvm, spirv-headers, spirv-llvm-translator,
spirv-tools, zstd, mesa-native.
Added: mesa-tools-native.
On a server with AMD EPYC 7443P (24-cores, 48 threads) and 130GiB of
DRAM, running
bitbake -c cleansstate libclc llvm spirv-headers spirv-llvm-translator spirv-tools zstd mesa-native mesa-tools-native mesa
between runs.
buildstats-diff --diff-attr walltime after-libxml2-removal/ after-this-series/
Ignoring tasks less than 00:05.0 (5.0s)
Ignoring differences less than 00:02.0 (2.0s)
PKG TASK ABSDIFF RELDIFF WALLTIME1 -> WALLTIME2
- llvm do_compile -450.6s -100.0% 450.6s -> 0.0s
- libclc do_compile -118.8s -100.0% 118.8s -> 0.0s
- mesa-native do_compile -106.0s -100.0% 106.0s -> 0.0s
- spirv-tools do_compile -94.9s -100.0% 94.9s -> 0.0s
- zstd do_compile -70.7s -100.0% 70.7s -> 0.0s
- spirv-llvm-translator do_compile -45.3s -100.0% 45.3s -> 0.0s
- mesa-native do_configure -35.4s -100.0% 35.4s -> 0.0s
- llvm do_package -34.6s -100.0% 34.6s -> 0.0s
- zstd do_install -31.1s -100.0% 31.1s -> 0.0s
- llvm do_configure -17.0s -100.0% 17.0s -> 0.0s
- libclc do_configure -13.2s -100.0% 13.2s -> 0.0s
- spirv-tools do_package -11.8s -100.0% 11.8s -> 0.0s
mesa do_compile -9.4s -15.4% 61.0s -> 51.6s
- zstd do_package -6.2s -100.0% 6.2s -> 0.0s
+ mesa-tools-native do_configure 6.3s +inf% 0.0s -> 6.3s
+ mesa-tools-native do_compile 30.8s +inf% 0.0s -> 30.8s
Cumulative walltime:
-1052.2s -90.0% 19:29.3 (1169.3s) -> 01:57.2 (117.2s)
With DISTRO_FEATURES:append = " opencl" (since that will re-add the
previous libclc PACKAGECONFIG dependencies and still require
mesa-tools-native for libclc PACKAGECONFING). The diff is only
mesa-tools-native added for mesa-native removed.
scripts/buildstats-diff --diff-attr walltime after-libxml2-removal/ after-this-series/
Ignoring tasks less than 00:05.0 (5.0s)
Ignoring differences less than 00:02.0 (2.0s)
PKG TASK ABSDIFF RELDIFF WALLTIME1 -> WALLTIME2
- mesa-native do_compile -55.2s -100.0% 55.2s -> 0.0s
- mesa-native do_configure -9.5s -100.0% 9.5s -> 0.0s
mesa do_compile -8.8s -13.3% 66.1s -> 57.3s
+ mesa-tools-native do_configure 6.3s +inf% 0.0s -> 6.3s
+ mesa-tools-native do_compile 30.5s +inf% 0.0s -> 30.5s
Cumulative walltime:
-37.1s -22.8% 02:42.8 (162.8s) -> 02:05.7 (125.7s)
The DISTRO_FEATURES:append = " opencl" from above has been removed for
the rest of the explanations.
For qemux86-64, the difference in dependencies is the following
(according to pn-buildlist (bitbake -g mesa) before last two
patches/after this series):
Removed: libclc, spirv-headers, spirv-llvm-translator, spirv-tools,
mesa-native.
Added: mesa-tools-native.
On a server with AMD EPYC 7443P (24-cores, 48 threads) and 130GiB of
DRAM, running
bitbake -c cleansstate libclc spirv-headers spirv-llvm-translator spirv-tools mesa-native mesa-tools-native mesa
between runs.
buildstats-diff --diff-attr walltime after-libxml2-removal/ after-this-series/
Ignoring tasks less than 00:05.0 (5.0s)
Ignoring differences less than 00:02.0 (2.0s)
PKG TASK ABSDIFF RELDIFF WALLTIME1 -> WALLTIME2
- libclc do_compile -115.9s -100.0% 115.9s -> 0.0s
- mesa-native do_compile -92.8s -100.0% 92.8s -> 0.0s
- spirv-tools do_compile -81.5s -100.0% 81.5s -> 0.0s
- spirv-llvm-translator do_compile -60.9s -100.0% 60.9s -> 0.0s
- mesa-native do_configure -38.1s -100.0% 38.1s -> 0.0s
- libclc do_configure -14.2s -100.0% 14.2s -> 0.0s
- spirv-tools do_package -13.3s -100.0% 13.3s -> 0.0s
+ mesa-tools-native do_configure 6.3s +inf% 0.0s -> 6.3s
+ mesa-tools-native do_compile 30.5s +inf% 0.0s -> 30.5s
Cumulative walltime:
-401.6s -70.3% 09:31.5 (571.5s) -> 02:49.9 (169.9s)
Since mesa-native is still built for qemu machines for the
qemu-system-native recipe and it has libclc enabled for Intel machines,
here's the impact now that mesa-native with libclc support depends on
mesa-tools-native:
scripts/buildstats-diff --diff-attr walltime --min-val 0 --min-absdiff 0
after-libxml2-removal/ after-this-series/
PKG TASK ABSDIFF RELDIFF WALLTIME1 -> WALLTIME2
mesa-native do_configure -0.5s -5.0% 9.0s -> 8.5s
mesa-native do_populate_sysroot -0.1s -11.1% 0.5s -> 0.5s
mesa-native do_write_config -0.0s -33.3% 0.0s -> 0.0s
mesa-native do_patch -0.0s -3.8% 0.3s -> 0.2s
mesa-native do_install -0.0s -0.0% 0.4s -> 0.4s
mesa-native do_prepare_recipe_sysroot 0.0s +0.0% 0.4s -> 0.4s
mesa-native do_rust_gen_targets 0.0s +0.0% 0.0s -> 0.0s
mesa-native do_recipe_qa 0.0s +0.0% 0.0s -> 0.0s
mesa-native do_populate_lic 0.0s +0.0% 0.0s -> 0.0s
mesa-native do_create_spdx 0.0s +0.0% 0.1s -> 0.1s
mesa-native do_create_package_spdx 0.0s +0.0% 0.0s -> 0.0s
+ mesa-tools-native do_rust_gen_targets 0.0s +inf% 0.0s -> 0.0s
+ mesa-tools-native do_fetch 0.0s +inf% 0.0s -> 0.0s
mesa-native do_rust_create_wrappers 0.0s +33.3% 0.0s -> 0.0s
mesa-native do_deploy_source_date_epoch 0.0s +20.0% 0.0s -> 0.1s
mesa-native do_unpack 0.0s +0.7% 1.4s -> 1.4s
+ mesa-tools-native do_write_config 0.0s +inf% 0.0s -> 0.0s
+ mesa-tools-native do_recipe_qa 0.0s +inf% 0.0s -> 0.0s
+ mesa-tools-native do_rust_create_wrappers 0.0s +inf% 0.0s -> 0.0s
+ mesa-tools-native do_deploy_source_date_epoch 0.1s +inf% 0.0s -> 0.1s
+ mesa-tools-native do_collect_spdx_deps 0.1s +inf% 0.0s -> 0.1s
+ mesa-tools-native do_create_spdx 0.1s +inf% 0.0s -> 0.1s
mesa-native do_collect_spdx_deps 0.1s +157.1% 0.1s -> 0.2s
+ mesa-tools-native do_patch 0.2s +inf% 0.0s -> 0.2s
+ mesa-tools-native do_install 0.3s +inf% 0.0s -> 0.3s
+ mesa-tools-native do_populate_sysroot 0.3s +inf% 0.0s -> 0.3s
+ mesa-tools-native do_prepare_recipe_sysroot 0.4s +inf% 0.0s -> 0.4s
mesa-native do_compile 0.7s +1.3% 54.0s -> 54.6s
mesa-native do_fetch 1.3s +12700.0% 0.0s -> 1.3s
+ mesa-tools-native do_unpack 1.4s +inf% 0.0s -> 1.4s
+ mesa-tools-native do_configure 6.3s +inf% 0.0s -> 6.3s
+ mesa-tools-native do_compile 30.9s +inf% 0.0s -> 30.9s
Cumulative walltime:
41.8s +63.1% 01:06.3 (66.3s) -> 01:48.1 (108.1s)
I think the added 42s for qemux86-64 mesa-native recipe is worth the
tens of minutes saved for every other machine building target mesa only
which depend on libclc PACKAGECONFIG (less benefit when gallium-llvm is
selected though; and not much when building with opencl).
This was tested on PX30, RK3399 and RK3588 (panfrost/panthor drivers),
kmscube still runs. I only had devices with broken display support so I
can only say that kmscube runs with the expected renderer.
Signed-off-by: Quentin Schulz <quentin.schulz@cherry.de>
---
Quentin Schulz (7):
mesa: upgrade 25.3.3 -> 25.3.4
mesa: update patch status
mesa: make expat dependency a PACKAGECONFIG
mesa: make zlib dependency a PACKAGECONFIG
mesa: remove libxml2-native dependency
add mesa-tools native-only recipe
mesa: depend on mesa-tools-native for less expensive libclc dependency
meta/conf/distro/include/maintainers.inc | 1 +
...on-t-dump-genvk.py-args-to-generated-file.patch | 14 ++++++------
meta/recipes-graphics/mesa/mesa-gl.bb | 2 +-
meta/recipes-graphics/mesa/mesa-tools-native.bb | 19 ++++++++++++++++
meta/recipes-graphics/mesa/mesa.bb | 2 ++
meta/recipes-graphics/mesa/mesa.inc | 25 ++++++++++------------
6 files changed, 42 insertions(+), 21 deletions(-)
---
base-commit: 6ce19709f7835ee5cd7915e181f89397975236c8
change-id: 20260205-mesa-tools-native-afab5b8d0d21
Best regards,
--
Quentin Schulz <quentin.schulz@cherry.de>
next reply other threads:[~2026-02-06 17:24 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-02-06 17:23 Quentin Schulz [this message]
2026-02-06 17:23 ` [PATCH 1/7] mesa: upgrade 25.3.3 -> 25.3.4 Quentin Schulz
2026-02-06 17:23 ` [PATCH 2/7] mesa: update patch status Quentin Schulz
2026-02-06 17:23 ` [PATCH 3/7] mesa: make expat dependency a PACKAGECONFIG Quentin Schulz
2026-02-06 17:23 ` [PATCH 4/7] mesa: make zlib " Quentin Schulz
2026-02-06 17:23 ` [PATCH 5/7] mesa: remove libxml2-native dependency Quentin Schulz
2026-02-06 17:23 ` [PATCH 6/7] add mesa-tools native-only recipe Quentin Schulz
2026-02-06 17:31 ` Patchtest results for " patchtest
2026-02-06 17:23 ` [PATCH 7/7] mesa: depend on mesa-tools-native for less expensive libclc dependency Quentin Schulz
2026-03-20 15:26 ` ernestvanhoecke
2026-03-20 15:57 ` Quentin Schulz
2026-03-26 11:10 ` [OE-core] " Quentin Schulz
2026-03-26 17:34 ` Ernest Van Hoecke
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260206-mesa-tools-native-v1-0-166935b0e379@cherry.de \
--to=foss+yocto@0leil.net \
--cc=dmitry.baryshkov@oss.qualcomm.com \
--cc=openembedded-core@lists.openembedded.org \
--cc=quentin.schulz@cherry.de \
--cc=ross.burton@arm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox