#! /usr/bin/env bash source util.sh VERSION=$1 URL="https://ftp.gnu.org/gnu/binutils/binutils-$VERSION.tar.xz" ARCHIVE=$(basename "$URL") # Check dependencies for binutils and GCC if command -v apt >/dev/null 2>&1; then deps="libmpfr-dev libmpc-dev libgmp-dev libpng-dev libppl-dev flex g++ git texinfo xz-utils" pm=apt pm_has="apt show" pm_install="sudo apt install" elif command -v pacman >/dev/null 2>&1; then deps="mpfr mpc gmp libpng ppl flex gcc git texinfo xz" pm=pacman pm_has="pacman -Qi" pm_install="sudo pacman -S" else trust_deps=1 fi missing="" if [[ -z "$trust_deps" ]]; then for d in $deps; do if ! $pm_has $d >/dev/null 2>&1; then missing="$missing $d" fi done fi # Offer to install dependencies if [[ ! -z "$missing" ]]; then echo "$TAG Based on $pm, some dependencies are missing: $missing" echo -n "$TAG Do you want to run '$pm_install' to install them (Y/n)? " read do_install if [[ "$do_install" == "y" || "$do_install" == "Y" || "$do_install" == "" ]]; then $pm_install else echo "$TAG Skipping dependencies, hoping it will build anyway." fi fi # Download archive if [[ -f "$ARCHIVE" ]]; then echo "$TAG Found $ARCHIVE, skipping download" else echo "$TAG Downloading $URL..." if command -v curl >/dev/null 2>&1; then curl $URL -o $ARCHIVE elif command -v wget >/dev/null 2>&1; then wget -q --show-progress $URL -O $ARCHIVE else echo "$TAG error: no curl or wget; install one or download archive yourself" >&2 exit 1 fi fi # Extract archive echo "$TAG Extracting $ARCHIVE..." tar -xJf $ARCHIVE # Create build folder [[ -d "build" ]] && rm -rf build mkdir build # Configure. binutils does not support the uninstall target (wow) so we just # install in this directory and later symlink executables to $PREFIX/bin. PREFIX="$(pwd)" cd build echo "$TAG Configuring binutils..." run_quietly giteapc-configure.log \ ../binutils-$VERSION/configure --prefix="$PREFIX" --target=sh3eb-elf --with-multilib-list=m3,m4-nofpu --program-prefix=sh-elf- --enable-libssp --enable-lto