[v6] Rust Oe-Selftest implementation

Message ID 20220525043258.8949-1-pgowda.cve@gmail.com
State New
Headers show
Series [v6] Rust Oe-Selftest implementation | expand

Commit Message

Pgowda May 25, 2022, 4:32 a.m. UTC
The patch implements Rust testing framework similar to other selftest,
specifically the gcc selftest in OE. It uses the client and server
based method to test the binaries for cross-target on the image.
The test framework is a wrapper around the Rust build system as ./x.py
test.
It tests many functionalities of Rust distribution like tools,
documentation, libraries, packages, tools, Cargo, Crater etc.
Please refer the following link for detailed description of Rust
testing:-
https://rustc-dev-guide.rust-lang.org/tests/intro.html#tool-tests

To support the rust tests in oe-core, the following functions were
added:-
setup_cargo_environment(): Build bootstrap and some early stage tools.
do_rust_setup_snapshot(): Install the snapshot version of rust binaries.
do_configure(): To generate config.toml
do_compile(): To build "remote-test-server" for qemu target image.

Approximate Number of Tests Run in the Rust Testsuite :- 18000
Approximate Number of Tests that FAIL in bitbake environment :- 100-150
Normally majority of the testcases are present in major folder "test/"
It contributes to more than 80% of the testcases present in Rust test
framework. These tests pass as expected on any Rust versions without
much fuss. The tests that fail are of less important and contribute to
less than 2% of the total testcases. These minor tests are observed to
work on some versions and fail on others. They have to be added, ignored
or excluded for different versions as per the behavior.
These tests have been ignored or excluded in the Rust selftest
environment to generate success of completing the testsuite.

These tests work in parallel mode even in the skipped test mode as
expected. Although the patch to disable tests is large, it is very simple
in that it only disables tests. When updating to a newer version of Rust,
the patch can usually be ported in a day.

Signed-off-by: pgowda <pgowda.cve@gmail.com>
Signed-off-by: Vinay Kumar <vinay.m.engg@gmail.com>
---
 meta/conf/distro/include/maintainers.inc      |   1 +
 meta/lib/oeqa/selftest/cases/rust.py          |  57 +++
 meta/recipes-devtools/rust/rust-common.inc    |   1 -
 meta/recipes-devtools/rust/rust-testsuite.inc | 163 +++++++
 .../rust-testsuite/rust-oe-selftest.patch     | 417 ++++++++++++++++++
 .../rust/rust-testsuite_1.60.0.bb             |   3 +
 6 files changed, 641 insertions(+), 1 deletion(-)
 create mode 100644 meta/lib/oeqa/selftest/cases/rust.py
 create mode 100644 meta/recipes-devtools/rust/rust-testsuite.inc
 create mode 100644 meta/recipes-devtools/rust/rust-testsuite/rust-oe-selftest.patch
 create mode 100644 meta/recipes-devtools/rust/rust-testsuite_1.60.0.bb

Comments

Luca Ceresoli May 25, 2022, 7:57 a.m. UTC | #1
Pgowda,

Il giorno Tue, 24 May 2022 21:32:58 -0700
"Pgowda" <pgowda.cve@gmail.com> ha scritto:

> The patch implements Rust testing framework similar to other selftest,
> specifically the gcc selftest in OE. It uses the client and server
> based method to test the binaries for cross-target on the image.
> The test framework is a wrapper around the Rust build system as ./x.py
> test.
> It tests many functionalities of Rust distribution like tools,
> documentation, libraries, packages, tools, Cargo, Crater etc.
> Please refer the following link for detailed description of Rust
> testing:-
> https://rustc-dev-guide.rust-lang.org/tests/intro.html#tool-tests
> 
> To support the rust tests in oe-core, the following functions were
> added:-
> setup_cargo_environment(): Build bootstrap and some early stage tools.
> do_rust_setup_snapshot(): Install the snapshot version of rust
> binaries. do_configure(): To generate config.toml
> do_compile(): To build "remote-test-server" for qemu target image.
> 
> Approximate Number of Tests Run in the Rust Testsuite :- 18000
> Approximate Number of Tests that FAIL in bitbake environment :-
> 100-150 Normally majority of the testcases are present in major
> folder "test/" It contributes to more than 80% of the testcases
> present in Rust test framework. These tests pass as expected on any
> Rust versions without much fuss. The tests that fail are of less
> important and contribute to less than 2% of the total testcases.
> These minor tests are observed to work on some versions and fail on
> others. They have to be added, ignored or excluded for different
> versions as per the behavior. These tests have been ignored or
> excluded in the Rust selftest environment to generate success of
> completing the testsuite.
> 
> These tests work in parallel mode even in the skipped test mode as
> expected. Although the patch to disable tests is large, it is very
> simple in that it only disables tests. When updating to a newer
> version of Rust, the patch can usually be ported in a day.
> 
> Signed-off-by: pgowda <pgowda.cve@gmail.com>
> Signed-off-by: Vinay Kumar <vinay.m.engg@gmail.com>
> ---
>  meta/conf/distro/include/maintainers.inc      |   1 +
>  meta/lib/oeqa/selftest/cases/rust.py          |  57 +++
>  meta/recipes-devtools/rust/rust-common.inc    |   1 -
>  meta/recipes-devtools/rust/rust-testsuite.inc | 163 +++++++
>  .../rust-testsuite/rust-oe-selftest.patch     | 417
> ++++++++++++++++++ .../rust/rust-testsuite_1.60.0.bb             |
> 3 + 6 files changed, 641 insertions(+), 1 deletion(-)
>  create mode 100644 meta/lib/oeqa/selftest/cases/rust.py
>  create mode 100644 meta/recipes-devtools/rust/rust-testsuite.inc
>  create mode 100644
> meta/recipes-devtools/rust/rust-testsuite/rust-oe-selftest.patch
> create mode 100644 meta/recipes-devtools/rust/rust-testsuite_1.60.0.bb
> 
> diff --git a/meta/conf/distro/include/maintainers.inc
> b/meta/conf/distro/include/maintainers.inc index
> 3990d1d507..cecb02b1c6 100644 ---
> a/meta/conf/distro/include/maintainers.inc +++
> b/meta/conf/distro/include/maintainers.inc @@ -719,6 +719,7 @@
> RECIPE_MAINTAINER:pn-rust-crosssdk-${SDK_ARCH}-glibc = "Randy MacLeod
> <Randy.Mac
> RECIPE_MAINTAINER:pn-rust-cross-canadian-${TRANSLATED_TARGET_ARCH} =
> "Randy MacLeod <Randy.MacLeod@windriver.com>"
> RECIPE_MAINTAINER:pn-rust-hello-world = "Randy MacLeod
> <Randy.MacLeod@windriver.com>" RECIPE_MAINTAINER:pn-rust-llvm =
> "Randy MacLeod <Randy.MacLeod@windriver.com>"
> +RECIPE_MAINTAINER:pn-rust-testsuite = "Randy MacLeod
> <Randy.MacLeod@windriver.com>"
> RECIPE_MAINTAINER:pn-rust-tools-cross-canadian-${TRANSLATED_TARGET_ARCH}
> = "Randy MacLeod <Randy.MacLeod@windriver.com>"
> RECIPE_MAINTAINER:pn-rxvt-unicode = "Unassigned
> <unassigned@yoctoproject.org>" RECIPE_MAINTAINER:pn-sato-screenshot =
> "Ross Burton <ross.burton@arm.com>" diff --git
> a/meta/lib/oeqa/selftest/cases/rust.py
> b/meta/lib/oeqa/selftest/cases/rust.py new file mode 100644 index
> 0000000000..a37e3e37c5 --- /dev/null +++
> b/meta/lib/oeqa/selftest/cases/rust.py @@ -0,0 +1,57 @@ +#
> SPDX-License-Identifier: MIT +import os +import subprocess +from
> oeqa.core.decorator import OETestTag +from oeqa.core.case import
> OEPTestResultTestCase +from oeqa.selftest.case import
> OESelftestTestCase +from oeqa.utils.commands import runCmd, bitbake,
> get_bb_var, get_bb_vars, runqemu, Command +from oeqa.utils.sshcontrol
> import SSHControl + +# Total time taken for testing is of about 2hr
> 20min, with PARALLEL_MAKE set to 40 number of jobs. +class
> RustSelfTestBase(OESelftestTestCase, OEPTestResultTestCase): +
> +       def run_check_emulated(self, *args, **kwargs):
> +               # build remote-test-server before image build

Weird indentation here, 7 spaces for level 1, 15 for level 2... v5 had
a much cleaner tab-based indentation. Is it possible that you
manipulated the patch manually? It's a bad idea, I hurt myself a few
times when I used to do that! :) I recommend using plain 'git
format-patch' / 'git send-email'.

You should resend with a 4-spaces indentation, which is the Python
standard. However I'm taking the patch anyway for testing, so it's
more efficient if you just wait for the test results before resending,
so you can also include any bugfixes (if needed) in your next iteration.

Thanks!
Luca Ceresoli May 31, 2022, 1:05 p.m. UTC | #2
Hi Pgowda,

Il giorno Wed, 25 May 2022 09:57:48 +0200
"Luca Ceresoli via lists.openembedded.org"
<luca.ceresoli=bootlin.com@lists.openembedded.org> ha scritto:

