sh-elf-binutils/configure.sh

83 lines
2.0 KiB
Bash
Executable File

#! /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