Boostrap rust from cookbook

This commit is contained in:
Wildan M 2026-02-07 16:10:33 +07:00
parent a8dc242f47
commit 8590ec042a
No known key found for this signature in database
GPG Key ID: 01AC53185C679C79
8 changed files with 61 additions and 52 deletions

5
.gitmodules vendored
View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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"

View File

@ -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}

1
rust

@ -1 +0,0 @@
Subproject commit 17efb220ec74a1bb36dfcc266ab86b3761e406b5