https://errors.yoctoproject.org/Errors/Details/268225/
so I guess we need TOOLCHAIN = "gcc" set for this On Tue, Sep 3, 2019 at 9:57 AM Nathan Rossi <[email protected]> wrote: > > A recipe needs to be created for the test suite due to the dependency > chain between libgcc -> glibc -> libgcc-initial, and the requirements of > the test suite to have libgcc for compilation and execution. > > The glibc test suite does not use dejagnu like the gcc test suites do. > Instead a test wrapper script is used along with the assumed dependency > of having the same filesystem available on build host and target. For > qemu linux-user the same filesystem is inherently available, for remote > targets NFS is used. Separate test wrapper scripts are created for qemu > linux-user or ssh targets, with the same TOOLCHAIN_TEST_* variables used for > configuration. > > Signed-off-by: Nathan Rossi <[email protected]> > --- > Changes in v2: > - Renamed BUILD_TEST_* to TOOLCHAIN_TEST_* > --- > meta/recipes-core/glibc/glibc-testsuite_2.30.bb | 51 +++++++++++++++++ > meta/recipes-core/glibc/glibc/check-test-wrapper | 71 > ++++++++++++++++++++++++ > 2 files changed, 122 insertions(+) > create mode 100644 meta/recipes-core/glibc/glibc-testsuite_2.30.bb > create mode 100644 meta/recipes-core/glibc/glibc/check-test-wrapper > > diff --git a/meta/recipes-core/glibc/glibc-testsuite_2.30.bb > b/meta/recipes-core/glibc/glibc-testsuite_2.30.bb > new file mode 100644 > index 0000000000..88764d9e2b > --- /dev/null > +++ b/meta/recipes-core/glibc/glibc-testsuite_2.30.bb > @@ -0,0 +1,51 @@ > +require glibc_${PV}.bb > + > +# handle PN differences > +FILESEXTRAPATHS_prepend := "${THISDIR}/glibc:" > + > +# strip provides > +PROVIDES = "" > +# setup depends > +INHIBIT_DEFAULT_DEPS = "" > + > +DEPENDS += "glibc-locale libgcc gcc-runtime" > + > +# remove the initial depends > +DEPENDS_remove = "libgcc-initial" > + > +inherit qemu > + > +SRC_URI += "file://check-test-wrapper" > + > +DEPENDS += "${@'qemu-native' if d.getVar('TOOLCHAIN_TEST_TARGET') == 'user' > else ''}" > + > +TOOLCHAIN_TEST_TARGET ??= "user" > +TOOLCHAIN_TEST_HOST ??= "localhost" > +TOOLCHAIN_TEST_HOST_USER ??= "root" > +TOOLCHAIN_TEST_HOST_PORT ??= "2222" > + > +do_check[dirs] += "${B}" > +do_check[nostamp] = "1" > +do_check () { > + chmod 0755 ${WORKDIR}/check-test-wrapper > + > + # clean out previous test results > + oe_runmake tests-clean > + # makefiles don't clean entirely (and also sometimes fails due to too > many args) > + find ${B} -type f -name "*.out" -delete > + find ${B} -type f -name "*.test-result" -delete > + find ${B}/catgets -name "*.cat" -delete > + find ${B}/conform -name "symlist-*" -delete > + [ ! -e ${B}/timezone/testdata ] || rm -rf ${B}/timezone/testdata > + > + oe_runmake -i \ > + QEMU_SYSROOT="${RECIPE_SYSROOT}" \ > + QEMU_OPTIONS="${@qemu_target_binary(d)} ${QEMU_OPTIONS}" \ > + SSH_HOST="${TOOLCHAIN_TEST_HOST}" \ > + SSH_HOST_USER="${TOOLCHAIN_TEST_HOST_USER}" \ > + SSH_HOST_PORT="${TOOLCHAIN_TEST_HOST_PORT}" \ > + test-wrapper="${WORKDIR}/check-test-wrapper > ${TOOLCHAIN_TEST_TARGET}" \ > + check > +} > +addtask do_check after do_compile > + > diff --git a/meta/recipes-core/glibc/glibc/check-test-wrapper > b/meta/recipes-core/glibc/glibc/check-test-wrapper > new file mode 100644 > index 0000000000..f8e04e02d2 > --- /dev/null > +++ b/meta/recipes-core/glibc/glibc/check-test-wrapper > @@ -0,0 +1,71 @@ > +#!/usr/bin/env python3 > +import sys > +import os > +import subprocess > + > +env = os.environ.copy() > +args = sys.argv[1:] > +targettype = args.pop(0) > + > +if targettype == "user": > + qemuargs = os.environ.get("QEMU_OPTIONS", "").split() > + if not os.path.exists(qemuargs[0]): > + # ensure qemu args has a valid absolute path > + for i in os.environ.get("PATH", "").split(":"): > + if os.path.exists(os.path.join(i, qemuargs[0])): > + qemuargs[0] = os.path.join(i, qemuargs[0]) > + break > + sysroot = os.environ.get("QEMU_SYSROOT", None) > + if not sysroot: > + sys.exit(-1) > + libpaths = [sysroot + "/usr/lib", sysroot + "/lib"] > + > + if args[0] == "env": > + args.pop(0) > + if len(args) == 0: > + args = ["env"] > + else: > + # process options > + while args[0].startswith("-"): > + opt = args.pop(0).lstrip("-") > + if "i" in opt: > + env.clear() > + # process environment vars > + while "=" in args[0]: > + key, val = args.pop(0).split("=", 1) > + if key == "LD_LIBRARY_PATH": > + libpaths += val.split(":") > + else: > + env[key] = val > + if args[0] == "cp": > + # ignore copies, the filesystem is the same > + sys.exit(0) > + > + qemuargs += ["-L", sysroot] > + qemuargs += ["-E", "LD_LIBRARY_PATH={}".format(":".join(libpaths))] > + command = qemuargs + args > +elif targettype == "ssh": > + host = os.environ.get("SSH_HOST", None) > + user = os.environ.get("SSH_HOST_USER", None) > + port = os.environ.get("SSH_HOST_PORT", None) > + > + command = ["ssh", "-o", "UserKnownHostsFile=/dev/null", "-o", > "StrictHostKeyChecking=no"] > + if port: > + command += ["-p", str(port)] > + if not host: > + sys.exit(-1) > + command += ["{}@{}".format(user, host) if user else host] > + > + # wrap and replace quotes for correct transformation on ssh > + wrapped = " ".join(["'{0}'".format(i.replace("'", r"'\''")) for i in > ["cd", os.getcwd()]]) + "; " > + wrapped += " ".join(["'{0}'".format(i.replace("'", r"'\''")) for i in > args]) > + command += ["sh", "-c", "\"{}\"".format(wrapped)] > +else: > + sys.exit(-1) > + > +try: > + r = subprocess.run(command, timeout = 1800, env = env) > + sys.exit(r.returncode) > +except subprocess.TimeoutExpired: > + sys.exit(-1) > + > --- > 2.23.0.rc1 > -- > _______________________________________________ > Openembedded-core mailing list > [email protected] > http://lists.openembedded.org/mailman/listinfo/openembedded-core -- _______________________________________________ Openembedded-core mailing list [email protected] http://lists.openembedded.org/mailman/listinfo/openembedded-core
