Significant changes to prefix in order to generate path agnostic toolchain. Addition of ci-toolchain target

This commit is contained in:
Jeremy Soller 2019-03-16 19:09:43 -06:00
parent 58217e3466
commit 7f9a82752d
No known key found for this signature in database
GPG key ID: E988B49EE78A7FB1
4 changed files with 99 additions and 46 deletions

View file

@ -69,7 +69,7 @@ ci-img: FORCE
build/harddrive-efi.bin.gz \ build/harddrive-efi.bin.gz \
build/livedisk-efi.iso.gz build/livedisk-efi.iso.gz
rm -rf build/img rm -rf build/img
mkdir build/img mkdir -p build/img
mv build/coreboot.elf.gz build/img/redox_$(IMG_TAG)_coreboot.elf.gz mv build/coreboot.elf.gz build/img/redox_$(IMG_TAG)_coreboot.elf.gz
mv build/harddrive.bin.gz build/img/redox_$(IMG_TAG)_harddrive.bin.gz mv build/harddrive.bin.gz build/img/redox_$(IMG_TAG)_harddrive.bin.gz
mv build/livedisk.iso.gz build/img/redox_$(IMG_TAG)_livedisk.iso.gz mv build/livedisk.iso.gz build/img/redox_$(IMG_TAG)_livedisk.iso.gz
@ -85,6 +85,13 @@ ci-pkg: prefix FORCE
./fetch.sh "$${PACKAGES}" && \ ./fetch.sh "$${PACKAGES}" && \
./repo.sh "$${PACKAGES}" ./repo.sh "$${PACKAGES}"
# CI toolchain
ci-toolchain: prefix/$(TARGET)/gcc-install.tar.gz
rm -rf build/toolchain
mkdir -p "build/toolchain/$(TARGET)"
mv "$<" "build/toolchain/$(TARGET)"
cd "build/toolchain/$(TARGET)" && sha256sum -b * > SHA256SUM
env: prefix FORCE env: prefix FORCE
export PATH="$(PREFIX_PATH):$$PATH" && \ export PATH="$(PREFIX_PATH):$$PATH" && \
bash bash

View file

@ -1,6 +1,7 @@
# Configuration # Configuration
ARCH?=x86_64 ARCH?=x86_64
INSTALLER_FLAGS?=--cookbook=cookbook INSTALLER_FLAGS?=--cookbook=cookbook
PREFIX_BINARY?=0
PREFIX_RUSTC?=0 PREFIX_RUSTC?=0
# Filesystem Size in MB # Filesystem Size in MB
FILESYSTEM_SIZE?=256 FILESYSTEM_SIZE?=256

View file