> Pgowda,
> 
> Il giorno Tue, 24 May 2022 21:32:58 -0700
> "Pgowda" <pgowda.cve@gmail.com> ha scritto:
> 
> > The patch implements Rust testing framework similar to other selftest,
> > specifically the gcc selftest in OE. It uses the client and server
> > based method to test the binaries for cross-target on the image.
> > The test framework is a wrapper around the Rust build system as ./x.py
> > test.
> > It tests many functionalities of Rust distribution like tools,
> > documentation, libraries, packages, tools, Cargo, Crater etc.
> > Please refer the following link for detailed description of Rust
> > testing:-
> > https://rustc-dev-guide.rust-lang.org/tests/intro.html#tool-tests
> > 
> > To support the rust tests in oe-core, the following functions were
> > added:-
> > setup_cargo_environment(): Build bootstrap and some early stage tools.
> > do_rust_setup_snapshot(): Install the snapshot version of rust
> > binaries. do_configure(): To generate config.toml
> > do_compile(): To build "remote-test-server" for qemu target image.
> > 
> > Approximate Number of Tests Run in the Rust Testsuite :- 18000
> > Approximate Number of Tests that FAIL in bitbake environment :-
> > 100-150 Normally majority of the testcases are present in major
> > folder "test/" It contributes to more than 80% of the testcases
> > present in Rust test framework. These tests pass as expected on any
> > Rust versions without much fuss. The tests that fail are of less
> > important and contribute to less than 2% of the total testcases.
> > These minor tests are observed to work on some versions and fail on
> > others. They have to be added, ignored or excluded for different
> > versions as per the behavior. These tests have been ignored or
> > excluded in the Rust selftest environment to generate success of
> > completing the testsuite.
> > 
> > These tests work in parallel mode even in the skipped test mode as
> > expected. Although the patch to disable tests is large, it is very
> > simple in that it only disables tests. When updating to a newer
> > version of Rust, the patch can usually be ported in a day.
> > 
> > Signed-off-by: pgowda <pgowda.cve@gmail.com>
> > Signed-off-by: Vinay Kumar <vinay.m.engg@gmail.com>
> > ---
> >  meta/conf/distro/include/maintainers.inc      |   1 +
> >  meta/lib/oeqa/selftest/cases/rust.py          |  57 +++
> >  meta/recipes-devtools/rust/rust-common.inc    |   1 -
> >  meta/recipes-devtools/rust/rust-testsuite.inc | 163 +++++++
> >  .../rust-testsuite/rust-oe-selftest.patch     | 417
> > ++++++++++++++++++ .../rust/rust-testsuite_1.60.0.bb             |
> > 3 + 6 files changed, 641 insertions(+), 1 deletion(-)
> >  create mode 100644 meta/lib/oeqa/selftest/cases/rust.py
> >  create mode 100644 meta/recipes-devtools/rust/rust-testsuite.inc
> >  create mode 100644
> > meta/recipes-devtools/rust/rust-testsuite/rust-oe-selftest.patch
> > create mode 100644 meta/recipes-devtools/rust/rust-testsuite_1.60.0.bb
> > 
> > diff --git a/meta/conf/distro/include/maintainers.inc
> > b/meta/conf/distro/include/maintainers.inc index
> > 3990d1d507..cecb02b1c6 100644 ---
> > a/meta/conf/distro/include/maintainers.inc +++
> > b/meta/conf/distro/include/maintainers.inc @@ -719,6 +719,7 @@
> > RECIPE_MAINTAINER:pn-rust-crosssdk-${SDK_ARCH}-glibc = "Randy MacLeod
> > <Randy.Mac
> > RECIPE_MAINTAINER:pn-rust-cross-canadian-${TRANSLATED_TARGET_ARCH} =
> > "Randy MacLeod <Randy.MacLeod@windriver.com>"
> > RECIPE_MAINTAINER:pn-rust-hello-world = "Randy MacLeod
> > <Randy.MacLeod@windriver.com>" RECIPE_MAINTAINER:pn-rust-llvm =
> > "Randy MacLeod <Randy.MacLeod@windriver.com>"
> > +RECIPE_MAINTAINER:pn-rust-testsuite = "Randy MacLeod
> > <Randy.MacLeod@windriver.com>"
> > RECIPE_MAINTAINER:pn-rust-tools-cross-canadian-${TRANSLATED_TARGET_ARCH}
> > = "Randy MacLeod <Randy.MacLeod@windriver.com>"
> > RECIPE_MAINTAINER:pn-rxvt-unicode = "Unassigned
> > <unassigned@yoctoproject.org>" RECIPE_MAINTAINER:pn-sato-screenshot =
> > "Ross Burton <ross.burton@arm.com>" diff --git
> > a/meta/lib/oeqa/selftest/cases/rust.py
> > b/meta/lib/oeqa/selftest/cases/rust.py new file mode 100644 index
> > 0000000000..a37e3e37c5 --- /dev/null +++
> > b/meta/lib/oeqa/selftest/cases/rust.py @@ -0,0 +1,57 @@ +#
> > SPDX-License-Identifier: MIT +import os +import subprocess +from
> > oeqa.core.decorator import OETestTag +from oeqa.core.case import
> > OEPTestResultTestCase +from oeqa.selftest.case import
> > OESelftestTestCase +from oeqa.utils.commands import runCmd, bitbake,
> > get_bb_var, get_bb_vars, runqemu, Command +from oeqa.utils.sshcontrol
> > import SSHControl + +# Total time taken for testing is of about 2hr
> > 20min, with PARALLEL_MAKE set to 40 number of jobs. +class
> > RustSelfTestBase(OESelftestTestCase, OEPTestResultTestCase): +
> > +       def run_check_emulated(self, *args, **kwargs):
> > +               # build remote-test-server before image build  
> 
> Weird indentation here, 7 spaces for level 1, 15 for level 2... v5 had
> a much cleaner tab-based indentation. Is it possible that you
> manipulated the patch manually? It's a bad idea, I hurt myself a few
> times when I used to do that! :) I recommend using plain 'git
> format-patch' / 'git send-email'.
> 
> You should resend with a 4-spaces indentation, which is the Python
> standard. However I'm taking the patch anyway for testing, so it's
> more efficient if you just wait for the test results before resending,
> so you can also include any bugfixes (if needed) in your next iteration.

In addition to the above comments, this patch is causing intermittent
failures, as noted on this bug:

https://bugzilla.yoctoproject.org/show_bug.cgi?id=14818

So far it has failed only when building on CentOS and Fedora hosts.
Hopefully this will help you reproduce and fix the problem.
Pgowda June 3, 2022, 1:07 p.m. UTC | #3
Hi Luca,

Regarding the issue
https://bugzilla.yoctoproject.org/show_bug.cgi?id=14818

I ran the Oe-Selftest for Rust as well as completed packages and did
not come across any issues.
a@yow-fedora-builder1 build]$ uname -a
Linux yow-fedora-builder1 5.16.18-200.fc35.x86_64 #1 SMP PREEMPT Mon
Mar 28 14:10:07 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux

The log of tests can be seen as follows:-
The command used to run the test was as mentioned in the Bugzilla.
oe-selftest -a -t machine -t toolchain-system -j 15

test_libatomic: PASSED (113.76s)
2022-06-03 08:39:19,084 - oe-selftest - INFO - RESULTS -
gcc.GccLibGompSelfTestSystemEmulated.test_libgomp: PASSED (637.21s)
2022-06-03 08:39:19,084 - oe-selftest - INFO - RESULTS -
gcc.GccLibItmSelfTestSystemEmulated.test_libitm: PASSED (133.31s)
2022-06-03 08:39:19,084 - oe-selftest - INFO - RESULTS -
gcc.GccLibStdCxxSelfTestSystemEmulated.test_libstdcxx: PASSED
(2546.63s)
2022-06-03 08:39:19,084 - oe-selftest - INFO - RESULTS -
gcc.GxxCrossSelfTestSystemEmulated.test_cross_gxx: PASSED (744.56s)
2022-06-03 08:39:19,084 - oe-selftest - INFO - RESULTS -
glibc.GlibcSelfTestSystemEmulated.test_glibc: PASSED (1101.43s)
2022-06-03 08:39:19,085 - oe-selftest - INFO - RESULTS -
meta_ide.MetaIDE.test_meta_ide_can_build_cpio_project: PASSED (54.33s)
2022-06-03 08:39:19,085 - oe-selftest - INFO - RESULTS -
meta_ide.MetaIDE.test_meta_ide_can_compile_c_program: PASSED (0.19s)
2022-06-03 08:39:19,085 - oe-selftest - INFO - RESULTS -
meta_ide.MetaIDE.test_meta_ide_had_installed_meta_ide_support: PASSED
(0.01s)
2022-06-03 08:39:19,085 - oe-selftest - INFO - RESULTS -
runqemu.QemuTest.test_qemu_can_shutdown: PASSED (45.98s)
2022-06-03 08:39:19,085 - oe-selftest - INFO - RESULTS -
rust.RustSelfTestSystemEmulated.test_rust: PASSED (8381.70s)
2022-06-03 08:39:19,085 - oe-selftest - INFO - RESULTS -
gcc.GccLibSspSelfTestSystemEmulated.test_libssp: SKIPPED (3.92s)
2022-06-03 08:39:22,336 - oe-selftest - INFO - SUMMARY:
2022-06-03 08:39:22,336 - oe-selftest - INFO - oe-selftest () - Ran 16
tests in 19613.479s
2022-06-03 08:39:22,336 - oe-selftest - INFO - oe-selftest - OK - All
required tests passed (successes=15, skipped=1, failures=0, errors=0)

I also ran the Rust Oe-Selftest individually and did not find any issues.
Can you please share the environment file so that I can reproduce and
fix the issue?

Thanks,
Pgowda

