From 0d9bbb276f87f29b3f4eb3908b264deaf372910d Mon Sep 17 00:00:00 2001 From: Wildan Mubarok Date: Tue, 16 Sep 2025 13:46:19 +0000 Subject: [PATCH 1/4] Add config to install upstream rustc --- mk/config.mk | 2 ++ mk/prefix.mk | 52 +++++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 53 insertions(+), 1 deletion(-) diff --git a/mk/config.mk b/mk/config.mk index e625b1a57..74d8fae8d 100644 --- a/mk/config.mk +++ b/mk/config.mk @@ -11,6 +11,8 @@ ARCH?=$(HOST_ARCH) BOARD?= ## Enable to use binary prefix (much faster) PREFIX_BINARY?=1 +## Enable to use up-to-date rust compiler (experimental, only available to Tier 2 targets) +EXPERIMENTAL_PREFIX_USE_UPSTREAM_RUST_COMPILER?=0 ## Enable to use binary packages (much faster) REPO_BINARY?=0 ## Name of the configuration to include in the image name e.g. desktop or server diff --git a/mk/prefix.mk b/mk/prefix.mk index 2aefc0fe3..b25ad57a1 100644 --- a/mk/prefix.mk +++ b/mk/prefix.mk @@ -5,9 +5,12 @@ PREFIX=prefix/$(TARGET) PREFIX_INSTALL=$(PREFIX)/sysroot/ PREFIX_PATH=$(ROOT)/$(PREFIX_INSTALL)/bin +GNU_HOST=$(HOST_ARCH)-unknown-linux-gnu BINUTILS_BRANCH=redox-2.43.1 GCC_BRANCH=redox-13.2.0 LIBTOOL_VERSION=2.5.4 +# nightly a day after 1.89 release +UPSTREAM_RUSTC_VERSION="2025-08-09" export PREFIX_RUSTFLAGS=-L $(ROOT)/$(PREFIX_INSTALL)/$(TARGET)/lib export RUSTUP_TOOLCHAIN=$(ROOT)/$(PREFIX_INSTALL) @@ -123,7 +126,53 @@ else touch "$@" endif -ifeq ($(PREFIX_BINARY),1) +# ----------------------------------------------------- +ifeq ($(EXPERIMENTAL_PREFIX_USE_UPSTREAM_RUST_COMPILER),1) + +$(PREFIX)/gcc-install.tar.gz: + mkdir -p "$(@D)" + wget -cO $@.partial "https://static.redox-os.org/toolchain/$(TARGET)/gcc-install.tar.gz" + mv $@.partial $@ + +$(PREFIX)/rustc-install.tar.xz: + mkdir -p "$(@D)" + wget -O $@.partial "https://static.rust-lang.org/dist/$(UPSTREAM_RUSTC_VERSION)/rustc-nightly-$(GNU_HOST).tar.xz" + mv $@.partial $@ + +$(PREFIX)/cargo-install.tar.xz: + mkdir -p "$(@D)" + wget -O $@.partial "https://static.rust-lang.org/dist/$(UPSTREAM_RUSTC_VERSION)/cargo-nightly-$(GNU_HOST).tar.xz" + mv $@.partial $@ + +$(PREFIX)/rust-std-host-install.tar.xz: + mkdir -p "$(@D)" + wget -O $@.partial "https://static.rust-lang.org/dist/$(UPSTREAM_RUSTC_VERSION)/rust-std-nightly-$(GNU_HOST).tar.xz" + mv $@.partial $@ + +$(PREFIX)/rust-std-target-install.tar.xz: + mkdir -p "$(@D)" + wget -O $@.partial "https://static.rust-lang.org/dist/$(UPSTREAM_RUSTC_VERSION)/rust-std-nightly-$(GNU_TARGET).tar.xz" + mv $@.partial $@ + +$(PREFIX)/rust-src-install.tar.xz: + mkdir -p "$(@D)" + wget -O $@.partial "https://static.rust-lang.org/dist/$(UPSTREAM_RUSTC_VERSION)/rust-src-nightly.tar.xz" + mv $@.partial $@ + +$(PREFIX)/rust-install: $(PREFIX)/gcc-install.tar.gz $(PREFIX)/rustc-install.tar.xz $(PREFIX)/cargo-install.tar.xz $(PREFIX)/rust-std-host-install.tar.xz $(PREFIX)/rust-std-target-install.tar.xz $(PREFIX)/rust-src-install.tar.xz + rm -rf "$@.partial" "$@" + mkdir -p "$@.partial" + tar --extract --file "$(PREFIX)/gcc-install.tar.gz" -C "$@.partial" || true + tar --extract --file "$(PREFIX)/rustc-install.tar.xz" -C "$@.partial" rustc-nightly-$(GNU_HOST)/rustc/ --strip-components=2 + tar --extract --file "$(PREFIX)/cargo-install.tar.xz" --directory "$@.partial" cargo-nightly-$(GNU_HOST)/cargo/ --strip-components=2 + tar --extract --file "$(PREFIX)/rust-std-host-install.tar.xz" --directory "$@.partial" rust-std-nightly-$(GNU_HOST)/rust-std-$(GNU_HOST)/ --strip-components=2 + tar --extract --file "$(PREFIX)/rust-std-target-install.tar.xz" --directory "$@.partial" rust-std-nightly-$(GNU_TARGET)/rust-std-$(GNU_TARGET)/ --strip-components=2 + tar --extract --file "$(PREFIX)/rust-src-install.tar.xz" --directory "$@.partial" rust-src-nightly/rust-src/ --strip-components=2 + touch "$@.partial" + mv "$@.partial" "$@" + +# --------------------------------------------------- +else ifeq ($(PREFIX_BINARY),1) $(PREFIX)/rust-install.tar.gz: mkdir -p "$(@D)" @@ -138,6 +187,7 @@ $(PREFIX)/rust-install: $(PREFIX)/rust-install.tar.gz touch "$@.partial" mv "$@.partial" "$@" +# --------------------------------------------------- else $(ROOT)/rust/configure: From f30670d99aecd8e70134623e82e737a3647d1d12 Mon Sep 17 00:00:00 2001 From: Wildan Mubarok Date: Sat, 4 Oct 2025 16:00:56 +0000 Subject: [PATCH 2/4] Update upstream version --- mk/prefix.mk | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/mk/prefix.mk b/mk/prefix.mk index b25ad57a1..c0e790e8f 100644 --- a/mk/prefix.mk +++ b/mk/prefix.mk @@ -9,8 +9,7 @@ GNU_HOST=$(HOST_ARCH)-unknown-linux-gnu BINUTILS_BRANCH=redox-2.43.1 GCC_BRANCH=redox-13.2.0 LIBTOOL_VERSION=2.5.4 -# nightly a day after 1.89 release -UPSTREAM_RUSTC_VERSION="2025-08-09" +UPSTREAM_RUSTC_VERSION="2025-10-03" export PREFIX_RUSTFLAGS=-L $(ROOT)/$(PREFIX_INSTALL)/$(TARGET)/lib export RUSTUP_TOOLCHAIN=$(ROOT)/$(PREFIX_INSTALL) From dca20d6bd9592f4e0e4113fe8b0e1f9715b50ec8 Mon Sep 17 00:00:00 2001 From: Wildan M Date: Mon, 22 Dec 2025 06:42:55 +0700 Subject: [PATCH 3/4] Move rustup behind PREFIX_BINARY=0 --- mk/config.mk | 1 + mk/prefix.mk | 111 +++++++++++++++++++++++++++------------------------ 2 files changed, 59 insertions(+), 53 deletions(-) diff --git a/mk/config.mk b/mk/config.mk index 65897685d..c7d952d16 100644 --- a/mk/config.mk +++ b/mk/config.mk @@ -12,6 +12,7 @@ BOARD?= ## Enable to use binary prefix (much faster) PREFIX_BINARY?=1 ## Enable to use up-to-date rust compiler (experimental, only available to Tier 2 targets) +## Even more experimental, add -Zbuild-std to cookbook.toml to allow compilation to Tier 3 targets EXPERIMENTAL_PREFIX_USE_UPSTREAM_RUST_COMPILER?=0 ## Enable to use binary packages (much faster) REPO_BINARY?=0 diff --git a/mk/prefix.mk b/mk/prefix.mk index 42a66b402..b470c7bfc 100644 --- a/mk/prefix.mk +++ b/mk/prefix.mk @@ -6,7 +6,6 @@ PREFIX_INSTALL=$(PREFIX)/sysroot/ PREFIX_PATH=$(ROOT)/$(PREFIX_INSTALL)/bin RELIBC_SOURCE=recipes/core/relibc/source -GNU_HOST=$(HOST_ARCH)-unknown-linux-gnu BINUTILS_BRANCH=redox-2.43.1 GCC_BRANCH=redox-13.2.0 LIBTOOL_VERSION=2.5.4 @@ -143,53 +142,8 @@ else touch "$@" endif -# ----------------------------------------------------- -ifeq ($(EXPERIMENTAL_PREFIX_USE_UPSTREAM_RUST_COMPILER),1) - -$(PREFIX)/gcc-install.tar.gz: - mkdir -p "$(@D)" - wget -cO $@.partial "https://static.redox-os.org/toolchain/$(TARGET)/gcc-install.tar.gz" - mv $@.partial $@ - -$(PREFIX)/rustc-install.tar.xz: - mkdir -p "$(@D)" - wget -O $@.partial "https://static.rust-lang.org/dist/$(UPSTREAM_RUSTC_VERSION)/rustc-nightly-$(GNU_HOST).tar.xz" - mv $@.partial $@ - -$(PREFIX)/cargo-install.tar.xz: - mkdir -p "$(@D)" - wget -O $@.partial "https://static.rust-lang.org/dist/$(UPSTREAM_RUSTC_VERSION)/cargo-nightly-$(GNU_HOST).tar.xz" - mv $@.partial $@ - -$(PREFIX)/rust-std-host-install.tar.xz: - mkdir -p "$(@D)" - wget -O $@.partial "https://static.rust-lang.org/dist/$(UPSTREAM_RUSTC_VERSION)/rust-std-nightly-$(GNU_HOST).tar.xz" - mv $@.partial $@ - -$(PREFIX)/rust-std-target-install.tar.xz: - mkdir -p "$(@D)" - wget -O $@.partial "https://static.rust-lang.org/dist/$(UPSTREAM_RUSTC_VERSION)/rust-std-nightly-$(GNU_TARGET).tar.xz" - mv $@.partial $@ - -$(PREFIX)/rust-src-install.tar.xz: - mkdir -p "$(@D)" - wget -O $@.partial "https://static.rust-lang.org/dist/$(UPSTREAM_RUSTC_VERSION)/rust-src-nightly.tar.xz" - mv $@.partial $@ - -$(PREFIX)/rust-install: $(PREFIX)/gcc-install.tar.gz $(PREFIX)/rustc-install.tar.xz $(PREFIX)/cargo-install.tar.xz $(PREFIX)/rust-std-host-install.tar.xz $(PREFIX)/rust-std-target-install.tar.xz $(PREFIX)/rust-src-install.tar.xz - rm -rf "$@.partial" "$@" - mkdir -p "$@.partial" - tar --extract --file "$(PREFIX)/gcc-install.tar.gz" -C "$@.partial" || true - tar --extract --file "$(PREFIX)/rustc-install.tar.xz" -C "$@.partial" rustc-nightly-$(GNU_HOST)/rustc/ --strip-components=2 - tar --extract --file "$(PREFIX)/cargo-install.tar.xz" --directory "$@.partial" cargo-nightly-$(GNU_HOST)/cargo/ --strip-components=2 - tar --extract --file "$(PREFIX)/rust-std-host-install.tar.xz" --directory "$@.partial" rust-std-nightly-$(GNU_HOST)/rust-std-$(GNU_HOST)/ --strip-components=2 - tar --extract --file "$(PREFIX)/rust-std-target-install.tar.xz" --directory "$@.partial" rust-std-nightly-$(GNU_TARGET)/rust-std-$(GNU_TARGET)/ --strip-components=2 - tar --extract --file "$(PREFIX)/rust-src-install.tar.xz" --directory "$@.partial" rust-src-nightly/rust-src/ --strip-components=2 - touch "$@.partial" - mv "$@.partial" "$@" - -# --------------------------------------------------- -else ifeq ($(PREFIX_BINARY),1) +# PREFIX_BINARY --------------------------------------------------- +ifeq ($(PREFIX_BINARY),1) $(PREFIX)/rust-install.tar.gz: | $(CONTAINER_TAG) ifeq ($(PODMAN_BUILD),1) @@ -212,13 +166,9 @@ else mv "$@.partial" "$@" endif -# --------------------------------------------------- else -$(ROOT)/rust/configure: - git submodule sync --recursive - git submodule update --progress --init --recursive --checkout rust - +# BUILD GCC --------------------------------------------------- PREFIX_FREESTANDING_INSTALL=$(PREFIX)/gcc-freestanding-install PREFIX_FREESTANDING_PATH=$(ROOT)/$(PREFIX_FREESTANDING_INSTALL)/bin @@ -375,6 +325,59 @@ $(PREFIX)/gcc-install.tar.gz: $(PREFIX)/gcc-install --directory="$<" \ . +# RUST VIA RUSTUP --------------------------------------------------- +ifeq ($(EXPERIMENTAL_PREFIX_USE_UPSTREAM_RUST_COMPILER),1) + +$(PREFIX)/rustc-install.tar.xz: + mkdir -p "$(@D)" + wget -O $@.partial "https://static.rust-lang.org/dist/$(UPSTREAM_RUSTC_VERSION)/rustc-nightly-$(HOST_TARGET).tar.xz" + mv $@.partial $@ + +$(PREFIX)/cargo-install.tar.xz: + mkdir -p "$(@D)" + wget -O $@.partial "https://static.rust-lang.org/dist/$(UPSTREAM_RUSTC_VERSION)/cargo-nightly-$(HOST_TARGET).tar.xz" + mv $@.partial $@ + +$(PREFIX)/rust-std-host-install.tar.xz: + mkdir -p "$(@D)" + wget -O $@.partial "https://static.rust-lang.org/dist/$(UPSTREAM_RUSTC_VERSION)/rust-std-nightly-$(HOST_TARGET).tar.xz" + mv $@.partial $@ + +$(PREFIX)/rust-std-target-install.tar.xz: + mkdir -p "$(@D)" +ifeq ($(TARGET),x86_64-unknown-redox) + wget -O $@.partial "https://static.rust-lang.org/dist/$(UPSTREAM_RUSTC_VERSION)/rust-std-nightly-$(TARGET).tar.xz" + mv $@.partial $@ +else + touch $@ +endif + +$(PREFIX)/rust-src-install.tar.xz: + mkdir -p "$(@D)" + wget -O $@.partial "https://static.rust-lang.org/dist/$(UPSTREAM_RUSTC_VERSION)/rust-src-nightly.tar.xz" + mv $@.partial $@ + +$(PREFIX)/rust-install: $(PREFIX)/gcc-install.tar.gz $(PREFIX)/rustc-install.tar.xz $(PREFIX)/cargo-install.tar.xz $(PREFIX)/rust-std-host-install.tar.xz $(PREFIX)/rust-std-target-install.tar.xz $(PREFIX)/rust-src-install.tar.xz + rm -rf "$@.partial" "$@" + mkdir -p "$@.partial" + tar --extract --file "$(PREFIX)/gcc-install.tar.gz" -C "$@.partial" || true + tar --extract --file "$(PREFIX)/rustc-install.tar.xz" -C "$@.partial" rustc-nightly-$(HOST_TARGET)/rustc/ --strip-components=2 + tar --extract --file "$(PREFIX)/cargo-install.tar.xz" --directory "$@.partial" cargo-nightly-$(HOST_TARGET)/cargo/ --strip-components=2 + tar --extract --file "$(PREFIX)/rust-std-host-install.tar.xz" --directory "$@.partial" rust-std-nightly-$(HOST_TARGET)/rust-std-$(HOST_TARGET)/ --strip-components=2 + tar --extract --file "$(PREFIX)/rust-src-install.tar.xz" --directory "$@.partial" rust-src-nightly/rust-src/ --strip-components=2 +ifeq ($(TARGET),x86_64-unknown-redox) + tar --extract --file "$(PREFIX)/rust-std-target-install.tar.xz" --directory "$@.partial" rust-std-nightly-$(TARGET)/rust-std-$(TARGET)/ --strip-components=2 +endif + touch "$@.partial" + mv "$@.partial" "$@" + +# BUILD RUST --------------------------------------------------- +else + +$(ROOT)/rust/configure: + git submodule sync --recursive + git submodule update --progress --init --recursive --checkout rust + $(PREFIX)/rust-install: $(ROOT)/rust/configure | $(PREFIX)/gcc-install $(PREFIX)/relibc-freestanding-install $(CONTAINER_TAG) ifeq ($(PODMAN_BUILD),1) $(PODMAN_RUN) make $@ @@ -408,6 +411,8 @@ else mv "$@.partial" "$@" endif +endif + $(PREFIX)/rust-install.tar.gz: $(PREFIX)/rust-install tar \ --create \ From 947e877b2ce9e09e474f9fd6b1a64e8013004347 Mon Sep 17 00:00:00 2001 From: Wildan M Date: Wed, 24 Dec 2025 23:39:46 +0700 Subject: [PATCH 4/4] Uncomment experimental, use unzipped gcc --- mk/config.mk | 2 +- mk/prefix.mk | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/mk/config.mk b/mk/config.mk index c7d952d16..4a650dcd5 100644 --- a/mk/config.mk +++ b/mk/config.mk @@ -13,7 +13,7 @@ BOARD?= PREFIX_BINARY?=1 ## Enable to use up-to-date rust compiler (experimental, only available to Tier 2 targets) ## Even more experimental, add -Zbuild-std to cookbook.toml to allow compilation to Tier 3 targets -EXPERIMENTAL_PREFIX_USE_UPSTREAM_RUST_COMPILER?=0 +PREFIX_USE_UPSTREAM_RUST_COMPILER?=0 ## Enable to use binary packages (much faster) REPO_BINARY?=0 ## Name of the configuration to include in the image name e.g. desktop or server diff --git a/mk/prefix.mk b/mk/prefix.mk index b470c7bfc..deb082344 100644 --- a/mk/prefix.mk +++ b/mk/prefix.mk @@ -325,8 +325,8 @@ $(PREFIX)/gcc-install.tar.gz: $(PREFIX)/gcc-install --directory="$<" \ . -# RUST VIA RUSTUP --------------------------------------------------- -ifeq ($(EXPERIMENTAL_PREFIX_USE_UPSTREAM_RUST_COMPILER),1) +# RUST FROM UPSTREAM COMPILER --------------------------------------------------- +ifeq ($(PREFIX_USE_UPSTREAM_RUST_COMPILER),1) $(PREFIX)/rustc-install.tar.xz: mkdir -p "$(@D)" @@ -357,10 +357,10 @@ $(PREFIX)/rust-src-install.tar.xz: wget -O $@.partial "https://static.rust-lang.org/dist/$(UPSTREAM_RUSTC_VERSION)/rust-src-nightly.tar.xz" mv $@.partial $@ -$(PREFIX)/rust-install: $(PREFIX)/gcc-install.tar.gz $(PREFIX)/rustc-install.tar.xz $(PREFIX)/cargo-install.tar.xz $(PREFIX)/rust-std-host-install.tar.xz $(PREFIX)/rust-std-target-install.tar.xz $(PREFIX)/rust-src-install.tar.xz +$(PREFIX)/rust-install: $(PREFIX)/gcc-install $(PREFIX)/rustc-install.tar.xz $(PREFIX)/cargo-install.tar.xz $(PREFIX)/rust-std-host-install.tar.xz $(PREFIX)/rust-std-target-install.tar.xz $(PREFIX)/rust-src-install.tar.xz rm -rf "$@.partial" "$@" mkdir -p "$@.partial" - tar --extract --file "$(PREFIX)/gcc-install.tar.gz" -C "$@.partial" || true + cp -r "$(PREFIX)/gcc-install/". "$@.partial" tar --extract --file "$(PREFIX)/rustc-install.tar.xz" -C "$@.partial" rustc-nightly-$(HOST_TARGET)/rustc/ --strip-components=2 tar --extract --file "$(PREFIX)/cargo-install.tar.xz" --directory "$@.partial" cargo-nightly-$(HOST_TARGET)/cargo/ --strip-components=2 tar --extract --file "$(PREFIX)/rust-std-host-install.tar.xz" --directory "$@.partial" rust-std-nightly-$(HOST_TARGET)/rust-std-$(HOST_TARGET)/ --strip-components=2