aboutsummaryrefslogtreecommitdiff
path: root/tools/cross.sh
diff options
context:
space:
mode:
Diffstat (limited to 'tools/cross.sh')
-rw-r--r--tools/cross.sh148
1 files changed, 148 insertions, 0 deletions
diff --git a/tools/cross.sh b/tools/cross.sh
new file mode 100644
index 0000000..77e47de
--- /dev/null
+++ b/tools/cross.sh
@@ -0,0 +1,148 @@
+#!/bin/bash
+
+#
+# Copyright (c) 2023 Ian Marco Moffett and the VegaOS team.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# 1. Redistributions of source code must retain the above copyright notice,
+# this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# 3. Neither the name of VegaOS nor the names of its contributors may be used
+# to endorse or promote products derived from this software without
+# specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+################################################################
+# Configuration
+################################################################
+
+# Exit if there is an error
+set -e
+
+# Target to use
+TARGET=$1-elf
+
+# Versions to build
+# Always use the latest working version (test before updating)
+BUT_VER=2.40
+GCC_VER=13.1.0
+
+# Tar file extension to use
+# Always use the one with the smallest file size (check when updating version)
+BUT_EXT=xz
+GCC_EXT=xz
+
+# Multicore builds
+
+if [ "$(uname)" = "FreeBSD" ]; then
+ CORES=$(($(sysctl -n hw.ncpu) + 1))
+ LOAD=$(sysctl -n hw.ncpu)
+else
+ CORES=$(($(nproc) + 1))
+ LOAD=$(nproc)
+fi
+
+PREFIX="$(pwd)/cross"
+export PATH="$PREFIX/bin:$PATH"
+
+echo "Building $TARGET Binutils $BUT_VER and GCC $GCC_VER..."
+echo "Cores: $CORES, load: $LOAD"
+
+################################################################
+# Source Tarballs
+################################################################
+
+BUT_TARBALL=binutils-$BUT_VER.tar.$BUT_EXT
+GCC_TARBALL=gcc-$GCC_VER.tar.$GCC_EXT
+
+mkdir -p buildcc
+cd buildcc
+
+# Download tarballs
+echo "Downloading Binutils tarball..."
+if [ ! -f $BUT_TARBALL ]; then
+ wget https://ftp.gnu.org/gnu/binutils/$BUT_TARBALL
+fi
+
+echo "Downloading GCC tarball..."
+if [ ! -f $GCC_TARBALL ]; then
+ wget https://ftp.gnu.org/gnu/gcc/gcc-$GCC_VER/$GCC_TARBALL
+fi
+
+# Unzip tarballs
+printf "%s" "Unzipping Binutils tarball"
+tar -xf $BUT_TARBALL
+echo "" # Newline :~)
+printf "%s" "Unzipping GCC tarball"
+tar -xf $GCC_TARBALL
+
+################################################################
+# Building
+################################################################
+
+echo "Removing old build directories..."
+rm -rf buildcc-gcc build-binutils
+
+# Build binutils
+mkdir buildcc-binutils
+cd buildcc-binutils
+echo "Configuring Binutils..."
+../binutils-$BUT_VER/configure --target=$TARGET --prefix="$PREFIX" --with-sysroot --disable-nls --disable-werror
+echo "Building Binutils..."
+make -j$CORES -l$LOAD
+echo "Installing Binutils..."
+make install -j$CORES -l$LOAD
+cd ..
+
+# Build gcc
+cd gcc-$GCC_VER
+echo "Downloading prerequisites for GCC..."
+contrib/download_prerequisites
+cd ..
+mkdir buildcc-gcc
+cd buildcc-gcc
+echo "Configuring GCC..."
+../gcc-$GCC_VER/configure --target=$TARGET --prefix="$PREFIX" --disable-nls --enable-languages=c --without-headers
+echo "Building all-gcc..."
+make all-gcc -j$CORES -l$LOAD
+echo "Building all-target-libgcc..."
+make all-target-libgcc -j$CORES -l$LOAD
+echo "Installing GCC..."
+make install-gcc -j$CORES -l$LOAD
+echo "Installing target-libgcc..."
+make install-target-libgcc -j$CORES -l$LOAD
+cd ../..
+
+echo "Removing build directory..."
+rm -rf buildcc
+
+echo "Build complete, binaries are in $PREFIX/bin"
+
+################################################################
+# Basic Testing (just prints info for now)
+################################################################
+
+echo "Testing GCC..."
+$TARGET-gcc -v
+
+echo "Testing LD..."
+$TARGET-ld -v
+
+echo "Done!"