redox/mk/prefix.mk

328 lines
9.6 KiB
Makefile
Raw Permalink Normal View History

# Configuration file for the Rust/GCC cross-compilers, relibc and libtool
PREFIX=prefix/$(TARGET)
2018-08-17 04:30:54 +02:00
PREFIX_INSTALL=$(PREFIX)/sysroot/
PREFIX_PATH=$(ROOT)/$(PREFIX_INSTALL)/bin
BINUTILS_BRANCH=redox-2.43.1
2023-09-08 21:23:41 +02:00
GCC_BRANCH=redox-13.2.0
LIBTOOL_VERSION=2.5.4
2023-09-08 21:23:41 +02:00
2019-04-20 05:24:21 +02:00
export PREFIX_RUSTFLAGS=-L $(ROOT)/$(PREFIX_INSTALL)/$(TARGET)/lib
export RUSTUP_TOOLCHAIN=$(ROOT)/$(PREFIX_INSTALL)
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
# TODO(andypython): Upstream libtool patches to remove the need to locally build libtool.
# Cannot be CI built, i.e. be a part of relibc-install.tar.gz, as the prefix has to be correctly
# set while building. Otherwise aclocal will not be able to find libtool's files. Furthermore, doing
# so would break non-podman builds (not sure if they are still supported though).
prefix: $(PREFIX)/sysroot
2018-08-17 04:30:54 +02:00
PREFIX_STRIP=\
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
$(PREFIX)/relibc: $(ROOT)/relibc
2023-12-13 20:10:42 +01:00
mkdir -p "$(@D)"
rm -rf "$@.partial" "$@"
cp -r "$^" "$@.partial"
touch "$@.partial"
mv "$@.partial" "$@"
$(PREFIX)/relibc-install: $(PREFIX)/relibc | $(PREFIX)/rust-install $(CONTAINER_TAG)
2022-11-12 00:23:08 +01:00
ifeq ($(PODMAN_BUILD),1)
$(PODMAN_RUN) $(MAKE) $@
else
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)/"
cd "$<" && \
export PATH="$(ROOT)/$@.partial/bin:$$PATH" && \
export CARGO="env -u CARGO cargo" && \
2023-09-11 20:44:10 +02:00
$(MAKE) clean && \
2020-05-03 02:13:21 +02:00
$(MAKE) -j `$(NPROC)` all && \
$(MAKE) -j `$(NPROC)` install DESTDIR="$(ROOT)/$@.partial/$(GNU_TARGET)"
cd "$@.partial" && $(PREFIX_STRIP)
touch "$@.partial"
mv "$@.partial" "$@"
2022-11-12 00:23:08 +01:00
endif
2019-03-17 03:01:34 +01:00
$(PREFIX)/relibc-install.tar.gz: $(PREFIX)/relibc-install
tar \
--create \
--gzip \
--file "$@" \
--directory="$<" \
.
$(PREFIX)/libtool:
rm -rf "$@.partial" "$@"
mkdir -p "$@.partial"
git clone \
--recurse-submodules \
"https://gitlab.redox-os.org/andypython/libtool/" \
--branch "v$(LIBTOOL_VERSION)-redox" \
--depth 2 \
"$@.partial"
touch "$@.partial"
mv "$@.partial" "$@"
$(PREFIX)/libtool-build: $(PREFIX)/libtool $(CONTAINER_TAG)
ifeq ($(PODMAN_BUILD),1)
$(PODMAN_RUN) $(MAKE) $@
else
mkdir -p "$@.partial"
cd "$<" && \
./bootstrap \
--skip-po \
--force \
--gnulib-srcdir=./gnulib
cd "$@.partial" && \
cp -rp $(abspath $<)/. ./ && \
"$(ROOT)/$</configure" \
--target="$(TARGET)" \
--prefix=$(abspath $(PREFIX)/sysroot) && \
$(MAKE) -j `$(NPROC)`
touch "$@.partial"
mv "$@.partial" "$@"
endif
$(PREFIX)/sysroot: $(PREFIX)/relibc-install $(PREFIX)/libtool-build $(CONTAINER_TAG)
ifeq ($(PODMAN_BUILD),1)
$(PODMAN_RUN) $(MAKE) $@
else
cp -r "$(PREFIX)/relibc-install/" "$@"
touch "$@"
cd "$(PREFIX)/libtool-build" && \
$(MAKE) install -j `$(NPROC)`
cd "$@" && $(PREFIX_STRIP)
endif
ifeq ($(PREFIX_BINARY),1)
$(PREFIX)/rust-install.tar.gz:
mkdir -p "$(@D)"
2021-06-18 21:54:40 +02:00
#TODO: figure out why rust-install.tar.gz is missing /lib/rustlib/$(HOST_TARGET)/lib
wget -O $@.partial "https://static.redox-os.org/toolchain/$(TARGET)/relibc-install.tar.gz"
mv $@.partial $@
$(PREFIX)/rust-install: $(PREFIX)/rust-install.tar.gz
rm -rf "$@.partial" "$@"
mkdir -p "$@.partial"
tar --extract --file "$<" --directory "$@.partial" --strip-components=1
touch "$@.partial"
mv "$@.partial" "$@"
else
$(ROOT)/rust/configure:
git submodule update --progress --init --recursive --checkout rust
PREFIX_FREESTANDING_INSTALL=$(PREFIX)/gcc-freestanding-install
PREFIX_FREESTANDING_PATH=$(ROOT)/$(PREFIX_FREESTANDING_INSTALL)/bin
2023-09-08 21:23:41 +02:00
$(PREFIX)/binutils-$(BINUTILS_BRANCH).tar.bz2:
2018-08-17 04:30:54 +02:00
mkdir -p "$(@D)"
2023-09-08 21:23:41 +02:00
rm -fv $(PREFIX)/binutils*.tar.bz2*
wget -O $@.partial "https://gitlab.redox-os.org/redox-os/binutils-gdb/-/archive/$(BINUTILS_BRANCH)/binutils-gdb-$(BINUTILS_BRANCH).tar.bz2"
2018-08-17 04:30:54 +02:00
mv $@.partial $@
2023-09-08 22:18:17 +02:00
$(PREFIX)/binutils: $(PREFIX)/binutils-$(BINUTILS_BRANCH).tar.bz2
rm -rf "$@.partial" "$@"
2018-08-17 04:30:54 +02:00
mkdir -p "$@.partial"
tar --extract --file "$<" --directory "$@.partial" --strip-components=1
touch "$@.partial"
2018-08-17 04:30:54 +02:00
mv "$@.partial" "$@"
2022-11-12 00:23:08 +01:00
$(PREFIX)/binutils-install: $(PREFIX)/binutils $(CONTAINER_TAG)
ifeq ($(PODMAN_BUILD),1)
$(PODMAN_RUN) $(MAKE) $@
else
rm -rf "$<-build" "$@.partial" "$@"
mkdir -p "$<-build" "$@.partial"
2018-08-17 04:30:54 +02:00
cd "$<-build" && \
"$(ROOT)/$</configure" \
--target="$(GNU_TARGET)" \
$(GCC_ARCH) \
--program-prefix="$(GNU_TARGET)-" \
--prefix="" \
--disable-werror \
--enable-default-hash-style=gnu \
&& \
2020-05-03 02:13:21 +02:00
$(MAKE) -j `$(NPROC)` all && \
$(MAKE) -j `$(NPROC)` install DESTDIR="$(ROOT)/$@.partial"
2019-03-17 04:20:02 +01:00
rm -rf "$<-build"
cd "$@.partial" && $(PREFIX_STRIP)
touch "$@.partial"
mv "$@.partial" "$@"
2022-11-12 00:23:08 +01:00
endif
2018-08-17 04:30:54 +02:00
2023-09-08 21:23:41 +02:00
$(PREFIX)/gcc-$(GCC_BRANCH).tar.bz2:
2018-08-17 04:30:54 +02:00
mkdir -p "$(@D)"
2023-09-08 21:23:41 +02:00
rm -fv $(PREFIX)/gcc*.tar.bz2*
wget -O $@.partial "https://gitlab.redox-os.org/redox-os/gcc/-/archive/$(GCC_BRANCH)/gcc-$(GCC_BRANCH).tar.bz2"
2018-08-18 02:47:48 +02:00
mv "$@.partial" "$@"
2018-08-17 04:30:54 +02:00
2023-09-08 21:23:41 +02:00
$(PREFIX)/gcc: $(PREFIX)/gcc-$(GCC_BRANCH).tar.bz2
2018-08-17 04:30:54 +02:00
mkdir -p "$@.partial"
tar --extract --file "$<" --directory "$@.partial" --strip-components=1
cd "$@.partial" && ./contrib/download_prerequisites
touch "$@.partial"
2018-08-17 04:30:54 +02:00
mv "$@.partial" "$@"
2022-11-12 00:23:08 +01:00
$(PREFIX)/gcc-freestanding-install: $(PREFIX)/gcc | $(PREFIX)/binutils-install $(CONTAINER_TAG)
ifeq ($(PODMAN_BUILD),1)
$(PODMAN_RUN) $(MAKE) $@
else
rm -rf "$<-freestanding-build" "$@.partial" "$@"
2018-11-28 03:45:52 +01:00
mkdir -p "$<-freestanding-build"
cp -r "$(PREFIX)/binutils-install" "$@.partial"
2018-08-17 04:30:54 +02:00
cd "$<-freestanding-build" && \
export PATH="$(ROOT)/$@.partial/bin:$$PATH" && \
"$(ROOT)/$</configure" \
--target="$(GNU_TARGET)" \
$(GCC_ARCH) \
--program-prefix="$(GNU_TARGET)-" \
--prefix="" \
--disable-nls \
--disable-shared \
--enable-languages=c,c++ \
--without-headers \
--with-linker-hash-style=gnu \
&& \
$(MAKE) -j `$(NPROC)` all-gcc all-target-libgcc && \
$(MAKE) -j `$(NPROC)` install-gcc install-target-libgcc DESTDIR="$(ROOT)/$@.partial"
2019-03-17 04:20:02 +01:00
rm -rf "$<-freestanding-build"
cd "$@.partial" && $(PREFIX_STRIP)
touch "$@.partial"
mv "$@.partial" "$@"
2022-11-12 00:23:08 +01:00
endif
2018-08-17 04:30:54 +02:00
$(PREFIX)/relibc-freestanding: $(ROOT)/relibc
mkdir -p "$(@D)"
rm -rf "$@.partial" "$@"
cp -r "$^" "$@.partial"
touch "$@.partial"
mv "$@.partial" "$@"
2025-01-14 20:28:58 +01:00
$(PREFIX)/relibc-freestanding-install: $(PREFIX)/relibc-freestanding | $(PREFIX_FREESTANDING_INSTALL) $(CONTAINER_TAG)
2022-11-12 00:23:08 +01:00
ifeq ($(PODMAN_BUILD),1)
$(PODMAN_RUN) $(MAKE) $@
else
rm -rf "$@.partial" "$@"
mkdir -p "$@.partial"
cd "$<" && \
2025-01-14 20:28:58 +01:00
export PATH="$(PREFIX_FREESTANDING_PATH):$$PATH" && \
export CARGO="env -u CARGO -u RUSTUP_TOOLCHAIN cargo" && \
export CC_$(subst -,_,$(TARGET))="$(GNU_TARGET)-gcc -isystem $(ROOT)/$@.partial/$(GNU_TARGET)/include" && \
2023-09-11 20:44:10 +02:00
$(MAKE) clean && \
2025-01-14 20:28:58 +01:00
$(MAKE) -j 1 all && \
$(MAKE) -j 1 install DESTDIR="$(ROOT)/$@.partial/$(GNU_TARGET)"
cd "$@.partial" && $(PREFIX_STRIP)
touch "$@.partial"
mv "$@.partial" "$@"
2022-11-12 00:23:08 +01:00
endif
2018-08-17 04:30:54 +02:00
2022-11-12 00:23:08 +01:00
$(PREFIX)/gcc-install: $(PREFIX)/gcc | $(PREFIX)/relibc-freestanding-install $(CONTAINER_TAG)
ifeq ($(PODMAN_BUILD),1)
$(PODMAN_RUN) $(MAKE) $@
else
rm -rf "$<-build" "$@.partial" "$@"
2018-11-28 03:45:52 +01:00
mkdir -p "$<-build"
2025-01-14 20:28:58 +01:00
cp -r "$(PREFIX)/binutils-install" "$@.partial"
2018-08-17 04:30:54 +02:00
cd "$<-build" && \
export PATH="$(ROOT)/$@.partial/bin:$$PATH" && \
"$(ROOT)/$</configure" \
--target="$(GNU_TARGET)" \
$(GCC_ARCH) \
--program-prefix="$(GNU_TARGET)-" \
--prefix="" \
--with-sysroot \
--with-build-sysroot="$(ROOT)/$(PREFIX)/relibc-freestanding-install/$(GNU_TARGET)" \
--with-native-system-header-dir="/include" \
2019-04-16 05:07:50 +02:00
--disable-multilib \
--disable-nls \
--disable-werror \
--enable-languages=c,c++ \
2019-04-11 04:49:09 +02:00
--enable-shared \
--enable-threads=posix \
--with-linker-hash-style=gnu \
&& \
2020-05-03 02:13:21 +02:00
$(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/$(GNU_TARGET)/lib/*.la
2019-03-17 04:20:02 +01:00
rm -rf "$<-build"
cd "$@.partial" && $(PREFIX_STRIP)
touch "$@.partial"
mv "$@.partial" "$@"
2022-11-12 00:23:08 +01:00
endif
$(PREFIX)/gcc-install.tar.gz: $(PREFIX)/gcc-install
tar \
--create \
--gzip \
--file "$@" \
--directory="$<" \
.
$(PREFIX)/rust-install: $(ROOT)/rust/configure | $(PREFIX)/gcc-install $(PREFIX)/relibc-freestanding-install $(CONTAINER_TAG)
2022-11-12 00:23:08 +01:00
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/$(GNU_TARGET)" "$@.partial"
cd "$(PREFIX)/rust-build" && \
export PATH="$(ROOT)/$@.partial/bin:$$PATH" && \
"$<" \
--prefix="/" \
--disable-docs \
2023-02-11 22:01:00 +01:00
--disable-download-ci-llvm \
--enable-cargo-native-static \
--enable-dist-src \
--enable-extended \
2022-08-17 01:09:46 +02:00
--enable-lld \
--enable-llvm-static-stdcpp \
2023-05-22 10:42:41 +02:00
--tools=cargo,src \
--target="$(HOST_TARGET),$(TARGET)" \
&& \
$(MAKE) -j `$(NPROC)` && \
2023-05-22 10:42:41 +02:00
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"
2022-07-26 15:38:01 +02:00
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"
mv "$@.partial" "$@"
2022-11-12 00:23:08 +01:00
endif
$(PREFIX)/rust-install.tar.gz: $(PREFIX)/rust-install
tar \
--create \
--gzip \
--file "$@" \
--directory="$<" \
.
endif