From 8590ec042a3689573be6a3bc8904a8b8848e9225 Mon Sep 17 00:00:00 2001 From: Wildan M Date: Sat, 7 Feb 2026 16:10:33 +0700 Subject: [PATCH] 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