abinfo "Clearing compiler flags in environment..."
unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS

if [[ ${__CROSS} = arm-none-eabi ]]; then
  targ=${__CROSS}
else
  targ=${ARCH_TARGET[${__CROSS}]}
fi
targ_emul=$(source ld/configure.tgt; echo $targ_emul)

abinfo "Configuring Binutils (target: $targ) ..."
mkdir -pv "$SRCDIR"/build-${__CROSS}
cd "$SRCDIR"/build-${__CROSS}

BUILD_OPTIONS=(
    # Prevent rpath in the as executable.
    '--prefix=/usr'
    "--build=${ARCH_TARGET[$ARCH]}"
    "--target=$targ"
    "--with-sysroot=/var/ab/cross-root/${__CROSS}"
    '--with-bugurl=https://github.com/AOSC-Dev/aosc-os-abbs'
    '--enable-threads'
    '--enable-shared'
    '--with-pic'
    '--with-zstd'
    '--enable-ld'
    '--enable-plugins'
    '--disable-werror'
    '--enable-lto'
    '--disable-gdb'
    '--disable-gdbserver'
    # FIXME: gprofng checks the target architecture via things like
    # `#ifdef __i386__`, obviously broken as a cross tool.
    '--disable-gprofng'
    '--enable-deterministic-archives'
    '--enable-64-bit-bfd'
    '--enable-default-hash-style=gnu'
)

# Note: target-specific options.
if [[ "${__CROSS}" = "loongson3" ]]; then
    BUILD_OPTIONS=(
        "${BUILD_OPTIONS[@]}"
        '--enable-mips-fix-loongson3-llsc'
    )
fi

if [[ "${__CROSS}" = "arm-none-eabi" ]]; then
    BUILD_OPTIONS=(
        "${BUILD_OPTIONS[@]}"
        '--enable-interwork'
    )
fi

"$SRCDIR"/configure \
    ${BUILD_OPTIONS[@]}

abinfo "Building GAS (target: $targ) ..."
make all-gas
make

abinfo "Installing GAS (target: $targ) ..."
make -C gas install-exec \
    DESTDIR=$PWD/temp_install
install -vDm755 $PWD/temp_install/usr/bin/${targ}-as \
             -t $PKGDIR/opt/abcross/${__CROSS}/bin

abinfo "Creating wrapper script for the linker (target: $targ) ..."
for i in ld ld.bfd; do
  cat > "$PKGDIR"/opt/abcross/${__CROSS}/bin/$targ-$i << EOF
#!/bin/sh
exec /usr/bin/$i -m $targ_emul --sysroot=/var/ab/cross-root/${__CROSS} "\$@"
EOF
  chmod -v 755 "$PKGDIR"/opt/abcross/${__CROSS}/bin/$targ-$i
done

output_format=$("$PKGDIR"/opt/abcross/${__CROSS}/bin/$targ-ld --print-output-format)

abinfo "Creating wrapper scripts for other tools (target: $targ) ..."
for i in addr2line ar c++filt elfedit gprof nm objcopy objdump ranlib \
         readelf size strings strip; do
  cat > "$PKGDIR"/opt/abcross/${__CROSS}/bin/$targ-$i << EOF
#!/bin/sh
GNUTARGET=\${GNUTARGET:-${output_format}} exec /usr/bin/$i "\$@"
EOF
  chmod -v 755 "$PKGDIR"/opt/abcross/${__CROSS}/bin/$targ-$i
done

abinfo "Creating symlinks in the tooldir (target: $targ)"
mkdir -pv "$PKGDIR"/opt/abcross/${__CROSS}/$targ/bin
for i in "$PKGDIR"/opt/abcross/${__CROSS}/bin/$targ-*; do
  ln -svr $i "$PKGDIR"/opt/abcross/${__CROSS}/$targ/bin/${i##*-}
done

case $targ in
  *aosc* )
    abinfo "Creating host-prefixed symlinks (target: $targ) ..."
    mkdir -pv "$PKGDIR"/usr/bin
    cd "$PKGDIR"/opt/abcross/${__CROSS}/bin/
    for i in *; do
        ln -sv ../../opt/abcross/${__CROSS}/bin/$i \
            "$PKGDIR"/usr/bin/$i
        # vendor: unknown
        ln -sv ../../opt/abcross/${__CROSS}/bin/$i \
            "$PKGDIR"/usr/bin/${i/aosc-linux-gnu/unknown-linux-gnu}
        # empty vendor
        ln -sv ../../opt/abcross/${__CROSS}/bin/$i \
            "$PKGDIR"/usr/bin/${i/aosc-linux-gnu/linux-gnu}
    done
    ;;
esac
