mirror of
https://git.yoctoproject.org/poky
synced 2026-05-05 07:39:49 +02:00
https://blog.rust-lang.org/2025/09/18/Rust-1.90.0/
* Recent changes in rustc require 'target-c-int-width' to be an integer,
not a string. This fixes type consistency when generating target specs.
https://github.com/rust-lang/rust/pull/142352.
* Rebase existing patches with v1.90.0.
* Drop merged patches with rust v1.90.0.
- backport-fix-test-string-merging.patch
2d51acd2fb
* The "remote-test-server" bin is now generated in stage1-tools-bin dir
rather than stage2. Update the test suite accordingly.
The tests/{assembly/codegen} dirs are renamed to
tests/{assembly,codegen}-llvm. Update the test suite and
patches accordingly.
https://github.com/rust-lang/rust/pull/144249/commits
* Use "//@ ignore-riscv64" tag for tests failing on riscv-64 instead of previous
"only-<target_arch>" tags.
Test results summary:
rust v1.90.0
+-----------+--------+---------+
| Machine | Passed | Ignored |
+-----------+--------+---------+
| arm-32 | 29,517 | 1,529 |
| arm-64 | 29,608 | 1,471 |
| x86-32 | 29,508 | 1,507 |
| x86-64 | 29,903 | 1,275 |
| riscv-64 | 29,584 | 1,494 |
+-----------+--------+---------+
Test results difference (1.90 - 1.89):
+-----------+--------+---------+
| Machine | Passed | Ignored |
+-----------+--------+---------+
| arm-32 | +278 | +61 |
| arm-64 | +279 | +59 |
| x86-32 | +277 | +58 |
| x86-64 | +419 | +50 |
| riscv-64 | +280 | +58 |
+-----------+--------+---------+
(From OE-Core rev: 86d09ec9cdbcea6e076ebac6e1243f9e20fb4378)
Signed-off-by: Yash Shinde <Yash.Shinde@windriver.com>
Signed-off-by: Mathieu Dubois-Briand <mathieu.dubois-briand@bootlin.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
139 lines
7.1 KiB
Python
139 lines
7.1 KiB
Python
# SPDX-License-Identifier: MIT
|
|
import subprocess
|
|
import time
|
|
from oeqa.core.decorator import OETestTag
|
|
from oeqa.core.decorator.data import skipIfArch
|
|
from oeqa.core.case import OEPTestResultTestCase
|
|
from oeqa.selftest.case import OESelftestTestCase
|
|
from oeqa.utils.commands import runCmd, bitbake, get_bb_var, runqemu
|
|
from oeqa.utils.sshcontrol import SSHControl
|
|
|
|
def parse_results(filename):
|
|
tests = {}
|
|
with open(filename, "r") as f:
|
|
lines = f.readlines()
|
|
for line in lines:
|
|
if "..." in line and "test [" in line:
|
|
test = line.split("test ")[1].split(" ... ")[0]
|
|
if "] " in test:
|
|
test = test.split("] ", 1)[1]
|
|
result = line.split(" ... ")[1].strip()
|
|
if result == "ok":
|
|
result = "PASS"
|
|
elif result == "failed":
|
|
result = "FAIL"
|
|
elif "ignored" in result:
|
|
result = "SKIPPED"
|
|
if test in tests:
|
|
if tests[test] != result:
|
|
print("Duplicate and mismatching result %s for %s" % (result, test))
|
|
else:
|
|
print("Duplicate result %s for %s" % (result, test))
|
|
else:
|
|
tests[test] = result
|
|
return tests
|
|
|
|
# Total time taken for testing is of about 2hr 20min, with PARALLEL_MAKE set to 40 number of jobs.
|
|
@OETestTag("toolchain-system")
|
|
@OETestTag("toolchain-user")
|
|
@OETestTag("runqemu")
|
|
class RustSelfTestSystemEmulated(OESelftestTestCase, OEPTestResultTestCase):
|
|
|
|
@skipIfArch(['mips', 'mips64'])
|
|
def test_rust(self, *args, **kwargs):
|
|
# build remote-test-server before image build
|
|
recipe = "rust"
|
|
start_time = time.time()
|
|
bitbake("{} -c test_compile".format(recipe))
|
|
builddir = get_bb_var("RUSTSRC", "rust")
|
|
# build core-image-minimal with required packages
|
|
default_installed_packages = ["libgcc", "libstdc++", "libatomic", "libgomp"]
|
|
features = []
|
|
features.append('IMAGE_FEATURES += "ssh-server-dropbear"')
|
|
features.append('CORE_IMAGE_EXTRA_INSTALL += "{0}"'.format(" ".join(default_installed_packages)))
|
|
self.write_config("\n".join(features))
|
|
bitbake("core-image-minimal")
|
|
|
|
# Exclude the test folders that error out while building
|
|
# TODO: Fix the errors and include them for testing
|
|
# no-fail-fast: Run all tests regardless of failure.
|
|
# bless: First runs rustfmt to format the codebase,
|
|
# then runs tidy checks.
|
|
exclude_list = [
|
|
'src/bootstrap',
|
|
'src/doc/rustc',
|
|
'src/doc/rustdoc',
|
|
'src/doc/unstable-book',
|
|
'src/etc/test-float-parse',
|
|
'src/librustdoc',
|
|
'src/rustdoc-json-types',
|
|
'src/tools/coverage-dump',
|
|
'src/tools/jsondoclint',
|
|
'src/tools/lint-docs',
|
|
'src/tools/replace-version-placeholder',
|
|
'src/tools/rust-analyzer',
|
|
'src/tools/rustdoc-themes',
|
|
'src/tools/rust-installer',
|
|
'src/tools/test-float-parse',
|
|
'src/tools/suggest-tests',
|
|
'src/tools/tidy',
|
|
'tests/assembly-llvm/asm/aarch64-outline-atomics.rs',
|
|
'tests/codegen-llvm/issues/issue-122805.rs',
|
|
'tests/codegen-llvm/thread-local.rs',
|
|
'tests/mir-opt/',
|
|
'tests/run-make',
|
|
'tests/run-make-fulldeps',
|
|
'tests/rustdoc',
|
|
'tests/rustdoc-json',
|
|
'tests/rustdoc-js-std',
|
|
'tests/ui/abi/stack-probes-lto.rs',
|
|
'tests/ui/abi/stack-probes.rs',
|
|
'tests/ui/codegen/mismatched-data-layouts.rs',
|
|
'tests/codegen-llvm/rust-abi-arch-specific-adjustment.rs',
|
|
'tests/ui/debuginfo/debuginfo-emit-llvm-ir-and-split-debuginfo.rs',
|
|
'tests/ui/feature-gates/version_check.rs',
|
|
'tests/ui-fulldeps/',
|
|
'tests/ui/process/nofile-limit.rs',
|
|
'tidyselftest'
|
|
]
|
|
|
|
exclude_fail_tests = " ".join([" --exclude " + item for item in exclude_list])
|
|
# Add exclude_fail_tests with other test arguments
|
|
testargs = exclude_fail_tests + " --no-doc --no-fail-fast --bless"
|
|
|
|
# wrap the execution with a qemu instance.
|
|
# Tests are run with 512 tasks in parallel to execute all tests very quickly
|
|
with runqemu("core-image-minimal", runqemuparams = "nographic", qemuparams = "-m 512") as qemu:
|
|
# Copy remote-test-server to image through scp
|
|
host_sys = get_bb_var("RUST_BUILD_SYS", "rust")
|
|
ssh = SSHControl(ip=qemu.ip, logfile=qemu.sshlog, user="root")
|
|
ssh.copy_to(builddir + "/build/" + host_sys + "/stage1-tools-bin/remote-test-server","~/")
|
|
# Execute remote-test-server on image through background ssh
|
|
command = '~/remote-test-server --bind 0.0.0.0:12345 -v'
|
|
sshrun=subprocess.Popen(("ssh", '-o', 'UserKnownHostsFile=/dev/null', '-o', 'StrictHostKeyChecking=no', '-f', "root@%s" % qemu.ip, command), shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
|
# Get the values of variables.
|
|
tcpath = get_bb_var("TARGET_SYS", "rust")
|
|
targetsys = get_bb_var("RUST_TARGET_SYS", "rust")
|
|
rustlibpath = get_bb_var("WORKDIR", "rust")
|
|
tmpdir = get_bb_var("TMPDIR", "rust")
|
|
|
|
# Set path for target-poky-linux-gcc, RUST_TARGET_PATH and hosttools.
|
|
cmd = "export TARGET_VENDOR=\"-poky\";"
|
|
cmd = cmd + " export PATH=%s/recipe-sysroot-native/usr/bin/python3-native:%s/recipe-sysroot-native/usr/bin:%s/recipe-sysroot-native/usr/bin/%s:%s/hosttools:$PATH;" % (rustlibpath, rustlibpath, rustlibpath, tcpath, tmpdir)
|
|
cmd = cmd + " export RUST_TARGET_PATH=%s/rust-targets;" % rustlibpath
|
|
# Trigger testing.
|
|
cmd = cmd + " export TEST_DEVICE_ADDR=\"%s:12345\";" % qemu.ip
|
|
cmd = cmd + " cd %s; python3 src/bootstrap/bootstrap.py test %s --target %s" % (builddir, testargs, targetsys)
|
|
retval = runCmd(cmd)
|
|
end_time = time.time()
|
|
|
|
resultlog = rustlibpath + "/results-log.txt"
|
|
with open(resultlog, "w") as f:
|
|
f.write(retval.output)
|
|
|
|
ptestsuite = "rust"
|
|
self.ptest_section(ptestsuite, duration = int(end_time - start_time), logfile=resultlog)
|
|
test_results = parse_results(resultlog)
|
|
for test in test_results:
|
|
self.ptest_result(ptestsuite, test, test_results[test])
|