Bug#1116212: llvm-toolchain-21: please move /usr/lib/llvm* to a multi-arch co-installable location
Witold Baryluk
witold.baryluk at gmail.com
Fri Jan 2 03:50:03 GMT 2026
Source: llvm-toolchain-21
Version: 1:21.1.8-1
Followup-For: Bug #1116212
X-Debbugs-Cc: witold.baryluk at gmail.com
I am routingly cross-compiling mesa for i386 and amd64, on amd64 system.
And by routinly I mean weekly for about 5 years.
https://gist.github.com/baryluk/1041204eff4cc4fad6f1508afe67b562
libllvmXY itself can be coinstalled.
The primary issue are header files. These cannot be easily coinstalled
indeed.
However, I found that header files are actually all the same really, and
anything specific to arch is in the headers changed conditionally.
So installing libllvm-XY-dev:amd64 and then pointing i386 to use them
anyway works.
$ dpkg -l|grep -E 'llvm-21|llvm21'
ii libllvm21:amd64 1:21.1.8-1 amd64 Modular compiler and toolchain technologies, runtime library
ii libllvm21:i386 1:21.1.8-1 i386 Modular compiler and toolchain technologies, runtime library
ii libllvm21-dbgsym:amd64 1:21.1.8-1 amd64 debug symbols for libllvm21
ii libllvm21-dbgsym:i386 1:21.1.8-1 i386 debug symbols for libllvm21
ii llvm-21 1:21.1.8-1 amd64 Modular compiler and toolchain technologies
ii llvm-21-dev 1:21.1.8-1 amd64 Modular compiler and toolchain technologies, libraries and headers
ii llvm-21-linker-tools 1:21.1.8-1 amd64 Modular compiler and toolchain technologies - Plugins
ii llvm-21-runtime 1:21.1.8-1 amd64 Modular compiler and toolchain technologies, IR interpreter
ii llvm-21-tools 1:21.1.8-1 amd64 Modular compiler and toolchain technologies, tools
In meson I do:
meson-cross-i386.ini:
[binaries]
c = '/usr/bin/i686-linux-gnu-gcc-{GCCVERSION}'
cpp = '/usr/bin/i686-linux-gnu-g++-{GCCVERSION}'
ar = '/usr/bin/i686-linux-gnu-gcc-ar-{GCCVERSION}'
strip = '/usr/bin/i686-linux-gnu-strip'
pkg-config = '/usr/bin/i686-linux-gnu-pkg-config'
; We are cheating here. We are using 64-bit llvm-config. But we stars align
; it should work (same compiler and linker flags will be used).
llvm-config = '/usr/bin/llvm-config-{LLVMVERSION}'
; llvm-config = '/usr/lib/llvm-{LLVMVERSION}/bin/llvm-config'
rust_ld = '/usr/bin/i686-linux-gnu-gcc-{GCCVERSION}'
rust = ['rustc', '--target', 'i686-unknown-linux-gnu']
; -C linker=gcc -C link-arg=-m32
; set BINDGEN_EXTRA_CLANG_ARGS to either --target=i686-unknown-linux-gnu or -target i686-unknown-linux-gnu
[built-in options]
c_args = ['-m32']
c_link_args = ['-m32']
cpp_args = ['-m32']
cpp_link_args = ['-m32']
[host_machine]
system = 'linux'
cpu_family = 'x86'
cpu = 'i686'
endian = 'little'
While this is little hacky - I am using 64-bit llvm-config, but because
it gives same results as 32-bit one, it kind of just works, and I had no
issues ever with this (yet) for years.
Give it a try. No need for containers or chroots.
However, I do agree, that having the -dev packages coinstallable, either
by marking them `Multi-Arch :same` (if possible), or in separate
location, would be nice.
It would be also desirable to put llvm-config and be able to call
different arch ones easily (if it is some script it should just work
modulo some variable changes, alternativly running it via qemu binfmt
handler). I belive I did open a bug about llvm-config and multi-arch
few years ago, but I cannot find it now.
Regards,
Witold
-- System Information:
Debian Release: forky/sid
APT prefers testing-debug
APT policy: (500, 'testing-debug'), (500, 'testing')
Architecture: amd64 (x86_64)
Foreign Architectures: i386
Kernel: Linux 6.19.0-rc1 (SMP w/32 CPU threads; PREEMPT)
Kernel taint flags: TAINT_CPU_OUT_OF_SPEC, TAINT_UNSIGNED_MODULE
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8), LANGUAGE not set
Shell: /bin/sh linked to /usr/bin/dash
Init: systemd (via /run/systemd/system)
More information about the Pkg-llvm-team
mailing list