[OE-core] [PATCH v2 05/12] glibc-testsuite: Create a recipe to implement glibc test suite

Khem Raj raj.khem at gmail.com
Wed Sep 4 15:35:19 UTC 2019


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 <nathan at nathanrossi.com> 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 <nathan at nathanrossi.com>
> ---
> 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
> Openembedded-core at lists.openembedded.org
> http://lists.openembedded.org/mailman/listinfo/openembedded-core


More information about the Openembedded-core mailing list