test_external.py 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252
  1. import os
  2. import infra
  3. BASIC_CONFIG = \
  4. """
  5. BR2_TARGET_ROOTFS_CPIO=y
  6. # BR2_TARGET_ROOTFS_TAR is not set
  7. """
  8. def has_broken_links(path):
  9. for root, dirs, files in os.walk(path):
  10. for f in files:
  11. fpath = os.path.join(root, f)
  12. if not os.path.exists(fpath):
  13. return True
  14. return False
  15. class TestExternalToolchain(infra.basetest.BRTest):
  16. def common_check(self):
  17. # Check for broken symlinks
  18. for d in ["lib", "usr/lib"]:
  19. path = os.path.join(self.builddir, "staging", d)
  20. self.assertFalse(has_broken_links(path))
  21. path = os.path.join(self.builddir, "target", d)
  22. self.assertFalse(has_broken_links(path))
  23. interp = infra.get_elf_prog_interpreter(self.builddir,
  24. self.toolchain_prefix,
  25. "bin/busybox")
  26. interp_path = os.path.join(self.builddir, "target", interp[1:])
  27. self.assertTrue(os.path.exists(interp_path))
  28. class TestExternalToolchainSourceryArmv4(TestExternalToolchain):
  29. config = BASIC_CONFIG + \
  30. """
  31. BR2_arm=y
  32. BR2_arm920t=y
  33. BR2_TOOLCHAIN_EXTERNAL=y
  34. BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_ARM=y
  35. """
  36. toolchain_prefix = "arm-none-linux-gnueabi"
  37. def test_run(self):
  38. TestExternalToolchain.common_check(self)
  39. # Check the architecture variant
  40. arch = infra.get_file_arch(self.builddir,
  41. self.toolchain_prefix,
  42. "lib/libc.so.6")
  43. self.assertEqual(arch, "v4T")
  44. # Check the sysroot symlink
  45. symlink = os.path.join(self.builddir, "staging", "armv4t")
  46. self.assertTrue(os.path.exists(symlink))
  47. self.assertEqual(os.readlink(symlink), "./")
  48. # Boot the system
  49. img = os.path.join(self.builddir, "images", "rootfs.cpio")
  50. self.emulator.boot(arch="armv5",
  51. kernel="builtin",
  52. options=["-initrd", img])
  53. self.emulator.login()
  54. class TestExternalToolchainSourceryArmv5(TestExternalToolchain):
  55. config = BASIC_CONFIG + \
  56. """
  57. BR2_arm=y
  58. BR2_TOOLCHAIN_EXTERNAL=y
  59. BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_ARM=y
  60. """
  61. toolchain_prefix = "arm-none-linux-gnueabi"
  62. def test_run(self):
  63. TestExternalToolchain.common_check(self)
  64. # Check the architecture variant
  65. arch = infra.get_file_arch(self.builddir,
  66. self.toolchain_prefix,
  67. "lib/libc.so.6")
  68. self.assertEqual(arch, "v5TE")
  69. # Boot the system
  70. img = os.path.join(self.builddir, "images", "rootfs.cpio")
  71. self.emulator.boot(arch="armv5",
  72. kernel="builtin",
  73. options=["-initrd", img])
  74. self.emulator.login()
  75. class TestExternalToolchainSourceryArmv7(TestExternalToolchain):
  76. config = BASIC_CONFIG + \
  77. """
  78. BR2_arm=y
  79. BR2_cortex_a8=y
  80. BR2_ARM_EABI=y
  81. BR2_ARM_INSTRUCTIONS_THUMB2=y
  82. BR2_TOOLCHAIN_EXTERNAL=y
  83. BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_ARM=y
  84. """
  85. toolchain_prefix = "arm-none-linux-gnueabi"
  86. def test_run(self):
  87. TestExternalToolchain.common_check(self)
  88. # Check the architecture variant
  89. arch = infra.get_file_arch(self.builddir,
  90. self.toolchain_prefix,
  91. "lib/libc.so.6")
  92. self.assertEqual(arch, "v7")
  93. isa = infra.get_elf_arch_tag(self.builddir,
  94. self.toolchain_prefix,
  95. "lib/libc.so.6",
  96. "Tag_THUMB_ISA_use")
  97. self.assertEqual(isa, "Thumb-2")
  98. # Check we have the sysroot symlink
  99. symlink = os.path.join(self.builddir, "staging", "thumb2")
  100. self.assertTrue(os.path.exists(symlink))
  101. self.assertEqual(os.readlink(symlink), "./")
  102. # Boot the system
  103. img = os.path.join(self.builddir, "images", "rootfs.cpio")
  104. self.emulator.boot(arch="armv7",
  105. kernel="builtin",
  106. options=["-initrd", img])
  107. self.emulator.login()
  108. class TestExternalToolchainLinaroArm(TestExternalToolchain):
  109. config = BASIC_CONFIG + \
  110. """
  111. BR2_arm=y
  112. BR2_cortex_a8=y
  113. BR2_TOOLCHAIN_EXTERNAL=y
  114. BR2_TOOLCHAIN_EXTERNAL_LINARO_ARM=y
  115. """
  116. toolchain_prefix = "arm-linux-gnueabihf"
  117. def test_run(self):
  118. TestExternalToolchain.common_check(self)
  119. # Check the architecture variant
  120. arch = infra.get_file_arch(self.builddir,
  121. self.toolchain_prefix,
  122. "lib/libc.so.6")
  123. self.assertEqual(arch, "v7")
  124. isa = infra.get_elf_arch_tag(self.builddir,
  125. self.toolchain_prefix,
  126. "lib/libc.so.6",
  127. "Tag_THUMB_ISA_use")
  128. self.assertEqual(isa, "Thumb-2")
  129. # Boot the system
  130. img = os.path.join(self.builddir, "images", "rootfs.cpio")
  131. self.emulator.boot(arch="armv7",
  132. kernel="builtin",
  133. options=["-initrd", img])
  134. self.emulator.login()
  135. class TestExternalToolchainBuildrootMusl(TestExternalToolchain):
  136. config = BASIC_CONFIG + \
  137. """
  138. BR2_arm=y
  139. BR2_cortex_a9=y
  140. BR2_ARM_ENABLE_VFP=y
  141. BR2_TOOLCHAIN_EXTERNAL=y
  142. BR2_TOOLCHAIN_EXTERNAL_CUSTOM=y
  143. BR2_TOOLCHAIN_EXTERNAL_DOWNLOAD=y
  144. BR2_TOOLCHAIN_EXTERNAL_URL="http://autobuild.buildroot.org/toolchains/tarballs/br-arm-cortex-a9-musl-2017.05-444-g6c704ba.tar.bz2"
  145. BR2_TOOLCHAIN_EXTERNAL_GCC_6=y
  146. BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_11=y
  147. BR2_TOOLCHAIN_EXTERNAL_CUSTOM_MUSL=y
  148. BR2_TOOLCHAIN_EXTERNAL_CXX=y
  149. """
  150. toolchain_prefix = "arm-linux"
  151. def test_run(self):
  152. TestExternalToolchain.common_check(self)
  153. img = os.path.join(self.builddir, "images", "rootfs.cpio")
  154. self.emulator.boot(arch="armv7",
  155. kernel="builtin",
  156. options=["-initrd", img])
  157. self.emulator.login()
  158. class TestExternalToolchainCtngMusl(TestExternalToolchain):
  159. config = BASIC_CONFIG + \
  160. """
  161. BR2_arm=y
  162. BR2_cortex_a9=y
  163. BR2_ARM_ENABLE_VFP=y
  164. BR2_TOOLCHAIN_EXTERNAL=y
  165. BR2_TOOLCHAIN_EXTERNAL_CUSTOM=y
  166. BR2_TOOLCHAIN_EXTERNAL_DOWNLOAD=y
  167. BR2_TOOLCHAIN_EXTERNAL_URL="http://autobuild.buildroot.net/toolchains/tarballs/arm-ctng-linux-musleabihf.tar.xz"
  168. BR2_TOOLCHAIN_EXTERNAL_CUSTOM_PREFIX="arm-ctng-linux-musleabihf"
  169. BR2_TOOLCHAIN_EXTERNAL_GCC_7=y
  170. BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_10=y
  171. BR2_TOOLCHAIN_EXTERNAL_CUSTOM_MUSL=y
  172. BR2_TOOLCHAIN_EXTERNAL_CXX=y
  173. """
  174. toolchain_prefix = "arm-ctng-linux-musleabihf"
  175. def test_run(self):
  176. TestExternalToolchain.common_check(self)
  177. img = os.path.join(self.builddir, "images", "rootfs.cpio")
  178. self.emulator.boot(arch="armv7",
  179. kernel="builtin",
  180. options=["-initrd", img])
  181. self.emulator.login()
  182. class TestExternalToolchainBuildrootuClibc(TestExternalToolchain):
  183. config = BASIC_CONFIG + \
  184. """
  185. BR2_arm=y
  186. BR2_TOOLCHAIN_EXTERNAL=y
  187. BR2_TOOLCHAIN_EXTERNAL_CUSTOM=y
  188. BR2_TOOLCHAIN_EXTERNAL_DOWNLOAD=y
  189. BR2_TOOLCHAIN_EXTERNAL_URL="http://autobuild.buildroot.org/toolchains/tarballs/br-arm-full-2017.05-444-g6c704ba.tar.bz2"
  190. BR2_TOOLCHAIN_EXTERNAL_GCC_4_9=y
  191. BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_10=y
  192. BR2_TOOLCHAIN_EXTERNAL_LOCALE=y
  193. # BR2_TOOLCHAIN_EXTERNAL_HAS_THREADS_DEBUG is not set
  194. BR2_TOOLCHAIN_EXTERNAL_CXX=y
  195. """
  196. toolchain_prefix = "arm-linux"
  197. def test_run(self):
  198. TestExternalToolchain.common_check(self)
  199. img = os.path.join(self.builddir, "images", "rootfs.cpio")
  200. self.emulator.boot(arch="armv7",
  201. kernel="builtin",
  202. options=["-initrd", img])
  203. self.emulator.login()
  204. class TestExternalToolchainCCache(TestExternalToolchainBuildrootuClibc):
  205. extraconfig = \
  206. """
  207. BR2_CCACHE=y
  208. BR2_CCACHE_DIR="{builddir}/ccache-dir"
  209. """
  210. def __init__(self, names):
  211. super(TestExternalToolchainBuildrootuClibc, self).__init__(names)
  212. self.config += self.extraconfig.format(builddir=self.builddir)