@ -1,20 +1,46 @@
PREFIX=$(ROOT)/prefix/$(TARGET) PREFIX=prefix/$(TARGET)
PREFIX_FREESTANDING_INSTALL=$(PREFIX)/gcc-freestanding-install PREFIX_FREESTANDING_INSTALL=$(PREFIX)/gcc-freestanding-install
PREFIX_INSTALL=$(PREFIX)/gcc-install PREFIX_INSTALL=$(PREFIX)/relibc-install
ifeq ($(PREFIX_RUSTC),1) ifeq ($(PREFIX_RUSTC),1)
PREFIX_FREESTANDING_INSTALL=$(PREFIX)/rust-freestanding-install PREFIX_FREESTANDING_INSTALL=$(PREFIX)/rust-freestanding-install
export RUSTUP_TOOLCHAIN=$(PREFIX)/rust-freestanding-install export RUSTUP_TOOLCHAIN=$(PREFIX)/rust-freestanding-install
endif endif
PREFIX_FREESTANDING_PATH=$(PREFIX_FREESTANDING_INSTALL)/bin PREFIX_FREESTANDING_PATH=$(ROOT)/$(PREFIX_FREESTANDING_INSTALL)/bin
PREFIX_PATH=$(PREFIX_INSTALL)/bin PREFIX_PATH=$(ROOT)/$(PREFIX_INSTALL)/bin
prefix-freestanding: $(PREFIX_FREESTANDING_INSTALL) prefix-freestanding: $(PREFIX_FREESTANDING_INSTALL)
prefix: $(PREFIX_INSTALL) prefix: $(PREFIX_INSTALL)
$(PREFIX)/relibc-install: $(ROOT)/relibc | $(PREFIX)/gcc-install
rm -rf "$@.partial" "$@"
cp -r "$(PREFIX)/gcc-install" "$@.partial"
cd "$<" && \
export PATH="$(ROOT)/$@.partial/bin:$$PATH" && \
export CARGO=xargo && \
make -j `nproc` all && \
make -j `nproc` install DESTDIR="$(ROOT)/$@.partial/$(TARGET)"
touch "$@.partial"
mv "$@.partial" "$@"
ifeq ($(PREFIX_BINARY),1)
$(PREFIX)/gcc-install.tar.gz:
mkdir -p "$(@D)"
wget -O $@.partial "https://static.redox-os.org/toolchain/$(TARGET)/gcc-install.tar.gz"
mv $@.partial $@
$(PREFIX)/gcc-install: $(PREFIX)/gcc-install.tar.gz
mkdir -p "$@.partial"
tar --extract --file "$<" --directory "$@.partial" --strip-components=1
touch "$@.partial"
mv "$@.partial" "$@"
else
$(PREFIX)/binutils.tar.bz2: $(PREFIX)/binutils.tar.bz2:
mkdir -p "$(@D)" mkdir -p "$(@D)"
wget -O $@.partial "https://gitlab.redox-os.org/redox-os/binutils-gdb/-/archive/redox/binutils-gdb-redox.tar.bz2" wget -O $@.partial "https://gitlab.redox-os.org/redox-os/binutils-gdb/-/archive/redox/binutils-gdb-redox.tar.bz2"
@ -23,22 +49,23 @@ $(PREFIX)/binutils.tar.bz2:
$(PREFIX)/binutils: $(PREFIX)/binutils.tar.bz2 $(PREFIX)/binutils: $(PREFIX)/binutils.tar.bz2
mkdir -p "$@.partial" mkdir -p "$@.partial"
tar --extract --file "$<" --directory "$@.partial" --strip-components=1 tar --extract --file "$<" --directory "$@.partial" --strip-components=1
touch "$@.partial"
mv "$@.partial" "$@" mv "$@.partial" "$@"
touch "$@"
$(PREFIX)/binutils-install: $(PREFIX)/binutils $(PREFIX)/binutils-install: $(PREFIX)/binutils
rm -rf "$<-build" "$@" rm -rf "$<-build" "$@.partial" "$@"
mkdir -p "$<-build" "$@" mkdir -p "$<-build" "$@.partial"
cd "$<-build" && \ cd "$<-build" && \
"$</configure" \ "$(ROOT)/$</configure" \
--target="$(TARGET)" \ --target="$(TARGET)" \
--program-prefix="$(TARGET)-" \ --program-prefix="$(TARGET)-" \
--prefix="$@" \ --prefix="" \
--disable-werror \ --disable-werror \
&& \ && \
make all -j `nproc` && \ make -j `nproc` all && \
make install -j `nproc` make -j `nproc` install DESTDIR="$(ROOT)/$@.partial"
touch "$@" touch "$@.partial"
mv "$@.partial" "$@"
$(PREFIX)/gcc.tar.bz2: $(PREFIX)/gcc.tar.bz2:
mkdir -p "$(@D)" mkdir -p "$(@D)"
@ -49,67 +76,83 @@ $(PREFIX)/gcc: $(PREFIX)/gcc.tar.bz2
mkdir -p "$@.partial" mkdir -p "$@.partial"
tar --extract --file "$<" --directory "$@.partial" --strip-components=1 tar --extract --file "$<" --directory "$@.partial" --strip-components=1
cd "$@.partial" && ./contrib/download_prerequisites cd "$@.partial" && ./contrib/download_prerequisites
touch "$@.partial"
mv "$@.partial" "$@" mv "$@.partial" "$@"
touch "$@"
$(PREFIX)/gcc-freestanding-install: $(PREFIX)/gcc | $(PREFIX)/binutils-install $(PREFIX)/gcc-freestanding-install: $(PREFIX)/gcc | $(PREFIX)/binutils-install
rm -rf "$<-freestanding-build" "$@" rm -rf "$<-freestanding-build" "$@.partial" "$@"
mkdir -p "$<-freestanding-build" mkdir -p "$<-freestanding-build"
cp -r "$(PREFIX)/binutils-install" "$@" cp -r "$(PREFIX)/binutils-install" "$@.partial"
cd "$<-freestanding-build" && \ cd "$<-freestanding-build" && \
export PATH="$@/bin:$$PATH" && \ export PATH="$(ROOT)/$@.partial/bin:$$PATH" && \
"$</configure" \ "$(ROOT)/$</configure" \
--target="$(TARGET)" \ --target="$(TARGET)" \
--program-prefix="$(TARGET)-" \ --program-prefix="$(TARGET)-" \
--prefix="$@" \ --prefix="" \
--disable-nls \ --disable-nls \
--enable-languages=c,c++ \ --enable-languages=c,c++ \
--without-headers \ --without-headers \
&& \ && \
make all-gcc all-target-libgcc -j `nproc` && \ make -j `nproc` all-gcc all-target-libgcc && \
make install-gcc install-target-libgcc -j `nproc` make -j `nproc` install-gcc install-target-libgcc DESTDIR="$(ROOT)/$@.partial"
touch "$@" touch "$@.partial"
mv "$@.partial" "$@"
$(PREFIX)/rust-freestanding-install: $(ROOT)/rust | $(PREFIX)/gcc-freestanding-install $(PREFIX)/rust-freestanding-install: $(ROOT)/rust | $(PREFIX)/gcc-freestanding-install
rm -rf "$(PREFIX)/rust-freestanding-build" "$@" rm -rf "$(PREFIX)/rust-freestanding-build" "$@.partial" "$@"
mkdir -p "$(PREFIX)/rust-freestanding-build" mkdir -p "$(PREFIX)/rust-freestanding-build"
cp -r "$(PREFIX)/gcc-freestanding-install" "$@" cp -r "$(PREFIX)/gcc-freestanding-install" "$@.partial"
cd "$(PREFIX)/rust-freestanding-build" && \ cd "$(PREFIX)/rust-freestanding-build" && \
export PATH="$@/bin:$$PATH" && \ export PATH="$(ROOT)/$@.partial/bin:$$PATH" && \
"$</configure" --prefix="$@" --disable-docs && \ "$</configure" --prefix="" --disable-docs && \
make -j `nproc` && \ make -j `nproc` && \
make install -j `nproc` make -j `nproc` install DESTDIR="$(ROOT)/$@.partial"
mkdir -p "$@/lib/rustlib/x86_64-unknown-linux-gnu/bin" mkdir -p "$@.partial/lib/rustlib/x86_64-unknown-linux-gnu/bin"
touch "$@" touch "$@.partial"
mv "$@.partial" "$@"
$(PREFIX)/relibc-install: $(ROOT)/relibc | $(PREFIX_FREESTANDING_INSTALL) # TODO: Only make headers for freestanding install
rm -rf "$@" $(PREFIX)/relibc-freestanding-install: $(ROOT)/relibc | $(PREFIX_FREESTANDING_INSTALL)
mkdir -p "$@" rm -rf "$@.partial" "$@"
mkdir -p "$@.partial"
cd "$<" && \ cd "$<" && \
export PATH="$(PREFIX_FREESTANDING_PATH):$$PATH" && \ export PATH="$(PREFIX_FREESTANDING_PATH):$$PATH" && \
make CARGO=xargo all && \ export CARGO=xargo && \
make CARGO=xargo DESTDIR="$@/usr" install make -j `nproc` all && \
touch "$@" make -j `nproc` install DESTDIR="$(ROOT)/$@.partial/$(TARGET)"
touch "$@.partial"
mv "$@.partial" "$@"
$(PREFIX)/gcc-install: $(PREFIX)/gcc | $(PREFIX)/relibc-install $(PREFIX)/gcc-install: $(PREFIX)/gcc | $(PREFIX)/relibc-freestanding-install
rm -rf "$<-build" "$@" rm -rf "$<-build" "$@.partial" "$@"
mkdir -p "$<-build" mkdir -p "$<-build"
cp -r "$(PREFIX)/binutils-install" "$@" cp -r "$(PREFIX)/binutils-install" "$@.partial"
cd "$<-build" && \ cd "$<-build" && \
export PATH="$@/bin:$$PATH" && \ export PATH="$(ROOT)/$@.partial/bin:$$PATH" && \
"$</configure" \ "$(ROOT)/$</configure" \
--target="$(TARGET)" \ --target="$(TARGET)" \
--program-prefix="$(TARGET)-" \ --program-prefix="$(TARGET)-" \
--prefix="$@" \ --prefix="" \
--with-sysroot="$(PREFIX)/relibc-install" \ --with-sysroot \
--with-build-sysroot="$(ROOT)/$(PREFIX)/relibc-freestanding-install/$(TARGET)" \
--with-native-system-header-dir="/include" \
--disable-nls \ --disable-nls \
--disable-werror \ --disable-werror \
--enable-languages=c,c++ \ --enable-languages=c,c++ \
--enable-threads=posix \ --enable-threads=posix \
&& \ && \
make all-gcc all-target-libgcc all-target-libstdc++-v3 -j `nproc` && \ make -j `nproc` all-gcc all-target-libgcc all-target-libstdc++-v3 && \
make install-gcc install-target-libgcc install-target-libstdc++-v3 -j `nproc` make -j `nproc` install-gcc install-target-libgcc install-target-libstdc++-v3 DESTDIR="$(ROOT)/$@.partial"
touch "$@" touch "$@.partial"
mv "$@.partial" "$@"
$(PREFIX)/gcc-install.tar.gz: $(PREFIX)/gcc-install
tar \
--create \
--gzip \
--file "$@" \
--directory="$<" \
.
# Building full rustc may not be required # Building full rustc may not be required
# $(PREFIX)/rust-install: $(ROOT)/rust | $(PREFIX)/gcc-install # $(PREFIX)/rust-install: $(ROOT)/rust | $(PREFIX)/gcc-install
@ -121,3 +164,5 @@ $(PREFIX)/gcc-install: $(PREFIX)/gcc | $(PREFIX)/relibc-install
# make -j `nproc` && \ # make -j `nproc` && \
# make install -j `nproc` # make install -j `nproc`
# touch "$@" # touch "$@"
endif

2
relibc

@ -1 +1 @@
Subproject commit cdbeda1ca00c110725cb7e578057cedcdb0174ce Subproject commit cee4449f7cc9f10e77daab4109c212212f2788c8