#!/bin/bash

ARGS=( "$@" )
PRE_FLAGS=()
POST_FLAGS=()

PRE_FLAGS+=( -target ${target} )
PRE_FLAGS+=( --sysroot=/opt/${target}/${target}/sys-root )
PRE_FLAGS+=( --gcc-toolchain=/opt/${target} )

if [[ " ${ARGS[@]} " != *' -x assembler '* ]]; then
    PRE_FLAGS+=( -march=x86-64 )
    PRE_FLAGS+=( -mtune=generic )
fi

COMPILE_BASE_DIR=/opt/${target}/${target}
COMPILE_CPP_DIR=${COMPILE_BASE_DIR}/include/c++/*

if [[ " ${ARGS[@]} " != *' -c '* ]] && [[ " ${ARGS[@]} " != *' -E '* ]] && [[ " ${ARGS[@]} " != *' -M '* ]] && [[ " ${ARGS[@]} " != *' -fsyntax-only '* ]]; then
    POST_FLAGS+=( -rtlib=libgcc )
    POST_FLAGS+=( -stdlib=libstdc++ )
    POST_FLAGS+=( -fuse-ld=lld )
fi

COMPILE_BASE_DIR=/opt/${target}/${target}
LINK_GCC_DIR=/opt/${target}/lib/gcc/${target}/*
# Need `-isystem` to be in post flags, for `#include_next` to work.
POST_FLAGS+=(-isystem ${COMPILE_CPP_DIR} -isystem ${COMPILE_CPP_DIR}/${target})
POST_FLAGS+=(-B ${LINK_GCC_DIR} -L ${LINK_GCC_DIR} -L ${COMPILE_BASE_DIR}/lib64)

if [[ " ${ARGS[@]} " == *"-march="* ]]; then
    echo "BinaryBuilder: Cannot force an architecture via -march" >&2
    exit 1
fi

if [ ${USE_CCACHE} == "true" ]; then
    CCACHE="ccache"
fi

${CCACHE} ${prefix}/llvm/bin/clang++ "${PRE_FLAGS[@]}" "${ARGS[@]}" "${POST_FLAGS[@]}"
