123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252 |
- 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))
- 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-444-g6c704ba.tar.bz2"
- BR2_TOOLCHAIN_EXTERNAL_GCC_6=y
- BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_11=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-444-g6c704ba.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)
|