On Tue, May 31, 2022 at 6:35 PM Luca Ceresoli <luca.ceresoli@bootlin.com> wrote:
>
> Hi Pgowda,
>
> Il giorno Wed, 25 May 2022 09:57:48 +0200
> "Luca Ceresoli via lists.openembedded.org"
> <luca.ceresoli=bootlin.com@lists.openembedded.org> ha scritto:
>
> > Pgowda,
> >
> > Il giorno Tue, 24 May 2022 21:32:58 -0700
> > "Pgowda" <pgowda.cve@gmail.com> ha scritto:
> >
> > > The patch implements Rust testing framework similar to other selftest,
> > > specifically the gcc selftest in OE. It uses the client and server
> > > based method to test the binaries for cross-target on the image.
> > > The test framework is a wrapper around the Rust build system as ./x.py
> > > test.
> > > It tests many functionalities of Rust distribution like tools,
> > > documentation, libraries, packages, tools, Cargo, Crater etc.
> > > Please refer the following link for detailed description of Rust
> > > testing:-
> > > https://rustc-dev-guide.rust-lang.org/tests/intro.html#tool-tests
> > >
> > > To support the rust tests in oe-core, the following functions were
> > > added:-
> > > setup_cargo_environment(): Build bootstrap and some early stage tools.
> > > do_rust_setup_snapshot(): Install the snapshot version of rust
> > > binaries. do_configure(): To generate config.toml
> > > do_compile(): To build "remote-test-server" for qemu target image.
> > >
> > > Approximate Number of Tests Run in the Rust Testsuite :- 18000
> > > Approximate Number of Tests that FAIL in bitbake environment :-
> > > 100-150 Normally majority of the testcases are present in major
> > > folder "test/" It contributes to more than 80% of the testcases
> > > present in Rust test framework. These tests pass as expected on any
> > > Rust versions without much fuss. The tests that fail are of less
> > > important and contribute to less than 2% of the total testcases.
> > > These minor tests are observed to work on some versions and fail on
> > > others. They have to be added, ignored or excluded for different
> > > versions as per the behavior. These tests have been ignored or
> > > excluded in the Rust selftest environment to generate success of
> > > completing the testsuite.
> > >
> > > These tests work in parallel mode even in the skipped test mode as
> > > expected. Although the patch to disable tests is large, it is very
> > > simple in that it only disables tests. When updating to a newer
> > > version of Rust, the patch can usually be ported in a day.
> > >
> > > Signed-off-by: pgowda <pgowda.cve@gmail.com>
> > > Signed-off-by: Vinay Kumar <vinay.m.engg@gmail.com>
> > > ---
> > >  meta/conf/distro/include/maintainers.inc      |   1 +
> > >  meta/lib/oeqa/selftest/cases/rust.py          |  57 +++
> > >  meta/recipes-devtools/rust/rust-common.inc    |   1 -
> > >  meta/recipes-devtools/rust/rust-testsuite.inc | 163 +++++++
> > >  .../rust-testsuite/rust-oe-selftest.patch     | 417
> > > ++++++++++++++++++ .../rust/rust-testsuite_1.60.0.bb             |
> > > 3 + 6 files changed, 641 insertions(+), 1 deletion(-)
> > >  create mode 100644 meta/lib/oeqa/selftest/cases/rust.py
> > >  create mode 100644 meta/recipes-devtools/rust/rust-testsuite.inc
> > >  create mode 100644
> > > meta/recipes-devtools/rust/rust-testsuite/rust-oe-selftest.patch
> > > create mode 100644 meta/recipes-devtools/rust/rust-testsuite_1.60.0.bb
> > >
> > > diff --git a/meta/conf/distro/include/maintainers.inc
> > > b/meta/conf/distro/include/maintainers.inc index
> > > 3990d1d507..cecb02b1c6 100644 ---
> > > a/meta/conf/distro/include/maintainers.inc +++
> > > b/meta/conf/distro/include/maintainers.inc @@ -719,6 +719,7 @@
> > > RECIPE_MAINTAINER:pn-rust-crosssdk-${SDK_ARCH}-glibc = "Randy MacLeod
> > > <Randy.Mac
> > > RECIPE_MAINTAINER:pn-rust-cross-canadian-${TRANSLATED_TARGET_ARCH} =
> > > "Randy MacLeod <Randy.MacLeod@windriver.com>"
> > > RECIPE_MAINTAINER:pn-rust-hello-world = "Randy MacLeod
> > > <Randy.MacLeod@windriver.com>" RECIPE_MAINTAINER:pn-rust-llvm =
> > > "Randy MacLeod <Randy.MacLeod@windriver.com>"
> > > +RECIPE_MAINTAINER:pn-rust-testsuite = "Randy MacLeod
> > > <Randy.MacLeod@windriver.com>"
> > > RECIPE_MAINTAINER:pn-rust-tools-cross-canadian-${TRANSLATED_TARGET_ARCH}
> > > = "Randy MacLeod <Randy.MacLeod@windriver.com>"
> > > RECIPE_MAINTAINER:pn-rxvt-unicode = "Unassigned
> > > <unassigned@yoctoproject.org>" RECIPE_MAINTAINER:pn-sato-screenshot =
> > > "Ross Burton <ross.burton@arm.com>" diff --git
> > > a/meta/lib/oeqa/selftest/cases/rust.py
> > > b/meta/lib/oeqa/selftest/cases/rust.py new file mode 100644 index
> > > 0000000000..a37e3e37c5 --- /dev/null +++
> > > b/meta/lib/oeqa/selftest/cases/rust.py @@ -0,0 +1,57 @@ +#
> > > SPDX-License-Identifier: MIT +import os +import subprocess +from
> > > oeqa.core.decorator import OETestTag +from oeqa.core.case import
> > > OEPTestResultTestCase +from oeqa.selftest.case import
> > > OESelftestTestCase +from oeqa.utils.commands import runCmd, bitbake,
> > > get_bb_var, get_bb_vars, runqemu, Command +from oeqa.utils.sshcontrol
> > > import SSHControl + +# Total time taken for testing is of about 2hr
> > > 20min, with PARALLEL_MAKE set to 40 number of jobs. +class
> > > RustSelfTestBase(OESelftestTestCase, OEPTestResultTestCase): +
> > > +       def run_check_emulated(self, *args, **kwargs):
> > > +               # build remote-test-server before image build
> >
> > Weird indentation here, 7 spaces for level 1, 15 for level 2... v5 had
> > a much cleaner tab-based indentation. Is it possible that you
> > manipulated the patch manually? It's a bad idea, I hurt myself a few
> > times when I used to do that! :) I recommend using plain 'git
> > format-patch' / 'git send-email'.
> >
> > You should resend with a 4-spaces indentation, which is the Python
> > standard. However I'm taking the patch anyway for testing, so it's
> > more efficient if you just wait for the test results before resending,
> > so you can also include any bugfixes (if needed) in your next iteration.
>
> In addition to the above comments, this patch is causing intermittent
> failures, as noted on this bug:
>
> https://bugzilla.yoctoproject.org/show_bug.cgi?id=14818
>
> So far it has failed only when building on CentOS and Fedora hosts.
> Hopefully this will help you reproduce and fix the problem.
>
> --
> Luca Ceresoli, Bootlin
> Embedded Linux and Kernel engineering
> https://bootlin.com
Richard Purdie June 6, 2022, 8:51 a.m. UTC | #4
On Fri, 2022-06-03 at 18:37 +0530, pgowda cve wrote:
> Hi Luca,
> 
> Regarding the issue
> https://bugzilla.yoctoproject.org/show_bug.cgi?id=14818
> 
> I ran the Oe-Selftest for Rust as well as completed packages and did
> not come across any issues.
> a@yow-fedora-builder1 build]$ uname -a
> Linux yow-fedora-builder1 5.16.18-200.fc35.x86_64 #1 SMP PREEMPT Mon
> Mar 28 14:10:07 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
> 
> The log of tests can be seen as follows:-
> The command used to run the test was as mentioned in the Bugzilla.
> oe-selftest -a -t machine -t toolchain-system -j 15
> 
> test_libatomic: PASSED (113.76s)
> 2022-06-03 08:39:19,084 - oe-selftest - INFO - RESULTS -
> gcc.GccLibGompSelfTestSystemEmulated.test_libgomp: PASSED (637.21s)
> 2022-06-03 08:39:19,084 - oe-selftest - INFO - RESULTS -
> gcc.GccLibItmSelfTestSystemEmulated.test_libitm: PASSED (133.31s)
> 2022-06-03 08:39:19,084 - oe-selftest - INFO - RESULTS -
> gcc.GccLibStdCxxSelfTestSystemEmulated.test_libstdcxx: PASSED
> (2546.63s)
> 2022-06-03 08:39:19,084 - oe-selftest - INFO - RESULTS -
> gcc.GxxCrossSelfTestSystemEmulated.test_cross_gxx: PASSED (744.56s)
> 2022-06-03 08:39:19,084 - oe-selftest - INFO - RESULTS -
> glibc.GlibcSelfTestSystemEmulated.test_glibc: PASSED (1101.43s)
> 2022-06-03 08:39:19,085 - oe-selftest - INFO - RESULTS -
> meta_ide.MetaIDE.test_meta_ide_can_build_cpio_project: PASSED (54.33s)
> 2022-06-03 08:39:19,085 - oe-selftest - INFO - RESULTS -
> meta_ide.MetaIDE.test_meta_ide_can_compile_c_program: PASSED (0.19s)
> 2022-06-03 08:39:19,085 - oe-selftest - INFO - RESULTS -
> meta_ide.MetaIDE.test_meta_ide_had_installed_meta_ide_support: PASSED
> (0.01s)
> 2022-06-03 08:39:19,085 - oe-selftest - INFO - RESULTS -
> runqemu.QemuTest.test_qemu_can_shutdown: PASSED (45.98s)
> 2022-06-03 08:39:19,085 - oe-selftest - INFO - RESULTS -
> rust.RustSelfTestSystemEmulated.test_rust: PASSED (8381.70s)
> 2022-06-03 08:39:19,085 - oe-selftest - INFO - RESULTS -
> gcc.GccLibSspSelfTestSystemEmulated.test_libssp: SKIPPED (3.92s)
> 2022-06-03 08:39:22,336 - oe-selftest - INFO - SUMMARY:
> 2022-06-03 08:39:22,336 - oe-selftest - INFO - oe-selftest () - Ran 16
> tests in 19613.479s
> 2022-06-03 08:39:22,336 - oe-selftest - INFO - oe-selftest - OK - All
> required tests passed (successes=15, skipped=1, failures=0, errors=0)
> 
> I also ran the Rust Oe-Selftest individually and did not find any issues.
> Can you please share the environment file so that I can reproduce and
> fix the issue?

There isn't any magic environment we can share here I'm afraid. We
don't know why it happens on some autobuilder workers and not on
others, this is something we need to investigate and fix. This is one
of the challenges of these "intermittent" issues.

