diff mbox series

support/testing: TestRust{Bin} use ripgrep package for testing

Message ID 20220224001455.206249-1-romain.naour@gmail.com
State Superseded
Headers show
Series support/testing: TestRust{Bin} use ripgrep package for testing | expand

Commit Message

Romain Naour Feb. 24, 2022, 12:14 a.m. UTC
TestRust and TestRustBin has been introduced at the time when there was
no cargo package infrastructure or any package using rust compiler
(Buildroot 2018.02).

Since then the ripgrep package has been introduced, initially using
the generic package infrastructure and converted later to the cargo
package infrastructure.

Due a recent change in rust/cargo removing the cargo config file [1]
the test TestRust and TestRustBin now fail to compile since they build
an hello-world crate outside of the cargo package infrastructure
without the correct environment for cross-compiling.

Replace the 'hello-world' crate by ripgrep package and check if it
can run properly in Qemu.

Fixes tests.package.test_rust.TestRustBin:
https://gitlab.com/buildroot.org/buildroot/-/jobs/2116202545

But doesn't fixes tests.package.test_rust.TestRust due another bug:
https://gitlab.com/buildroot.org/buildroot/-/jobs/2116202544

[1] b6378631c2609742382984f6f7b93c1d9d2cdb78

Signed-off-by: Romain Naour <romain.naour@gmail.com>
---

Using ripgrep or bat package trigger an issue while using rustc:

error[E0514]: found crate `core` compiled by an incompatible version of rustc
  |
  = help: please recompile that crate using this compiler (rustc 1.58.1) (consider running `cargo clean` first)
  = note: the following crate versions were found:
          crate `core` compiled by rustc 1.58.1 (db9d1b20b 2022-01-20): TestRust/host/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcore-6cfcec236d576603.rlib

error[E0514]: found crate `std` compiled by an incompatible version of rustc

The problem is not really a cross-compilation issue (we are building
for an armv7 on x86_64 host) but a problem with rustc libraries (rlib).

We can notice that "rustc 1.58.1 (db9d1b20b 2022-01-20)" is the same
version as the prebuilt rustc:

TestRust/host/bin/rustc --version
rustc 1.58.1
TestRustBin/host/bin/rustc --version
rustc 1.58.1 (db9d1b20b 2022-01-20)

Indeed we are using host-rust-bin to bootstrap the host-rust compiler
package built by Buildroot. The problem is that the
libcore-6cfcec236d576603.rlib file come from host-rust-bin and is not
removed before installing host-rust built by Buildroot. We notice
that host-rust can't override libcore-6cfcec236d576603.rlib because
it use another hash libcore-79e5699dd357edbd.rlib

To fixes the ripgrep build we have to copy manually (for now) all rlib
files from
TestRust/build/tmp/tarball/rust-std/x86_64-unknown-linux-gnu/image/lib/rustlib/x86_64-unknown-linux-gnu/lib
to TestRust/host/lib/rustlib/x86_64-unknown-linux-gnu/lib

(Indeed we spent a lot of time to build host-rust and some important
libraries are not installed to HOST_DIR)

When Buildroot build its rust compiler we probably need to avoid
installing in HOST_DIR the rust compiler used to bootstrap.
---
 support/testing/tests/package/test_rust.py | 48 ++--------------------
 1 file changed, 4 insertions(+), 44 deletions(-)

Comments

Peter Korsgaard March 20, 2022, 5:34 p.m. UTC | #1
>>>>> "Romain" == Romain Naour <romain.naour@gmail.com> writes:

 > TestRust and TestRustBin has been introduced at the time when there was
 > no cargo package infrastructure or any package using rust compiler
 > (Buildroot 2018.02).

 > Since then the ripgrep package has been introduced, initially using
 > the generic package infrastructure and converted later to the cargo
 > package infrastructure.

 > Due a recent change in rust/cargo removing the cargo config file [1]
 > the test TestRust and TestRustBin now fail to compile since they build
 > an hello-world crate outside of the cargo package infrastructure
 > without the correct environment for cross-compiling.

 > Replace the 'hello-world' crate by ripgrep package and check if it
 > can run properly in Qemu.

 > Fixes tests.package.test_rust.TestRustBin:
 > https://gitlab.com/buildroot.org/buildroot/-/jobs/2116202545

 > But doesn't fixes tests.package.test_rust.TestRust due another bug:
 > https://gitlab.com/buildroot.org/buildroot/-/jobs/2116202544

 > [1] b6378631c2609742382984f6f7b93c1d9d2cdb78

 > Signed-off-by: Romain Naour <romain.naour@gmail.com>


