mirror of
https://github.com/PartialVolume/shredos.x86_64.git
synced 2026-02-24 03:22:11 +00:00
These tests simply build a system with musl and uclibc toolchains, and boot them under qemu. It allows to minimally validate that our support for musl/uclibc external toolchains is working. We already had some tests covering glibc toolchains, so we can now easily test that all three C libraries are supported. Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> --- This commit is part of the series, as I've written/used those tests to validate that things are still working correctly with all of glibc, uclibc and musl toolchains.
232 lines
7.7 KiB
Python
232 lines
7.7 KiB
Python
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()
|