diff options
| author | Felix Morgner <felix.morgner@ost.ch> | 2025-07-13 15:43:47 +0200 |
|---|---|---|
| committer | Felix Morgner <felix.morgner@ost.ch> | 2025-07-13 15:43:47 +0200 |
| commit | 0d0dea1a8337595985c919d6329b01b38b0bd8d8 (patch) | |
| tree | 6af97adb3876103ab825769ed54999162a66316d /scripts | |
| parent | 771a1fabce59ee3614a578c894c46fc56d6db0ac (diff) | |
| download | teachos-toolchain-0d0dea1a8337595985c919d6329b01b38b0bd8d8.tar.xz teachos-toolchain-0d0dea1a8337595985c919d6329b01b38b0bd8d8.zip | |
build: import jOS toolchain config
Diffstat (limited to 'scripts')
| -rwxr-xr-x | scripts/0000-prepare-os.sh | 15 | ||||
| -rwxr-xr-x | scripts/0100-download.sh | 10 | ||||
| -rwxr-xr-x | scripts/0200-build-target-binutils.sh | 20 | ||||
| -rwxr-xr-x | scripts/0300-build-bootstrap-gcc.sh | 31 | ||||
| -rwxr-xr-x | scripts/0400-build-target-newlib.sh | 23 | ||||
| -rwxr-xr-x | scripts/0500-build-target-gcc.sh | 27 | ||||
| -rwxr-xr-x | scripts/0600-build-target-gdb.sh | 18 | ||||
| -rwxr-xr-x | scripts/build.sh | 150 |
8 files changed, 144 insertions, 150 deletions
diff --git a/scripts/0000-prepare-os.sh b/scripts/0000-prepare-os.sh new file mode 100755 index 0000000..33b0deb --- /dev/null +++ b/scripts/0000-prepare-os.sh @@ -0,0 +1,15 @@ +#!/bin/env bash + +set -e + +pacman --noconfirm -Syu + +pacman --noconfirm --needed -S \ + base-devel \ + libelf \ + libmpc \ + zlib + +pacman --noconfirm --needed --asdeps -S \ + gmp \ + mpfr diff --git a/scripts/0100-download.sh b/scripts/0100-download.sh new file mode 100755 index 0000000..03bd544 --- /dev/null +++ b/scripts/0100-download.sh @@ -0,0 +1,10 @@ +#!/bin/env bash + +set -e + +mkdir -p /downloads && cd /downloads + +curl -LO -C - ftp://sourceware.org/pub/newlib/newlib-$NEWLIB_VERSION.tar.gz +curl -LO -C - http://ftp.gwdg.de/pub/linux/sources.redhat.com/binutils/releases/binutils-$BINUTILS_VERSION.tar.xz +curl -LO -C - http://ftp.gwdg.de/pub/linux/sources.redhat.com/gcc/releases/gcc-$GCC_VERSION/gcc-$GCC_VERSION.tar.xz +curl -LO -C - http://ftp.gwdg.de/pub/linux/sources.redhat.com/gdb/releases/gdb-$GDB_VERSION.tar.xz diff --git a/scripts/0200-build-target-binutils.sh b/scripts/0200-build-target-binutils.sh new file mode 100755 index 0000000..a739e9d --- /dev/null +++ b/scripts/0200-build-target-binutils.sh @@ -0,0 +1,20 @@ +#!/bin/env bash + +set -e + +mkdir -p /toolchain/binutils/.build && cd /toolchain/binutils + +tar xf /downloads/binutils-$BINUTILS_VERSION.tar.xz + +cd .build + +../binutils-$BINUTILS_VERSION/configure \ + --disable-nls \ + --disable-werror \ + --enable-colored-disassembly \ + --prefix=/opt/toolchain \ + --target=$TARGET + +make -j$(nproc) + +make install-strip diff --git a/scripts/0300-build-bootstrap-gcc.sh b/scripts/0300-build-bootstrap-gcc.sh new file mode 100755 index 0000000..0e54b3b --- /dev/null +++ b/scripts/0300-build-bootstrap-gcc.sh @@ -0,0 +1,31 @@ +#!/bin/env bash + +set -e + +mkdir -p /toolchain/gcc/.bootstrap-build && cd /toolchain/gcc + +tar xf /downloads/gcc-$GCC_VERSION.tar.xz + +cd gcc-$GCC_VERSION + +for PATCH in $(ls /patches/gcc-$GCC_VERSION-$TARGET/*.patch); do + patch -p0 -i $PATCH +done + +cd /toolchain/gcc/.bootstrap-build + +CFLAGS=${CFLAGS/-Werror=format-security/} +CXXFLAGS=${CXXFLAGS/-Werror=format-security/} +PATH=/opt/bootstrap/bin:/opt/toolchain/bin:$PATH + +../gcc-$GCC_VERSION/configure \ + --enable-languages=c,c++ \ + --prefix=/opt/bootstrap \ + --target=$TARGET \ + --without-headers + +make -j$(nproc) all-gcc +make install-gcc + +make -j$(nproc) all-target-libgcc +make install-target-libgcc diff --git a/scripts/0400-build-target-newlib.sh b/scripts/0400-build-target-newlib.sh new file mode 100755 index 0000000..0560f3b --- /dev/null +++ b/scripts/0400-build-target-newlib.sh @@ -0,0 +1,23 @@ +#!/bin/env bash + +set -e + +PATH=/opt/bootstrap/bin:/opt/toolchain/bin:$PATH + +mkdir -p /toolchain/newlib/.build && cd /toolchain/newlib + +tar xf /downloads/newlib-$NEWLIB_VERSION.tar.gz + +cd .build + +LDFLAGS=-mno-red-zone ../newlib-$NEWLIB_VERSION/configure \ + --disable-newlib-fseek-optimization \ + --disable-newlib-io-float \ + --disable-newlib-supplied-syscalls \ + --disable-nls \ + --disable-werror \ + --prefix=/opt/toolchain \ + --target=$TARGET + +make -j$(nproc) +make install diff --git a/scripts/0500-build-target-gcc.sh b/scripts/0500-build-target-gcc.sh new file mode 100755 index 0000000..3ef2f5e --- /dev/null +++ b/scripts/0500-build-target-gcc.sh @@ -0,0 +1,27 @@ +#!/bin/env bash + +set -e + +mkdir -p /toolchain/gcc/.target-build && cd /toolchain/gcc/.target-build + +CFLAGS=${CFLAGS/-Werror=format-security/} +CXXFLAGS=${CXXFLAGS/-Werror=format-security/} +PATH=/opt/bootstrap/bin:/opt/toolchain/bin:$PATH + +../gcc-$GCC_VERSION/configure \ + --disable-hosted-libstdcxx \ + --disable-nls \ + --disable-wchar_t \ + --enable-cxx-flags=-fno-exceptions \ + --enable-languages=c,c++ \ + --prefix=/opt/toolchain \ + --target=$TARGET \ + --with-newlib + +make -j$(nproc) all-gcc +make install-strip-gcc + +for COMPONENT in target-libgcc target-libstdc++-v3; do + make -j$(nproc) all-$COMPONENT + make install-$COMPONENT +done diff --git a/scripts/0600-build-target-gdb.sh b/scripts/0600-build-target-gdb.sh new file mode 100755 index 0000000..85184de --- /dev/null +++ b/scripts/0600-build-target-gdb.sh @@ -0,0 +1,18 @@ +#!/bin/env bash + +set -e + +PATH=/opt/bootstrap/bin:/opt/toolchain/bin:$PATH + +mkdir -p /toolchain/gdb/.build && cd /toolchain/gdb + +tar xf /downloads/gdb-$GDB_VERSION.tar.xz + +cd .build + +../gdb-$GDB_VERSION/configure \ + --prefix=/opt/toolchain \ + --target=$TARGET + +make -j$(nproc) all-gdb +make install-strip-gdb diff --git a/scripts/build.sh b/scripts/build.sh deleted file mode 100755 index 1ac8f47..0000000 --- a/scripts/build.sh +++ /dev/null @@ -1,150 +0,0 @@ -#!/bin/env bash - -pacman --noconfirm -Syu - -mkdir toolchain && cd toolchain - -# Install runtime dependencies - -pacman --noconfirm --needed -S \ - base-devel \ - libelf \ - libmpc \ - zlib - -# Install build dependencies - -pacman --noconfirm --needed --asdeps -S \ - gmp \ - mpfr - -# Download sources - -curl -LO https://ftp.gnu.org/gnu/binutils/binutils-$BINUTILS_VERSION.tar.xz -curl -LO https://ftp.gnu.org/gnu/gcc/gcc-$GCC_VERSION/gcc-$GCC_VERSION.tar.xz -curl -LO ftp://sourceware.org/pub/newlib/newlib-$NEWLIB_VERSION.tar.gz - -# Build binutils - -mkdir binutils && cd binutils && mkdir .build - -tar xf ../binutils-$BINUTILS_VERSION.tar.xz - -cd .build - -../binutils-$BINUTILS_VERSION/configure \ - --target=$TARGET \ - --prefix=/usr/lib/$TARGET \ - --bindir=/usr/bin \ - --libdir=/usr/lib/$TARGET \ - --disable-nls \ - --disable-werror - -make -j$(nproc) - -make install - -cd /toolchain - -# Build first iteration of GCC (for newlib boostrapping) - -mkdir gcc-bootstrap && cd gcc-bootstrap && mkdir .build - -tar xf ../gcc-$GCC_VERSION.tar.xz - -cd gcc-$GCC_VERSION - -cat <<EOF > gcc/config/i386/t-x86_64-elf -MULTILIB_OPTIONS += mno-red-zone -MULTILIB_DIRNAMES += no-red-zone -EOF - -patch -p0 -i /patches/gcc-$GCC_VERSION-$TARGET.patch - -cd ../.build - -CFLAGS=${CFLAGS/-Werror=format-security/} -CXXFLAGS=${CXXFLAGS/-Werror=format-security/} - -../gcc-$GCC_VERSION/configure \ - --target=$TARGET \ - --prefix=/usr \ - --disable-nls \ - --disable-plugin \ - --libexecdir=/usr/lib \ - --enable-languages=c,c++ \ - --without-headers - -make -j$(nproc) all-gcc -make -j$(nproc) all-target-libgcc -make install-gcc -make install-target-libgcc - -cd /toolchain - -# Build newlib - -mkdir newlib && cd newlib && mkdir .build - -tar xf ../newlib-$NEWLIB_VERSION.tar.gz - -cd .build - -LDFLAGS=-mno-red-zone ../newlib-$NEWLIB_VERSION/configure \ - --target=$TARGET \ - --prefix=/usr \ - --disable-newlib-supplied-syscalls \ - --disable-newlib-fseek-optimization \ - --disable-newlib-io-float \ - --disable-nls \ - --disable-werror - -make -j$(nproc) -make install - -cd /toolchain - -# Build final gcc - -mkdir gcc-final && cd gcc-final && mkdir .build - -tar xf ../gcc-$GCC_VERSION.tar.xz - -cd gcc-$GCC_VERSION - -cat <<EOF > gcc/config/i386/t-x86_64-elf -MULTILIB_OPTIONS += mno-red-zone -MULTILIB_DIRNAMES += no-red-zone -EOF - -patch -p0 -i /patches/gcc-$GCC_VERSION-$TARGET.patch - -cd ../.build - -CFLAGS=${CFLAGS/-Werror=format-security/} -CXXFLAGS=${CXXFLAGS/-Werror=format-security/} - - -../gcc-$GCC_VERSION/configure \ - CFLAGS_FOR_TARGET='-mcmodel=large' \ - --target=$TARGET \ - --prefix=/usr \ - --disable-nls \ - --disable-plugin \ - --libexecdir=/usr/lib \ - --enable-languages=c,c++ \ - --enable-cxx-flags=-fno-exceptions \ - --disable-hosted-libstdcxx \ - --disable-wchar_t \ - --with-newlib - -make -j$(nproc) all-gcc -make -j$(nproc) all-target-libgcc -make -j$(nproc) all-target-libstdc++-v3 -make install-gcc -make install-target-libgcc -make install-target-libstdc++-v3 - -cd / - -rm -rf toolchain |
