import os import infra BASIC_CONFIG = \ """ BR2_TARGET_ROOTFS_CPIO=y # BR2_TARGET_ROOTFS_TAR is not set """ def has_broken_links(path): for root, dirs, files in os.walk(path): for f in files: fpath = os.path.join(root, f) if not os.path.exists(fpath): return True return False class TestExternalToolchain(infra.basetest.BRTest): def common_check(self): # Check for broken symlinks for d in ["lib", "usr/lib"]: path = os.path.join(self.builddir, "staging", d) self.assertFalse(has_broken_links(path)) path = os.path.join(self.builddir, "target", d) self.assertFalse(has_broken_links(path)) with open(os.path.join(self.builddir, ".config"), 'r') as configf: configlines = [l.strip() for l in configf.readlines()] if "BR2_BINFMT_ELF=y" in configlines: interp = infra.get_elf_prog_interpreter(self.builddir, self.toolchain_prefix, "bin/busybox") interp_path = os.path.join(self.builddir, "target", interp[1:]) self.assertTrue(os.path.exists(interp_path)) class TestExternalToolchainSourceryArmv4(TestExternalToolchain): config = BASIC_CONFIG + \ """ BR2_arm=y BR2_arm920t=y BR2_TOOLCHAIN_EXTERNAL=y BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_ARM=y """ toolchain_prefix = "arm-none-linux-gnueabi" def test_run(self): TestExternalToolchain.common_check(self) # Check the architecture variant arch = infra.get_file_arch(self.builddir, self.toolchain_prefix, "lib/libc.so.6") self.assertEqual(arch, "v4T") # Check the sysroot symlink symlink = os.path.join(self.builddir, "staging", "armv4t") self.assertTrue(os.path.exists(symlink)) self.assertEqual(os.readlink(symlink), "./") # Boot the system img = os.path.join(self.builddir, "images", "rootfs.cpio") self.emulator.boot(arch="armv5", kernel="builtin", options=["-initrd", img]) self.emulator.login() class TestExternalToolchainSourceryArmv5(TestExternalToolchain): config = BASIC_CONFIG + \ """ BR2_arm=y BR2_TOOLCHAIN_EXTERNAL=y BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_ARM=y """ toolchain_prefix = "arm-none-linux-gnueabi" def test_run(self): TestExternalToolchain.common_check(self) # Check the architecture variant arch = infra.get_file_arch(self.builddir, self.toolchain_prefix, "lib/libc.so.6") self.assertEqual(arch, "v5TE") # Boot the system img = os.path.join(self.builddir, "images", "rootfs.cpio") self.emulator.boot(arch="armv5", kernel="builtin", options=["-initrd", img]) self.emulator.login() class TestExternalToolchainSourceryArmv7(TestExternalToolchain): config = BASIC_CONFIG + \ """ BR2_arm=y BR2_cortex_a8=y BR2_ARM_EABI=y BR2_ARM_INSTRUCTIONS_THUMB2=y BR2_TOOLCHAIN_EXTERNAL=y BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_ARM=y """ toolchain_prefix = "arm-none-linux-gnueabi" def test_run(self): TestExternalToolchain.common_check(self) # Check the architecture variant arch = infra.get_file_arch(self.builddir, self.toolchain_prefix, "lib/libc.so.6") self.assertEqual(arch, "v7") isa = infra.get_elf_arch_tag(self.builddir, self.toolchain_prefix, "lib/libc.so.6", "Tag_THUMB_ISA_use") self.assertEqual(isa, "Thumb-2") # Check we have the sysroot symlink symlink = os.path.join(self.builddir, "staging", "thumb2") self.assertTrue(os.path.exists(symlink)) self.assertEqual(os.readlink(symlink), "./") # Boot the system img = os.path.join(self.builddir, "images", "rootfs.cpio") self.emulator.boot(arch="armv7", kernel="builtin", options=["-initrd", img]) self.emulator.login() class TestExternalToolchainLinaroArm(TestExternalToolchain): config = BASIC_CONFIG + \ """ BR2_arm=y BR2_cortex_a8=y BR2_TOOLCHAIN_EXTERNAL=y BR2_TOOLCHAIN_EXTERNAL_LINARO_ARM=y """ toolchain_prefix = "arm-linux-gnueabihf" def test_run(self): TestExternalToolchain.common_check(self) # Check the architecture variant arch = infra.get_file_arch(self.builddir, self.toolchain_prefix, "lib/libc.so.6") self.assertEqual(arch, "v7") isa = infra.get_elf_arch_tag(self.builddir, self.toolchain_prefix, "lib/libc.so.6", "Tag_THUMB_ISA_use") self.assertEqual(isa, "Thumb-2") # Boot the system img = os.path.join(self.builddir, "images", "rootfs.cpio") self.emulator.boot(arch="armv7", kernel="builtin", options=["-initrd", img]) self.emulator.login() class TestExternalToolchainBuildrootMusl(TestExternalToolchain): config = BASIC_CONFIG + \ """ BR2_arm=y BR2_cortex_a9=y BR2_ARM_ENABLE_VFP=y BR2_TOOLCHAIN_EXTERNAL=y BR2_TOOLCHAIN_EXTERNAL_CUSTOM=y BR2_TOOLCHAIN_EXTERNAL_DOWNLOAD=y BR2_TOOLCHAIN_EXTERNAL_URL="http://autobuild.buildroot.org/toolchains/tarballs/br-arm-cortex-a9-musl-2017.05-1078-g95b1dae.tar.bz2" BR2_TOOLCHAIN_EXTERNAL_GCC_6=y BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_12=y BR2_TOOLCHAIN_EXTERNAL_CUSTOM_MUSL=y BR2_TOOLCHAIN_EXTERNAL_CXX=y """ toolchain_prefix = "arm-linux" def test_run(self): TestExternalToolchain.common_check(self) img = os.path.join(self.builddir, "images", "rootfs.cpio") self.emulator.boot(arch="armv7", kernel="builtin", options=["-initrd", img]) self.emulator.login() class TestExternalToolchainCtngMusl(TestExternalToolchain): config = BASIC_CONFIG + \ """ BR2_arm=y BR2_cortex_a9=y BR2_ARM_ENABLE_VFP=y BR2_TOOLCHAIN_EXTERNAL=y BR2_TOOLCHAIN_EXTERNAL_CUSTOM=y BR2_TOOLCHAIN_EXTERNAL_DOWNLOAD=y BR2_TOOLCHAIN_EXTERNAL_URL="http://autobuild.buildroot.net/toolchains/tarballs/arm-ctng-linux-musleabihf.tar.xz" BR2_TOOLCHAIN_EXTERNAL_CUSTOM_PREFIX="arm-ctng-linux-musleabihf" BR2_TOOLCHAIN_EXTERNAL_GCC_7=y BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_10=y BR2_TOOLCHAIN_EXTERNAL_CUSTOM_MUSL=y BR2_TOOLCHAIN_EXTERNAL_CXX=y """ toolchain_prefix = "arm-ctng-linux-musleabihf" def test_run(self): TestExternalToolchain.common_check(self) img = os.path.join(self.builddir, "images", "rootfs.cpio") self.emulator.boot(arch="armv7", kernel="builtin", options=["-initrd", img]) self.emulator.login() class TestExternalToolchainBuildrootuClibc(TestExternalToolchain): config = BASIC_CONFIG + \ """ BR2_arm=y BR2_TOOLCHAIN_EXTERNAL=y BR2_TOOLCHAIN_EXTERNAL_CUSTOM=y BR2_TOOLCHAIN_EXTERNAL_DOWNLOAD=y BR2_TOOLCHAIN_EXTERNAL_URL="http://autobuild.buildroot.org/toolchains/tarballs/br-arm-full-2017.05-1078-g95b1dae.tar.bz2" BR2_TOOLCHAIN_EXTERNAL_GCC_4_9=y BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_10=y BR2_TOOLCHAIN_EXTERNAL_LOCALE=y # BR2_TOOLCHAIN_EXTERNAL_HAS_THREADS_DEBUG is not set BR2_TOOLCHAIN_EXTERNAL_CXX=y """ toolchain_prefix = "arm-linux" def test_run(self): TestExternalToolchain.common_check(self) img = os.path.join(self.builddir, "images", "rootfs.cpio") self.emulator.boot(arch="armv7", kernel="builtin", options=["-initrd", img]) self.emulator.login() class TestExternalToolchainCCache(TestExternalToolchainBuildrootuClibc): extraconfig = \ """ BR2_CCACHE=y BR2_CCACHE_DIR="{builddir}/ccache-dir" """ def __init__(self, names): super(TestExternalToolchainBuildrootuClibc, self).__init__(names) self.config += self.extraconfig.format(builddir=self.builddir)