From 8590ec042a3689573be6a3bc8904a8b8848e9225 Mon Sep 17 00:00:00 2001 From: Wildan M Date: Sat, 7 Feb 2026 16:10:33 +0700 Subject: [PATCH 1/9] Boostrap rust from cookbook --- .gitmodules | 5 --- mk/prefix.mk | 49 +++++--------------------- recipes/dev/clang21/recipe.toml | 1 - recipes/dev/lld21/recipe.toml | 1 - recipes/dev/llvm21/recipe.toml | 12 ++++++- recipes/dev/rust/config-bootstrap.toml | 28 +++++++++++++++ recipes/dev/rust/recipe.toml | 16 +++++++-- rust | 1 - 8 files changed, 61 insertions(+), 52 deletions(-) delete mode 100644 .gitmodules create mode 100644 recipes/dev/rust/config-bootstrap.toml delete mode 160000 rust diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index 70642dfa4..000000000 --- a/.gitmodules +++ /dev/null @@ -1,5 +0,0 @@ -[submodule "rust"] - path = rust - url = https://gitlab.redox-os.org/redox-os/rust.git - branch = redox-2025-10-03 - update = none diff --git a/mk/prefix.mk b/mk/prefix.mk index 625cbcf87..269d2a1f4 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) +RUST_TARGET=recipes/dev/rust/target/$(HOST_TARGET)/$(TARGET) # official RISC-V support introduced in newer version UPSTREAM_RUSTC_VERSION=2025-11-15 @@ -21,13 +22,6 @@ PREFIX_CONFIG=CI=1 COOKBOOK_CLEAN_BUILD=true COOKBOOK_CLEAN_TARGET=false COOKBOO prefix: $(PREFIX)/sysroot -PREFIX_STRIP=\ - mkdir -p bin libexec "$(TARGET)/bin" && \ - find bin libexec "$(TARGET)/bin" "$(TARGET)/lib" \ - -type f \ - -exec strip --strip-unneeded {} ';' \ - 2> /dev/null - # Remove prefix builds but retain downloaded binaries prefix_clean: rm -rf $(PREFIX)/sysroot $(PREFIX)/*-install @@ -39,7 +33,7 @@ static_clean: | $(FSTOOLS_TAG) $(MAKE) c.bash,luajit,gettext,openssl1,pcre2,sdl1,zstd,zlib,bzip2,xz $(MAKE) c.expat,freetype,libffi,libiconv,libjpeg,liborbital,libpng,libxml2,ncurses,ncursesw -$(PREFIX)/relibc-install: $(PREFIX)/rust-install | $(FSTOOLS_TAG) $(CONTAINER_TAG) +$(PREFIX)/relibc-install: $(PREFIX)/rust-install $(PREFIX)/gcc-install | $(FSTOOLS_TAG) $(CONTAINER_TAG) ifeq ($(PODMAN_BUILD),1) $(PODMAN_RUN) make $@ else @@ -175,7 +169,7 @@ else mv "$@.partial" "$@" endif -$(PREFIX)/gcc-install: $(PREFIX)/relibc-freestanding-install $(PREFIX)/libtool-install | $(FSTOOLS_TAG) $(CONTAINER_TAG) +$(PREFIX)/gcc-install: $(PREFIX)/relibc-freestanding-install | $(PREFIX)/libtool-install $(FSTOOLS_TAG) $(CONTAINER_TAG) ifeq ($(PODMAN_BUILD),1) $(PODMAN_RUN) make $@ else @@ -312,41 +306,16 @@ endif # 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) +$(PREFIX)/rust-install: | $(PREFIX)/libtool-install $(FSTOOLS_TAG) $(CONTAINER_TAG) ifeq ($(PODMAN_BUILD),1) $(PODMAN_RUN) make $@ else @echo "\033[1;36;49mBuilding rust-install\033[0m" - rm -rf "$(PREFIX)/rust-build" "$@.partial" "$@" - mkdir -p "$(PREFIX)/rust-build" - cp -r "$(PREFIX)/gcc-install" "$@.partial" - cp -r "$(PREFIX)/relibc-freestanding-install/$(GNU_TARGET)" "$@.partial" - cd "$(PREFIX)/rust-build" && \ - export PATH="$(ROOT)/$@.partial/bin:$$PATH" && \ - "$<" \ - --prefix="/" \ - --disable-docs \ - --disable-download-ci-llvm \ - --enable-cargo-native-static \ - --enable-dist-src \ - --enable-extended \ - --enable-lld \ - --enable-llvm-static-stdcpp \ - --tools=cargo,src \ - --target="$(HOST_TARGET),$(TARGET)" \ - && \ - $(MAKE) -j `$(NPROC)` && \ - rm -rf $(ROOT)/$@.partial/lib/rustlib/{components,install.log,rust-installer-version,uninstall.sh,manifest-*} "$(ROOT)/$@.partial/share/doc/rust" && \ - $(MAKE) -j `$(NPROC)` install DESTDIR="$(ROOT)/$@.partial" - rm -rf "$(PREFIX)/rust-build" - mkdir -p "$@.partial/lib/rustlib/$(HOST_TARGET)/bin" - mkdir -p "$@.partial/lib/rustlib/$(HOST_TARGET)/lib" - cd "$@.partial" && find . -name *.old -exec rm {} ';' && $(PREFIX_STRIP) - touch "$@.partial" + 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 + cp -r "$(RUST_TARGET)/stage/usr/". "$@.partial" mv "$@.partial" "$@" endif diff --git a/recipes/dev/clang21/recipe.toml b/recipes/dev/clang21/recipe.toml index 47fd8409a..3aa91f19c 100644 --- a/recipes/dev/clang21/recipe.toml +++ b/recipes/dev/clang21/recipe.toml @@ -43,7 +43,6 @@ COOKBOOK_CMAKE_FLAGS+=( -DLLVM_INCLUDE_TESTS=Off -DLLVM_OPTIMIZED_TABLEGEN=On -DLLVM_TARGET_ARCH=$ARCH - -DLLVM_TARGETS_TO_BUILD="X86;AArch64" -DLLVM_TOOLS_INSTALL_DIR=bin -DLLVM_UTILS_INSTALL_DIR=bin -DUNIX=1 diff --git a/recipes/dev/lld21/recipe.toml b/recipes/dev/lld21/recipe.toml index 11cc7dceb..1fa2cf5ac 100644 --- a/recipes/dev/lld21/recipe.toml +++ b/recipes/dev/lld21/recipe.toml @@ -40,7 +40,6 @@ COOKBOOK_CMAKE_FLAGS+=( -DLLVM_INCLUDE_TESTS=Off -DLLVM_OPTIMIZED_TABLEGEN=On -DLLVM_TARGET_ARCH=$ARCH - -DLLVM_TARGETS_TO_BUILD="X86;AArch64" -DLLVM_TOOLS_INSTALL_DIR=bin -DLLVM_UTILS_INSTALL_DIR=bin -DUNIX=1 diff --git a/recipes/dev/llvm21/recipe.toml b/recipes/dev/llvm21/recipe.toml index 6d618fc21..318719ea6 100644 --- a/recipes/dev/llvm21/recipe.toml +++ b/recipes/dev/llvm21/recipe.toml @@ -18,6 +18,16 @@ script = """ DYNAMIC_INIT ARCH="$(echo "${TARGET}" | cut -d - -f1)" +case "${ARCH}" in + x86 | x86_64) LLVM_TARGETS_TO_BUILD="X86";; + aarch64) LLVM_TARGETS_TO_BUILD="AArch64";; + riscv64gc) LLVM_TARGETS_TO_BUILD="RISCV";; +esac + +if [ "${COOKBOOK_HOST_SYSROOT}" = "/usr" ]; then + LLVM_TARGETS_TO_BUILD="X86;AArch64;RISCV" +fi + # This just build the LLVM library and tools just enough for Rust, to build the rest of LLVM see # https://github.com/llvm/llvm-zorg/blob/main/zorg/buildbot/builders/annotated/standalone-build.sh @@ -28,6 +38,7 @@ COOKBOOK_CMAKE_FLAGS+=( -DLLVM_INSTALL_UTILS=On -DLLVM_TOOL_LLVM_COV_BUILD=On -DLLVM_TOOL_LLVM_PROFDATA_BUILD=On + -DLLVM_TARGETS_TO_BUILD="$LLVM_TARGETS_TO_BUILD" # the rest of options that shared to clang -DCROSS_TOOLCHAIN_FLAGS_NATIVE="-DCMAKE_TOOLCHAIN_FILE=$(realpath "${COOKBOOK_RECIPE}/native.cmake")" @@ -43,7 +54,6 @@ COOKBOOK_CMAKE_FLAGS+=( -DLLVM_INCLUDE_TESTS=Off -DLLVM_OPTIMIZED_TABLEGEN=On -DLLVM_TARGET_ARCH=$ARCH - -DLLVM_TARGETS_TO_BUILD="X86;AArch64" -DLLVM_TOOLS_INSTALL_DIR=bin -DLLVM_UTILS_INSTALL_DIR=bin -DUNIX=1 diff --git a/recipes/dev/rust/config-bootstrap.toml b/recipes/dev/rust/config-bootstrap.toml new file mode 100644 index 000000000..b10895eb9 --- /dev/null +++ b/recipes/dev/rust/config-bootstrap.toml @@ -0,0 +1,28 @@ +[llvm] +download-ci-llvm = false +static-libstdcpp = false +link-shared = false + +[build] +host = ["TARGET"] +target = ["TARGET", "i586-unknown-redox", "x86_64-unknown-redox", "aarch64-unknown-redox", "riscv64gc-unknown-redox"] +cargo-native-static = true +submodules = false +docs = false +tools = ["cargo", "clippy", "rustfmt", "src"] +extended = true +verbose = 1 + +[install] +prefix = "install" +sysconfdir = "etc" + +[rust] +backtrace = false +codegen-tests = false + +[target.aarch64-unknown-linux-gnu] +llvm-config = "COOKBOOK_TOOLCHAIN/bin/llvm-config" + +[target.x86_64-unknown-linux-gnu] +llvm-config = "COOKBOOK_TOOLCHAIN/bin/llvm-config" diff --git a/recipes/dev/rust/recipe.toml b/recipes/dev/rust/recipe.toml index 81b4152e5..4f8038843 100644 --- a/recipes/dev/rust/recipe.toml +++ b/recipes/dev/rust/recipe.toml @@ -20,6 +20,14 @@ dev-dependencies = [ ] script = """ +if [ "${COOKBOOK_HOST_SYSROOT}" = "/usr" ]; then + +cat ${COOKBOOK_RECIPE}/config-bootstrap.toml > config.toml +sed -i "s|TARGET|${TARGET}|g" config.toml +sed -i "s|COOKBOOK_TOOLCHAIN|${COOKBOOK_TOOLCHAIN}|g" config.toml + +else + DYNAMIC_INIT # Linker flags for stage2 compiler (host -> target) export LDFLAGS_x86_64_unknown_redox="${LDFLAGS}" # LLVM @@ -36,13 +44,15 @@ export RUSTFLAGS_BOOTSTRAP="\ export CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_RUSTFLAGS="${RUSTFLAGS_BOOTSTRAP}" export CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_RUSTFLAGS="${RUSTFLAGS_BOOTSTRAP}" -# Don't poison the stage1 compiler (host -> host) -unset AR AS CC CXX LD LDFLAGS NM OBJCOPY OBJDUMP RANLIB READELF RUSTFLAGS STRIP - cat ${COOKBOOK_RECIPE}/config.toml > config.toml sed -i "s|COOKBOOK_SYSROOT|${COOKBOOK_SYSROOT}|g" config.toml 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 + python3 "${COOKBOOK_SOURCE}/x.py" install \ --config config.toml \ --jobs ${COOKBOOK_MAKE_JOBS} diff --git a/rust b/rust deleted file mode 160000 index 17efb220e..000000000 --- a/rust +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 17efb220ec74a1bb36dfcc266ab86b3761e406b5 From ef40c7e3e0fd6f876926c65ca544b28684ff3ac8 Mon Sep 17 00:00:00 2001 From: Wildan M Date: Wed, 11 Feb 2026 19:26:38 +0700 Subject: [PATCH 2/9] Adapt libtool, skip building it --- mk/prefix.mk | 92 ++++++++++++++++++++++++++++------------------------ 1 file changed, 49 insertions(+), 43 deletions(-) diff --git a/mk/prefix.mk b/mk/prefix.mk index 269d2a1f4..6ae12995f 100644 --- a/mk/prefix.mk +++ b/mk/prefix.mk @@ -59,7 +59,54 @@ $(PREFIX)/relibc-install.tar.gz: $(PREFIX)/relibc-install --directory="$<" \ . -# TODO: move this behind PREFIX_BINARY=0 when compiled prefix has it + +$(PREFIX)/sysroot: $(PREFIX)/relibc-install $(CONTAINER_TAG) +ifeq ($(PODMAN_BUILD),1) + $(PODMAN_RUN) make $@ +else + rm -rf "$@" + cp -r "$(PREFIX)/relibc-install/" "$@" +# adapt path for libtoolize + sed 's|/usr/share|$(ROOT)/$@/share|g' "$@/bin/libtoolize.orig" > "$@/bin/libtoolize" + chmod 0755 "$@/bin/libtoolize" + touch "$@" +endif + +# PREFIX_BINARY --------------------------------------------------- +ifeq ($(PREFIX_BINARY),1) + +$(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)/gcc-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)/gcc-install.tar.gz" + 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 + +else + +# BUILD GCC --------------------------------------------------- $(PREFIX)/libtool-install: | $(FSTOOLS_TAG) $(CONTAINER_TAG) ifeq ($(PODMAN_BUILD),1) $(PODMAN_RUN) make $@ @@ -78,46 +125,6 @@ else mv "$@.partial" "$@" endif -$(PREFIX)/sysroot: $(PREFIX)/relibc-install $(PREFIX)/libtool-install $(CONTAINER_TAG) -ifeq ($(PODMAN_BUILD),1) - $(PODMAN_RUN) make $@ -else - rm -rf "$@" - cp -r "$(PREFIX)/relibc-install/" "$@" - cp -r "$(PREFIX)/libtool-install/". "$@" -# adapt path for libtoolize - sed 's|/usr/share|$(ROOT)/$@/share|g' "$@/bin/libtoolize.orig" > "$@/bin/libtoolize" - chmod 0755 "$@/bin/libtoolize" - touch "$@" -endif - -# PREFIX_BINARY --------------------------------------------------- -ifeq ($(PREFIX_BINARY),1) - -$(PREFIX)/rust-install.tar.gz: | $(CONTAINER_TAG) -ifeq ($(PODMAN_BUILD),1) - $(PODMAN_RUN) make $@ -else - mkdir -p "$(@D)" - #TODO: figure out why rust-install.tar.gz is missing /lib/rustlib/$(HOST_TARGET)/lib - wget -O $@.partial "https://static.redox-os.org/toolchain/$(HOST_TARGET)/$(TARGET)/relibc-install.tar.gz" - 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 - -else - -# BUILD GCC --------------------------------------------------- $(PREFIX)/binutils-install: | $(PREFIX)/libtool-install $(FSTOOLS_TAG) $(CONTAINER_TAG) ifeq ($(PODMAN_BUILD),1) $(PODMAN_RUN) make $@ @@ -283,14 +290,13 @@ else mv $@.partial $@ endif -$(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 +$(PREFIX)/rust-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 ifeq ($(PODMAN_BUILD),1) $(PODMAN_RUN) make $@ else @echo "\033[1;36;49mBuilding rust-install\033[0m" rm -rf "$@.partial" "$@" mkdir -p "$@.partial" - 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 From bc353596204cd247b322f878c86c5cd5a669a92b Mon Sep 17 00:00:00 2001 From: Wildan M Date: Wed, 11 Feb 2026 19:49:53 +0700 Subject: [PATCH 3/9] Fix gcc-install at prefix --- mk/prefix.mk | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/mk/prefix.mk b/mk/prefix.mk index 6ae12995f..8d2bd8da2 100644 --- a/mk/prefix.mk +++ b/mk/prefix.mk @@ -93,6 +93,17 @@ 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 $@ From d7f6a2673cceaa554d0d1a26b53e0dbc7f146a99 Mon Sep 17 00:00:00 2001 From: Wildan M Date: Wed, 11 Feb 2026 19:50:15 +0700 Subject: [PATCH 4/9] Trees doesn't need prefix --- mk/repo.mk | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mk/repo.mk b/mk/repo.mk index 1e45dfe84..8c9b6a727 100644 --- a/mk/repo.mk +++ b/mk/repo.mk @@ -86,7 +86,7 @@ else endif # Show what to cook -rt.%: prefix $(FSTOOLS_TAG) FORCE +rt.%: $(FSTOOLS_TAG) FORCE ifeq ($(PODMAN_BUILD),1) $(PODMAN_RUN) make $@ else @@ -122,7 +122,7 @@ pp.%: $(FSTOOLS_TAG) FORCE $(MAKE) p.$*,--with-package-deps # Show what to push -pt.%: prefix $(FSTOOLS_TAG) FORCE +pt.%: $(FSTOOLS_TAG) FORCE ifeq ($(PODMAN_BUILD),1) $(PODMAN_RUN) make $@ else From 4ce24cee73f4ad39f65df637c680009f340a7a92 Mon Sep 17 00:00:00 2001 From: Wildan M Date: Wed, 11 Feb 2026 23:37:53 +0700 Subject: [PATCH 5/9] Few changes on relibc --- mk/prefix.mk | 9 +++++---- recipes/dev/llvm21/recipe.toml | 2 -- recipes/dev/rust/recipe.toml | 2 +- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/mk/prefix.mk b/mk/prefix.mk index 8d2bd8da2..ca30dc94c 100644 --- a/mk/prefix.mk +++ b/mk/prefix.mk @@ -39,10 +39,11 @@ ifeq ($(PODMAN_BUILD),1) else @echo "\033[1;36;49mBuilding relibc-install\033[0m" rm -rf "$@.partial" "$@" - cp -r "$(PREFIX)/rust-install" "$@.partial" - rm -rf "$@.partial/$(TARGET)/include/"* - cp -r "$(PREFIX)/rust-install/$(GNU_TARGET)/include/c++" "$@.partial/$(GNU_TARGET)/include/c++" - cp -r "$(PREFIX)/rust-install/lib/rustlib/$(HOST_TARGET)/lib/" "$@.partial/lib/rustlib/$(HOST_TARGET)/" + mkdir "$@.partial" + cp -r "$(PREFIX)/gcc-install/". "$@.partial" + cp -r "$(PREFIX)/rust-install/". "$@.partial" + rm -rf "$@.partial/$(GNU_TARGET)/include/"* + cp -r "$(PREFIX)/gcc-install/$(GNU_TARGET)/include/c++" "$@.partial/$(GNU_TARGET)/include/c++" export PATH="$(ROOT)/$@.partial/bin:$$PATH" && \ export CARGO="env -u CARGO cargo" $(PREFIX_CONFIG) && \ ./target/release/repo cook relibc diff --git a/recipes/dev/llvm21/recipe.toml b/recipes/dev/llvm21/recipe.toml index 318719ea6..6b87a1b42 100644 --- a/recipes/dev/llvm21/recipe.toml +++ b/recipes/dev/llvm21/recipe.toml @@ -59,8 +59,6 @@ COOKBOOK_CMAKE_FLAGS+=( -DUNIX=1 ) -# Native tablegen build fails with too many jobs, limit to 16 -COOKBOOK_MAKE_JOBS="$(( ${COOKBOOK_MAKE_JOBS} > 16 ? 16 : ${COOKBOOK_MAKE_JOBS} ))" COOKBOOK_SOURCE="$COOKBOOK_SOURCE/llvm" cookbook_cmake """ diff --git a/recipes/dev/rust/recipe.toml b/recipes/dev/rust/recipe.toml index 4f8038843..254daddbc 100644 --- a/recipes/dev/rust/recipe.toml +++ b/recipes/dev/rust/recipe.toml @@ -9,7 +9,7 @@ dependencies = [ "llvm21", "zlib", "curl", - "openssl1", + "openssl3", ] dev-dependencies = [ "llvm21.dev", From 83a7659262e6a7142cce2d03972fffd0fdb32ee4 Mon Sep 17 00:00:00 2001 From: Wildan M Date: Thu, 12 Feb 2026 12:17:06 +0700 Subject: [PATCH 6/9] 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 ca30dc94c..1ad64072b 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 b10895eb9..08aa9408e 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 254daddbc..16e406ebe 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]] From cf8a4de59b0b0bd91f38e4402feb54d722620d21 Mon Sep 17 00:00:00 2001 From: Wildan M Date: Thu, 12 Feb 2026 12:40:02 +0700 Subject: [PATCH 7/9] Add notes for developing rust std --- mk/prefix.mk | 3 +++ 1 file changed, 3 insertions(+) diff --git a/mk/prefix.mk b/mk/prefix.mk index 1ad64072b..b0c81d857 100644 --- a/mk/prefix.mk +++ b/mk/prefix.mk @@ -337,6 +337,9 @@ else cp -r "$(RUST_TARGET)/stage/usr/". "$@.partial" cp -r "$(LLVM_TARGET)/stage/usr/". "$@.partial" mv "$@.partial" "$@" +# TODO: Cache from RUST_TARGET and LLVM_TARGET is currently not cleared. +# 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 endif From 2b2865d882be5d9b765b2b57e6122a7be39f8a4c Mon Sep 17 00:00:00 2001 From: Wildan M Date: Thu, 12 Feb 2026 14:43:42 +0700 Subject: [PATCH 8/9] Apply mno-outline-atomics for aarch64 --- Cargo.lock | 4 ++-- recipes/web/netsurf/recipe.toml | 2 +- src/cook/script.rs | 16 ++++++++++------ 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 3bea31f74..9b1d895bf 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -985,8 +985,8 @@ dependencies = [ [[package]] name = "redoxer" -version = "0.2.61" -source = "git+https://gitlab.redox-os.org/redox-os/redoxer.git#4cbd0fce38d19427c8619dd67f1d94f899100683" +version = "0.2.62" +source = "git+https://gitlab.redox-os.org/redox-os/redoxer.git#3a5882bf173f72a9d4e679679919e24e4f103c6f" dependencies = [ "anyhow", "dirs", diff --git a/recipes/web/netsurf/recipe.toml b/recipes/web/netsurf/recipe.toml index afadba994..153963e76 100644 --- a/recipes/web/netsurf/recipe.toml +++ b/recipes/web/netsurf/recipe.toml @@ -33,7 +33,7 @@ rsync -av --delete "${COOKBOOK_SOURCE}/" ./ COOKBOOK_MAKE_JOBS="$(( ${COOKBOOK_MAKE_JOBS} > 8 ? 8 : ${COOKBOOK_MAKE_JOBS} ))" export TARGET="framebuffer" -export CFLAGS="${CFLAGS} -I${PWD}/inst-${TARGET}/include" +export CFLAGS="${CFLAGS} ${CPPFLAGS} -I${PWD}/inst-${TARGET}/include" export LDFLAGS="${LDFLAGS} -L${COOKBOOK_SYSROOT}/lib -L${PWD}/inst-${TARGET}/lib -Wl,--allow-multiple-definition -Wl,-rpath-link,${COOKBOOK_SYSROOT}/lib" # nghttp2 is not linked for some reason export LDFLAGS="${LDFLAGS} -lcurl -lnghttp2" diff --git a/src/cook/script.rs b/src/cook/script.rs index 66ffbf962..9cf21e9d3 100644 --- a/src/cook/script.rs +++ b/src/cook/script.rs @@ -94,8 +94,7 @@ export CARGO_TARGET_DIR="${COOKBOOK_BUILD}/target" # This adds the sysroot includes for most C compilation #TODO: check paths for spaces! -export CFLAGS="-I${COOKBOOK_SYSROOT}/include" -export CPPFLAGS="-I${COOKBOOK_SYSROOT}/include" +export CPPFLAGS="$CPPFLAGS -I${COOKBOOK_SYSROOT}/include" # This adds the sysroot libraries and compiles binaries statically for most C compilation #TODO: check paths for spaces! @@ -121,7 +120,6 @@ then install_flags=--debug build_flags= build_type=debug - export CFLAGS="${CFLAGS} -g" export CPPFLAGS="${CPPFLAGS} -g" fi @@ -229,6 +227,12 @@ set(CMAKE_SYSTEM_NAME ${SYSTEM_NAME}) set(CMAKE_SYSTEM_PROCESSOR ${arch}) EOF + if [ "$target" = "$TARGET" ] + then + echo "set(CMAKE_C_FLAGS \"${CFLAGS} ${CPPFLAGS}\")" >> $file + echo "set(CMAKE_CXX_FLAGS \"${CFLAGS} ${CPPFLAGS}\")" >> $file + fi + if [ -n "${CC_WRAPPER}" ] then echo "set(CMAKE_C_COMPILER_LAUNCHER ${CC_WRAPPER})" >> $file @@ -291,9 +295,9 @@ function cookbook_meson { echo "[properties]" >> cross_file.txt echo "needs_exe_wrapper = true" >> cross_file.txt echo "sys_root = '${COOKBOOK_SYSROOT}'" >> cross_file.txt - echo "c_args = [$(printf "'%s', " $CFLAGS | sed 's/, $//')]" >> cross_file.txt - echo "cpp_args = [$(printf "'%s', " $CPPFLAGS | sed 's/, $//')]" >> cross_file.txt - echo "c_link_args = [$(printf "'%s', " $LDFLAGS | sed 's/, $//')]" >> cross_file.txt + echo "c_args = [$(printf "'%s', " "$CFLAGS $CPPFLAGS" | sed 's/, $//')]" >> cross_file.txt + echo "cpp_args = [$(printf "'%s', " "$CXXFLAGS $CPPFLAGS" | sed 's/, $//')]" >> cross_file.txt + echo "c_link_args = [$(printf "'%s', " "$LDFLAGS" | sed 's/, $//')]" >> cross_file.txt unset AR unset AS From 5b699a4b5c2715b0c1320c79a74cc8d79883b2d5 Mon Sep 17 00:00:00 2001 From: Wildan M Date: Thu, 12 Feb 2026 15:00:16 +0700 Subject: [PATCH 9/9] Export FIND --- mk/config.mk | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/mk/config.mk b/mk/config.mk index a1a72a31b..9d0373ca4 100644 --- a/mk/config.mk +++ b/mk/config.mk @@ -56,6 +56,7 @@ CONTAINERFILE?=podman/redox-base-containerfile # Per host variables NPROC=nproc SED=sed +FIND=find ifneq ($(PODMAN_BUILD),1) FSTOOLS_IN_PODMAN=0 @@ -106,9 +107,11 @@ ifeq ($(UNAME),Darwin) FUMOUNT=umount NPROC=sysctl -n hw.ncpu SED=gsed + FIND=gfind VB_AUDIO=coreaudio VBM=/Applications/VirtualBox.app/Contents/MacOS/VBoxManage else ifeq ($(UNAME),FreeBSD) + FIND=gfind FUMOUNT=sudo umount VB_AUDIO=pulse # To check, will probably be OSS on most setups VBM=VBoxManage @@ -172,7 +175,7 @@ endif REPO_TAG=$(BUILD)/repo.tag FSTOOLS_TAG=build/fstools.tag -export BOARD +export BOARD FIND ifeq ($(SCCACHE_BUILD),1) export CC_WRAPPER:=sccache