From d7822583b007892ee964979697c01eabff4fa208 Mon Sep 17 00:00:00 2001 From: bjorn3 <17426603+bjorn3@users.noreply.github.com> Date: Sun, 1 Mar 2026 17:26:51 +0100 Subject: [PATCH 1/5] Deduplicate prefix download logic using pattern rules --- mk/prefix.mk | 111 +++------------------------------------------------ 1 file changed, 6 insertions(+), 105 deletions(-) diff --git a/mk/prefix.mk b/mk/prefix.mk index f3e11018..f6b3d268 100644 --- a/mk/prefix.mk +++ b/mk/prefix.mk @@ -87,12 +87,12 @@ ifeq ($(PREFIX_BINARY),1) # PREFIX_BINARY FOR LINUX ----------------------------------------- ifneq ($(HOSTED_REDOX),1) -$(PREFIX)/gcc-install.tar.gz: | $(CONTAINER_TAG) +$(PREFIX)/%.tar.gz: | $(CONTAINER_TAG) ifeq ($(PODMAN_BUILD),1) $(PODMAN_RUN) make $@ else mkdir -p "$(@D)" - wget -O $@.partial "https://static.redox-os.org/toolchain/$(HOST_TARGET)/$(TARGET)/gcc-install.tar.gz" + wget -O $@.partial "https://static.redox-os.org/toolchain/$(HOST_TARGET)/$(TARGET)/$(@F)" mv $@.partial $@ endif @@ -107,15 +107,6 @@ else mv "$@.partial" "$@" endif -$(PREFIX)/rust-install.tar.gz: | $(CONTAINER_TAG) -ifeq ($(PODMAN_BUILD),1) - $(PODMAN_RUN) make $@ -else - mkdir -p "$(@D)" - wget -O $@.partial "https://static.redox-os.org/toolchain/$(HOST_TARGET)/$(TARGET)/rust-install.tar.gz" - mv $@.partial $@ -endif - $(PREFIX)/rust-install: $(PREFIX)/rust-install.tar.gz $(CONTAINER_TAG) ifeq ($(PODMAN_BUILD),1) $(PODMAN_RUN) make $@ @@ -127,15 +118,6 @@ else mv "$@.partial" "$@" endif -$(PREFIX)/clang-install.tar.gz: | $(CONTAINER_TAG) -ifeq ($(PODMAN_BUILD),1) - $(PODMAN_RUN) make $@ -else - mkdir -p "$(@D)" - wget -O $@.partial "https://static.redox-os.org/toolchain/$(HOST_TARGET)/$(TARGET)/clang-install.tar.gz" - mv $@.partial $@ -endif - $(PREFIX)/clang-install: $(PREFIX)/clang-install.tar.gz $(CONTAINER_TAG) ifeq ($(PODMAN_BUILD),1) $(PODMAN_RUN) make $@ @@ -159,93 +141,12 @@ else mv $@.partial $@ endif -$(PREFIX)/libtool.pkgar: $(PREFIX)/id_ed25519.pub.toml | $(CONTAINER_TAG) +$(PREFIX)/%.pkgar: $(PREFIX)/id_ed25519.pub.toml | $(CONTAINER_TAG) ifeq ($(PODMAN_BUILD),1) $(PODMAN_RUN) make $@ else mkdir -p "$(@D)" - wget -O $@.partial "https://static.redox-os.org/pkg/$(TARGET)/libtool.pkgar" - mv $@.partial $@ -endif - -$(PREFIX)/gcc13.pkgar: $(PREFIX)/id_ed25519.pub.toml | $(CONTAINER_TAG) -ifeq ($(PODMAN_BUILD),1) - $(PODMAN_RUN) make $@ -else - mkdir -p "$(@D)" - wget -O $@.partial "https://static.redox-os.org/pkg/$(TARGET)/gcc13.pkgar" - mv $@.partial $@ -endif - -$(PREFIX)/libgcc.pkgar: $(PREFIX)/id_ed25519.pub.toml | $(CONTAINER_TAG) -ifeq ($(PODMAN_BUILD),1) - $(PODMAN_RUN) make $@ -else - mkdir -p "$(@D)" - wget -O $@.partial "https://static.redox-os.org/pkg/$(TARGET)/libgcc.pkgar" - mv $@.partial $@ -endif - -$(PREFIX)/libstdcxx.pkgar: $(PREFIX)/id_ed25519.pub.toml | $(CONTAINER_TAG) -ifeq ($(PODMAN_BUILD),1) - $(PODMAN_RUN) make $@ -else - mkdir -p "$(@D)" - wget -O $@.partial "https://static.redox-os.org/pkg/$(TARGET)/libstdcxx.pkgar" - mv $@.partial $@ -endif - -$(PREFIX)/gcc13.cxx.pkgar: $(PREFIX)/id_ed25519.pub.toml | $(CONTAINER_TAG) -ifeq ($(PODMAN_BUILD),1) - $(PODMAN_RUN) make $@ -else - mkdir -p "$(@D)" - wget -O $@.partial "https://static.redox-os.org/pkg/$(TARGET)/gcc13.cxx.pkgar" - mv $@.partial $@ -endif - -$(PREFIX)/rust.pkgar: $(PREFIX)/id_ed25519.pub.toml | $(CONTAINER_TAG) -ifeq ($(PODMAN_BUILD),1) - $(PODMAN_RUN) make $@ -else - mkdir -p "$(@D)" - wget -O $@.partial "https://static.redox-os.org/pkg/$(TARGET)/rust.pkgar" - mv $@.partial $@ -endif - -$(PREFIX)/llvm21.pkgar: $(PREFIX)/id_ed25519.pub.toml | $(CONTAINER_TAG) -ifeq ($(PODMAN_BUILD),1) - $(PODMAN_RUN) make $@ -else - mkdir -p "$(@D)" - wget -O $@.partial "https://static.redox-os.org/pkg/$(TARGET)/llvm21.pkgar" - mv $@.partial $@ -endif - -$(PREFIX)/llvm21.runtime.pkgar: $(PREFIX)/id_ed25519.pub.toml | $(CONTAINER_TAG) -ifeq ($(PODMAN_BUILD),1) - $(PODMAN_RUN) make $@ -else - mkdir -p "$(@D)" - wget -O $@.partial "https://static.redox-os.org/pkg/$(TARGET)/llvm21.runtime.pkgar" - mv $@.partial $@ -endif - -$(PREFIX)/clang21.pkgar: $(PREFIX)/id_ed25519.pub.toml | $(CONTAINER_TAG) -ifeq ($(PODMAN_BUILD),1) - $(PODMAN_RUN) make $@ -else - mkdir -p "$(@D)" - wget -O $@.partial "https://static.redox-os.org/pkg/$(TARGET)/clang21.pkgar" - mv $@.partial $@ -endif - -$(PREFIX)/lld21.pkgar: $(PREFIX)/id_ed25519.pub.toml | $(CONTAINER_TAG) -ifeq ($(PODMAN_BUILD),1) - $(PODMAN_RUN) make $@ -else - mkdir -p "$(@D)" - wget -O $@.partial "https://static.redox-os.org/pkg/$(TARGET)/lld21.pkgar" + wget -O $@.partial "https://static.redox-os.org/pkg/$(TARGET)/$(@F)" mv $@.partial $@ endif @@ -321,7 +222,7 @@ else mkdir -p "$@.partial" export $(PREFIX_CONFIG) PATH="$(ROOT)/$(PREFIX)/libtool-install/bin:$$PATH" \ COOKBOOK_HOST_SYSROOT=/usr COOKBOOK_CROSS_TARGET=$(TARGET) COOKBOOK_CROSS_GNU_TARGET=$(GNU_TARGET) && \ - $(REPO_BIN) cook host:binutils-gdb + $(REPO_BIN) cook host:binutils-gdb cp -r "$(BINUTILS_TARGET)/stage/usr/". "$@.partial" touch "$@.partial" mv "$@.partial" "$@" @@ -509,7 +410,7 @@ else cp -r "$(LLVM_TARGET)/stage/usr/". "$@.partial" mv "$@.partial" "$@" # TODO: Cache from RUST_TARGET is currently not cleared. -# TIP: If you're developing std for rust, remove COOKBOOK_CLEAN_BUILD=true +# TIP: If you're developing std for rust, remove COOKBOOK_CLEAN_BUILD=true # at the top of this file so your next rust build reuses the build cache endif From 6d623c5b1835b8302c10db8e69a92a150ae43b6b Mon Sep 17 00:00:00 2001 From: bjorn3 <17426603+bjorn3@users.noreply.github.com> Date: Sun, 1 Mar 2026 17:32:46 +0100 Subject: [PATCH 2/5] Use static pattern rules to deduplicate tarball extraction --- mk/prefix.mk | 24 +----------------------- 1 file changed, 1 insertion(+), 23 deletions(-) diff --git a/mk/prefix.mk b/mk/prefix.mk index f6b3d268..627f36e5 100644 --- a/mk/prefix.mk +++ b/mk/prefix.mk @@ -96,29 +96,7 @@ else mv $@.partial $@ endif -$(PREFIX)/gcc-install: $(PREFIX)/gcc-install.tar.gz $(CONTAINER_TAG) -ifeq ($(PODMAN_BUILD),1) - $(PODMAN_RUN) make $@ -else - rm -rf "$@.partial" "$@" - mkdir -p "$@.partial" - tar --extract --file "$<" --directory "$@.partial" --no-same-owner --strip-components=1 - touch "$@.partial" - mv "$@.partial" "$@" -endif - -$(PREFIX)/rust-install: $(PREFIX)/rust-install.tar.gz $(CONTAINER_TAG) -ifeq ($(PODMAN_BUILD),1) - $(PODMAN_RUN) make $@ -else - rm -rf "$@.partial" "$@" - mkdir -p "$@.partial" - tar --extract --file "$<" --directory "$@.partial" --no-same-owner --strip-components=1 - touch "$@.partial" - mv "$@.partial" "$@" -endif - -$(PREFIX)/clang-install: $(PREFIX)/clang-install.tar.gz $(CONTAINER_TAG) +$(PREFIX)/gcc-install $(PREFIX)/rust-install $(PREFIX)/clang-install: %: %.tar.gz $(CONTAINER_TAG) ifeq ($(PODMAN_BUILD),1) $(PODMAN_RUN) make $@ else From 2fb09fc153e2e9da629d8c38ed1cfa54176c6bac Mon Sep 17 00:00:00 2001 From: bjorn3 <17426603+bjorn3@users.noreply.github.com> Date: Sun, 1 Mar 2026 17:35:40 +0100 Subject: [PATCH 3/5] Use order-only prerequisite on the container for compiler toolchain unpacking There is no need to unpack the compiler toolchains again when the container image gets updated. --- mk/prefix.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mk/prefix.mk b/mk/prefix.mk index 627f36e5..606bcadb 100644 --- a/mk/prefix.mk +++ b/mk/prefix.mk @@ -96,7 +96,7 @@ else mv $@.partial $@ endif -$(PREFIX)/gcc-install $(PREFIX)/rust-install $(PREFIX)/clang-install: %: %.tar.gz $(CONTAINER_TAG) +$(PREFIX)/gcc-install $(PREFIX)/rust-install $(PREFIX)/clang-install: %: %.tar.gz | $(CONTAINER_TAG) ifeq ($(PODMAN_BUILD),1) $(PODMAN_RUN) make $@ else From 945e5cc689673b54edb28e0978525ffa7beed837 Mon Sep 17 00:00:00 2001 From: bjorn3 <17426603+bjorn3@users.noreply.github.com> Date: Sun, 1 Mar 2026 17:38:31 +0100 Subject: [PATCH 4/5] Deduplicate prefix tarball creation using implicit rules --- mk/prefix.mk | 32 ++++++++------------------------ 1 file changed, 8 insertions(+), 24 deletions(-) diff --git a/mk/prefix.mk b/mk/prefix.mk index 606bcadb..9a22a2ed 100644 --- a/mk/prefix.mk +++ b/mk/prefix.mk @@ -172,6 +172,14 @@ endif else +$(PREFIX)/%.tar.gz: $(PREFIX)/% + tar \ + --create \ + --gzip \ + --file "$@" \ + --directory="$<" \ + . + # BUILD GCC --------------------------------------------------- $(PREFIX)/libtool-install: | $(FSTOOLS_TAG) $(CONTAINER_TAG) ifeq ($(PODMAN_BUILD),1) @@ -281,14 +289,6 @@ else rm -rf $(BINUTILS_TARGET) $(LIBTOOL_TARGET) $(GCC_TARGET) $(LIBSTDCXX_TARGET) $(RELIBC_FREESTANDING_TARGET) endif -$(PREFIX)/gcc-install.tar.gz: $(PREFIX)/gcc-install - tar \ - --create \ - --gzip \ - --file "$@" \ - --directory="$<" \ - . - # RUST FROM UPSTREAM COMPILER --------------------------------------------------- ifeq ($(PREFIX_USE_UPSTREAM_RUST_COMPILER),1) @@ -394,14 +394,6 @@ endif endif -$(PREFIX)/rust-install.tar.gz: $(PREFIX)/rust-install - tar \ - --create \ - --gzip \ - --file "$@" \ - --directory="$<" \ - . - # BUILD CLANG --------------------------------------------------- $(PREFIX)/clang-install: | $(PREFIX)/rust-install $(PREFIX)/libtool-install $(FSTOOLS_TAG) $(CONTAINER_TAG) ifeq ($(PODMAN_BUILD),1) @@ -425,12 +417,4 @@ endif rm -rf $(LLVM_TARGET) $(CLANG_TARGET) $(LLD_TARGET) endif -$(PREFIX)/clang-install.tar.gz: $(PREFIX)/clang-install - tar \ - --create \ - --gzip \ - --file "$@" \ - --directory="$<" \ - . - endif From 04d08f5aef16823dfdbdac7055c18831cd36872b Mon Sep 17 00:00:00 2001 From: bjorn3 <17426603+bjorn3@users.noreply.github.com> Date: Sun, 1 Mar 2026 17:45:17 +0100 Subject: [PATCH 5/5] Slightly deduplicate PREFIX_USE_UPSTREAM_RUST_COMPILER --- mk/podman.mk | 3 ++- mk/prefix.mk | 13 ++----------- 2 files changed, 4 insertions(+), 12 deletions(-) diff --git a/mk/podman.mk b/mk/podman.mk index 0dc683f2..01922466 100644 --- a/mk/podman.mk +++ b/mk/podman.mk @@ -35,7 +35,8 @@ PODMAN_VOLUMES=--volume $(ROOT):$(CONTAINER_WORKDIR)$(PODMAN_VOLUME_FLAG) --volu PODMAN_ENV=--env PATH=/root/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin --env PODMAN_BUILD=0 PODMAN_CONFIG=--env ARCH=$(ARCH) --env BOARD=$(BOARD) --env CONFIG_NAME=$(CONFIG_NAME) --env FILESYSTEM_CONFIG=$(FILESYSTEM_CONFIG) --env PREFIX_BINARY=$(PREFIX_BINARY) \ --env CI=$(CI) --env COOKBOOK_MAKE_JOBS=$(COOKBOOK_MAKE_JOBS) --env COOKBOOK_LOGS=$(COOKBOOK_LOGS) --env COOKBOOK_VERBOSE=$(COOKBOOK_VERBOSE) \ - --env REPO_APPSTREAM=$(REPO_APPSTREAM) --env REPO_BINARY=$(REPO_BINARY) --env REPO_NONSTOP=$(REPO_NONSTOP) --env REPO_OFFLINE=$(REPO_OFFLINE) --env TESTBIN=$(TESTBIN) + --env REPO_APPSTREAM=$(REPO_APPSTREAM) --env REPO_BINARY=$(REPO_BINARY) --env REPO_NONSTOP=$(REPO_NONSTOP) --env REPO_OFFLINE=$(REPO_OFFLINE) --env TESTBIN=$(TESTBIN) \ + --env HOSTED_REDOX=$(HOSTED_REDOX) --env PREFIX_USE_UPSTREAM_RUST_COMPILER=$(PREFIX_USE_UPSTREAM_RUST_COMPILER) PODMAN_OPTIONS=--rm --workdir $(CONTAINER_WORKDIR) --interactive --tty --cap-add SYS_ADMIN --device /dev/fuse --network=host --env TERM=$(TERM) --pids-limit=-1 PODMAN_RUN=podman run $(PODMAN_OPTIONS) $(PODMAN_VOLUMES) $(PODMAN_ENV) $(PODMAN_CONFIG) $(IMAGE_TAG) diff --git a/mk/prefix.mk b/mk/prefix.mk index 9a22a2ed..8521b433 100644 --- a/mk/prefix.mk +++ b/mk/prefix.mk @@ -304,21 +304,12 @@ $(PREFIX_RUST_VERSION_TAG): mkdir -p "$(@D)" touch $@ -$(PREFIX)/rustc-install.tar.xz: | $(PREFIX_RUST_VERSION_TAG) +$(PREFIX)/rustc-install.tar.xz $(PREFIX)/cargo-install.tar.xz: $(PREFIX)/%-install.tar.xz: | $(PREFIX_RUST_VERSION_TAG) ifeq ($(PODMAN_BUILD),1) $(PODMAN_RUN) make $@ else mkdir -p "$(@D)" - wget -O $@.partial "https://static.rust-lang.org/dist/$(UPSTREAM_RUSTC_VERSION)/rustc-nightly-$(HOST_TARGET).tar.xz" - mv $@.partial $@ -endif - -$(PREFIX)/cargo-install.tar.xz: | $(PREFIX_RUST_VERSION_TAG) -ifeq ($(PODMAN_BUILD),1) - $(PODMAN_RUN) make $@ -else - mkdir -p "$(@D)" - wget -O $@.partial "https://static.rust-lang.org/dist/$(UPSTREAM_RUSTC_VERSION)/cargo-nightly-$(HOST_TARGET).tar.xz" + wget -O $@.partial "https://static.rust-lang.org/dist/$(UPSTREAM_RUSTC_VERSION)/$*-nightly-$(HOST_TARGET).tar.xz" mv $@.partial $@ endif