require binutils.inc
require binutils-${PV}.inc

BPN = "binutils"

DEPENDS += "dejagnu-native expect-native"
DEPENDS += "binutils-native"

deltask do_compile
deltask do_install

inherit nopackages

do_configure[dirs] += "${B}/ld ${B}/bfd"
do_configure() {
    # create config.h, oe enables initfini-array by default
    echo "#define HAVE_INITFINI_ARRAY" > ${B}/ld/config.h
}

# target depends
DEPENDS += "virtual/${MLPREFIX}${TARGET_PREFIX}binutils"
DEPENDS += "virtual/${MLPREFIX}${TARGET_PREFIX}gcc"
DEPENDS += "virtual/${MLPREFIX}${TARGET_PREFIX}compilerlibs"
DEPENDS += "virtual/${MLPREFIX}libc"

python check_prepare() {
    def suffix_sys(sys):
        if sys.endswith("-linux"):
            return sys + "-gnu"
        return sys

    def generate_site_exp(d, suite):
        content = []
        content.append('set srcdir "{0}/{1}"'.format(d.getVar("S"), suite))
        content.append('set objdir "{0}/{1}"'.format(d.getVar("B"), suite))
        content.append('set build_alias "{0}"'.format(d.getVar("BUILD_SYS")))
        content.append('set build_triplet {0}'.format(d.getVar("BUILD_SYS")))
        # use BUILD here since HOST=TARGET
        content.append('set host_alias "{0}"'.format(d.getVar("BUILD_SYS")))
        content.append('set host_triplet {0}'.format(d.getVar("BUILD_SYS")))
        content.append('set target_alias "{0}"'.format(d.getVar("TARGET_SYS")))
        content.append('set target_triplet {0}'.format(suffix_sys(d.getVar("TARGET_SYS"))))
        content.append("set development true")
        content.append("set experimental false")

        content.append(d.expand('set CXXFILT "${TARGET_PREFIX}c++filt"'))
        content.append(d.expand('set CC "${TARGET_PREFIX}gcc --sysroot=${STAGING_DIR_TARGET} ${TUNE_CCARGS}"'))
        content.append(d.expand('set CXX "${TARGET_PREFIX}g++ --sysroot=${STAGING_DIR_TARGET} ${TUNE_CCARGS}"'))
        content.append(d.expand('set CFLAGS_FOR_TARGET "--sysroot=${STAGING_DIR_TARGET} ${TUNE_CCARGS}"'))

        if suite == "ld" and d.getVar("TUNE_ARCH") == "mips64":
            # oe patches binutils to have the default mips64 abi as 64bit, but
            # skips gas causing issues with the ld test suite (which uses gas)
            content.append('set ASFLAGS "-64"')

        return "\n".join(content)

    for i in ["binutils", "gas", "ld"]:
        builddir = os.path.join(d.getVar("B"), i)
        if not os.path.isdir(builddir):
            os.makedirs(builddir)
        with open(os.path.join(builddir, "site.exp"), "w") as f:
            f.write(generate_site_exp(d, i))
}

CHECK_TARGETS ??= "binutils gas ld"

do_check[dirs] = "${B} ${B}/binutils ${B}/gas ${B}/ld"
do_check[prefuncs] += "check_prepare"
do_check[nostamp] = "1"
do_check() {
    export LC_ALL=C
    for i in ${CHECK_TARGETS}; do
        (cd ${B}/$i; runtest \
            --tool $i \
            --srcdir ${S}/$i/testsuite \
            --ignore 'plugin.exp' \
            || true)
    done
}
addtask check after do_configure
