From 83a7659262e6a7142cce2d03972fffd0fdb32ee4 Mon Sep 17 00:00:00 2001 From: Wildan M Date: Thu, 12 Feb 2026 12:17:06 +0700 Subject: [PATCH] Workaround support for rust-lld --- mk/prefix.mk | 4 +++- recipes/dev/rust/config-bootstrap.toml | 3 ++- recipes/dev/rust/recipe.toml | 15 ++++++++++++++- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/mk/prefix.mk b/mk/prefix.mk index ca30dc94..1ad64072 100644 --- a/mk/prefix.mk +++ b/mk/prefix.mk @@ -10,6 +10,7 @@ GCC_TARGET=recipes/dev/gcc13/target/$(HOST_TARGET)/$(TARGET) LIBSTDCXX_TARGET=recipes/libs/libstdcxx-v3/target/$(TARGET)/$(HOST_TARGET) RELIBC_FREESTANDING_TARGET=recipes/core/relibc/target/$(TARGET)/$(HOST_TARGET) RELIBC_TARGET=recipes/core/relibc/target/$(TARGET) +LLVM_TARGET=recipes/dev/llvm21/target/$(HOST_TARGET)/$(TARGET) RUST_TARGET=recipes/dev/rust/target/$(HOST_TARGET)/$(TARGET) # official RISC-V support introduced in newer version @@ -332,8 +333,9 @@ else rm -rf "$@.partial" "$@" export PATH="$(ROOT)/$(PREFIX)/libtool-install/bin:$$PATH" \ $(PREFIX_CONFIG) COOKBOOK_HOST_SYSROOT=/usr COOKBOOK_CROSS_TARGET=$(TARGET) && \ - ./target/release/repo cook host:rust + ./target/release/repo cook host:llvm21 host:rust cp -r "$(RUST_TARGET)/stage/usr/". "$@.partial" + cp -r "$(LLVM_TARGET)/stage/usr/". "$@.partial" mv "$@.partial" "$@" endif diff --git a/recipes/dev/rust/config-bootstrap.toml b/recipes/dev/rust/config-bootstrap.toml index b10895eb..08aa9408 100644 --- a/recipes/dev/rust/config-bootstrap.toml +++ b/recipes/dev/rust/config-bootstrap.toml @@ -1,7 +1,8 @@ [llvm] download-ci-llvm = false static-libstdcpp = false -link-shared = false +# shared with lld +link-shared = true [build] host = ["TARGET"] diff --git a/recipes/dev/rust/recipe.toml b/recipes/dev/rust/recipe.toml index 254daddb..16e406eb 100644 --- a/recipes/dev/rust/recipe.toml +++ b/recipes/dev/rust/recipe.toml @@ -14,6 +14,7 @@ dependencies = [ dev-dependencies = [ "llvm21.dev", "llvm21.runtime", + "lld21", "host:llvm21", "host:llvm21.dev", "host:llvm21.runtime", @@ -51,7 +52,7 @@ sed -i "s|COOKBOOK_TOOLCHAIN|${COOKBOOK_TOOLCHAIN}|g" config.toml fi # Don't poison the stage1 compiler (host -> host) -unset AR AS CC CXX LD LDFLAGS NM OBJCOPY OBJDUMP RANLIB READELF RUSTFLAGS STRIP +unset AR AS CC CXX LD LDFLAGS NM OBJCOPY OBJDUMP RANLIB READELF RUSTFLAGS CARGO_ENCODED_RUSTFLAGS STRIP python3 "${COOKBOOK_SOURCE}/x.py" install \ --config config.toml \ @@ -60,6 +61,18 @@ python3 "${COOKBOOK_SOURCE}/x.py" install \ mkdir -p "${COOKBOOK_STAGE}"/usr rsync -av --delete "${COOKBOOK_BUILD}"/install/* "${COOKBOOK_STAGE}"/usr/ rm -rf "${COOKBOOK_STAGE}"/usr/lib/rustlib/*.log + +# workaround for rust.lld, needed by e.g. compiling bootloader +# https://github.com/rust-lang/rust/issues/143076#issuecomment-3011710678 +LLD_DIR="${COOKBOOK_STAGE}/usr/lib/rustlib/$TARGET/bin" +mkdir -p $LLD_DIR/gcc-ld +cp ${COOKBOOK_SYSROOT}/usr/bin/lld $LLD_DIR/rust-lld +ln -s rust-lld $LLD_DIR/wasm-component-ld +ln -s ../rust-lld $LLD_DIR/gcc-ld/ld.lld +ln -s ../rust-lld $LLD_DIR/gcc-ld/ld64.lld +ln -s ../rust-lld $LLD_DIR/gcc-ld/lld-link +ln -s ../rust-lld $LLD_DIR/gcc-ld/wasm-ld +ln -s ../../../libLLVM.so.21.1 $LLD_DIR/../lib/libLLVM.so.21.1 """ [[optional-packages]]