197 lines
11 KiB
Diff
197 lines
11 KiB
Diff
From e12b1ea2ce63eef36fca22b47a22aa55e8b898cd Mon Sep 17 00:00:00 2001
|
|
From: Matt Jolly <kangie@gentoo.org>
|
|
Date: Mon, 9 Mar 2026 19:22:58 +1000
|
|
Subject: [PATCH] Enable build with provided rust tarball
|
|
|
|
Signed-off-by: Matt Jolly <kangie@gentoo.org>
|
|
--- a/minicargo.mk
|
|
+++ b/minicargo.mk
|
|
@@ -16,6 +16,9 @@ endif
|
|
RUSTC_VERSION_DEF := $(shell cat rust-version)
|
|
RUSTC_VERSION ?= $(RUSTC_VERSION_DEF)
|
|
|
|
+# Distros may want to sandbox the build and provide the source themselves
|
|
+RUSTC_SRC_PROVIDED := 0
|
|
+
|
|
# OUTDIR_SUF : Output directory suffix
|
|
ifeq ($(RUSTC_VERSION),$(RUSTC_VERSION_DEF))
|
|
OUTDIR_SUF_DEF :=
|
|
@@ -92,18 +95,26 @@ else
|
|
RUSTC_OUT_BIN := rustc_main
|
|
endif
|
|
|
|
-ifeq ($(RUSTC_CHANNEL),nightly)
|
|
- RUSTCSRC := rustc-nightly-src/
|
|
+ifeq ($(RUSTC_SRC_PROVIDED),0)
|
|
+ ifeq ($(RUSTC_CHANNEL),nightly)
|
|
+ RUSTCSRC := rustc-nightly-src
|
|
+ else
|
|
+ RUSTCSRC := rustc-$(RUSTC_VERSION)-src
|
|
+ endif
|
|
else
|
|
- RUSTCSRC := rustc-$(RUSTC_VERSION)-src/
|
|
+ # Strip trailing slash from rustcsrc if present
|
|
+ RUSTCSRC := $(RUSTCSRC:/=)
|
|
+ ifeq ($(wildcard $(RUSTCSRC)/Cargo.toml),)
|
|
+ $(error "RUSTCSRC is not set to a valid directory: $(RUSTCSRC)/")
|
|
+ endif
|
|
endif
|
|
RUSTC_SRC_DL := $(RUSTCSRC)/dl-version
|
|
ifeq ($(RUSTC_VERSION),1.19.0)
|
|
- VENDOR_DIR := $(RUSTCSRC)src/vendor
|
|
+ VENDOR_DIR := $(RUSTCSRC)/src/vendor
|
|
else ifeq ($(RUSTC_VERSION),1.29.0)
|
|
- VENDOR_DIR := $(RUSTCSRC)src/vendor
|
|
+ VENDOR_DIR := $(RUSTCSRC)/src/vendor
|
|
else
|
|
- VENDOR_DIR := $(RUSTCSRC)vendor
|
|
+ VENDOR_DIR := $(RUSTCSRC)/vendor
|
|
MINICARGO_FLAGS += --manifest-overrides rustc-$(RUSTC_VERSION)-overrides.toml
|
|
endif
|
|
ifeq ($(RUSTC_VERSION),1.54.0)
|
|
@@ -218,6 +229,7 @@ bin/testrunner$(EXESUF):
|
|
# rustc (with std/cargo) source download
|
|
#
|
|
RUSTC_SRC_TARBALL := rustc-$(RUSTC_VERSION)-src.tar.gz
|
|
+ifeq ($(RUSTC_SRC_PROVIDED),0)
|
|
$(RUSTC_SRC_TARBALL):
|
|
@echo [CURL] $@
|
|
@rm -f $@
|
|
@@ -225,15 +237,23 @@ $(RUSTC_SRC_TARBALL):
|
|
rustc-$(RUSTC_VERSION)-src/extracted: $(RUSTC_SRC_TARBALL)
|
|
tar -xzf $(RUSTC_SRC_TARBALL)
|
|
touch $@
|
|
-$(RUSTC_SRC_DL): rustc-$(RUSTC_VERSION)-src/extracted rustc-$(RUSTC_VERSION)-src.patch
|
|
- cd $(RUSTCSRC) && patch -p0 < ../rustc-$(RUSTC_VERSION)-src.patch;
|
|
+else
|
|
+$(RUSTC_SRC_TARBALL):
|
|
+ @echo "RUSTC_SRC_PROVIDED is set, no need to fetch source"
|
|
+rustc-$(RUSTC_VERSION)-src/extracted: $(RUSTC_SRC_TARBALL)
|
|
+ touch $(RUSTCSRC)/extracted
|
|
+endif
|
|
+
|
|
+$(RUSTC_SRC_DL): $(RUSTC_SRC_TARBALL) rustc-$(RUSTC_VERSION)-src/extracted rustc-$(RUSTC_VERSION)-src.patch
|
|
+ PATCH_FILE=$(abspath rustc-$(RUSTC_VERSION)-src.patch); \
|
|
+ cd $(RUSTCSRC) && patch -p0 < $$PATCH_FILE;
|
|
touch $@
|
|
|
|
# Standard library crates
|
|
# - libstd, libpanic_unwind, libtest and libgetopts
|
|
# - libproc_macro (mrustc)
|
|
ifeq ($(USE_MERGED_BUILD),1)
|
|
-$(RUSTCSRC)mrustc-stdlib/Cargo.toml: $(RUSTC_SRC_DL) minicargo.mk
|
|
+$(RUSTCSRC)/mrustc-stdlib/Cargo.toml: $(RUSTC_SRC_DL) minicargo.mk
|
|
@mkdir -p $(dir $@)
|
|
@echo "#![no_core]" > $(dir $@)/lib.rs
|
|
@echo "[package]" > $@
|
|
@@ -248,23 +268,23 @@ $(RUSTCSRC)mrustc-stdlib/Cargo.toml: $(RUSTC_SRC_DL) minicargo.mk
|
|
@echo "rustc-std-workspace-core = { path = \"../$(RUST_LIB_PREFIX)rustc-std-workspace-core\" }" >> $@
|
|
@echo "rustc-std-workspace-alloc = { path = \"../$(RUST_LIB_PREFIX)rustc-std-workspace-alloc\" }" >> $@
|
|
@echo "rustc-std-workspace-std = { path = \"../$(RUST_LIB_PREFIX)rustc-std-workspace-std\" }" >> $@
|
|
-LIBS: $(RUSTCSRC)mrustc-stdlib/Cargo.toml $(MRUSTC) $(MINICARGO)
|
|
- +STD_ENV_ARCH=$(RUSTC_ARCH) $(MINICARGO) --vendor-dir $(VENDOR_DIR) --script-overrides $(OVERRIDE_DIR) --output-dir $(OUTDIR) $(MINICARGO_FLAGS) $(RUSTCSRC)mrustc-stdlib/
|
|
+LIBS: $(RUSTCSRC)/mrustc-stdlib/Cargo.toml $(MRUSTC) $(MINICARGO)
|
|
+ +STD_ENV_ARCH=$(RUSTC_ARCH) $(MINICARGO) --vendor-dir $(VENDOR_DIR) --script-overrides $(OVERRIDE_DIR) --output-dir $(OUTDIR) $(MINICARGO_FLAGS) $(RUSTCSRC)/mrustc-stdlib/
|
|
+$(MINICARGO) --output-dir $(OUTDIR) $(MINICARGO_FLAGS) lib/libproc_macro
|
|
else
|
|
LIBS: $(MRUSTC) $(MINICARGO) $(RUSTC_SRC_DL)
|
|
- +$(MINICARGO) --vendor-dir $(VENDOR_DIR) --script-overrides $(OVERRIDE_DIR) --output-dir $(OUTDIR) $(MINICARGO_FLAGS) $(RUSTCSRC)$(RUST_LIB_PREFIX)std
|
|
- +$(MINICARGO) --vendor-dir $(VENDOR_DIR) --script-overrides $(OVERRIDE_DIR) --output-dir $(OUTDIR) $(MINICARGO_FLAGS) $(RUSTCSRC)$(RUST_LIB_PREFIX)panic_unwind
|
|
- +$(MINICARGO) --vendor-dir $(VENDOR_DIR) --script-overrides $(OVERRIDE_DIR) --output-dir $(OUTDIR) $(MINICARGO_FLAGS) $(RUSTCSRC)$(RUST_LIB_PREFIX)test
|
|
+ +$(MINICARGO) --vendor-dir $(VENDOR_DIR) --script-overrides $(OVERRIDE_DIR) --output-dir $(OUTDIR) $(MINICARGO_FLAGS) $(RUSTCSRC)/$(RUST_LIB_PREFIX)std
|
|
+ +$(MINICARGO) --vendor-dir $(VENDOR_DIR) --script-overrides $(OVERRIDE_DIR) --output-dir $(OUTDIR) $(MINICARGO_FLAGS) $(RUSTCSRC)/$(RUST_LIB_PREFIX)panic_unwind
|
|
+ +$(MINICARGO) --vendor-dir $(VENDOR_DIR) --script-overrides $(OVERRIDE_DIR) --output-dir $(OUTDIR) $(MINICARGO_FLAGS) $(RUSTCSRC)/$(RUST_LIB_PREFIX)test
|
|
+$(MINICARGO) --output-dir $(OUTDIR) $(MINICARGO_FLAGS) lib/libproc_macro
|
|
endif
|
|
|
|
# Dynamically linked version of the standard library
|
|
$(OUTDIR)test/libtest.so: $(RUSTC_SRC_DL)
|
|
mkdir -p $(dir $@)
|
|
- +MINICARGO_DYLIB=1 $(MINICARGO) $(RUSTCSRC)$(RUST_LIB_PREFIX)std --vendor-dir $(VENDOR_DIR) --script-overrides $(OVERRIDE_DIR) --output-dir $(dir $@) $(MINICARGO_FLAGS)
|
|
- +MINICARGO_DYLIB=1 $(MINICARGO) $(RUSTCSRC)$(RUST_LIB_PREFIX)panic_unwind --vendor-dir $(VENDOR_DIR) --script-overrides $(OVERRIDE_DIR) --output-dir $(dir $@) $(MINICARGO_FLAGS)
|
|
- +MINICARGO_DYLIB=1 $(MINICARGO) $(RUSTCSRC)$(RUST_LIB_PREFIX)test --vendor-dir $(VENDOR_DIR) --output-dir $(dir $@) $(MINICARGO_FLAGS)
|
|
+ +MINICARGO_DYLIB=1 $(MINICARGO) $(RUSTCSRC)/$(RUST_LIB_PREFIX)std --vendor-dir $(VENDOR_DIR) --script-overrides $(OVERRIDE_DIR) --output-dir $(dir $@) $(MINICARGO_FLAGS)
|
|
+ +MINICARGO_DYLIB=1 $(MINICARGO) $(RUSTCSRC)/$(RUST_LIB_PREFIX)panic_unwind --vendor-dir $(VENDOR_DIR) --script-overrides $(OVERRIDE_DIR) --output-dir $(dir $@) $(MINICARGO_FLAGS)
|
|
+ +MINICARGO_DYLIB=1 $(MINICARGO) $(RUSTCSRC)/$(RUST_LIB_PREFIX)test --vendor-dir $(VENDOR_DIR) --output-dir $(dir $@) $(MINICARGO_FLAGS)
|
|
test -e $@
|
|
|
|
RUSTC_ENV_VARS := CFG_COMPILER_HOST_TRIPLE=$(RUSTC_TARGET)
|
|
@@ -281,17 +301,17 @@ RUSTC_ENV_VARS += RUSTC_BOOTSTRAP=1
|
|
|
|
$(OUTDIR)rustc: $(MRUSTC) $(MINICARGO) LIBS $(LLVM_CONFIG)
|
|
mkdir -p $(OUTDIR)rustc-build
|
|
- +$(RUSTC_ENV_VARS) $(MINICARGO) $(RUSTCSRC)$(SRCDIR_RUSTC) --vendor-dir $(VENDOR_DIR) --output-dir $(OUTDIR)rustc-build -L $(OUTDIR) $(MINICARGO_FLAGS) $(MINICARGO_FLAGS_$@)
|
|
+ +$(RUSTC_ENV_VARS) $(MINICARGO) $(RUSTCSRC)/$(SRCDIR_RUSTC) --vendor-dir $(VENDOR_DIR) --output-dir $(OUTDIR)rustc-build -L $(OUTDIR) $(MINICARGO_FLAGS) $(MINICARGO_FLAGS_$@)
|
|
test -e $@ -a ! $(OUTDIR)rustc-build/$(RUSTC_OUT_BIN) -nt $@ || cp $(OUTDIR)rustc-build/$(RUSTC_OUT_BIN) $@
|
|
$(OUTDIR)rustc-build/librustc_driver.rlib: $(MRUSTC) $(MINICARGO) LIBS
|
|
mkdir -p $(OUTDIR)rustc-build
|
|
- +$(RUSTC_ENV_VARS) $(MINICARGO) $(RUSTCSRC)$(SRCDIR_RUSTC_DRIVER) --vendor-dir $(VENDOR_DIR) --output-dir $(OUTDIR)rustc-build -L $(OUTDIR) $(MINICARGO_FLAGS) $(MINICARGO_FLAGS_$(OUTDIR)rustc)
|
|
+ +$(RUSTC_ENV_VARS) $(MINICARGO) $(RUSTCSRC)/$(SRCDIR_RUSTC_DRIVER) --vendor-dir $(VENDOR_DIR) --output-dir $(OUTDIR)rustc-build -L $(OUTDIR) $(MINICARGO_FLAGS) $(MINICARGO_FLAGS_$(OUTDIR)rustc)
|
|
$(OUTDIR)cargo: $(MRUSTC) LIBS
|
|
mkdir -p $(OUTDIR)cargo-build
|
|
- +$(CARGO_ENV_VARS) $(MINICARGO) $(RUSTCSRC)src/tools/cargo --vendor-dir $(VENDOR_DIR) --output-dir $(OUTDIR)cargo-build -L $(OUTDIR) $(MINICARGO_FLAGS) $(MINICARGO_FLAGS_$@)
|
|
+ +$(CARGO_ENV_VARS) $(MINICARGO) $(RUSTCSRC)/src/tools/cargo --vendor-dir $(VENDOR_DIR) --output-dir $(OUTDIR)cargo-build -L $(OUTDIR) $(MINICARGO_FLAGS) $(MINICARGO_FLAGS_$@)
|
|
test -e $@ -a ! $(OUTDIR)cargo-build/cargo -nt $@ || cp $(OUTDIR)cargo-build/cargo $@
|
|
|
|
-# Reference $(RUSTCSRC)src/bootstrap/native.rs for these values
|
|
+# Reference $(RUSTCSRC)/src/bootstrap/native.rs for these values
|
|
LLVM_CMAKE_OPTS := LLVM_TARGET_ARCH=$(firstword $(subst -, ,$(RUSTC_TARGET))) LLVM_DEFAULT_TARGET_TRIPLE=$(RUSTC_TARGET)
|
|
LLVM_CMAKE_OPTS += LLVM_TARGETS_TO_BUILD="$(LLVM_TARGETS)"
|
|
LLVM_CMAKE_OPTS += LLVM_ENABLE_ASSERTIONS=OFF
|
|
@@ -303,22 +323,22 @@ LLVM_CMAKE_OPTS += CMAKE_BUILD_TYPE=Release
|
|
LLVM_CMAKE_OPTS += $(LLVM_CMAKE_OPTS_EXTRA)
|
|
|
|
|
|
-$(RUSTCSRC)build/bin/llvm-config: $(RUSTCSRC)build/Makefile
|
|
- $Vcd $(RUSTCSRC)build && $(MAKE) -j $(PARLEVEL)
|
|
+$(RUSTCSRC)/build/bin/llvm-config: $(RUSTCSRC)/build/Makefile
|
|
+ $Vcd $(RUSTCSRC)/build && $(MAKE) -j $(PARLEVEL)
|
|
|
|
-$(RUSTCSRC)build/Makefile: $(RUSTCSRC)$(LLVM_DIR)/CMakeLists.txt
|
|
- @mkdir -p $(RUSTCSRC)build
|
|
- $Vcd $(RUSTCSRC)build && cmake $(addprefix -D , $(LLVM_CMAKE_OPTS)) ../$(LLVM_DIR)
|
|
+$(RUSTCSRC)/build/Makefile: $(RUSTCSRC)/$(LLVM_DIR)/CMakeLists.txt
|
|
+ @mkdir -p $(RUSTCSRC)/build
|
|
+ $Vcd $(RUSTCSRC)/build && cmake $(addprefix -D , $(LLVM_CMAKE_OPTS)) ../$(LLVM_DIR)
|
|
|
|
#
|
|
# Developement-only targets
|
|
#
|
|
$(OUTDIR)libcore.rlib: $(MRUSTC) $(MINICARGO)
|
|
- $(MINICARGO) $(RUSTCSRC)src/libcore --script-overrides $(OVERRIDE_DIR) --output-dir $(OUTDIR) $(MINICARGO_FLAGS)
|
|
+ $(MINICARGO) $(RUSTCSRC)/src/libcore --script-overrides $(OVERRIDE_DIR) --output-dir $(OUTDIR) $(MINICARGO_FLAGS)
|
|
$(OUTDIR)liballoc.rlib: $(MRUSTC) $(MINICARGO)
|
|
- $(MINICARGO) $(RUSTCSRC)src/liballoc --vendor-dir $(VENDOR_DIR) --script-overrides $(OVERRIDE_DIR) --output-dir $(OUTDIR) $(MINICARGO_FLAGS)
|
|
+ $(MINICARGO) $(RUSTCSRC)/src/liballoc --vendor-dir $(VENDOR_DIR) --script-overrides $(OVERRIDE_DIR) --output-dir $(OUTDIR) $(MINICARGO_FLAGS)
|
|
$(OUTDIR)rustc-build/librustdoc.rlib: $(MRUSTC) LIBS
|
|
- $(MINICARGO) $(RUSTCSRC)src/librustdoc --vendor-dir $(VENDOR_DIR) --output-dir $(dir $@) -L $(OUTDIR) $(MINICARGO_FLAGS)
|
|
+ $(MINICARGO) $(RUSTCSRC)/src/librustdoc --vendor-dir $(VENDOR_DIR) --output-dir $(dir $@) -L $(OUTDIR) $(MINICARGO_FLAGS)
|
|
#$(OUTDIR)cargo-build/libserde-1_0_6.rlib: $(MRUSTC) LIBS
|
|
# $(MINICARGO) $(VENDOR_DIR)/serde --vendor-dir $(VENDOR_DIR) --output-dir $(dir $@) -L $(OUTDIR) $(MINICARGO_FLAGS)
|
|
$(OUTDIR)cargo-build/libgit2-0_6_6.rlib: $(MRUSTC) LIBS
|
|
@@ -359,9 +379,9 @@ $(OUTDIR)test/librust_test_helpers.a: $(OUTDIR)test/rust_test_helpers.o
|
|
@mkdir -p $(dir $@)
|
|
ar cur $@ $<
|
|
ifeq ($(RUSTC_VERSION),1.19.0)
|
|
-RUST_TEST_HELPERS_C := $(RUSTCSRC)src/rt/rust_test_helpers.c
|
|
+RUST_TEST_HELPERS_C := $(RUSTCSRC)/src/rt/rust_test_helpers.c
|
|
else
|
|
-RUST_TEST_HELPERS_C := $(RUSTCSRC)src/test/auxiliary/rust_test_helpers.c
|
|
+RUST_TEST_HELPERS_C := $(RUSTCSRC)/src/test/auxiliary/rust_test_helpers.c
|
|
endif
|
|
output$(OUTDIR_SUF)/test/rust_test_helpers.o: $(RUST_TEST_HELPERS_C)
|
|
@mkdir -p $(dir $@)
|
|
@@ -434,8 +454,8 @@ RUNTIME_ARGS_$(OUTDIR)stdtest/collectionstests += --skip ::vec::overaligned_allo
|
|
#ENV_$(OUTDIR)stdtest/rustc-test :=
|
|
#ENV_$(OUTDIR)stdtest/rustc-test += CFG_COMPILER_HOST_TRIPLE=$(RUSTC_TARGET)
|
|
|
|
-$(OUTDIR)stdtest/%-test: $(RUSTCSRC)$(RUST_LIB_PREFIX)/Cargo.toml LIBS
|
|
- +MRUSTC_LIBDIR=$(abspath $(OUTDIR)) $(MINICARGO) --test $(RUSTCSRC)$(RUST_LIB_PREFIX)$* --vendor-dir $(VENDOR_DIR) --output-dir $(dir $@) -L $(OUTDIR)
|
|
+$(OUTDIR)stdtest/%-test: $(RUSTCSRC)/$(RUST_LIB_PREFIX)/Cargo.toml LIBS
|
|
+ +MRUSTC_LIBDIR=$(abspath $(OUTDIR)) $(MINICARGO) --test $(RUSTCSRC)/$(RUST_LIB_PREFIX)$* --vendor-dir $(VENDOR_DIR) --output-dir $(dir $@) -L $(OUTDIR)
|
|
$(OUTDIR)stdtest/collectionstests: $(OUTDIR)stdtest/alloc-test
|
|
test -e $@
|
|
$(OUTDIR)collectionstest_out.txt: $(OUTDIR)%
|
|
--
|
|
2.52.0
|