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