# Maintainer: Fabien Chouteau <chouteau@adacore.com>
# Based on mingw-w64-arm-none-eabi-gcc

_realname=gcc
_target=riscv64-unknown-elf

_enable_ada=yes

pkgbase=mingw-w64-${_target}-${_realname}
pkgname=("${MINGW_PACKAGE_PREFIX}-${_target}-${_realname}")
pkgver=10.1.0
pkgrel=2
pkgdesc='GNU Tools for RISC-V Embedded Processors - GCC (mingw-w64)'
arch=('any')
mingw_arch=('mingw32' 'mingw64' 'ucrt64' 'clang64')
license=('GPL')
url='https://www.gnu.org/software/gcc/gcc.html'
groups=("${MINGW_PACKAGE_PREFIX}-${_target}-toolchain")
provides=("${MINGW_PACKAGE_PREFIX}-${_target}-gcc-ada")
depends=(
    "${MINGW_PACKAGE_PREFIX}-${_target}-binutils"
    "${MINGW_PACKAGE_PREFIX}-${_target}-newlib"
    "${MINGW_PACKAGE_PREFIX}-isl"
    "${MINGW_PACKAGE_PREFIX}-mpc"
    "${MINGW_PACKAGE_PREFIX}-zlib"
)
makedepends=(
    "${MINGW_PACKAGE_PREFIX}-gmp"
    "${MINGW_PACKAGE_PREFIX}-mpfr"
    $([[ "$_enable_ada" == "yes" ]] && echo "${MINGW_PACKAGE_PREFIX}-gcc-ada")
)
options=('!emptydirs' '!strip')
source=("https://ftp.gnu.org/gnu/gcc/gcc-${pkgver}/gcc-${pkgver}.tar.xz")
sha256sums=('b6898a23844b656f1b68691c5c012036c2e694ac4b53a8918d4712ad876e7ea2')

prepare() {
    cd ${srcdir}/gcc-${pkgver}

    mkdir gcc-build-${MINGW_CHOST}
    mkdir gcc-build-nano-${MINGW_CHOST}
}

_build_gcc() {
    local _languages=$1 # Comma separated list of languages support to build

    local _GCC_LDFLAGS="${LDFLAGS} -Wl,--disable-dynamicbase"
    if [ "${CARCH}" = 'x86_64' ]; then
        _GCC_LDFLAGS+=",--image-base=0x400000"
    fi
    ../configure \
        --build=${MINGW_CHOST} \
        --host=${MINGW_CHOST} \
        --prefix=${MINGW_PREFIX} \
        --target=${_target} \
        --with-native-system-header-dir=${MINGW_PREFIX}/${MINGW_CHOST}/include \
        --libexecdir=${MINGW_PREFIX}/lib \
        --enable-languages=${_languages} \
        --enable-plugins \
        --disable-decimal-float \
        --disable-libffi \
        --disable-libgomp \
        --disable-libmudflap \
        --disable-libquadmath \
        --disable-libssp \
        --disable-libstdcxx-pch \
        --disable-nls \
        --disable-shared \
        --disable-threads \
        --disable-tls \
        --disable-libada \
        --with-gnu-as \
        --with-gnu-ld \
        --with-system-zlib \
        --with-newlib \
        --with-headers=${MINGW_PREFIX}/${_target}/include \
        --with-python-dir=share/gcc-${_target} \
        --with-gmp \
        --with-mpfr \
        --with-mpc \
        --with-isl \
        --with-libelf \
        --enable-gnu-indirect_function \
        --enable-multilib \
        --with-host-libstdcxx="-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm" \
        --enable-linker-plugin-flags='LDFLAGS=-static-libstdc++\ -static-libgcc\ '"${LDFLAGS// /\\ }"'\ -Wl,--stack,12582912' \
        LDFLAGS="${_GCC_LDFLAGS}"

    make INHIBIT_LIBC_CFLAGS='-DUSE_TM_CLONE_REGISTRY=0'
	
	if [[ "${_languages}" == *ada* ]]; then
		make -C gcc cross-gnattools
		make -C gcc ada.all.cross
    fi
}

build() {

    local _languages="c,c++"
    if [ "$_enable_ada" == "yes" ]; then
        _languages+=",ada"
    fi

    cd ${srcdir}/gcc-${pkgver}/gcc-build-${MINGW_CHOST}

    export CFLAGS_FOR_TARGET='-g -Os -ffunction-sections -fdata-sections'
    export CXXFLAGS_FOR_TARGET='-g -Os -ffunction-sections -fdata-sections'
    _build_gcc ${_languages}

    # Build libstdc++ without exceptions support (the 'nano' variant)
    cd ${srcdir}/gcc-${pkgver}/gcc-build-nano-${MINGW_CHOST}
	
    export CFLAGS_FOR_TARGET='-g -Os -ffunction-sections -fdata-sections -fno-exceptions'
    export CXXFLAGS_FOR_TARGET='-g -Os -ffunction-sections -fdata-sections -fno-exceptions'
	# Only C and C++ are required for the nano build
    _build_gcc "c,c++"
}

package() {
    cd ${srcdir}/gcc-${pkgver}/gcc-build-${MINGW_CHOST}

    make DESTDIR="${pkgdir}" install

    cd ${srcdir}/gcc-${pkgver}/gcc-build-nano-${MINGW_CHOST}

    mkdir ${pkgdir}/nano-install-${MINGW_CHOST}

    make DESTDIR="${pkgdir}/nano-install-${MINGW_CHOST}" install

    cd ${pkgdir}${MINGW_PREFIX}

    # we need only libstdc nano files
    multilibs=`ls ${pkgdir}/nano-install-${MINGW_CHOST}${MINGW_PREFIX}/${_target}/lib/`
    echo "copy libstdc++_nano.a for each of:" ${multilibs}
    for multilib in ${multilibs[@]}; do
        echo "Listing ABIs for:" ${multilib}
        echo "in" ${pkgdir}/nano-install-${MINGW_CHOST}${MINGW_PREFIX}/${_target}/lib/${multilib}/
        abis=`ls ${pkgdir}/nano-install-${MINGW_CHOST}${MINGW_PREFIX}/${_target}/lib/${multilib}/`
        echo ${multilib} " ABI(s):" ${abis}
        for abi in ${abis[@]}; do
            dir=${multilib}/${abi}
            from_dir=${pkgdir}/nano-install-${MINGW_CHOST}${MINGW_PREFIX}/${_target}/lib/"$dir"
            to_dir=${_target}/lib/"$dir"

            cp -f "$from_dir"/libstdc++.a "$to_dir"/libstdc++_nano.a
            cp -f "$from_dir"/libsupc++.a "$to_dir"/libsupc++_nano.a
        done
    done
    rm -r ${pkgdir}/nano-install-${MINGW_CHOST}

    # strip target binaries
    find lib/gcc/${_target}/${pkgver} ${_target}/lib -type f -and \( -name \*.a -or -name \*.o \) -exec ${_target}-objcopy -R .comment -R .note -R .debug_info -R .debug_aranges -R .debug_pubnames -R .debug_pubtypes -R .debug_abbrev -R .debug_line -R .debug_str -R .debug_ranges -R .debug_loc '{}' \;

    # strip host binaries
    find bin/ lib/gcc/${_target}/${pkgver} -type f -and \( -executable \) -exec strip '{}' \;

    # Remove files that conflict with host gcc package
    rm -r share/man/man7
    rm -r share/info
}
