Skip to content
This repository was archived by the owner on Aug 7, 2025. It is now read-only.
This repository was archived by the owner on Aug 7, 2025. It is now read-only.

Mesa with Nouveau Vulkan Drivers and Rustc update #3138

@K1ngfish3r

Description

@K1ngfish3r

The following includes changes needed for getting mesa up and running with nouveau vulkan drivers

Requires
cbindgen (NEW) see my autospec here
rustc 1.78 -> 1.79 see for-review.txt here
mesa with some changes see for-review.txt here

cbindgen

tarball url = https://github.com/mozilla/cbindgen/archive/refs/tags/0.26.0.tar.gz
license = MPL-2.0
make_command

CARGO_PROFILE_RELEASE_DEBUG=2 CARGO_PROFILE_RELEASE_LTO=true CARGO_PROFILE_RELEASE_CODEGEN_UNITS=1 cargo build --release --frozen --all-targets

install_macro

install -Dm0755 ./target/release/%{NAME} %{buildroot}%{_bindir}/%{NAME}

make_check_command (tests dont work for cargo on autospec?)

RUSTC_BOOTSTRAP=1 cargo test --frozen

options.conf
set cargo_vendor = true

rustc

tarball url = https://static.rust-lang.org/dist/rustc-1.79.0-src.tar.xz
build_prepend

# Remove .git as the build system will try
# and sync external submodules otherwise
rm -fr .git
cat > config.toml <<END
change-id = 118703
profile = "user"
[llvm]
link-shared = true
[build]
target = [
  "x86_64-unknown-linux-gnu",
  "i686-unknown-linux-gnu",
]
cargo = "/usr/bin/cargo"
rustc = "/usr/bin/rustc"
rustfmt = "/usr/bin/rustfmt"
locked-deps = true
vendor = true
tools = [
  "cargo",
  "clippy",
  "rustdoc",
  "rustfmt",
  "rust-analyzer-proc-macro-srv",
  "analysis",
  "src",
  "rust-demangler",
]
sanitizers = true
profiler = true
docs = false
[install]
prefix = "/usr"
[rust]
debuginfo-level-std = 2
channel = "stable"
description = "Clear Linux %{version}-%{release}"
rpath = false
backtrace-on-ice = true
remap-debuginfo = false
jemalloc = true
# https://github.com/rust-lang/rust/issues/54872
codegen-units-std = 1
# codegen-tests depend on LLVM utils (FileCheck) we don't provide
codegen-tests = false

[dist]
compression-formats = ["gz"]

[target.x86_64-unknown-linux-gnu]
cc = "/usr/bin/gcc"
cxx = "/usr/bin/g++"
ar = "/usr/bin/gcc-ar"
ranlib = "/usr/bin/gcc-ranlib"
llvm-config = "/usr/bin/llvm-config"

[target.i686-unknown-linux-gnu]
cc = "/usr/bin/gcc"
cxx = "/usr/bin/g++"
ar = "/usr/bin/gcc-ar"
ranlib = "/usr/bin/gcc-ranlib"
END

buildreq_add

cmake
llvm
llvm-staticdev
llvm-staticdev32
ninja
rustc
python3-dev
gcc-dev32
glibc-dev32
libedit-dev
libffi-dev
libtirpc-dev
libxml2-dev
libxml2-dev32
ncurses-dev
ncurses-dev32
zlib-dev
zlib-dev32
zstd-dev
zstd-dev32

excludes

/usr/lib/rustlib/install.log
/usr/lib/rustlib/manifest-cargo
/usr/lib/rustlib/manifest-clippy-preview
/usr/lib/rustlib/manifest-rust-analysis-x86_64-unknown-linux-gnu
/usr/lib/rustlib/manifest-rust-demangler-preview
/usr/lib/rustlib/manifest-rust-src
/usr/lib/rustlib/manifest-rust-std-i686-unknown-linux-gnu
/usr/lib/rustlib/manifest-rust-std-x86_64-unknown-linux-gnu
/usr/lib/rustlib/manifest-rustfmt-preview
/usr/lib/rustlib/manifest-rustc
/usr/src/etc/bash_completion.d/cargo