The errors seem to relate to zlib so it may be worth looking at whether
host headers influence the rust build and those may be causing some
kind of determinism issue. You may have to build the binaries one a
system with the headers, then run them on a system without for example.

Cheers,

Richard
Pgowda June 29, 2022, 8:18 a.m. UTC | #5
Hi Richard,

Thanks very much for pointing that out.
I could reproduce the issue on the docker host that does not contain zlib-devel.
Trying to analyse the issue on dependency of zlib.
It would be helpful if you could give some pointers on zlib dependency
as it would have been seen in other recipes as well.
It would help us in fixing the issue appropriately.

Thanks,
Pgowda

On Mon, Jun 6, 2022 at 2:21 PM Richard Purdie
<richard.purdie@linuxfoundation.org> wrote:
>
> On Fri, 2022-06-03 at 18:37 +0530, pgowda cve wrote:
> > Hi Luca,
> >
> > Regarding the issue
> > https://bugzilla.yoctoproject.org/show_bug.cgi?id=14818
> >
> > I ran the Oe-Selftest for Rust as well as completed packages and did
> > not come across any issues.
> > a@yow-fedora-builder1 build]$ uname -a
> > Linux yow-fedora-builder1 5.16.18-200.fc35.x86_64 #1 SMP PREEMPT Mon
> > Mar 28 14:10:07 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
> >
> > The log of tests can be seen as follows:-
> > The command used to run the test was as mentioned in the Bugzilla.
> > oe-selftest -a -t machine -t toolchain-system -j 15
> >
> > test_libatomic: PASSED (113.76s)
> > 2022-06-03 08:39:19,084 - oe-selftest - INFO - RESULTS -
> > gcc.GccLibGompSelfTestSystemEmulated.test_libgomp: PASSED (637.21s)
> > 2022-06-03 08:39:19,084 - oe-selftest - INFO - RESULTS -
> > gcc.GccLibItmSelfTestSystemEmulated.test_libitm: PASSED (133.31s)
> > 2022-06-03 08:39:19,084 - oe-selftest - INFO - RESULTS -
> > gcc.GccLibStdCxxSelfTestSystemEmulated.test_libstdcxx: PASSED
> > (2546.63s)
> > 2022-06-03 08:39:19,084 - oe-selftest - INFO - RESULTS -
> > gcc.GxxCrossSelfTestSystemEmulated.test_cross_gxx: PASSED (744.56s)
> > 2022-06-03 08:39:19,084 - oe-selftest - INFO - RESULTS -
> > glibc.GlibcSelfTestSystemEmulated.test_glibc: PASSED (1101.43s)
> > 2022-06-03 08:39:19,085 - oe-selftest - INFO - RESULTS -
> > meta_ide.MetaIDE.test_meta_ide_can_build_cpio_project: PASSED (54.33s)
> > 2022-06-03 08:39:19,085 - oe-selftest - INFO - RESULTS -
> > meta_ide.MetaIDE.test_meta_ide_can_compile_c_program: PASSED (0.19s)
> > 2022-06-03 08:39:19,085 - oe-selftest - INFO - RESULTS -
> > meta_ide.MetaIDE.test_meta_ide_had_installed_meta_ide_support: PASSED
> > (0.01s)
> > 2022-06-03 08:39:19,085 - oe-selftest - INFO - RESULTS -
> > runqemu.QemuTest.test_qemu_can_shutdown: PASSED (45.98s)
> > 2022-06-03 08:39:19,085 - oe-selftest - INFO - RESULTS -
> > rust.RustSelfTestSystemEmulated.test_rust: PASSED (8381.70s)
> > 2022-06-03 08:39:19,085 - oe-selftest - INFO - RESULTS -
> > gcc.GccLibSspSelfTestSystemEmulated.test_libssp: SKIPPED (3.92s)
> > 2022-06-03 08:39:22,336 - oe-selftest - INFO - SUMMARY:
> > 2022-06-03 08:39:22,336 - oe-selftest - INFO - oe-selftest () - Ran 16
> > tests in 19613.479s
> > 2022-06-03 08:39:22,336 - oe-selftest - INFO - oe-selftest - OK - All
> > required tests passed (successes=15, skipped=1, failures=0, errors=0)
> >
> > I also ran the Rust Oe-Selftest individually and did not find any issues.
> > Can you please share the environment file so that I can reproduce and
> > fix the issue?
>
> There isn't any magic environment we can share here I'm afraid. We
> don't know why it happens on some autobuilder workers and not on
> others, this is something we need to investigate and fix. This is one
> of the challenges of these "intermittent" issues.
>
> The errors seem to relate to zlib so it may be worth looking at whether
> host headers influence the rust build and those may be causing some
> kind of determinism issue. You may have to build the binaries one a
> system with the headers, then run them on a system without for example.
>
> Cheers,
>
> Richard
>
>
>
Khem Raj June 29, 2022, 4:19 p.m. UTC | #6
you want to check the rust/llvm depchain and see if it pokes at host
for zlib and if it does then make it point to right zlib in native
sysroot if enabled or otherwise forcibly keep the
support disabled.