Committed to 2022.02.x, thanks.
diff mbox series

Patch

diff --git a/support/testing/tests/package/test_rust.py b/support/testing/tests/package/test_rust.py
index 884b40a4a3..a1abd20c09 100644
--- a/support/testing/tests/package/test_rust.py
+++ b/support/testing/tests/package/test_rust.py
@@ -8,9 +8,6 @@  import infra.basetest
 
 class TestRustBase(infra.basetest.BRTest):
 
-    target = 'armv7-unknown-linux-gnueabihf'
-    crate = 'hello-world'
-
     def login(self):
         img = os.path.join(self.builddir, "images", "rootfs.cpio")
         self.emulator.boot(arch="armv7",
@@ -18,43 +15,6 @@  class TestRustBase(infra.basetest.BRTest):
                            options=["-initrd", img])
         self.emulator.login()
 
-    def build_test_prog(self):
-        hostdir = os.path.join(self.builddir, 'host')
-        env = os.environ.copy()
-        env["USER"] = "br-user"
-        env["PATH"] = "{}:".format(os.path.join(hostdir, 'bin')) + env["PATH"]
-        env["CARGO_HOME"] = os.path.join(hostdir, 'usr', 'share', 'cargo')
-        env["RUST_TARGET_PATH"] = os.path.join(hostdir, 'etc', 'rustc')
-        cargo = os.path.join(hostdir, 'bin', 'cargo')
-        workdir = os.path.join(tempfile.mkdtemp(suffix='-br2-testing-rust'),
-                               self.crate)
-        manifest = os.path.join(workdir, 'Cargo.toml')
-        prog = os.path.join(workdir, 'target', self.target, 'debug', self.crate)
-
-        cmd = [cargo, 'init', '--bin', '--vcs', 'none', '-vv', workdir]
-        ret = subprocess.call(cmd,
-                              stdout=self.b.logfile,
-                              stderr=self.b.logfile,
-                              env=env)
-        if ret != 0:
-            raise SystemError("Cargo init failed")
-
-        cmd = [
-            cargo, 'build', '-vv', '--target', self.target,
-            '--manifest-path', manifest
-        ]
-        ret = subprocess.call(cmd,
-                              stdout=self.b.logfile,
-                              stderr=self.b.logfile,
-                              env=env)
-        if ret != 0:
-            raise SystemError("Cargo build failed")
-
-        shutil.copy(prog, os.path.join(self.builddir, 'target', 'usr', 'bin'))
-        self.b.build()
-        shutil.rmtree(workdir)
-
-
 class TestRustBin(TestRustBase):
     config = \
         """
@@ -68,12 +28,12 @@  class TestRustBin(TestRustBase):
         BR2_TARGET_ROOTFS_CPIO=y
         # BR2_TARGET_ROOTFS_TAR is not set
         BR2_PACKAGE_HOST_RUSTC=y
+        BR2_PACKAGE_RIPGREP=y
         """
 
     def test_run(self):
-        self.build_test_prog()
         self.login()
-        self.assertRunOk(self.crate)
+        self.assertRunOk("rg Buildroot /etc/issue")
 
 
 class TestRust(TestRustBase):
@@ -90,9 +50,9 @@  class TestRust(TestRustBase):
         # BR2_TARGET_ROOTFS_TAR is not set
         BR2_PACKAGE_HOST_RUSTC=y
         BR2_PACKAGE_HOST_RUST=y
+        BR2_PACKAGE_RIPGREP=y
         """
 
     def test_run(self):
-        self.build_test_prog()
         self.login()
-        self.assertRunOk(self.crate)
+        self.assertRunOk("rg Buildroot /etc/issue")