xref: /OK3568_Linux_fs/yocto/poky/meta/recipes-devtools/binutils/binutils-cross-testsuite_2.38.bb (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyunrequire binutils.inc
2*4882a593Smuzhiyunrequire binutils-${PV}.inc
3*4882a593Smuzhiyun
4*4882a593SmuzhiyunBPN = "binutils"
5*4882a593Smuzhiyun
6*4882a593SmuzhiyunDEPENDS += "dejagnu-native expect-native"
7*4882a593SmuzhiyunDEPENDS += "binutils-native"
8*4882a593Smuzhiyun
9*4882a593Smuzhiyundeltask do_compile
10*4882a593Smuzhiyundeltask do_install
11*4882a593Smuzhiyun
12*4882a593Smuzhiyuninherit nopackages
13*4882a593Smuzhiyun
14*4882a593Smuzhiyundo_configure[dirs] += "${B}/ld ${B}/bfd"
15*4882a593Smuzhiyundo_configure() {
16*4882a593Smuzhiyun    # create config.h, oe enables initfini-array by default
17*4882a593Smuzhiyun    echo "#define HAVE_INITFINI_ARRAY" > ${B}/ld/config.h
18*4882a593Smuzhiyun}
19*4882a593Smuzhiyun
20*4882a593Smuzhiyun# target depends
21*4882a593SmuzhiyunDEPENDS += "virtual/${MLPREFIX}${TARGET_PREFIX}binutils"
22*4882a593SmuzhiyunDEPENDS += "virtual/${MLPREFIX}${TARGET_PREFIX}gcc"
23*4882a593SmuzhiyunDEPENDS += "virtual/${MLPREFIX}${TARGET_PREFIX}compilerlibs"
24*4882a593SmuzhiyunDEPENDS += "virtual/${MLPREFIX}libc"
25*4882a593Smuzhiyun
26*4882a593Smuzhiyunpython check_prepare() {
27*4882a593Smuzhiyun    def suffix_sys(sys):
28*4882a593Smuzhiyun        if sys.endswith("-linux"):
29*4882a593Smuzhiyun            return sys + "-gnu"
30*4882a593Smuzhiyun        return sys
31*4882a593Smuzhiyun
32*4882a593Smuzhiyun    def generate_site_exp(d, suite):
33*4882a593Smuzhiyun        content = []
34*4882a593Smuzhiyun        content.append('set srcdir "{0}/{1}"'.format(d.getVar("S"), suite))
35*4882a593Smuzhiyun        content.append('set objdir "{0}/{1}"'.format(d.getVar("B"), suite))
36*4882a593Smuzhiyun        content.append('set build_alias "{0}"'.format(d.getVar("BUILD_SYS")))
37*4882a593Smuzhiyun        content.append('set build_triplet {0}'.format(d.getVar("BUILD_SYS")))
38*4882a593Smuzhiyun        # use BUILD here since HOST=TARGET
39*4882a593Smuzhiyun        content.append('set host_alias "{0}"'.format(d.getVar("BUILD_SYS")))
40*4882a593Smuzhiyun        content.append('set host_triplet {0}'.format(d.getVar("BUILD_SYS")))
41*4882a593Smuzhiyun        content.append('set target_alias "{0}"'.format(d.getVar("TARGET_SYS")))
42*4882a593Smuzhiyun        content.append('set target_triplet {0}'.format(suffix_sys(d.getVar("TARGET_SYS"))))
43*4882a593Smuzhiyun        content.append("set development true")
44*4882a593Smuzhiyun        content.append("set experimental false")
45*4882a593Smuzhiyun
46*4882a593Smuzhiyun        content.append(d.expand('set CXXFILT "${TARGET_PREFIX}c++filt"'))
47*4882a593Smuzhiyun        content.append(d.expand('set CC "${TARGET_PREFIX}gcc --sysroot=${STAGING_DIR_TARGET} ${TUNE_CCARGS}"'))
48*4882a593Smuzhiyun        content.append(d.expand('set CXX "${TARGET_PREFIX}g++ --sysroot=${STAGING_DIR_TARGET} ${TUNE_CCARGS}"'))
49*4882a593Smuzhiyun        content.append(d.expand('set CFLAGS_FOR_TARGET "--sysroot=${STAGING_DIR_TARGET} ${TUNE_CCARGS}"'))
50*4882a593Smuzhiyun
51*4882a593Smuzhiyun        if suite == "ld" and d.getVar("TUNE_ARCH") == "mips64":
52*4882a593Smuzhiyun            # oe patches binutils to have the default mips64 abi as 64bit, but
53*4882a593Smuzhiyun            # skips gas causing issues with the ld test suite (which uses gas)
54*4882a593Smuzhiyun            content.append('set ASFLAGS "-64"')
55*4882a593Smuzhiyun
56*4882a593Smuzhiyun        return "\n".join(content)
57*4882a593Smuzhiyun
58*4882a593Smuzhiyun    for i in ["binutils", "gas", "ld"]:
59*4882a593Smuzhiyun        builddir = os.path.join(d.getVar("B"), i)
60*4882a593Smuzhiyun        if not os.path.isdir(builddir):
61*4882a593Smuzhiyun            os.makedirs(builddir)
62*4882a593Smuzhiyun        with open(os.path.join(builddir, "site.exp"), "w") as f:
63*4882a593Smuzhiyun            f.write(generate_site_exp(d, i))
64*4882a593Smuzhiyun}
65*4882a593Smuzhiyun
66*4882a593SmuzhiyunCHECK_TARGETS ??= "binutils gas ld"
67*4882a593Smuzhiyun
68*4882a593Smuzhiyundo_check[dirs] = "${B} ${B}/binutils ${B}/gas ${B}/ld"
69*4882a593Smuzhiyundo_check[prefuncs] += "check_prepare"
70*4882a593Smuzhiyundo_check[nostamp] = "1"
71*4882a593Smuzhiyundo_check() {
72*4882a593Smuzhiyun    export LC_ALL=C
73*4882a593Smuzhiyun    for i in ${CHECK_TARGETS}; do
74*4882a593Smuzhiyun        (cd ${B}/$i; runtest \
75*4882a593Smuzhiyun            --tool $i \
76*4882a593Smuzhiyun            --srcdir ${S}/$i/testsuite \
77*4882a593Smuzhiyun            --ignore 'plugin.exp' \
78*4882a593Smuzhiyun            || true)
79*4882a593Smuzhiyun    done
80*4882a593Smuzhiyun}
81*4882a593Smuzhiyunaddtask check after do_configure
82