xref: /OK3568_Linux_fs/buildroot/support/testing/tests/package/test_rust.py (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyunimport os
2*4882a593Smuzhiyunimport tempfile
3*4882a593Smuzhiyunimport subprocess
4*4882a593Smuzhiyunimport shutil
5*4882a593Smuzhiyun
6*4882a593Smuzhiyunimport infra.basetest
7*4882a593Smuzhiyun
8*4882a593Smuzhiyun
9*4882a593Smuzhiyunclass TestRustBase(infra.basetest.BRTest):
10*4882a593Smuzhiyun
11*4882a593Smuzhiyun    target = 'armv7-unknown-linux-gnueabihf'
12*4882a593Smuzhiyun    crate = 'hello-world'
13*4882a593Smuzhiyun
14*4882a593Smuzhiyun    def login(self):
15*4882a593Smuzhiyun        img = os.path.join(self.builddir, "images", "rootfs.cpio")
16*4882a593Smuzhiyun        self.emulator.boot(arch="armv7",
17*4882a593Smuzhiyun                           kernel="builtin",
18*4882a593Smuzhiyun                           options=["-initrd", img])
19*4882a593Smuzhiyun        self.emulator.login()
20*4882a593Smuzhiyun
21*4882a593Smuzhiyun    def build_test_prog(self):
22*4882a593Smuzhiyun        hostdir = os.path.join(self.builddir, 'host')
23*4882a593Smuzhiyun        env = os.environ.copy()
24*4882a593Smuzhiyun        env["USER"] = "br-user"
25*4882a593Smuzhiyun        env["PATH"] = "{}:".format(os.path.join(hostdir, 'bin')) + env["PATH"]
26*4882a593Smuzhiyun        env["CARGO_HOME"] = os.path.join(hostdir, 'usr', 'share', 'cargo')
27*4882a593Smuzhiyun        env["RUST_TARGET_PATH"] = os.path.join(hostdir, 'etc', 'rustc')
28*4882a593Smuzhiyun        cargo = os.path.join(hostdir, 'bin', 'cargo')
29*4882a593Smuzhiyun        workdir = os.path.join(tempfile.mkdtemp(suffix='-br2-testing-rust'),
30*4882a593Smuzhiyun                               self.crate)
31*4882a593Smuzhiyun        manifest = os.path.join(workdir, 'Cargo.toml')
32*4882a593Smuzhiyun        prog = os.path.join(workdir, 'target', self.target, 'debug', self.crate)
33*4882a593Smuzhiyun
34*4882a593Smuzhiyun        cmd = [cargo, 'init', '--bin', '--vcs', 'none', '-vv', workdir]
35*4882a593Smuzhiyun        ret = subprocess.call(cmd,
36*4882a593Smuzhiyun                              stdout=self.b.logfile,
37*4882a593Smuzhiyun                              stderr=self.b.logfile,
38*4882a593Smuzhiyun                              env=env)
39*4882a593Smuzhiyun        if ret != 0:
40*4882a593Smuzhiyun            raise SystemError("Cargo init failed")
41*4882a593Smuzhiyun
42*4882a593Smuzhiyun        cmd = [
43*4882a593Smuzhiyun            cargo, 'build', '-vv', '--target', self.target,
44*4882a593Smuzhiyun            '--manifest-path', manifest
45*4882a593Smuzhiyun        ]
46*4882a593Smuzhiyun        ret = subprocess.call(cmd,
47*4882a593Smuzhiyun                              stdout=self.b.logfile,
48*4882a593Smuzhiyun                              stderr=self.b.logfile,
49*4882a593Smuzhiyun                              env=env)
50*4882a593Smuzhiyun        if ret != 0:
51*4882a593Smuzhiyun            raise SystemError("Cargo build failed")
52*4882a593Smuzhiyun
53*4882a593Smuzhiyun        shutil.copy(prog, os.path.join(self.builddir, 'target', 'usr', 'bin'))
54*4882a593Smuzhiyun        self.b.build()
55*4882a593Smuzhiyun        shutil.rmtree(workdir)
56*4882a593Smuzhiyun
57*4882a593Smuzhiyun
58*4882a593Smuzhiyunclass TestRustBin(TestRustBase):
59*4882a593Smuzhiyun    config = \
60*4882a593Smuzhiyun        """
61*4882a593Smuzhiyun        BR2_arm=y
62*4882a593Smuzhiyun        BR2_cortex_a9=y
63*4882a593Smuzhiyun        BR2_ARM_ENABLE_NEON=y
64*4882a593Smuzhiyun        BR2_ARM_ENABLE_VFP=y
65*4882a593Smuzhiyun        BR2_TOOLCHAIN_EXTERNAL=y
66*4882a593Smuzhiyun        BR2_TARGET_GENERIC_GETTY_PORT="ttyAMA0"
67*4882a593Smuzhiyun        BR2_SYSTEM_DHCP="eth0"
68*4882a593Smuzhiyun        BR2_TARGET_ROOTFS_CPIO=y
69*4882a593Smuzhiyun        # BR2_TARGET_ROOTFS_TAR is not set
70*4882a593Smuzhiyun        BR2_PACKAGE_HOST_RUSTC=y
71*4882a593Smuzhiyun        """
72*4882a593Smuzhiyun
73*4882a593Smuzhiyun    def test_run(self):
74*4882a593Smuzhiyun        self.build_test_prog()
75*4882a593Smuzhiyun        self.login()
76*4882a593Smuzhiyun        self.assertRunOk(self.crate)
77*4882a593Smuzhiyun
78*4882a593Smuzhiyun
79*4882a593Smuzhiyunclass TestRust(TestRustBase):
80*4882a593Smuzhiyun    config = \
81*4882a593Smuzhiyun        """
82*4882a593Smuzhiyun        BR2_arm=y
83*4882a593Smuzhiyun        BR2_cortex_a9=y
84*4882a593Smuzhiyun        BR2_ARM_ENABLE_NEON=y
85*4882a593Smuzhiyun        BR2_ARM_ENABLE_VFP=y
86*4882a593Smuzhiyun        BR2_TOOLCHAIN_EXTERNAL=y
87*4882a593Smuzhiyun        BR2_TARGET_GENERIC_GETTY_PORT="ttyAMA0"
88*4882a593Smuzhiyun        BR2_SYSTEM_DHCP="eth0"
89*4882a593Smuzhiyun        BR2_TARGET_ROOTFS_CPIO=y
90*4882a593Smuzhiyun        # BR2_TARGET_ROOTFS_TAR is not set
91*4882a593Smuzhiyun        BR2_PACKAGE_HOST_RUSTC=y
92*4882a593Smuzhiyun        BR2_PACKAGE_HOST_RUST=y
93*4882a593Smuzhiyun        """
94*4882a593Smuzhiyun
95*4882a593Smuzhiyun    def test_run(self):
96*4882a593Smuzhiyun        self.build_test_prog()
97*4882a593Smuzhiyun        self.login()
98*4882a593Smuzhiyun        self.assertRunOk(self.crate)
99