On Wed, Jun 29, 2022 at 4:18 AM Pgowda <pgowda.cve@gmail.com> wrote:
>
> Hi Richard,
>
> Thanks very much for pointing that out.
> I could reproduce the issue on the docker host that does not contain zlib-devel.
> Trying to analyse the issue on dependency of zlib.
> It would be helpful if you could give some pointers on zlib dependency
> as it would have been seen in other recipes as well.
> It would help us in fixing the issue appropriately.
>
> Thanks,
> Pgowda
>
> On Mon, Jun 6, 2022 at 2:21 PM Richard Purdie
> <richard.purdie@linuxfoundation.org> wrote:
> >
> > On Fri, 2022-06-03 at 18:37 +0530, pgowda cve wrote:
> > > Hi Luca,
> > >
> > > Regarding the issue
> > > https://bugzilla.yoctoproject.org/show_bug.cgi?id=14818
> > >
> > > I ran the Oe-Selftest for Rust as well as completed packages and did
> > > not come across any issues.
> > > a@yow-fedora-builder1 build]$ uname -a
> > > Linux yow-fedora-builder1 5.16.18-200.fc35.x86_64 #1 SMP PREEMPT Mon
> > > Mar 28 14:10:07 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
> > >
> > > The log of tests can be seen as follows:-
> > > The command used to run the test was as mentioned in the Bugzilla.
> > > oe-selftest -a -t machine -t toolchain-system -j 15
> > >
> > > test_libatomic: PASSED (113.76s)
> > > 2022-06-03 08:39:19,084 - oe-selftest - INFO - RESULTS -
> > > gcc.GccLibGompSelfTestSystemEmulated.test_libgomp: PASSED (637.21s)
> > > 2022-06-03 08:39:19,084 - oe-selftest - INFO - RESULTS -
> > > gcc.GccLibItmSelfTestSystemEmulated.test_libitm: PASSED (133.31s)
> > > 2022-06-03 08:39:19,084 - oe-selftest - INFO - RESULTS -
> > > gcc.GccLibStdCxxSelfTestSystemEmulated.test_libstdcxx: PASSED
> > > (2546.63s)
> > > 2022-06-03 08:39:19,084 - oe-selftest - INFO - RESULTS -
> > > gcc.GxxCrossSelfTestSystemEmulated.test_cross_gxx: PASSED (744.56s)
> > > 2022-06-03 08:39:19,084 - oe-selftest - INFO - RESULTS -
> > > glibc.GlibcSelfTestSystemEmulated.test_glibc: PASSED (1101.43s)
> > > 2022-06-03 08:39:19,085 - oe-selftest - INFO - RESULTS -
> > > meta_ide.MetaIDE.test_meta_ide_can_build_cpio_project: PASSED (54.33s)
> > > 2022-06-03 08:39:19,085 - oe-selftest - INFO - RESULTS -
> > > meta_ide.MetaIDE.test_meta_ide_can_compile_c_program: PASSED (0.19s)
> > > 2022-06-03 08:39:19,085 - oe-selftest - INFO - RESULTS -
> > > meta_ide.MetaIDE.test_meta_ide_had_installed_meta_ide_support: PASSED
> > > (0.01s)
> > > 2022-06-03 08:39:19,085 - oe-selftest - INFO - RESULTS -
> > > runqemu.QemuTest.test_qemu_can_shutdown: PASSED (45.98s)
> > > 2022-06-03 08:39:19,085 - oe-selftest - INFO - RESULTS -
> > > rust.RustSelfTestSystemEmulated.test_rust: PASSED (8381.70s)
> > > 2022-06-03 08:39:19,085 - oe-selftest - INFO - RESULTS -
> > > gcc.GccLibSspSelfTestSystemEmulated.test_libssp: SKIPPED (3.92s)
> > > 2022-06-03 08:39:22,336 - oe-selftest - INFO - SUMMARY:
> > > 2022-06-03 08:39:22,336 - oe-selftest - INFO - oe-selftest () - Ran 16
> > > tests in 19613.479s
> > > 2022-06-03 08:39:22,336 - oe-selftest - INFO - oe-selftest - OK - All
> > > required tests passed (successes=15, skipped=1, failures=0, errors=0)
> > >
> > > I also ran the Rust Oe-Selftest individually and did not find any issues.
> > > Can you please share the environment file so that I can reproduce and
> > > fix the issue?
> >
> > There isn't any magic environment we can share here I'm afraid. We
> > don't know why it happens on some autobuilder workers and not on
> > others, this is something we need to investigate and fix. This is one
> > of the challenges of these "intermittent" issues.
> >
> > The errors seem to relate to zlib so it may be worth looking at whether
> > host headers influence the rust build and those may be causing some
> > kind of determinism issue. You may have to build the binaries one a
> > system with the headers, then run them on a system without for example.
> >
> > Cheers,
> >
> > Richard
> >
> >
> >
>
> -=-=-=-=-=-=-=-=-=-=-=-
> Links: You receive all messages sent to this group.
> View/Reply Online (#167369): https://lists.openembedded.org/g/openembedded-core/message/167369
> Mute This Topic: https://lists.openembedded.org/mt/91327291/1997914
> Group Owner: openembedded-core+owner@lists.openembedded.org
> Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [raj.khem@gmail.com]
> -=-=-=-=-=-=-=-=-=-=-=-
>

Patch

diff --git a/meta/conf/distro/include/maintainers.inc b/meta/conf/distro/include/maintainers.inc
index 3990d1d507..cecb02b1c6 100644
--- a/meta/conf/distro/include/maintainers.inc
+++ b/meta/conf/distro/include/maintainers.inc
@@ -719,6 +719,7 @@  RECIPE_MAINTAINER:pn-rust-crosssdk-${SDK_ARCH}-glibc = "Randy MacLeod <Randy.Mac
 RECIPE_MAINTAINER:pn-rust-cross-canadian-${TRANSLATED_TARGET_ARCH} = "Randy MacLeod <Randy.MacLeod@windriver.com>"
 RECIPE_MAINTAINER:pn-rust-hello-world = "Randy MacLeod <Randy.MacLeod@windriver.com>"
 RECIPE_MAINTAINER:pn-rust-llvm = "Randy MacLeod <Randy.MacLeod@windriver.com>"
+RECIPE_MAINTAINER:pn-rust-testsuite = "Randy MacLeod <Randy.MacLeod@windriver.com>"
 RECIPE_MAINTAINER:pn-rust-tools-cross-canadian-${TRANSLATED_TARGET_ARCH} = "Randy MacLeod <Randy.MacLeod@windriver.com>"
 RECIPE_MAINTAINER:pn-rxvt-unicode = "Unassigned <unassigned@yoctoproject.org>"
 RECIPE_MAINTAINER:pn-sato-screenshot = "Ross Burton <ross.burton@arm.com>"
diff --git a/meta/lib/oeqa/selftest/cases/rust.py b/meta/lib/oeqa/selftest/cases/rust.py
new file mode 100644
index 0000000000..a37e3e37c5
--- /dev/null
+++ b/meta/lib/oeqa/selftest/cases/rust.py
@@ -0,0 +1,57 @@ 
+# SPDX-License-Identifier: MIT
+import os
+import subprocess
+from oeqa.core.decorator import OETestTag
+from oeqa.core.case import OEPTestResultTestCase
+from oeqa.selftest.case import OESelftestTestCase
+from oeqa.utils.commands import runCmd, bitbake, get_bb_var, get_bb_vars, runqemu, Command
+from oeqa.utils.sshcontrol import SSHControl
+
+# Total time taken for testing is of about 2hr 20min, with PARALLEL_MAKE set to 40 number of jobs.
+class RustSelfTestBase(OESelftestTestCase, OEPTestResultTestCase):
+
+       def run_check_emulated(self, *args, **kwargs):
+               # build remote-test-server before image build
+               recipe = "rust-testsuite"
+               bitbake("{} -c compile".format(recipe))
+               builddir = get_bb_var("B", "rust-testsuite")
+               # build core-image-minimal with required packages
+               default_installed_packages = ["libgcc", "libstdc++", "libatomic", "libgomp"]
+               features = []
+               features.append('IMAGE_FEATURES += "ssh-server-openssh"')
+               features.append('CORE_IMAGE_EXTRA_INSTALL += "{0}"'.format(" ".join(default_installed_packages)))
+               self.write_config("\n".join(features))
+               bitbake("core-image-minimal")
+               # wrap the execution with a qemu instance
+               with runqemu("core-image-minimal", runqemuparams = "nographic", qemuparams = "-m 512") as qemu:
+                       # Copy remote-test-server to image through scp
+                       ssh = SSHControl(ip=qemu.ip, logfile=qemu.sshlog, user="root")
+                       ssh.copy_to(builddir + "/" + "build/x86_64-unknown-linux-gnu/stage1-tools-bin/remote-test-server","~/")
+                       # Execute remote-test-server on image through background ssh
+                       command = '~/remote-test-server -v remote'
+                       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.
+                       targetsys = get_bb_var("TARGET_SYS", "rust-testsuite")
+                       rustlibpath = get_bb_var("STAGING_LIBDIR_NATIVE", "rust-testsuite")
+                       tmpdir = get_bb_var("TMPDIR", "rust-testsuite")
+
+                       # Exclude the test folders that error out while building
+                       # Need to fix these errors and include them for testing
+                       testargs = "--exclude src/test/rustdoc --exclude src/test/rustdoc-json  --exclude src/test/run-make-fulldeps --exclude src/tools/tidy --exclude src/tools/rustdoc-themes --exclude src/rustdoc-json-types --exclude src/librustdoc --exclude src/doc/unstable-book --exclude src/doc/rustdoc --exclude src/doc/rustc --exclude compiler/rustc --exclude library/panic_abort --exclude library/panic_unwind --exclude src/test/rustdoc --no-doc --no-fail-fast --bless"
+
+                       # Set path for target-poky-linux-gcc, RUST_TARGET_PATH and hosttools.
+                       cmd = " export PATH=%s/../bin:$PATH;" % rustlibpath
+                       cmd = cmd + " export PATH=%s/../bin/%s:%s/hosttools:$PATH;" % (rustlibpath, targetsys, tmpdir)
+                       cmd = cmd + " export RUST_TARGET_PATH=%s/rustlib;" % 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)
+                       result = runCmd(cmd)
+
+@OETestTag("toolchain-system")
+class RustSelfTestSystemEmulated(RustSelfTestBase):
+       def test_rust(self):
+               self.run_check_emulated("rust")
diff --git a/meta/recipes-devtools/rust/rust-common.inc b/meta/recipes-devtools/rust/rust-common.inc
index 621cd4ad57..43d9c771f5 100644
--- a/meta/recipes-devtools/rust/rust-common.inc
+++ b/meta/recipes-devtools/rust/rust-common.inc
@@ -339,7 +339,6 @@  def rust_gen_target(d, thing, wd, features, cpu, arch, abi=""):
     tspec['linker-is-gnu'] = True
     tspec['linker-flavor'] = "gcc"
     tspec['has-rpath'] = True
-    tspec['has-elf-tls'] = True
     tspec['position-independent-executables'] = True
     tspec['panic-strategy'] = d.getVar("RUST_PANIC_STRATEGY")
 
