#!/bin/bash

set -e

DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"

echo $DIR

ARCH="x86_64"
TARGET="$ARCH-pc-acadia"
TOOLCHAIN="$DIR/../toolchain"
PREFIX="$TOOLCHAIN/local"
BUILD="$DIR/../builddbg"
SYSROOT="$DIR/../sysroot"

BINUTILS_VERSION="2.40"
BINUTILS_NAME="binutils-$BINUTILS_VERSION"
BINUTILS_PKG="${BINUTILS_NAME}.tar.xz"
BINUTILS_BASE_URL="https://ftp.gnu.org/gnu/binutils" 

GCC_VERSION="13.1.0"
GCC_NAME="gcc-$GCC_VERSION"
GCC_PKG="${GCC_NAME}.tar.xz"
GCC_BASE_URL="https://ftp.gnu.org/gnu/gcc"

mkdir -p "$TOOLCHAIN/srcs"
pushd "$TOOLCHAIN/srcs"
  # TODO: Check md5sum
  if [ ! -e "$BINUTILS_PKG" ]; then
    curl -LO "$BINUTILS_BASE_URL/$BINUTILS_PKG"
  fi

  if [ ! -d "$BINUTILS_NAME" ]; then
    tar -xJf ${BINUTILS_PKG}
    pushd $BINUTILS_NAME
    # Set up a baseline to make it easier to create patches in the future.
    git init
    git add .
    git commit -m "base"
    patch -p1 <$TOOLCHAIN/patches/binutils/00-first.patch
    popd
  fi

  if [ ! -e "$GCC_PKG" ]; then
    curl -LO "$GCC_BASE_URL/$GCC_NAME/$GCC_PKG"
  fi

  if [ ! -d "$GCC_NAME" ]; then
    tar -xJf $GCC_PKG
    pushd $GCC_NAME
    # Set up a baseline to make it easier to create patches in the future.
    git init
    git add .
    git commit -m "base"
    patch -p1 <$TOOLCHAIN/patches/gcc/00-first.patch
    patch -p1 <$TOOLCHAIN/patches/gcc/01-libstdc++.patch
    popd
  fi
  

popd

mkdir -p "$TOOLCHAIN/build"
pushd "$TOOLCHAIN/build"
  rm -rf binutils
  mkdir -p binutils
  pushd binutils
      # skip building documentation
      export ac_cv_prog_MAKEINFO=true
      "$TOOLCHAIN"/srcs/$BINUTILS_NAME/configure \
        --prefix=$PREFIX \
        --target="$TARGET" \
        --with-sysroot="$SYSROOT" \
        --enable-shared \
        --disable-nls

      make MAKEINFO=true -j 8
      make install MAKEINFO=true -j 8
  popd

  rm -rf gcc
  mkdir -p gcc
  pushd gcc
    $TOOLCHAIN/srcs/$GCC_NAME/configure \
      --prefix=$PREFIX \
      --target=$TARGET \
      --with-sysroot=$SYSROOT \
      --with-newlib \
      --disable-nls \
      --enable-languages=c,c++


    make -j 8 all-gcc
    make -j 8 all-target-libgcc

    make -j 8 install-gcc install-target-libgcc
  popd

popd