#!/usr/bin/env bash
set -e
source $(dirname $0)/setup-env.sh

cd $LUNA_ROOT

if [ ! -x $(command -v $LUNA_ARCH-luna-as) ]
then
    echo Binutils should be cross-built before GCC.
    exit 1
fi

tools/install-headers.sh # install the LibC headers before building GCC

mkdir -p toolchain/tarballs
mkdir -p toolchain/build

if [ ! -f toolchain/tarballs/gcc-$LUNA_GCC_VERSION_REQUIRED.tar.xz ]; then
    echo Downloading GCC...

    wget -Otoolchain/tarballs/gcc-$LUNA_GCC_VERSION_REQUIRED.tar.xz https://ftp.gnu.org/gnu/gcc/gcc-$LUNA_GCC_VERSION_REQUIRED/gcc-$LUNA_GCC_VERSION_REQUIRED.tar.xz
fi

rm -rf toolchain/build/gcc-$LUNA_ARCH
rm -rf toolchain/build/gcc-$LUNA_GCC_VERSION_REQUIRED

echo Extracting GCC...

tar xf toolchain/tarballs/gcc-$LUNA_GCC_VERSION_REQUIRED.tar.xz -C toolchain/build/

echo Patching GCC...

cd toolchain

patch -u -i $LUNA_ROOT/tools/gcc.patch -p 1 -d build

cd -

cd toolchain/build/gcc-$LUNA_GCC_VERSION_REQUIRED/libstdc++-v3
autoconf
cd -

echo Configuring GCC...

mkdir -p toolchain/build/gcc-$LUNA_ARCH

cd toolchain/build/gcc-$LUNA_ARCH

unset CC
unset CXX
unset LD
unset AR

../gcc-$LUNA_GCC_VERSION_REQUIRED/configure --prefix="$BUILD_PREFIX" --target=$BUILD_TARGET --disable-nls --with-sysroot=$BUILD_SYSROOT --enable-languages=c,c++

echo Building GCC...

make all-gcc -j$(nproc)
make all-target-libgcc -j$(nproc) CFLAGS_FOR_TARGET='-g -O2 -mcmodel=large -mno-red-zone'

echo Installing GCC...

make install-gcc
make install-target-libgcc

mkdir -p $LUNA_BUILD_DIR
cmake -S $LUNA_ROOT -B $LUNA_BUILD_DIR -G "$LUNA_CMAKE_GENERATOR_NAME"
cmake --build $LUNA_BUILD_DIR --target libc

make all-target-libstdc++-v3 CXXFLAGS_FOR_TARGET="-fno-exceptions" -j$(nproc)
make install-target-libstdc++-v3