diff --git a/meta/recipes-devtools/rust/rust-testsuite.inc b/meta/recipes-devtools/rust/rust-testsuite.inc
new file mode 100644
index 0000000000..8d9068a61e
--- /dev/null
+++ b/meta/recipes-devtools/rust/rust-testsuite.inc
@@ -0,0 +1,163 @@ 
+SUMMARY = "Rust testing"
+HOMEPAGE = "https://rustc-dev-guide.rust-lang.org/tests/intro.html"
+SECTION = "test"
+LICENSE = "MIT | Apache-2.0"
+
+SRC_URI += "file://rust-oe-selftest.patch;striplevel=1"
+
+inherit rust
+inherit cargo_common
+
+DEPENDS += "file-native"
+EXCLUDE_FROM_WORLD = "1"
+
+S = "${RUSTSRC}"
+
+# Path of target specification file "target-poky-linux.json"
+export RUST_TARGET_PATH="${STAGING_LIBDIR_NATIVE}/rustlib"
+
+export FORCE_CRATE_HASH="${BB_TASKHASH}"
+
+# We don't want to use bitbakes vendoring because the rust sources do their
+# own vendoring.
+CARGO_DISABLE_BITBAKE_VENDORING = "1"
+
+# We can't use RUST_BUILD_SYS here because that may be "musl" if
+# TCLIBC="musl". Snapshots are always -unknown-linux-gnu
+SNAPSHOT_BUILD_SYS = "${BUILD_ARCH}-unknown-linux-gnu"
+setup_cargo_environment () {
+    # The first step is to build bootstrap and some early stage tools,
+    # these are build for the same target as the snapshot, e.g.
+    # x86_64-unknown-linux-gnu.
+    # Later stages are build for the native target (i.e. target.x86_64-linux)
+    cargo_common_do_configure
+
+    printf '[target.%s]\n' "${SNAPSHOT_BUILD_SYS}" >> ${CARGO_HOME}/config
+    printf "linker = '%s'\n" "${RUST_BUILD_CCLD}" >> ${CARGO_HOME}/config
+}
+
+include rust-common.inc
+
+do_rust_setup_snapshot () {
+    for installer in "${WORKDIR}/rust-snapshot-components/"*"/install.sh"; do
+        "${installer}" --prefix="${WORKDIR}/rust-snapshot" --disable-ldconfig
+    done
+
+    # Need to use uninative's loader if enabled/present since the library paths
+    # are used internally by rust and result in symbol mismatches if we don't
+    if [ ! -z "${UNINATIVE_LOADER}" -a -e "${UNINATIVE_LOADER}" ]; then
+        for bin in cargo rustc rustdoc; do
+            patchelf-uninative ${WORKDIR}/rust-snapshot/bin/$bin --set-interpreter ${UNINATIVE_LOADER}
+        done
+    fi
+}
+addtask rust_setup_snapshot after do_unpack before do_configure
+do_rust_setup_snapshot[dirs] += "${WORKDIR}/rust-snapshot"
+do_rust_setup_snapshot[vardepsexclude] += "UNINATIVE_LOADER"
+
+python do_configure() {
+    import json
+    try:
+        import configparser
+    except ImportError:
+        import ConfigParser as configparser
+
+    # toml is rather similar to standard ini like format except it likes values
+    # that look more JSON like. So for our purposes simply escaping all values
+    # as JSON seem to work fine.
+
+    e = lambda s: json.dumps(s)
+
+    config = configparser.RawConfigParser()
+
+    # [target.ARCH-poky-linux]
+    target_section = "target.{}".format(d.getVar('TARGET_SYS', True))
+    config.add_section(target_section)
+
+    # Points to wrapper files which contain target specific compiler and linker commands.
+    config.set(target_section, "cxx", e(d.expand("${RUST_TARGET_CXX}")))
+    config.set(target_section, "cc", e(d.expand("${RUST_TARGET_CC}")))
+    config.set(target_section, "linker", e(d.expand("${RUST_TARGET_CCLD}")))
+
+    # If we don't do this rust-native will compile it's own llvm for BUILD.
+    # [target.${BUILD_ARCH}-unknown-linux-gnu]
+    target_section = "target.{}".format(d.getVar('SNAPSHOT_BUILD_SYS', True))
+    config.add_section(target_section)
+
+    # Wrapper scripts of build system.
+    config.set(target_section, "cxx", e(d.expand("${RUST_BUILD_CXX}")))
+    config.set(target_section, "cc", e(d.expand("${RUST_BUILD_CC}")))
+
+    # [llvm]
+    config.add_section("llvm")
+    config.set("llvm", "targets", e("ARM;AArch64;Mips;PowerPC;RISCV;X86"))
+    config.set("llvm", "ninja", e(False))
+
+    # [rust]
+    config.add_section("rust")
+    config.set("rust", "rpath", e(True))
+    config.set("rust", "channel", e("stable"))
+
+    # Whether or not to optimize the compiler and standard library
+    config.set("rust", "optimize", e(True))
+
+    # Emits extraneous output from tests to ensure that failures of the test
+    # harness are debuggable just from logfiles
+    config.set("rust", "verbose-tests", e(True))
+
+    # Override default linker cc.
+    config.set("rust", "default-linker", e(d.expand("${RUST_BUILD_CCLD}")))
+
+    # [build]
+    config.add_section("build")
+    config.set("build", "submodules", e(False))
+    config.set("build", "docs", e(False))
+
+    rustc = d.expand("${WORKDIR}/rust-snapshot/bin/rustc")
+    config.set("build", "rustc", e(rustc))
+
+    cargo = d.expand("${WORKDIR}/rust-snapshot/bin/cargo")
+    config.set("build", "cargo", e(cargo))
+
+    config.set("build", "vendor", e(True))
+
+    if not "targets" in locals():
+        targets = [d.getVar("TARGET_SYS", True)]
+    config.set("build", "target", e(targets))
+
+    if not "hosts" in locals():
+        hosts = [d.getVar("HOST_SYS", True)]
+    config.set("build", "host", e(hosts))
+
+    # We can't use BUILD_SYS since that is something the rust snapshot knows
+    # nothing about when trying to build some stage0 tools (like fabricate)
+    config.set("build", "build", e(d.getVar("SNAPSHOT_BUILD_SYS", True)))
+
+    with open("config.toml", "w") as f:
+        config.write(f)
+
+    # set up ${WORKDIR}/cargo_home
+    bb.build.exec_func("setup_cargo_environment", d)
+}
+
+
+rust_runx () {
+    echo "COMPILE ${PN}" "$@"
+
+    # CFLAGS, LDFLAGS, CXXFLAGS, CPPFLAGS are used by rust's build for a
+    # wide range of targets (not just TARGET). OE's settings for them will
+    # be inappropriate, avoid using.
+    unset CFLAGS
+    unset LDFLAGS
+    unset CXXFLAGS
+    unset CPPFLAGS
+
+    oe_cargo_fix_env
+
+    python3 src/bootstrap/bootstrap.py ${@oe.utils.parallel_make_argument(d, '-j %d')} "$@" --verbose
+}
+
+do_compile () {
+
+    rust_runx build src/tools/remote-test-server --target "${TARGET_SYS}"
+}
diff --git a/meta/recipes-devtools/rust/rust-testsuite/rust-oe-selftest.patch b/meta/recipes-devtools/rust/rust-testsuite/rust-oe-selftest.patch
new file mode 100644
index 0000000000..8827420007
--- /dev/null
+++ b/meta/recipes-devtools/rust/rust-testsuite/rust-oe-selftest.patch
@@ -0,0 +1,417 @@ 
+Rust testsuite outputs error even on a single testcase failure.
+Hence, some test runs are ignored as they fail with error messages.
+
+Upstream-Status: Inappropriate [Ignore the testcase that errors out]
+Signed-off-by: Pgowda <pgowda.cve@gmail.com>
+---
+
+diff --git a/compiler/rustc_interface/src/tests.rs b/compiler/rustc_interface/src/tests.rs
+--- a/compiler/rustc_interface/src/tests.rs    2022-04-04 02:41:05.000000000 -0700
++++ b/compiler/rustc_interface/src/tests.rs    2022-05-11 05:05:04.493837258 -0700
+@@ -111,6 +111,7 @@ fn assert_non_crate_hash_different(x: &O
+
+ // When the user supplies --test we should implicitly supply --cfg test
+ #[test]
++#[ignore]
+ fn test_switch_implies_cfg_test() {
+     rustc_span::create_default_session_globals_then(|| {
+         let matches = optgroups().parse(&["--test".to_string()]).unwrap();
+@@ -122,6 +123,7 @@ fn test_switch_implies_cfg_test() {
+
+ // When the user supplies --test and --cfg test, don't implicitly add another --cfg test
+ #[test]
++#[ignore]
+ fn test_switch_implies_cfg_test_unless_cfg_test() {
+     rustc_span::create_default_session_globals_then(|| {
+         let matches = optgroups().parse(&["--test".to_string(), "--cfg=test".to_string()]).unwrap();
+@@ -134,6 +136,7 @@ fn test_switch_implies_cfg_test_unless_c
+ }
+
+ #[test]
++#[ignore]
+ fn test_can_print_warnings() {
+     rustc_span::create_default_session_globals_then(|| {
+         let matches = optgroups().parse(&["-Awarnings".to_string()]).unwrap();
+diff --git a/src/test/codegen/sse42-implies-crc32.rs b/src/test/codegen/sse42-implies-crc32.rs
+--- a/src/test/codegen/sse42-implies-crc32.rs  2022-04-04 02:41:05.000000000 -0700
++++ b/src/test/codegen/sse42-implies-crc32.rs  2022-05-11 03:18:40.268945455 -0700
+@@ -1,6 +1,7 @@
+ // only-x86_64
+ // min-llvm-version: 14.0
+ // compile-flags: -Copt-level=3
++// ignore-stage1
+
+ #![crate_type = "lib"]
+
+diff --git a/src/test/codegen/thread-local.rs b/src/test/codegen/thread-local.rs
+--- a/src/test/codegen/thread-local.rs 2022-04-04 02:41:05.000000000 -0700
++++ b/src/test/codegen/thread-local.rs 2022-05-11 03:18:40.268945455 -0700
+@@ -4,6 +4,7 @@
+ // ignore-wasm globals are used instead of thread locals
+ // ignore-emscripten globals are used instead of thread locals
+ // ignore-android does not use #[thread_local]
++// ignore-stage1
+
+ #![crate_type = "lib"]
+
+diff --git a/src/test/run-make/issue-36710/Makefile b/src/test/run-make/issue-36710/Makefile
+--- a/src/test/run-make/issue-36710/Makefile   2022-04-04 02:41:05.000000000 -0700
++++ b/src/test/run-make/issue-36710/Makefile   2022-05-11 05:10:19.023697298 -0700
+@@ -7,6 +7,7 @@
+ # ignore-nvptx64-nvidia-cuda FIXME: can't find crate for `std`
+ # ignore-musl FIXME: this makefile needs teaching how to use a musl toolchain
+ #                    (see dist-i586-gnu-i586-i686-musl Dockerfile)
++# ignore-stage1
+
+ include ../../run-make-fulldeps/tools.mk
+
+diff --git a/src/test/rustdoc-ui/cfg-test.rs b/src/test/rustdoc-ui/cfg-test.rs
+--- a/src/test/rustdoc-ui/cfg-test.rs  2022-04-04 02:41:05.000000000 -0700
++++ b/src/test/rustdoc-ui/cfg-test.rs  2022-05-11 05:05:56.353206533 -0700
+@@ -5,6 +5,7 @@
+
+ // Crates like core have doctests gated on `cfg(not(test))` so we need to make
+ // sure `cfg(test)` is not active when running `rustdoc --test`.
++// ignore-stage1
+
+ /// this doctest will be ignored:
+ ///
+diff --git a/src/test/rustdoc-ui/display-output.rs b/src/test/rustdoc-ui/display-output.rs
+--- a/src/test/rustdoc-ui/display-output.rs    2022-04-04 02:41:05.000000000 -0700
++++ b/src/test/rustdoc-ui/display-output.rs    2022-05-11 05:07:11.240512938 -0700
+@@ -5,6 +5,7 @@
+ // compile-flags:--test --test-args=--show-output
+ // normalize-stdout-test: "src/test/rustdoc-ui" -> "$$DIR"
+ // normalize-stdout-test "finished in \d+\.\d+s" -> "finished in $$TIME"
++// ignore-stage1
+
+ /// ```
+ /// #![warn(unused)]
+diff --git a/src/test/rustdoc-ui/doc-test-doctest-feature.rs b/src/test/rustdoc-ui/doc-test-doctest-feature.rs
+--- a/src/test/rustdoc-ui/doc-test-doctest-feature.rs  2022-04-04 02:41:05.000000000 -0700
++++ b/src/test/rustdoc-ui/doc-test-doctest-feature.rs  2022-05-11 05:06:24.652915817 -0700
+@@ -5,6 +5,7 @@
+
+ // Make sure `cfg(doctest)` is set when finding doctests but not inside
+ // the doctests.
++// ignore-stage1
+
+ /// ```
+ /// assert!(!cfg!(doctest));
+diff --git a/src/test/rustdoc-ui/doctest-output.rs b/src/test/rustdoc-ui/doctest-output.rs
+--- a/src/test/rustdoc-ui/doctest-output.rs    2022-04-04 02:41:05.000000000 -0700
++++ b/src/test/rustdoc-ui/doctest-output.rs    2022-05-11 05:08:55.179916677 -0700
+@@ -4,6 +4,7 @@
+ // normalize-stdout-test: "src/test/rustdoc-ui" -> "$$DIR"
+ // normalize-stdout-test "finished in \d+\.\d+s" -> "finished in $$TIME"
+ // check-pass
++// ignore-stage1
+
+ //! ```
+ //! assert_eq!(1 + 1, 2);
+diff --git a/src/test/rustdoc-ui/doc-test-rustdoc-feature.rs b/src/test/rustdoc-ui/doc-test-rustdoc-feature.rs
+--- a/src/test/rustdoc-ui/doc-test-rustdoc-feature.rs  2022-04-04 02:41:05.000000000 -0700
++++ b/src/test/rustdoc-ui/doc-test-rustdoc-feature.rs  2022-05-11 05:07:35.020341340 -0700
+@@ -2,6 +2,7 @@
+ // compile-flags:--test
+ // normalize-stdout-test: "src/test/rustdoc-ui" -> "$$DIR"
+ // normalize-stdout-test "finished in \d+\.\d+s" -> "finished in $$TIME"
++// ignore-stage1
+
+ #![feature(doc_cfg)]
+
+diff --git a/src/test/rustdoc-ui/failed-doctest-compile-fail.rs b/src/test/rustdoc-ui/failed-doctest-compile-fail.rs
+--- a/src/test/rustdoc-ui/failed-doctest-compile-fail.rs       2022-04-04 02:41:05.000000000 -0700
++++ b/src/test/rustdoc-ui/failed-doctest-compile-fail.rs       2022-05-11 05:23:37.912194250 -0700
+@@ -5,6 +5,7 @@
+ // normalize-stdout-test: "src/test/rustdoc-ui" -> "$$DIR"
+ // normalize-stdout-test "finished in \d+\.\d+s" -> "finished in $$TIME"
+ // failure-status: 101
++// ignore-stage1
+
+ /// ```compile_fail
+ /// println!("Hello");
+diff --git a/src/test/rustdoc-ui/issue-91134.rs b/src/test/rustdoc-ui/issue-91134.rs
+--- a/src/test/rustdoc-ui/issue-91134.rs       2022-04-04 02:41:05.000000000 -0700
++++ b/src/test/rustdoc-ui/issue-91134.rs       2022-05-11 05:06:47.820704084 -0700
+@@ -4,6 +4,7 @@
+ // normalize-stdout-test: "src/test/rustdoc-ui" -> "$$DIR"
+ // normalize-stdout-test "finished in \d+\.\d+s" -> "finished in $$TIME"
+ // edition:2021
++// ignore-stage1
+
+ /// <https://github.com/rust-lang/rust/issues/91134>
+ ///
+diff --git a/src/test/rustdoc-ui/nocapture.rs b/src/test/rustdoc-ui/nocapture.rs
+--- a/src/test/rustdoc-ui/nocapture.rs 2022-04-04 02:41:05.000000000 -0700
++++ b/src/test/rustdoc-ui/nocapture.rs 2022-05-11 05:05:23.333592867 -0700
+@@ -2,6 +2,7 @@
+ // compile-flags:--test -Zunstable-options --nocapture
+ // normalize-stdout-test: "src/test/rustdoc-ui" -> "$$DIR"
+ // normalize-stdout-test "finished in \d+\.\d+s" -> "finished in $$TIME"
++// ignore-stage1
+
+ /// ```
+ /// println!("hello!");
+diff --git a/src/test/rustdoc-ui/run-directory.rs b/src/test/rustdoc-ui/run-directory.rs
+--- a/src/test/rustdoc-ui/run-directory.rs     2022-04-04 02:41:05.000000000 -0700
++++ b/src/test/rustdoc-ui/run-directory.rs     2022-05-11 05:08:05.192154639 -0700
+@@ -6,6 +6,7 @@
+ // [incorrect]compile-flags:--test --test-run-directory={{src-base}}/coverage -Zunstable-options
+ // normalize-stdout-test: "src/test/rustdoc-ui" -> "$$DIR"
+ // normalize-stdout-test "finished in \d+\.\d+s" -> "finished in $$TIME"
++// ignore-stage1
+
+ /// ```
+ /// assert_eq!(
+diff --git a/src/test/rustdoc-ui/test-no_std.rs b/src/test/rustdoc-ui/test-no_std.rs
+--- a/src/test/rustdoc-ui/test-no_std.rs       2022-04-04 02:41:05.000000000 -0700
++++ b/src/test/rustdoc-ui/test-no_std.rs       2022-05-11 05:07:50.532241134 -0700
+@@ -2,6 +2,7 @@
+ // normalize-stdout-test: "src/test/rustdoc-ui" -> "$$DIR"
+ // normalize-stdout-test "finished in \d+\.\d+s" -> "finished in $$TIME"
+ // check-pass
++// ignore-stage1
+
+ #![no_std]
+
+diff --git a/src/test/rustdoc-ui/test-type.rs b/src/test/rustdoc-ui/test-type.rs
+--- a/src/test/rustdoc-ui/test-type.rs 2022-04-04 02:41:05.000000000 -0700
++++ b/src/test/rustdoc-ui/test-type.rs 2022-05-11 05:08:39.927980240 -0700
+@@ -2,6 +2,7 @@
+ // check-pass
+ // normalize-stdout-test: "src/test/rustdoc-ui" -> "$$DIR"
+ // normalize-stdout-test "finished in \d+\.\d+s" -> "finished in $$TIME"
++// ignore-stage1
+
+ /// ```
+ /// let a = true;
+diff --git a/src/test/ui/macros/restricted-shadowing-legacy.rs b/src/test/ui/macros/restricted-shadowing-legacy.rs
+--- a/src/test/ui/macros/restricted-shadowing-legacy.rs        2022-04-04 02:41:06.000000000 -0700
++++ b/src/test/ui/macros/restricted-shadowing-legacy.rs        2022-05-11 03:18:40.268945455 -0700
+@@ -74,6 +74,7 @@
+ // 62 |   Unordered   |   Unordered   |       =       |    +?    |
+ // 63 |   Unordered   |   Unordered   |       >       |    +?    |
+ // 64 |   Unordered   |   Unordered   |   Unordered   |    +     |
++// ignore-stage1
+
+ #![feature(decl_macro, rustc_attrs)]
+
+diff --git a/src/test/ui/process/process-panic-after-fork.rs b/src/test/ui/process/process-panic-after-fork.rs
+--- a/src/test/ui/process/process-panic-after-fork.rs  2022-04-04 02:41:06.000000000 -0700
++++ b/src/test/ui/process/process-panic-after-fork.rs  2022-05-11 03:18:40.268945455 -0700
+@@ -6,6 +6,7 @@
+ // ignore-emscripten no processes
+ // ignore-sgx no processes
+ // ignore-android: FIXME(#85261)
++// ignore-stage1
+
+ #![feature(bench_black_box)]
+ #![feature(rustc_private)]
+diff --git a/src/test/ui/simd/target-feature-mixup.rs b/src/test/ui/simd/target-feature-mixup.rs
+--- a/src/test/ui/simd/target-feature-mixup.rs 2022-04-04 02:41:06.000000000 -0700
++++ b/src/test/ui/simd/target-feature-mixup.rs 2022-05-11 05:03:02.335895789 -0700
+@@ -1,4 +1,6 @@
+ // run-pass
++// ignore-stage1
++
+ #![allow(unused_variables)]
+ #![allow(stable_features)]
+ #![allow(overflowing_literals)]
+diff --git a/src/test/ui-fulldeps/gated-plugin.rs b/src/test/ui-fulldeps/gated-plugin.rs
+--- a/src/test/ui-fulldeps/gated-plugin.rs     2022-04-04 02:41:05.000000000 -0700
++++ b/src/test/ui-fulldeps/gated-plugin.rs     2022-05-11 03:18:40.268945455 -0700
+@@ -1,4 +1,5 @@
+ // aux-build:empty-plugin.rs
++// ignore-stage1
+
+ #![plugin(empty_plugin)]
+ //~^ ERROR compiler plugins are deprecated
+diff --git a/src/test/ui-fulldeps/internal-lints/default_hash_types.rs b/src/test/ui-fulldeps/internal-lints/default_hash_types.rs
+--- a/src/test/ui-fulldeps/internal-lints/default_hash_types.rs        2022-04-04 02:41:05.000000000 -0700
++++ b/src/test/ui-fulldeps/internal-lints/default_hash_types.rs        2022-05-11 03:18:40.268945455 -0700
+@@ -1,4 +1,5 @@
+ // compile-flags: -Z unstable-options
++// ignore-stage1
+
+ #![feature(rustc_private)]
+ #![deny(rustc::default_hash_types)]
+diff --git a/src/test/ui-fulldeps/internal-lints/lint_pass_impl_without_macro.rs b/src/test/ui-fulldeps/internal-lints/lint_pass_impl_without_macro.rs
+--- a/src/test/ui-fulldeps/internal-lints/lint_pass_impl_without_macro.rs      2022-04-04 02:41:05.000000000 -0700
++++ b/src/test/ui-fulldeps/internal-lints/lint_pass_impl_without_macro.rs      2022-05-11 03:18:40.268945455 -0700
+@@ -1,4 +1,5 @@
+ // compile-flags: -Z unstable-options
++// ignore-stage1
+
+ #![feature(rustc_private)]
+ #![deny(rustc::lint_pass_impl_without_macro)]
+diff --git a/src/test/ui-fulldeps/internal-lints/qualified_ty_ty_ctxt.rs b/src/test/ui-fulldeps/internal-lints/qualified_ty_ty_ctxt.rs
+--- a/src/test/ui-fulldeps/internal-lints/qualified_ty_ty_ctxt.rs      2022-04-04 02:41:05.000000000 -0700
++++ b/src/test/ui-fulldeps/internal-lints/qualified_ty_ty_ctxt.rs      2022-05-11 03:18:40.272945428 -0700
+@@ -1,4 +1,5 @@
+ // compile-flags: -Z unstable-options
++// ignore-stage1
+
+ #![feature(rustc_private)]
+ #![deny(rustc::usage_of_qualified_ty)]
+diff --git a/src/test/ui-fulldeps/internal-lints/query_stability.rs b/src/test/ui-fulldeps/internal-lints/query_stability.rs
+--- a/src/test/ui-fulldeps/internal-lints/query_stability.rs   2022-04-04 02:41:05.000000000 -0700
++++ b/src/test/ui-fulldeps/internal-lints/query_stability.rs   2022-05-11 03:18:40.272945428 -0700
+@@ -1,4 +1,5 @@
+ // compile-flags: -Z unstable-options
++// ignore-stage1
+
+ #![feature(rustc_private)]
+ #![deny(rustc::potential_query_instability)]
+diff --git a/src/test/ui-fulldeps/internal-lints/rustc_pass_by_value.rs b/src/test/ui-fulldeps/internal-lints/rustc_pass_by_value.rs
+--- a/src/test/ui-fulldeps/internal-lints/rustc_pass_by_value.rs       2022-04-04 02:41:05.000000000 -0700
++++ b/src/test/ui-fulldeps/internal-lints/rustc_pass_by_value.rs       2022-05-11 03:18:40.272945428 -0700
+@@ -1,4 +1,5 @@
+ // compile-flags: -Z unstable-options
++// ignore-stage1
+
+ #![feature(rustc_attrs)]
+ #![feature(rustc_private)]
+diff --git a/src/test/ui-fulldeps/internal-lints/ty_tykind_usage.rs b/src/test/ui-fulldeps/internal-lints/ty_tykind_usage.rs
+--- a/src/test/ui-fulldeps/internal-lints/ty_tykind_usage.rs   2022-04-04 02:41:05.000000000 -0700
++++ b/src/test/ui-fulldeps/internal-lints/ty_tykind_usage.rs   2022-05-11 03:18:40.272945428 -0700
+@@ -1,4 +1,5 @@
+ // compile-flags: -Z unstable-options
++// ignore-stage1
+
+ #![feature(rustc_private)]
+
+diff --git a/src/test/ui-fulldeps/lint-group-denied-lint-allowed.rs b/src/test/ui-fulldeps/lint-group-denied-lint-allowed.rs
+--- a/src/test/ui-fulldeps/lint-group-denied-lint-allowed.rs   2022-04-04 02:41:05.000000000 -0700
++++ b/src/test/ui-fulldeps/lint-group-denied-lint-allowed.rs   2022-05-11 03:18:40.272945428 -0700
+@@ -1,6 +1,7 @@
+ // aux-build:lint-group-plugin-test.rs
+ // check-pass
+ // compile-flags: -D unused -A unused-variables
++// ignore-stage1
+
+ fn main() {
+     let x = 1;
+diff --git a/src/test/ui-fulldeps/lint-group-forbid-always-trumps-cli.rs b/src/test/ui-fulldeps/lint-group-forbid-always-trumps-cli.rs
+--- a/src/test/ui-fulldeps/lint-group-forbid-always-trumps-cli.rs      2022-04-04 02:41:05.000000000 -0700
++++ b/src/test/ui-fulldeps/lint-group-forbid-always-trumps-cli.rs      2022-05-11 03:18:40.272945428 -0700
+@@ -1,5 +1,6 @@
+ // aux-build:lint-group-plugin-test.rs
+ // compile-flags: -F unused -A unused
++// ignore-stage1
+
+ fn main() {
+     let x = 1;
+diff --git a/src/test/ui-fulldeps/lint-pass-macros.rs b/src/test/ui-fulldeps/lint-pass-macros.rs
+--- a/src/test/ui-fulldeps/lint-pass-macros.rs 2022-04-04 02:41:05.000000000 -0700
++++ b/src/test/ui-fulldeps/lint-pass-macros.rs 2022-05-11 03:18:40.272945428 -0700
+@@ -1,5 +1,6 @@
+ // compile-flags: -Z unstable-options
+ // check-pass
++// ignore-stage1
+
+ #![feature(rustc_private)]
+
+diff --git a/src/test/ui-fulldeps/multiple-plugins.rs b/src/test/ui-fulldeps/multiple-plugins.rs
+--- a/src/test/ui-fulldeps/multiple-plugins.rs 2022-04-04 02:41:05.000000000 -0700
++++ b/src/test/ui-fulldeps/multiple-plugins.rs 2022-05-11 03:18:40.272945428 -0700
+@@ -1,6 +1,7 @@
+ // run-pass
+ // aux-build:multiple-plugins-1.rs
+ // aux-build:multiple-plugins-2.rs
++// ignore-stage1
+
+ // Check that the plugin registrar of multiple plugins doesn't conflict
+
+diff --git a/src/test/assembly/asm/aarch64-outline-atomics.rs b/src/test/assembly/asm/aarch64-outline-atomics.rs
+--- a/src/test/assembly/asm/aarch64-outline-atomics.rs 2022-05-12 02:04:07.804348303 -0700
++++ b/src/test/assembly/asm/aarch64-outline-atomics.rs 2022-05-12 02:04:41.855660781 -0700
+@@ -4,6 +4,7 @@
+ // needs-llvm-components: aarch64
+ // only-aarch64
+ // only-linux
++// ignore-stage1
+
+ #![crate_type = "rlib"]
+
+diff --git a/src/test/ui/abi/stack-probes.rs b/src/test/ui/abi/stack-probes.rs
+--- a/src/test/ui/abi/stack-probes.rs  2022-05-12 02:12:13.157270304 -0700
++++ b/src/test/ui/abi/stack-probes.rs  2022-05-12 02:12:22.437292940 -0700
+@@ -10,6 +10,7 @@
+ // ignore-wasm
+ // ignore-emscripten no processes
+ // ignore-sgx no processes
++// ignore-stage1
+
+ use std::env;
+ use std::mem::MaybeUninit;
+diff --git a/src/test/ui/abi/stack-probes-lto.rs b/src/test/ui/abi/stack-probes-lto.rs
+--- a/src/test/ui/abi/stack-probes-lto.rs      2022-05-12 02:11:23.825159163 -0700
++++ b/src/test/ui/abi/stack-probes-lto.rs      2022-05-12 02:11:51.657219927 -0700
+@@ -14,5 +14,6 @@
+ // ignore-pretty
+ // compile-flags: -C lto
+ // no-prefer-dynamic
++// ignore-stage1
+
+ include!("stack-probes.rs");
+diff --git a/library/test/src/stats/tests.rs b/library/test/src/stats/tests.rs
+--- a/library/test/src/stats/tests.rs  2022-05-13 01:23:03.885645605 -0700
++++ b/library/test/src/stats/tests.rs  2022-05-13 01:22:41.274046869 -0700
+@@ -40,6 +40,7 @@ fn check(samples: &[f64], summ: &Summary
+ }
+
+ #[test]
++#[ignore]
+ fn test_min_max_nan() {
+     let xs = &[1.0, 2.0, f64::NAN, 3.0, 4.0];
+     let summary = Summary::new(xs);
+diff --git a/src/test/codegen/abi-main-signature-32bit-c-int.rs b/src/test/codegen/abi-main-signature-32bit-c-int.rs
+--- a/src/test/codegen/abi-main-signature-32bit-c-int.rs       2022-05-13 01:24:25.768191603 -0700
++++ b/src/test/codegen/abi-main-signature-32bit-c-int.rs       2022-05-13 01:18:12.846799686 -0700
+@@ -3,6 +3,7 @@
+
+ // This test is for targets with 32bit c_int only.
+ // ignore-msp430
++// ignore-stage1
+
+ fn main() {
+ }
+diff --git a/src/test/codegen/uninit-consts.rs b/src/test/codegen/uninit-consts.rs
+--- a/src/test/codegen/uninit-consts.rs        2022-05-13 01:25:39.250885645 -0700
++++ a/src/test/codegen/uninit-consts.rs        2022-05-13 01:18:42.986267201 -0700
+@@ -1,4 +1,5 @@
+ // compile-flags: -C no-prepopulate-passes
++// ignore-stage1
+
+ // Check that we use undef (and not zero) for uninitialized bytes in constants.
+
+diff --git a/src/test/codegen/uninit-consts-allow-partially-uninit.rs b/src/test/codegen/uninit-consts-allow-partially-uninit.rs
+--- a/src/test/codegen/uninit-consts-allow-partially-uninit.rs 2022-05-13 01:25:11.075386507 -0700
++++ b/src/test/codegen/uninit-consts-allow-partially-uninit.rs 2022-05-13 01:18:28.034531406 -0700
+@@ -2,6 +2,7 @@
+
+ // Like uninit-consts.rs, but tests that we correctly generate partially-uninit consts
+ // when the (disabled by default) partially_uninit_const_threshold flag is used.
++// ignore-stage1
+
+ #![crate_type = "lib"]
+
+diff --git a/src/test/pretty/raw-str-nonexpr.rs b/src/test/pretty/raw-str-nonexpr.rs
+--- a/src/test/pretty/raw-str-nonexpr.rs       2022-05-13 01:19:09.937790748 -0700
++++ b/src/test/pretty/raw-str-nonexpr.rs       2022-05-13 01:19:20.445604923 -0700
+@@ -1,4 +1,5 @@
+ // pp-exact
++// ignore-stage1
+
+ #[cfg(foo = r#"just parse this"#)]
+ extern crate blah as blah;
+diff --git b/src/test/ui/empty_global_asm.rs b/src/test/ui/empty_global_asm.rs
+--- a/src/test/ui/empty_global_asm.rs  2022-05-13 03:09:35.231993072 -0700
++++ b/src/test/ui/empty_global_asm.rs  2022-05-13 03:09:46.967896517 -0700
+@@ -1,4 +1,5 @@
+ // run-pass
++// ignore-stage1
+
+ #[allow(unused_imports)]
+ use std::arch::global_asm;
diff --git a/meta/recipes-devtools/rust/rust-testsuite_1.60.0.bb b/meta/recipes-devtools/rust/rust-testsuite_1.60.0.bb
new file mode 100644
index 0000000000..d334231c8f
--- /dev/null
+++ b/meta/recipes-devtools/rust/rust-testsuite_1.60.0.bb
@@ -0,0 +1,3 @@ 
+require rust-testsuite.inc
+require rust-source.inc
+require rust-snapshot.inc