summaryrefslogtreecommitdiffstats
path: root/meta/recipes-core/glibc/glibc
diff options
context:
space:
mode:
authorNathan Rossi <nathan@nathanrossi.com>2019-09-03 16:56:41 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2019-09-06 12:45:47 +0100
commit182267b3052de9539bd0a72ffdfc41e54ed3b298 (patch)
tree1c8ae95d36d29bd66a459906317e7ac259b051d1 /meta/recipes-core/glibc/glibc
parent6ccf0746cf91bf9e792e9dfe41389eeb286db803 (diff)
downloadpoky-182267b3052de9539bd0a72ffdfc41e54ed3b298.tar.gz
glibc-testsuite: Create a recipe to implement glibc test suite
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. (From OE-Core rev: 6c4d581c35ebd51c4b080ac38175d93f0480f97d) Signed-off-by: Nathan Rossi <nathan@nathanrossi.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/recipes-core/glibc/glibc')
-rw-r--r--meta/recipes-core/glibc/glibc/check-test-wrapper71
1 files changed, 71 insertions, 0 deletions
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 @@
1#!/usr/bin/env python3
2import sys
3import os
4import subprocess
5
6env = os.environ.copy()
7args = sys.argv[1:]
8targettype = args.pop(0)
9
10if targettype == "user":
11 qemuargs = os.environ.get("QEMU_OPTIONS", "").split()
12 if not os.path.exists(qemuargs[0]):
13 # ensure qemu args has a valid absolute path
14 for i in os.environ.get("PATH", "").split(":"):
15 if os.path.exists(os.path.join(i, qemuargs[0])):
16 qemuargs[0] = os.path.join(i, qemuargs[0])
17 break
18 sysroot = os.environ.get("QEMU_SYSROOT", None)
19 if not sysroot:
20 sys.exit(-1)
21 libpaths = [sysroot + "/usr/lib", sysroot + "/lib"]
22
23 if args[0] == "env":
24 args.pop(0)
25 if len(args) == 0:
26 args = ["env"]
27 else:
28 # process options
29 while args[0].startswith("-"):
30 opt = args.pop(0).lstrip("-")
31 if "i" in opt:
32 env.clear()
33 # process environment vars
34 while "=" in args[0]:
35 key, val = args.pop(0).split("=", 1)
36 if key == "LD_LIBRARY_PATH":
37 libpaths += val.split(":")
38 else:
39 env[key] = val
40 if args[0] == "cp":
41 # ignore copies, the filesystem is the same
42 sys.exit(0)
43
44 qemuargs += ["-L", sysroot]
45 qemuargs += ["-E", "LD_LIBRARY_PATH={}".format(":".join(libpaths))]
46 command = qemuargs + args
47elif targettype == "ssh":
48 host = os.environ.get("SSH_HOST", None)
49 user = os.environ.get("SSH_HOST_USER", None)
50 port = os.environ.get("SSH_HOST_PORT", None)
51
52 command = ["ssh", "-o", "UserKnownHostsFile=/dev/null", "-o", "StrictHostKeyChecking=no"]
53 if port:
54 command += ["-p", str(port)]
55 if not host:
56 sys.exit(-1)
57 command += ["{}@{}".format(user, host) if user else host]
58
59 # wrap and replace quotes for correct transformation on ssh
60 wrapped = " ".join(["'{0}'".format(i.replace("'", r"'\''")) for i in ["cd", os.getcwd()]]) + "; "
61 wrapped += " ".join(["'{0}'".format(i.replace("'", r"'\''")) for i in args])
62 command += ["sh", "-c", "\"{}\"".format(wrapped)]
63else:
64 sys.exit(-1)
65
66try:
67 r = subprocess.run(command, timeout = 1800, env = env)
68 sys.exit(r.returncode)
69except subprocess.TimeoutExpired:
70 sys.exit(-1)
71