Riscv64gc support in the build scripts
This architecture is different from x86/aarch because its rust triplet (riscv64gc-...) differs from gcc/llvm/binutils triplet (more general riscv64-...). Therefore the build scripts have to bridge that mismatch. This introduces new build-time environment variable GNU_TARGET which corresponds to a target used by C world utilities whereas existing TARGET now describes rust target.
This commit is contained in:
parent
b1821fd8ea
commit
03633046cc
1 changed files with 139 additions and 49 deletions
55
mk/prefix.mk
55
mk/prefix.mk
|
|
@ -5,7 +5,7 @@ PREFIX=prefix/$(TARGET)
|
|||
PREFIX_INSTALL=$(PREFIX)/relibc-install
|
||||
PREFIX_PATH=$(ROOT)/$(PREFIX_INSTALL)/bin
|
||||
|
||||
BINUTILS_BRANCH=redox-2.41
|
||||
BINUTILS_BRANCH=redox-2.43.1
|
||||
GCC_BRANCH=redox-13.2.0
|
||||
|
||||
export PREFIX_RUSTFLAGS=-L $(ROOT)/$(PREFIX_INSTALL)/$(TARGET)/lib
|
||||
|
|
@ -15,11 +15,17 @@ export REDOXER_TOOLCHAIN=$(RUSTUP_TOOLCHAIN)
|
|||
export CC=
|
||||
export CXX=
|
||||
|
||||
ifeq ($(TARGET),riscv64gc-unknown-redox)
|
||||
GCC_ARCH?=--with-arch=rv64gc --with-abi=lp64d
|
||||
else
|
||||
GCC_ARCH?=
|
||||
endif
|
||||
|
||||
prefix: $(PREFIX_INSTALL)
|
||||
|
||||
PREFIX_STRIP=\
|
||||
mkdir -p bin libexec "$(TARGET)/bin" && \
|
||||
find bin libexec "$(TARGET)/bin" "$(TARGET)/lib" \
|
||||
mkdir -p bin libexec "$(GCC_TARGET)/bin" && \
|
||||
find bin libexec "$(GCC_TARGET)/bin" "$(GCC_TARGET)/lib" \
|
||||
-type f \
|
||||
-exec strip --strip-unneeded {} ';' \
|
||||
2> /dev/null
|
||||
|
|
@ -38,14 +44,14 @@ else
|
|||
rm -rf "$@.partial" "$@"
|
||||
cp -r "$(PREFIX)/rust-install" "$@.partial"
|
||||
rm -rf "$@.partial/$(TARGET)/include/"*
|
||||
cp -r "$(PREFIX)/rust-install/$(TARGET)/include/c++" "$@.partial/$(TARGET)/include/c++"
|
||||
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)/"
|
||||
cd "$<" && \
|
||||
export PATH="$(ROOT)/$@.partial/bin:$$PATH" && \
|
||||
export CARGO="env -u CARGO cargo" && \
|
||||
$(MAKE) clean && \
|
||||
$(MAKE) -j `$(NPROC)` all && \
|
||||
$(MAKE) -j `$(NPROC)` install DESTDIR="$(ROOT)/$@.partial/$(TARGET)"
|
||||
$(MAKE) -j `$(NPROC)` install DESTDIR="$(ROOT)/$@.partial/$(GNU_TARGET)"
|
||||
cd "$@.partial" && $(PREFIX_STRIP)
|
||||
touch "$@.partial"
|
||||
mv "$@.partial" "$@"
|
||||
|
|
@ -76,7 +82,7 @@ $(PREFIX)/rust-install: $(PREFIX)/rust-install.tar.gz
|
|||
|
||||
else
|
||||
|
||||
$(ROOT)/rust:
|
||||
$(ROOT)/rust/configure:
|
||||
git submodule update --init --recursive --checkout rust
|
||||
|
||||
PREFIX_BASE_INSTALL=$(PREFIX)/rust-freestanding-install
|
||||
|
|
@ -106,8 +112,9 @@ else
|
|||
mkdir -p "$<-build" "$@.partial"
|
||||
cd "$<-build" && \
|
||||
"$(ROOT)/$</configure" \
|
||||
--target="$(TARGET)" \
|
||||
--program-prefix="$(TARGET)-" \
|
||||
--target="$(GNU_TARGET)" \
|
||||
$(GCC_ARCH) \
|
||||
--program-prefix="$(GNU_TARGET)-" \
|
||||
--prefix="" \
|
||||
--disable-werror \
|
||||
&& \
|
||||
|
|
@ -142,8 +149,9 @@ else
|
|||
cd "$<-freestanding-build" && \
|
||||
export PATH="$(ROOT)/$@.partial/bin:$$PATH" && \
|
||||
"$(ROOT)/$</configure" \
|
||||
--target="$(TARGET)" \
|
||||
--program-prefix="$(TARGET)-" \
|
||||
--target="$(GNU_TARGET)" \
|
||||
$(GCC_ARCH) \
|
||||
--program-prefix="$(GNU_TARGET)-" \
|
||||
--prefix="" \
|
||||
--disable-nls \
|
||||
--enable-languages=c,c++ \
|
||||
|
|
@ -157,7 +165,7 @@ else
|
|||
mv "$@.partial" "$@"
|
||||
endif
|
||||
|
||||
$(PREFIX)/rust-freestanding-install: $(ROOT)/rust | $(PREFIX)/binutils-install $(CONTAINER_TAG)
|
||||
$(PREFIX)/rust-freestanding-install: $(ROOT)/rust/configure | $(PREFIX)/binutils-install $(CONTAINER_TAG)
|
||||
ifeq ($(PODMAN_BUILD),1)
|
||||
$(PODMAN_RUN) $(MAKE) $@
|
||||
else
|
||||
|
|
@ -166,7 +174,7 @@ else
|
|||
cp -r "$(PREFIX)/binutils-install" "$@.partial"
|
||||
cd "$(PREFIX)/rust-freestanding-build" && \
|
||||
export PATH="$(ROOT)/$@.partial/bin:$$PATH" && \
|
||||
"$</configure" \
|
||||
"$<" \
|
||||
--prefix="/" \
|
||||
--disable-docs \
|
||||
--disable-download-ci-llvm \
|
||||
|
|
@ -174,7 +182,7 @@ else
|
|||
--enable-extended \
|
||||
--enable-lld \
|
||||
--enable-llvm-static-stdcpp \
|
||||
--set 'llvm.targets=AArch64;X86' \
|
||||
--set 'llvm.targets=AArch64;X86;RISCV' \
|
||||
--set 'llvm.experimental-targets=' \
|
||||
--tools=cargo,src \
|
||||
&& \
|
||||
|
|
@ -205,10 +213,10 @@ else
|
|||
cd "$<" && \
|
||||
export PATH="$(PREFIX_BASE_PATH):$(PREFIX_FREESTANDING_PATH):$$PATH" && \
|
||||
export CARGO="env -u CARGO -u RUSTUP_TOOLCHAIN cargo" && \
|
||||
export CC_$(subst -,_,$(TARGET))="$(TARGET)-gcc -isystem $(ROOT)/$@.partial/$(TARGET)/include" && \
|
||||
export CC_$(subst -,_,$(TARGET))="$(GNU_TARGET)-gcc -isystem $(ROOT)/$@.partial/$(GNU_TARGET)/include" && \
|
||||
$(MAKE) clean && \
|
||||
$(MAKE) -j `$(NPROC)` all && \
|
||||
$(MAKE) -j `$(NPROC)` install DESTDIR="$(ROOT)/$@.partial/$(TARGET)"
|
||||
$(MAKE) -j `$(NPROC)` install DESTDIR="$(ROOT)/$@.partial/$(GNU_TARGET)"
|
||||
cd "$@.partial" && $(PREFIX_STRIP)
|
||||
touch "$@.partial"
|
||||
mv "$@.partial" "$@"
|
||||
|
|
@ -224,11 +232,12 @@ else
|
|||
cd "$<-build" && \
|
||||
export PATH="$(ROOT)/$@.partial/bin:$$PATH" && \
|
||||
"$(ROOT)/$</configure" \
|
||||
--target="$(TARGET)" \
|
||||
--program-prefix="$(TARGET)-" \
|
||||
--target="$(GNU_TARGET)" \
|
||||
$(GCC_ARCH) \
|
||||
--program-prefix="$(GNU_TARGET)-" \
|
||||
--prefix="" \
|
||||
--with-sysroot \
|
||||
--with-build-sysroot="$(ROOT)/$(PREFIX)/relibc-freestanding-install/$(TARGET)" \
|
||||
--with-build-sysroot="$(ROOT)/$(PREFIX)/relibc-freestanding-install/$(GNU_TARGET)" \
|
||||
--with-native-system-header-dir="/include" \
|
||||
--disable-multilib \
|
||||
--disable-nls \
|
||||
|
|
@ -238,8 +247,8 @@ else
|
|||
--enable-threads=posix \
|
||||
&& \
|
||||
$(MAKE) -j `$(NPROC)` all-gcc all-target-libgcc all-target-libstdc++-v3 && \
|
||||
$(MAKE) -j `$(NPROC)` install-gcc install-target-libgcc install-target-libstdc++-v3 DESTDIR="$(ROOT)/$@.partial" && \
|
||||
rm $(ROOT)/$@.partial/$(TARGET)/lib/*.la
|
||||
$(MAKE) -j `$(NPROC)` install-gcc install-target-libgcc install-target-libstdc++-v3 DESTDIR="$(ROOT)/$@.partial"
|
||||
rm $(ROOT)/$@.partial/$(GNU_TARGET)/lib/*.la
|
||||
rm -rf "$<-build"
|
||||
cd "$@.partial" && $(PREFIX_STRIP)
|
||||
touch "$@.partial"
|
||||
|
|
@ -254,17 +263,17 @@ $(PREFIX)/gcc-install.tar.gz: $(PREFIX)/gcc-install
|
|||
--directory="$<" \
|
||||
.
|
||||
|
||||
$(PREFIX)/rust-install: $(ROOT)/rust | $(PREFIX)/gcc-install $(PREFIX)/relibc-freestanding-install $(CONTAINER_TAG)
|
||||
$(PREFIX)/rust-install: $(ROOT)/rust/configure | $(PREFIX)/gcc-install $(PREFIX)/relibc-freestanding-install $(CONTAINER_TAG)
|
||||
ifeq ($(PODMAN_BUILD),1)
|
||||
$(PODMAN_RUN) $(MAKE) $@
|
||||
else
|
||||
rm -rf "$(PREFIX)/rust-build" "$@.partial" "$@"
|
||||
mkdir -p "$(PREFIX)/rust-build"
|
||||
cp -r "$(PREFIX)/gcc-install" "$@.partial"
|
||||
cp -r "$(PREFIX)/relibc-freestanding-install/$(TARGET)" "$@.partial"
|
||||
cp -r "$(PREFIX)/relibc-freestanding-install/$(GNU_TARGET)" "$@.partial"
|
||||
cd "$(PREFIX)/rust-build" && \
|
||||
export PATH="$(ROOT)/$@.partial/bin:$$PATH" && \
|
||||
"$</configure" \
|
||||
"$<" \
|
||||
--prefix="/" \
|
||||
--disable-docs \
|
||||
--disable-download-ci-llvm \
|
||||
|
|
|
|||
Loading…
Reference in a new issue