mirror of
https://gitlab.redox-os.org/redox-os/redox.git
synced 2026-06-25 22:34:18 +08:00
Boostrap rust from cookbook
This commit is contained in:
parent
a8dc242f47
commit
8590ec042a
5
.gitmodules
vendored
5
.gitmodules
vendored
@ -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
|
||||
49
mk/prefix.mk
49
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
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
28
recipes/dev/rust/config-bootstrap.toml
Normal file
28
recipes/dev/rust/config-bootstrap.toml
Normal 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"
|
||||
@ -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
rust
@ -1 +0,0 @@
|
||||
Subproject commit 17efb220ec74a1bb36dfcc266ab86b3761e406b5
|
||||
Loading…
Reference in New Issue
Block a user