summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorFelix Morgner <felix.morgner@ost.ch>2025-07-13 15:43:47 +0200
committerFelix Morgner <felix.morgner@ost.ch>2025-07-13 15:43:47 +0200
commit0d0dea1a8337595985c919d6329b01b38b0bd8d8 (patch)
tree6af97adb3876103ab825769ed54999162a66316d /scripts
parent771a1fabce59ee3614a578c894c46fc56d6db0ac (diff)
downloadteachos-toolchain-0d0dea1a8337595985c919d6329b01b38b0bd8d8.tar.xz
teachos-toolchain-0d0dea1a8337595985c919d6329b01b38b0bd8d8.zip
build: import jOS toolchain config
Diffstat (limited to 'scripts')
-rwxr-xr-xscripts/0000-prepare-os.sh15
-rwxr-xr-xscripts/0100-download.sh10
-rwxr-xr-xscripts/0200-build-target-binutils.sh20
-rwxr-xr-xscripts/0300-build-bootstrap-gcc.sh31
-rwxr-xr-xscripts/0400-build-target-newlib.sh23
-rwxr-xr-xscripts/0500-build-target-gcc.sh27
-rwxr-xr-xscripts/0600-build-target-gdb.sh18
-rwxr-xr-xscripts/build.sh150
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