install_append

mkdir -p %{buildroot}/usr/lib64/
mkdir -p %{buildroot}-v3/usr/lib64/
mv %{buildroot}/usr/lib/*.so %{buildroot}/usr/lib64/
mv %{buildroot}-v3/usr/lib/*.so %{buildroot}-v3/usr/lib64/
rm -f %{buildroot}/usr/lib/rustlib/i686-unknown-linux-gnu/lib/*.so
rm -f %{buildroot}/usr/lib/rustlib/x86_64-unknown-linux-gnu/lib/*.so
rm -f %{buildroot}-v3/usr/lib/rustlib/i686-unknown-linux-gnu/lib/*.so
rm -f %{buildroot}-v3/usr/lib/rustlib/x86_64-unknown-linux-gnu/lib/*.so

install_prepend

export RUST_BACKTRACE=1
export RUST_COMPILER_RT_ROOT=%{builddir}/compiler-rt
# x.py automatically adds -m32 when building for i686 target
# they end up clashing so using sed to filter it out works
export CFLAGS="`echo "$CFLAGS" | sed s/-m64//`"
export CXXFLAGS="$CFLAGS"

dev_extras (NEW) (I put this in to pickup i686 files since they get picked up with their full file name)

/usr/lib/rustlib/i686-unknown-linux-gnu/lib/*.rlib

mesa

buildreq_add
add these
rustc-dev
cbindgen

pkgconfig_ban
add these
paste
32paste

build_prepend_once

i686_dir="%{_builddir}/build32"
deps_dir=$i686_dir/subprojects/packagefiles

for dir in $deps_dir/*; do
    name=$(basename $dir)
    mv $dir/meson.build $i686_dir/subprojects/$name-*
done

cat > $i686_dir/lib32 <<END
[binaries]
c = ['gcc', '-m32']
cpp = ['g++', '-m32']
rust = ['rustc', '--target', 'i686-unknown-linux-gnu']
pkgconfig = 'pkg-config'
cups-config = 'cups-config'
llvm-config = 'llvm-config'
strip = 'strip'

[built-in options]
libdir = 'lib32'

[host_machine]
system = 'linux'
subsystem = 'linux'
kernel = 'linux'
cpu_family = 'x86'
cpu = 'i686'
endian = 'little'
END

build_prepend

deps_dir="./subprojects/packagefiles"

for dir in $deps_dir/*; do
    name=$(basename $dir)
    mv $dir/meson.build ./subprojects/$name-*
done

configure
add nouveau to -Dvulkan-drivers=intel,amd,intel_hasvk,swrast,virtio,swrast,nouveau

configure32
add --cross-file lib32 (based on cat in build_prepend_once)

excludes
delete the two lines below
/usr/share/vulkan/icd.d/intel_icd.i686.json
/usr/share/vulkan/icd.d/radeon_icd.i686.json

install_append
delete file

options.conf
archives = https://static.crates.io/crates/paste/paste-1.0.14.crate ./subprojects/paste-1.0.14 https://static.crates.io/crates/syn/syn-2.0.39.crate ./subprojects/syn-2.0.39 https://static.crates.io/crates/proc-macro2/proc-macro2-1.0.70.crate ./subprojects/proc-macro2-1.0.70 https://static.crates.io/crates/quote/quote-1.0.33.crate ./subprojects/quote-1.0.33 https://static.crates.io/crates/unicode-ident/unicode-ident-1.0.12.crate ./subprojects/unicode-ident-1.0.12
...
cargo_vendor = false (cargo vendor isnt being called in this build)

Thank you

Metadata

Metadata

Assignees

No one assigned

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions