aboutsummaryrefslogtreecommitdiff
path: root/support
diff options
context:
space:
mode:
Diffstat (limited to 'support')
-rw-r--r--support/config-fragments/autobuild/bootlin-aarch64-glibc.config4
-rw-r--r--support/config-fragments/autobuild/bootlin-arcle-hs38-uclibc.config5
-rw-r--r--support/config-fragments/autobuild/bootlin-armv5-uclibc.config4
-rw-r--r--support/config-fragments/autobuild/bootlin-armv7-glibc.config6
-rw-r--r--support/config-fragments/autobuild/bootlin-armv7-musl.config6
-rw-r--r--support/config-fragments/autobuild/bootlin-armv7m-uclibc.config4
-rw-r--r--support/config-fragments/autobuild/bootlin-m68k-5208-uclibc.config4
-rw-r--r--support/config-fragments/autobuild/bootlin-m68k-68040-uclibc.config4
-rw-r--r--support/config-fragments/autobuild/bootlin-microblazeel-uclibc.config3
-rw-r--r--support/config-fragments/autobuild/bootlin-mipsel-uclibc.config4
-rw-r--r--support/config-fragments/autobuild/bootlin-mipsel32r6-glibc.config6
-rw-r--r--support/config-fragments/autobuild/bootlin-nios2-glibc.config4
-rw-r--r--support/config-fragments/autobuild/bootlin-openrisc-uclibc.config3
-rw-r--r--support/config-fragments/autobuild/bootlin-powerpc-e500mc-uclibc.config4
-rw-r--r--support/config-fragments/autobuild/bootlin-powerpc64le-power8-glibc.config4
-rw-r--r--support/config-fragments/autobuild/bootlin-riscv32-glibc.config5
-rw-r--r--support/config-fragments/autobuild/bootlin-riscv64-glibc.config5
-rw-r--r--support/config-fragments/autobuild/bootlin-riscv64-musl.config4
-rw-r--r--support/config-fragments/autobuild/bootlin-sh4-uclibc.config3
-rw-r--r--support/config-fragments/autobuild/bootlin-sparc-uclibc.config3
-rw-r--r--support/config-fragments/autobuild/bootlin-sparc64-glibc.config3
-rw-r--r--support/config-fragments/autobuild/bootlin-x86-64-glibc.config14
-rw-r--r--support/config-fragments/autobuild/bootlin-x86-64-musl.config4
-rw-r--r--support/config-fragments/autobuild/bootlin-x86-64-uclibc.config4
-rw-r--r--support/config-fragments/autobuild/bootlin-xtensa-uclibc.config5
-rw-r--r--support/config-fragments/autobuild/br-aarch64-glibc.config9
-rw-r--r--support/config-fragments/autobuild/br-arcle-hs38.config11
-rw-r--r--support/config-fragments/autobuild/br-arm-basic.config6
-rw-r--r--support/config-fragments/autobuild/br-arm-cortex-a9-glibc.config11
-rw-r--r--support/config-fragments/autobuild/br-arm-cortex-a9-musl.config11
-rw-r--r--support/config-fragments/autobuild/br-arm-cortex-m4-full.config12
-rw-r--r--support/config-fragments/autobuild/br-arm-full-nothread.config6
-rw-r--r--support/config-fragments/autobuild/br-arm-full-static.config4
-rw-r--r--support/config-fragments/autobuild/br-arm-full.config10
-rw-r--r--support/config-fragments/autobuild/br-i386-pentium-mmx-musl.config4
-rw-r--r--support/config-fragments/autobuild/br-i386-pentium4-full.config4
-rw-r--r--support/config-fragments/autobuild/br-m68k-5208-full.config11
-rw-r--r--support/config-fragments/autobuild/br-m68k-68040-full.config10
-rw-r--r--support/config-fragments/autobuild/br-microblazeel-full.config9
-rw-r--r--support/config-fragments/autobuild/br-mips32r6-el-hf-glibc.config11
-rw-r--r--support/config-fragments/autobuild/br-mips64-n64-full.config6
-rw-r--r--support/config-fragments/autobuild/br-mips64r6-el-hf-glibc.config6
-rw-r--r--support/config-fragments/autobuild/br-mipsel-o32-full.config10
-rw-r--r--support/config-fragments/autobuild/br-nios2-glibc.config9
-rw-r--r--support/config-fragments/autobuild/br-openrisc-uclibc.config9
-rw-r--r--support/config-fragments/autobuild/br-powerpc-603e-basic-cpp.config6
-rw-r--r--support/config-fragments/autobuild/br-powerpc-e500mc-full.config11
-rw-r--r--support/config-fragments/autobuild/br-powerpc64-power7-glibc.config6
-rw-r--r--support/config-fragments/autobuild/br-powerpc64le-power8-glibc.config9
-rw-r--r--support/config-fragments/autobuild/br-riscv32.config9
-rw-r--r--support/config-fragments/autobuild/br-riscv64-musl.config9
-rw-r--r--support/config-fragments/autobuild/br-riscv64.config8
-rw-r--r--support/config-fragments/autobuild/br-s390x-z13-internal-glibc.config4
-rw-r--r--support/config-fragments/autobuild/br-sh4-full.config10
-rw-r--r--support/config-fragments/autobuild/br-sparc-uclibc.config9
-rw-r--r--support/config-fragments/autobuild/br-sparc64-glibc.config8
-rw-r--r--support/config-fragments/autobuild/br-x86-64-core2-full.config11
-rw-r--r--support/config-fragments/autobuild/br-x86-64-musl.config10
-rw-r--r--support/config-fragments/autobuild/br-xtensa-full.config9
-rw-r--r--support/config-fragments/autobuild/toolchain-configs.csv49
-rw-r--r--support/dependencies/check-host-bison-flex.mk4
-rw-r--r--support/dependencies/check-host-cmake.mk4
-rwxr-xr-xsupport/dependencies/check-host-tar.sh14
-rwxr-xr-xsupport/dependencies/dependencies.sh6
-rwxr-xr-xsupport/download/git31
-rwxr-xr-xsupport/download/helpers76
-rwxr-xr-xsupport/download/svn27
-rw-r--r--support/gnuconfig/README.buildroot2
-rwxr-xr-xsupport/gnuconfig/config.guess14
-rwxr-xr-xsupport/gnuconfig/config.sub2
-rw-r--r--support/misc/Vagrantfile2
-rwxr-xr-xsupport/scripts/apply-patches.sh9
-rwxr-xr-xsupport/scripts/boot-qemu-image.py10
-rwxr-xr-xsupport/scripts/br2-external18
-rw-r--r--support/scripts/cpedb.py174
-rwxr-xr-xsupport/scripts/cve-checker196
-rwxr-xr-xsupport/scripts/cve.py50
-rwxr-xr-xsupport/scripts/gen-bootlin-toolchains34
-rwxr-xr-xsupport/scripts/generate-gitlab-ci-yml141
-rwxr-xr-xsupport/scripts/pkg-stats219
-rwxr-xr-xsupport/scripts/setlocalversion16
-rw-r--r--support/testing/tests/boot/test_atf.py31
-rw-r--r--support/testing/tests/boot/test_syslinux.py1
-rw-r--r--support/testing/tests/core/cpeid-br2-external/Config.in0
-rw-r--r--support/testing/tests/core/cpeid-br2-external/external.desc1
-rw-r--r--support/testing/tests/core/cpeid-br2-external/external.mk1
-rw-r--r--support/testing/tests/core/cpeid-br2-external/package/cpe-id-pkg1/cpe-id-pkg1.mk4
-rw-r--r--support/testing/tests/core/cpeid-br2-external/package/cpe-id-pkg2/cpe-id-pkg2.mk3
-rw-r--r--support/testing/tests/core/cpeid-br2-external/package/cpe-id-pkg3/cpe-id-pkg3.mk5
-rw-r--r--support/testing/tests/core/cpeid-br2-external/package/cpe-id-pkg4/cpe-id-pkg4.mk9
-rw-r--r--support/testing/tests/core/cpeid-br2-external/package/cpe-id-pkg5/cpe-id-pkg5.mk16
-rw-r--r--support/testing/tests/core/test_cpeid.py110
-rw-r--r--support/testing/tests/core/test_file_capabilities.py2
-rw-r--r--support/testing/tests/core/test_hardening.py1
-rw-r--r--support/testing/tests/core/test_selinux.py86
-rw-r--r--support/testing/tests/core/test_selinux/br2_external/Config.in1
-rw-r--r--support/testing/tests/core/test_selinux/br2_external/external.desc1
-rw-r--r--support/testing/tests/core/test_selinux/br2_external/external.mk1
-rw-r--r--support/testing/tests/core/test_selinux/br2_external/package/selinux-test/Config.in4
-rw-r--r--support/testing/tests/core/test_selinux/br2_external/package/selinux-test/selinux-test.mk9
-rw-r--r--support/testing/tests/core/test_selinux/br2_external/package/selinux-test/selinux/buildroot.fc0
-rw-r--r--support/testing/tests/core/test_selinux/br2_external/package/selinux-test/selinux/buildroot.if1
-rw-r--r--support/testing/tests/core/test_selinux/br2_external/package/selinux-test/selinux/buildroot.te3
-rw-r--r--support/testing/tests/core/test_selinux/extra_modules/buildroot.fc0
-rw-r--r--support/testing/tests/core/test_selinux/extra_modules/buildroot.if1
-rw-r--r--support/testing/tests/core/test_selinux/extra_modules/buildroot.te3
-rw-r--r--support/testing/tests/download/br2-external/git-hash/package/bad/bad.hash2
-rw-r--r--support/testing/tests/download/br2-external/git-hash/package/good/good.hash2
-rw-r--r--support/testing/tests/download/br2-external/git-refs/package/git-partial-sha1-branch-head/git-partial-sha1-branch-head.hash2
-rw-r--r--support/testing/tests/download/br2-external/git-refs/package/git-partial-sha1-reachable-by-branch/git-partial-sha1-reachable-by-branch.hash2
-rw-r--r--support/testing/tests/download/br2-external/git-refs/package/git-partial-sha1-reachable-by-tag/git-partial-sha1-reachable-by-tag.hash2
-rw-r--r--support/testing/tests/download/br2-external/git-refs/package/git-partial-sha1-tag-itself/git-partial-sha1-tag-itself.hash2
-rw-r--r--support/testing/tests/download/br2-external/git-refs/package/git-partial-sha1-tag-points-to/git-partial-sha1-tag-points-to.hash2
-rw-r--r--support/testing/tests/download/br2-external/git-refs/package/git-sha1-branch-head/git-sha1-branch-head.hash2
-rw-r--r--support/testing/tests/download/br2-external/git-refs/package/git-sha1-reachable-by-branch/git-sha1-reachable-by-branch.hash2
-rw-r--r--support/testing/tests/download/br2-external/git-refs/package/git-sha1-reachable-by-tag/git-sha1-reachable-by-tag.hash2
-rw-r--r--support/testing/tests/download/br2-external/git-refs/package/git-sha1-tag-itself/git-sha1-tag-itself.hash2
-rw-r--r--support/testing/tests/download/br2-external/git-refs/package/git-sha1-tag-points-to/git-sha1-tag-points-to.hash2
-rw-r--r--support/testing/tests/download/br2-external/git-refs/package/git-submodule-disabled/git-submodule-disabled.hash2
-rw-r--r--support/testing/tests/download/br2-external/git-refs/package/git-submodule-enabled/git-submodule-enabled.hash2
-rw-r--r--support/testing/tests/download/br2-external/git-refs/package/git-tag/git-tag.hash2
-rw-r--r--support/testing/tests/download/br2-external/git-refs/package/git-wrong-content/git-wrong-content.hash2
-rw-r--r--support/testing/tests/init/test_systemd.py5
-rw-r--r--support/testing/tests/init/test_systemd_selinux.py76
-rw-r--r--support/testing/tests/init/test_systemd_selinux/linux-squashfs.fragment1
-rw-r--r--support/testing/tests/package/sample_python_pytest_asyncio.py31
-rw-r--r--support/testing/tests/package/test_lualdap.py25
-rw-r--r--support/testing/tests/package/test_python_pytest_asyncio.py20
-rw-r--r--support/testing/tests/toolchain/test_external_bootlin.py246
129 files changed, 1486 insertions, 745 deletions
diff --git a/support/config-fragments/autobuild/bootlin-aarch64-glibc.config b/support/config-fragments/autobuild/bootlin-aarch64-glibc.config
new file mode 100644
index 0000000000..fe167e23aa
--- /dev/null
+++ b/support/config-fragments/autobuild/bootlin-aarch64-glibc.config
@@ -0,0 +1,4 @@
+BR2_aarch64=y
+BR2_TOOLCHAIN_EXTERNAL=y
+BR2_TOOLCHAIN_EXTERNAL_BOOTLIN=y
+BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_AARCH64_GLIBC_STABLE=y
diff --git a/support/config-fragments/autobuild/bootlin-arcle-hs38-uclibc.config b/support/config-fragments/autobuild/bootlin-arcle-hs38-uclibc.config
new file mode 100644
index 0000000000..c9e1d19e49
--- /dev/null
+++ b/support/config-fragments/autobuild/bootlin-arcle-hs38-uclibc.config
@@ -0,0 +1,5 @@
+BR2_arcle=y
+BR2_archs38=y
+BR2_TOOLCHAIN_EXTERNAL=y
+BR2_TOOLCHAIN_EXTERNAL_BOOTLIN=y
+BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_ARCLE_HS38_UCLIBC_STABLE=y
diff --git a/support/config-fragments/autobuild/bootlin-armv5-uclibc.config b/support/config-fragments/autobuild/bootlin-armv5-uclibc.config
new file mode 100644
index 0000000000..c179c75d7a
--- /dev/null
+++ b/support/config-fragments/autobuild/bootlin-armv5-uclibc.config
@@ -0,0 +1,4 @@
+BR2_arm=y
+BR2_TOOLCHAIN_EXTERNAL=y
+BR2_TOOLCHAIN_EXTERNAL_BOOTLIN=y
+BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_ARMV5_EABI_UCLIBC_STABLE=y
diff --git a/support/config-fragments/autobuild/bootlin-armv7-glibc.config b/support/config-fragments/autobuild/bootlin-armv7-glibc.config
new file mode 100644
index 0000000000..11ae28ff61
--- /dev/null
+++ b/support/config-fragments/autobuild/bootlin-armv7-glibc.config
@@ -0,0 +1,6 @@
+BR2_arm=y
+BR2_cortex_a9=y
+BR2_ARM_ENABLE_VFP=y
+BR2_TOOLCHAIN_EXTERNAL=y
+BR2_TOOLCHAIN_EXTERNAL_BOOTLIN=y
+BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_ARMV7_EABIHF_GLIBC_BLEEDING_EDGE=y
diff --git a/support/config-fragments/autobuild/bootlin-armv7-musl.config b/support/config-fragments/autobuild/bootlin-armv7-musl.config
new file mode 100644
index 0000000000..7ae72b21c5
--- /dev/null
+++ b/support/config-fragments/autobuild/bootlin-armv7-musl.config
@@ -0,0 +1,6 @@
+BR2_arm=y
+BR2_cortex_a9=y
+BR2_ARM_ENABLE_VFP=y
+BR2_TOOLCHAIN_EXTERNAL=y
+BR2_TOOLCHAIN_EXTERNAL_BOOTLIN=y
+BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_ARMV7_EABIHF_MUSL_STABLE=y
diff --git a/support/config-fragments/autobuild/bootlin-armv7m-uclibc.config b/support/config-fragments/autobuild/bootlin-armv7m-uclibc.config
new file mode 100644
index 0000000000..8d05409647
--- /dev/null
+++ b/support/config-fragments/autobuild/bootlin-armv7m-uclibc.config
@@ -0,0 +1,4 @@
+BR2_arm=y
+BR2_cortex_m4=y
+BR2_TOOLCHAIN_EXTERNAL=y
+BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_ARMV7M_UCLIBC_STABLE=y
diff --git a/support/config-fragments/autobuild/bootlin-m68k-5208-uclibc.config b/support/config-fragments/autobuild/bootlin-m68k-5208-uclibc.config
new file mode 100644
index 0000000000..c6000beb0c
--- /dev/null
+++ b/support/config-fragments/autobuild/bootlin-m68k-5208-uclibc.config
@@ -0,0 +1,4 @@
+BR2_m68k=y
+BR2_m68k_cf5208=y
+BR2_TOOLCHAIN_EXTERNAL=y
+BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_M68K_COLDFIRE_UCLIBC_STABLE=y
diff --git a/support/config-fragments/autobuild/bootlin-m68k-68040-uclibc.config b/support/config-fragments/autobuild/bootlin-m68k-68040-uclibc.config
new file mode 100644
index 0000000000..f2c59e9de7
--- /dev/null
+++ b/support/config-fragments/autobuild/bootlin-m68k-68040-uclibc.config
@@ -0,0 +1,4 @@
+BR2_m68k=y
+BR2_m68k_68040=y
+BR2_TOOLCHAIN_EXTERNAL=y
+BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_M68K_68XXX_UCLIBC_STABLE=y
diff --git a/support/config-fragments/autobuild/bootlin-microblazeel-uclibc.config b/support/config-fragments/autobuild/bootlin-microblazeel-uclibc.config
new file mode 100644
index 0000000000..206fb777fe
--- /dev/null
+++ b/support/config-fragments/autobuild/bootlin-microblazeel-uclibc.config
@@ -0,0 +1,3 @@
+BR2_microblazeel=y
+BR2_TOOLCHAIN_EXTERNAL=y
+BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_MICROBLAZEEL_UCLIBC_STABLE=y
diff --git a/support/config-fragments/autobuild/bootlin-mipsel-uclibc.config b/support/config-fragments/autobuild/bootlin-mipsel-uclibc.config
new file mode 100644
index 0000000000..ff523b258a
--- /dev/null
+++ b/support/config-fragments/autobuild/bootlin-mipsel-uclibc.config
@@ -0,0 +1,4 @@
+BR2_mipsel=y
+# BR2_MIPS_SOFT_FLOAT is not set
+BR2_TOOLCHAIN_EXTERNAL=y
+BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_MIPS32EL_UCLIBC_STABLE=y
diff --git a/support/config-fragments/autobuild/bootlin-mipsel32r6-glibc.config b/support/config-fragments/autobuild/bootlin-mipsel32r6-glibc.config
new file mode 100644
index 0000000000..58a50121a0
--- /dev/null
+++ b/support/config-fragments/autobuild/bootlin-mipsel32r6-glibc.config
@@ -0,0 +1,6 @@
+BR2_mipsel=y
+BR2_mips_32r6=y
+# BR2_MIPS_SOFT_FLOAT is not set
+BR2_TOOLCHAIN_EXTERNAL=y
+BR2_TOOLCHAIN_EXTERNAL_BOOTLIN=y
+BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_MIPS32R6EL_GLIBC_STABLE=y
diff --git a/support/config-fragments/autobuild/bootlin-nios2-glibc.config b/support/config-fragments/autobuild/bootlin-nios2-glibc.config
new file mode 100644
index 0000000000..575a1b30ed
--- /dev/null
+++ b/support/config-fragments/autobuild/bootlin-nios2-glibc.config
@@ -0,0 +1,4 @@
+BR2_nios2=y
+BR2_TOOLCHAIN_EXTERNAL=y
+BR2_TOOLCHAIN_EXTERNAL_BOOTLIN=y
+BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_NIOS2_GLIBC_STABLE=y
diff --git a/support/config-fragments/autobuild/bootlin-openrisc-uclibc.config b/support/config-fragments/autobuild/bootlin-openrisc-uclibc.config
new file mode 100644
index 0000000000..bad086274b
--- /dev/null
+++ b/support/config-fragments/autobuild/bootlin-openrisc-uclibc.config
@@ -0,0 +1,3 @@
+BR2_or1k=y
+BR2_TOOLCHAIN_EXTERNAL=y
+BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_OPENRISC_UCLIBC_STABLE=y
diff --git a/support/config-fragments/autobuild/bootlin-powerpc-e500mc-uclibc.config b/support/config-fragments/autobuild/bootlin-powerpc-e500mc-uclibc.config
new file mode 100644
index 0000000000..96461856fb
--- /dev/null
+++ b/support/config-fragments/autobuild/bootlin-powerpc-e500mc-uclibc.config
@@ -0,0 +1,4 @@
+BR2_powerpc=y
+BR2_powerpc_e500mc=y
+BR2_TOOLCHAIN_EXTERNAL=y
+BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_POWERPC_E500MC_UCLIBC_STABLE=y
diff --git a/support/config-fragments/autobuild/bootlin-powerpc64le-power8-glibc.config b/support/config-fragments/autobuild/bootlin-powerpc64le-power8-glibc.config
new file mode 100644
index 0000000000..44f00963c8
--- /dev/null
+++ b/support/config-fragments/autobuild/bootlin-powerpc64le-power8-glibc.config
@@ -0,0 +1,4 @@
+BR2_powerpc64le=y
+BR2_powerpc_power8=y
+BR2_TOOLCHAIN_EXTERNAL=y
+BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_POWERPC64LE_POWER8_GLIBC_STABLE=y
diff --git a/support/config-fragments/autobuild/bootlin-riscv32-glibc.config b/support/config-fragments/autobuild/bootlin-riscv32-glibc.config
new file mode 100644
index 0000000000..cc45d01824
--- /dev/null
+++ b/support/config-fragments/autobuild/bootlin-riscv32-glibc.config
@@ -0,0 +1,5 @@
+BR2_riscv=y
+BR2_RISCV_32=y
+BR2_TOOLCHAIN_EXTERNAL=y
+BR2_TOOLCHAIN_EXTERNAL_BOOTLIN=y
+BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_RISCV32_ILP32D_GLIBC_BLEEDING_EDGE=y
diff --git a/support/config-fragments/autobuild/bootlin-riscv64-glibc.config b/support/config-fragments/autobuild/bootlin-riscv64-glibc.config
new file mode 100644
index 0000000000..f6c6fcaa36
--- /dev/null
+++ b/support/config-fragments/autobuild/bootlin-riscv64-glibc.config
@@ -0,0 +1,5 @@
+BR2_riscv=y
+BR2_RISCV_ABI_LP64=y
+BR2_TOOLCHAIN_EXTERNAL=y
+BR2_TOOLCHAIN_EXTERNAL_BOOTLIN=y
+BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_RISCV64_GLIBC_BLEEDING_EDGE=y
diff --git a/support/config-fragments/autobuild/bootlin-riscv64-musl.config b/support/config-fragments/autobuild/bootlin-riscv64-musl.config
new file mode 100644
index 0000000000..2b6a6e56da
--- /dev/null
+++ b/support/config-fragments/autobuild/bootlin-riscv64-musl.config
@@ -0,0 +1,4 @@
+BR2_riscv=y
+BR2_RISCV_ABI_LP64=y
+BR2_TOOLCHAIN_EXTERNAL=y
+BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_RISCV64_MUSL_BLEEDING_EDGE=y
diff --git a/support/config-fragments/autobuild/bootlin-sh4-uclibc.config b/support/config-fragments/autobuild/bootlin-sh4-uclibc.config
new file mode 100644
index 0000000000..8b4d40b5c7
--- /dev/null
+++ b/support/config-fragments/autobuild/bootlin-sh4-uclibc.config
@@ -0,0 +1,3 @@
+BR2_sh=y
+BR2_TOOLCHAIN_EXTERNAL=y
+BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_SH_SH4_UCLIBC_STABLE=y
diff --git a/support/config-fragments/autobuild/bootlin-sparc-uclibc.config b/support/config-fragments/autobuild/bootlin-sparc-uclibc.config
new file mode 100644
index 0000000000..cbe7224022
--- /dev/null
+++ b/support/config-fragments/autobuild/bootlin-sparc-uclibc.config
@@ -0,0 +1,3 @@
+BR2_sparc=y
+BR2_TOOLCHAIN_EXTERNAL=y
+BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_SPARCV8_UCLIBC_STABLE=y
diff --git a/support/config-fragments/autobuild/bootlin-sparc64-glibc.config b/support/config-fragments/autobuild/bootlin-sparc64-glibc.config
new file mode 100644
index 0000000000..4f851d105a
--- /dev/null
+++ b/support/config-fragments/autobuild/bootlin-sparc64-glibc.config
@@ -0,0 +1,3 @@
+BR2_sparc64=y
+BR2_TOOLCHAIN_EXTERNAL=y
+BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_SPARC64_GLIBC_STABLE=y
diff --git a/support/config-fragments/autobuild/bootlin-x86-64-glibc.config b/support/config-fragments/autobuild/bootlin-x86-64-glibc.config
index 6a372803b2..815eb658e0 100644
--- a/support/config-fragments/autobuild/bootlin-x86-64-glibc.config
+++ b/support/config-fragments/autobuild/bootlin-x86-64-glibc.config
@@ -1,15 +1,5 @@
BR2_x86_64=y
BR2_x86_corei7=y
BR2_TOOLCHAIN_EXTERNAL=y
-BR2_TOOLCHAIN_EXTERNAL_CUSTOM=y
-BR2_TOOLCHAIN_EXTERNAL_DOWNLOAD=y
-BR2_TOOLCHAIN_EXTERNAL_URL="http://toolchains.bootlin.com/downloads/releases/toolchains/x86-64-core-i7/tarballs/x86-64-core-i7--glibc--bleeding-edge-2020.02-2.tar.bz2"
-BR2_TOOLCHAIN_EXTERNAL_GCC_9=y
-BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_19=y
-# BR2_TOOLCHAIN_EXTERNAL_LOCALE is not set
-BR2_TOOLCHAIN_EXTERNAL_CXX=y
-BR2_TOOLCHAIN_EXTERNAL_HAS_SSP=y
-BR2_TOOLCHAIN_EXTERNAL_HAS_THREADS_DEBUG=y
-BR2_TOOLCHAIN_EXTERNAL_HAS_THREADS=y
-BR2_TOOLCHAIN_EXTERNAL_HAS_THREADS_NPTL=y
-BR2_TOOLCHAIN_EXTERNAL_CUSTOM_GLIBC=y
+BR2_TOOLCHAIN_EXTERNAL_BOOTLIN=y
+BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_X86_64_CORE_I7_GLIBC_BLEEDING_EDGE=y
diff --git a/support/config-fragments/autobuild/bootlin-x86-64-musl.config b/support/config-fragments/autobuild/bootlin-x86-64-musl.config
new file mode 100644
index 0000000000..9763d8a6a8
--- /dev/null
+++ b/support/config-fragments/autobuild/bootlin-x86-64-musl.config
@@ -0,0 +1,4 @@
+BR2_x86_64=y
+BR2_x86_corei7=y
+BR2_TOOLCHAIN_EXTERNAL=y
+BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_X86_64_CORE_I7_MUSL_STABLE=y
diff --git a/support/config-fragments/autobuild/bootlin-x86-64-uclibc.config b/support/config-fragments/autobuild/bootlin-x86-64-uclibc.config
new file mode 100644
index 0000000000..70b940f198
--- /dev/null
+++ b/support/config-fragments/autobuild/bootlin-x86-64-uclibc.config
@@ -0,0 +1,4 @@
+BR2_x86_64=y
+BR2_x86_corei7=y
+BR2_TOOLCHAIN_EXTERNAL=y
+BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_X86_64_CORE_I7_UCLIBC_STABLE=y
diff --git a/support/config-fragments/autobuild/bootlin-xtensa-uclibc.config b/support/config-fragments/autobuild/bootlin-xtensa-uclibc.config
new file mode 100644
index 0000000000..c44525b203
--- /dev/null
+++ b/support/config-fragments/autobuild/bootlin-xtensa-uclibc.config
@@ -0,0 +1,5 @@
+BR2_xtensa=y
+BR2_XTENSA_CUSTOM=y
+BR2_XTENSA_LITTLE_ENDIAN=y
+BR2_TOOLCHAIN_EXTERNAL=y
+BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_XTENSA_LX60_UCLIBC_STABLE=y
diff --git a/support/config-fragments/autobuild/br-aarch64-glibc.config b/support/config-fragments/autobuild/br-aarch64-glibc.config
deleted file mode 100644
index f1b0f2a91e..0000000000
--- a/support/config-fragments/autobuild/br-aarch64-glibc.config
+++ /dev/null
@@ -1,9 +0,0 @@
-BR2_aarch64=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-aarch64-glibc-2020.02.tar.bz2"
-BR2_TOOLCHAIN_EXTERNAL_GCC_8=y
-BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_4=y
-BR2_TOOLCHAIN_EXTERNAL_CUSTOM_GLIBC=y
-BR2_TOOLCHAIN_EXTERNAL_CXX=y
diff --git a/support/config-fragments/autobuild/br-arcle-hs38.config b/support/config-fragments/autobuild/br-arcle-hs38.config
deleted file mode 100644
index f8287ccd0f..0000000000
--- a/support/config-fragments/autobuild/br-arcle-hs38.config
+++ /dev/null
@@ -1,11 +0,0 @@
-BR2_arcle=y
-BR2_archs38=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-arcle-hs38-full-2020.02.tar.bz2"
-BR2_TOOLCHAIN_EXTERNAL_GCC_9=y
-BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_9=y
-BR2_TOOLCHAIN_EXTERNAL_LOCALE=y
-# BR2_TOOLCHAIN_EXTERNAL_HAS_THREADS_DEBUG is not set
-BR2_TOOLCHAIN_EXTERNAL_CXX=y
diff --git a/support/config-fragments/autobuild/br-arm-basic.config b/support/config-fragments/autobuild/br-arm-basic.config
index c73aa782ca..fbbeaaa773 100644
--- a/support/config-fragments/autobuild/br-arm-basic.config
+++ b/support/config-fragments/autobuild/br-arm-basic.config
@@ -2,7 +2,7 @@ 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-basic-2020.02.tar.bz2"
-BR2_TOOLCHAIN_EXTERNAL_GCC_8=y
-BR2_TOOLCHAIN_EXTERNAL_HEADERS_5_4=y
+BR2_TOOLCHAIN_EXTERNAL_URL="http://autobuild.buildroot.org/toolchains/tarballs/br-arm-basic-2020.11.2.tar.bz2"
+BR2_TOOLCHAIN_EXTERNAL_GCC_9=y
+BR2_TOOLCHAIN_EXTERNAL_HEADERS_5_9=y
# BR2_TOOLCHAIN_EXTERNAL_HAS_THREADS_DEBUG is not set
diff --git a/support/config-fragments/autobuild/br-arm-cortex-a9-glibc.config b/support/config-fragments/autobuild/br-arm-cortex-a9-glibc.config
deleted file mode 100644
index a3b51138d7..0000000000
--- a/support/config-fragments/autobuild/br-arm-cortex-a9-glibc.config
+++ /dev/null
@@ -1,11 +0,0 @@
-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-glibc-2020.02.tar.bz2"
-BR2_TOOLCHAIN_EXTERNAL_GCC_9=y
-BR2_TOOLCHAIN_EXTERNAL_HEADERS_5_4=y
-BR2_TOOLCHAIN_EXTERNAL_CUSTOM_GLIBC=y
-BR2_TOOLCHAIN_EXTERNAL_CXX=y
diff --git a/support/config-fragments/autobuild/br-arm-cortex-a9-musl.config b/support/config-fragments/autobuild/br-arm-cortex-a9-musl.config
deleted file mode 100644
index e6a5fa64f0..0000000000
--- a/support/config-fragments/autobuild/br-arm-cortex-a9-musl.config
+++ /dev/null
@@ -1,11 +0,0 @@
-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-2020.02.tar.bz2"
-BR2_TOOLCHAIN_EXTERNAL_GCC_8=y
-BR2_TOOLCHAIN_EXTERNAL_HEADERS_5_4=y
-BR2_TOOLCHAIN_EXTERNAL_CUSTOM_MUSL=y
-BR2_TOOLCHAIN_EXTERNAL_CXX=y
diff --git a/support/config-fragments/autobuild/br-arm-cortex-m4-full.config b/support/config-fragments/autobuild/br-arm-cortex-m4-full.config
deleted file mode 100644
index 22e9740e4d..0000000000
--- a/support/config-fragments/autobuild/br-arm-cortex-m4-full.config
+++ /dev/null
@@ -1,12 +0,0 @@
-BR2_arm=y
-BR2_cortex_m4=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-m4-full-2020.02.tar.bz2"
-BR2_TOOLCHAIN_EXTERNAL_GCC_8=y
-BR2_TOOLCHAIN_EXTERNAL_HEADERS_5_4=y
-BR2_TOOLCHAIN_EXTERNAL_LOCALE=y
-# BR2_TOOLCHAIN_EXTERNAL_HAS_THREADS_DEBUG is not set
-# BR2_TOOLCHAIN_EXTERNAL_HAS_THREADS_NPTL is not set
-BR2_TOOLCHAIN_EXTERNAL_CXX=y
diff --git a/support/config-fragments/autobuild/br-arm-full-nothread.config b/support/config-fragments/autobuild/br-arm-full-nothread.config
index 3b0267f6d3..71592d688a 100644
--- a/support/config-fragments/autobuild/br-arm-full-nothread.config
+++ b/support/config-fragments/autobuild/br-arm-full-nothread.config
@@ -3,9 +3,9 @@ BR2_arm1176jzf_s=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-arm11-full-nothread-2020.02.tar.bz2"
-BR2_TOOLCHAIN_EXTERNAL_GCC_8=y
-BR2_TOOLCHAIN_EXTERNAL_HEADERS_5_4=y
+BR2_TOOLCHAIN_EXTERNAL_URL="http://autobuild.buildroot.org/toolchains/tarballs/br-arm11-full-nothread-2020.11.2.tar.bz2"
+BR2_TOOLCHAIN_EXTERNAL_GCC_9=y
+BR2_TOOLCHAIN_EXTERNAL_HEADERS_5_9=y
BR2_TOOLCHAIN_EXTERNAL_LOCALE=y
# BR2_TOOLCHAIN_EXTERNAL_HAS_THREADS is not set
BR2_TOOLCHAIN_EXTERNAL_CXX=y
diff --git a/support/config-fragments/autobuild/br-arm-full-static.config b/support/config-fragments/autobuild/br-arm-full-static.config
index 59e90f3371..f3a4d91fd1 100644
--- a/support/config-fragments/autobuild/br-arm-full-static.config
+++ b/support/config-fragments/autobuild/br-arm-full-static.config
@@ -3,8 +3,8 @@ BR2_STATIC_LIBS=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-static-2020.02.tar.bz2"
-BR2_TOOLCHAIN_EXTERNAL_GCC_8=y
+BR2_TOOLCHAIN_EXTERNAL_URL="http://autobuild.buildroot.org/toolchains/tarballs/br-arm-full-static-2020.11.2.tar.bz2"
+BR2_TOOLCHAIN_EXTERNAL_GCC_9=y
BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_4=y
BR2_TOOLCHAIN_EXTERNAL_LOCALE=y
# BR2_TOOLCHAIN_EXTERNAL_HAS_THREADS_DEBUG is not set
diff --git a/support/config-fragments/autobuild/br-arm-full.config b/support/config-fragments/autobuild/br-arm-full.config
deleted file mode 100644
index 652c5a68e5..0000000000
--- a/support/config-fragments/autobuild/br-arm-full.config
+++ /dev/null
@@ -1,10 +0,0 @@
-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-2020.02.tar.bz2"
-BR2_TOOLCHAIN_EXTERNAL_GCC_5=y
-BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_14=y
-BR2_TOOLCHAIN_EXTERNAL_LOCALE=y
-# BR2_TOOLCHAIN_EXTERNAL_HAS_THREADS_DEBUG is not set
-BR2_TOOLCHAIN_EXTERNAL_CXX=y
diff --git a/support/config-fragments/autobuild/br-i386-pentium-mmx-musl.config b/support/config-fragments/autobuild/br-i386-pentium-mmx-musl.config
index 2f651dedfe..1b3c45fe9b 100644
--- a/support/config-fragments/autobuild/br-i386-pentium-mmx-musl.config
+++ b/support/config-fragments/autobuild/br-i386-pentium-mmx-musl.config
@@ -2,8 +2,8 @@ BR2_x86_pentium_mmx=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/br-i386-pentium-mmx-musl-2020.02.tar.bz2"
-BR2_TOOLCHAIN_EXTERNAL_GCC_8=y
+BR2_TOOLCHAIN_EXTERNAL_URL="http://autobuild.buildroot.net/toolchains/tarballs/br-i386-pentium-mmx-musl-2020.11.2.tar.bz2"
+BR2_TOOLCHAIN_EXTERNAL_GCC_9=y
BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_9=y
BR2_TOOLCHAIN_EXTERNAL_CUSTOM_MUSL=y
# BR2_TOOLCHAIN_EXTERNAL_HAS_SSP is not set
diff --git a/support/config-fragments/autobuild/br-i386-pentium4-full.config b/support/config-fragments/autobuild/br-i386-pentium4-full.config
index acc7c0942b..c680699288 100644
--- a/support/config-fragments/autobuild/br-i386-pentium4-full.config
+++ b/support/config-fragments/autobuild/br-i386-pentium4-full.config
@@ -2,8 +2,8 @@ BR2_x86_pentium4=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-i386-pentium4-full-2020.02.tar.bz2"
-BR2_TOOLCHAIN_EXTERNAL_GCC_8=y
+BR2_TOOLCHAIN_EXTERNAL_URL="http://autobuild.buildroot.org/toolchains/tarballs/br-i386-pentium4-full-2020.11.2.tar.bz2"
+BR2_TOOLCHAIN_EXTERNAL_GCC_9=y
BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_4=y
BR2_TOOLCHAIN_EXTERNAL_LOCALE=y
# BR2_TOOLCHAIN_EXTERNAL_HAS_THREADS_DEBUG is not set
diff --git a/support/config-fragments/autobuild/br-m68k-5208-full.config b/support/config-fragments/autobuild/br-m68k-5208-full.config
deleted file mode 100644
index cee8a04269..0000000000
--- a/support/config-fragments/autobuild/br-m68k-5208-full.config
+++ /dev/null
@@ -1,11 +0,0 @@
-BR2_m68k=y
-BR2_m68k_cf5208=y
-BR2_TOOLCHAIN_EXTERNAL=y
-BR2_TOOLCHAIN_EXTERNAL_DOWNLOAD=y
-BR2_TOOLCHAIN_EXTERNAL_URL="http://autobuild.buildroot.net/toolchains/tarballs/br-m68k-5208-full-2020.02.tar.bz2"
-BR2_TOOLCHAIN_EXTERNAL_GCC_8=y
-BR2_TOOLCHAIN_EXTERNAL_HEADERS_5_4=y
-BR2_TOOLCHAIN_EXTERNAL_LOCALE=y
-# BR2_TOOLCHAIN_EXTERNAL_HAS_THREADS_DEBUG is not set
-# BR2_TOOLCHAIN_EXTERNAL_HAS_THREADS_NPTL is not set
-BR2_TOOLCHAIN_EXTERNAL_CXX=y
diff --git a/support/config-fragments/autobuild/br-m68k-68040-full.config b/support/config-fragments/autobuild/br-m68k-68040-full.config
deleted file mode 100644
index 9f600acf46..0000000000
--- a/support/config-fragments/autobuild/br-m68k-68040-full.config
+++ /dev/null
@@ -1,10 +0,0 @@
-BR2_m68k=y
-BR2_TOOLCHAIN_EXTERNAL=y
-BR2_TOOLCHAIN_EXTERNAL_DOWNLOAD=y
-BR2_TOOLCHAIN_EXTERNAL_URL="http://autobuild.buildroot.net/toolchains/tarballs/br-m68k-68040-full-2020.02.tar.bz2"
-BR2_TOOLCHAIN_EXTERNAL_GCC_8=y
-BR2_TOOLCHAIN_EXTERNAL_HEADERS_5_4=y
-BR2_TOOLCHAIN_EXTERNAL_LOCALE=y
-# BR2_TOOLCHAIN_EXTERNAL_HAS_THREADS_DEBUG is not set
-# BR2_TOOLCHAIN_EXTERNAL_HAS_THREADS_NPTL is not set
-BR2_TOOLCHAIN_EXTERNAL_CXX=y
diff --git a/support/config-fragments/autobuild/br-microblazeel-full.config b/support/config-fragments/autobuild/br-microblazeel-full.config
deleted file mode 100644
index 60c23a202d..0000000000
--- a/support/config-fragments/autobuild/br-microblazeel-full.config
+++ /dev/null
@@ -1,9 +0,0 @@
-BR2_microblazeel=y
-BR2_TOOLCHAIN_EXTERNAL=y
-BR2_TOOLCHAIN_EXTERNAL_DOWNLOAD=y
-BR2_TOOLCHAIN_EXTERNAL_URL="http://autobuild.buildroot.org/toolchains/tarballs/br-microblaze-full-2020.02.tar.bz2"
-BR2_TOOLCHAIN_EXTERNAL_GCC_8=y
-BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_9=y
-BR2_TOOLCHAIN_EXTERNAL_LOCALE=y
-# BR2_TOOLCHAIN_EXTERNAL_HAS_THREADS_DEBUG is not set
-BR2_TOOLCHAIN_EXTERNAL_CXX=y
diff --git a/support/config-fragments/autobuild/br-mips32r6-el-hf-glibc.config b/support/config-fragments/autobuild/br-mips32r6-el-hf-glibc.config
deleted file mode 100644
index ce61100a37..0000000000
--- a/support/config-fragments/autobuild/br-mips32r6-el-hf-glibc.config
+++ /dev/null
@@ -1,11 +0,0 @@
-BR2_mipsel=y
-BR2_mips_32r6=y
-# BR2_MIPS_SOFT_FLOAT is not set
-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-mips32r6-el-hf-2020.02.tar.bz2"
-BR2_TOOLCHAIN_EXTERNAL_GCC_8=y
-BR2_TOOLCHAIN_EXTERNAL_HEADERS_5_4=y
-BR2_TOOLCHAIN_EXTERNAL_CUSTOM_GLIBC=y
-BR2_TOOLCHAIN_EXTERNAL_CXX=y
diff --git a/support/config-fragments/autobuild/br-mips64-n64-full.config b/support/config-fragments/autobuild/br-mips64-n64-full.config
index 99ace7776a..b89b74e76f 100644
--- a/support/config-fragments/autobuild/br-mips64-n64-full.config
+++ b/support/config-fragments/autobuild/br-mips64-n64-full.config
@@ -3,8 +3,8 @@ BR2_MIPS_NABI64=y
# BR2_MIPS_SOFT_FLOAT is not set
BR2_TOOLCHAIN_EXTERNAL=y
BR2_TOOLCHAIN_EXTERNAL_DOWNLOAD=y
-BR2_TOOLCHAIN_EXTERNAL_URL="http://autobuild.buildroot.org/toolchains/tarballs/br-mips64-n64-full-2020.02.tar.bz2"
-BR2_TOOLCHAIN_EXTERNAL_GCC_5=y
-BR2_TOOLCHAIN_EXTERNAL_HEADERS_5_4=y
+BR2_TOOLCHAIN_EXTERNAL_URL="http://autobuild.buildroot.org/toolchains/tarballs/br-mips64-n64-full-2020.11.2.tar.bz2"
+BR2_TOOLCHAIN_EXTERNAL_GCC_8=y
+BR2_TOOLCHAIN_EXTERNAL_HEADERS_5_9=y
BR2_TOOLCHAIN_EXTERNAL_LOCALE=y
BR2_TOOLCHAIN_EXTERNAL_CXX=y
diff --git a/support/config-fragments/autobuild/br-mips64r6-el-hf-glibc.config b/support/config-fragments/autobuild/br-mips64r6-el-hf-glibc.config
index 48ed24dacf..edf04c356f 100644
--- a/support/config-fragments/autobuild/br-mips64r6-el-hf-glibc.config
+++ b/support/config-fragments/autobuild/br-mips64r6-el-hf-glibc.config
@@ -5,8 +5,8 @@ BR2_MIPS_NABI64=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-mips64r6-n64-el-hf-2020.02.tar.bz2"
-BR2_TOOLCHAIN_EXTERNAL_GCC_8=y
-BR2_TOOLCHAIN_EXTERNAL_HEADERS_5_4=y
+BR2_TOOLCHAIN_EXTERNAL_URL="http://autobuild.buildroot.org/toolchains/tarballs/br-mips64r6-n64-el-hf-2020.11.2.tar.bz2"
+BR2_TOOLCHAIN_EXTERNAL_GCC_9=y
+BR2_TOOLCHAIN_EXTERNAL_HEADERS_5_9=y
BR2_TOOLCHAIN_EXTERNAL_CUSTOM_GLIBC=y
BR2_TOOLCHAIN_EXTERNAL_CXX=y
diff --git a/support/config-fragments/autobuild/br-mipsel-o32-full.config b/support/config-fragments/autobuild/br-mipsel-o32-full.config
deleted file mode 100644
index 6099e48869..0000000000
--- a/support/config-fragments/autobuild/br-mipsel-o32-full.config
+++ /dev/null
@@ -1,10 +0,0 @@
-BR2_mipsel=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-mipsel-o32-full-2020.02.tar.bz2"
-BR2_TOOLCHAIN_EXTERNAL_GCC_8=y
-BR2_TOOLCHAIN_EXTERNAL_HEADERS_5_4=y
-BR2_TOOLCHAIN_EXTERNAL_LOCALE=y
-# BR2_TOOLCHAIN_EXTERNAL_HAS_THREADS_DEBUG is not set
-BR2_TOOLCHAIN_EXTERNAL_CXX=y
diff --git a/support/config-fragments/autobuild/br-nios2-glibc.config b/support/config-fragments/autobuild/br-nios2-glibc.config
deleted file mode 100644
index c5ac68dc50..0000000000
--- a/support/config-fragments/autobuild/br-nios2-glibc.config
+++ /dev/null
@@ -1,9 +0,0 @@
-BR2_nios2=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-nios2-full-2020.02.tar.bz2"
-BR2_TOOLCHAIN_EXTERNAL_GCC_8=y
-BR2_TOOLCHAIN_EXTERNAL_HEADERS_5_4=y
-BR2_TOOLCHAIN_EXTERNAL_CUSTOM_GLIBC=y
-BR2_TOOLCHAIN_EXTERNAL_CXX=y
diff --git a/support/config-fragments/autobuild/br-openrisc-uclibc.config b/support/config-fragments/autobuild/br-openrisc-uclibc.config
deleted file mode 100644
index c5391338c0..0000000000
--- a/support/config-fragments/autobuild/br-openrisc-uclibc.config
+++ /dev/null
@@ -1,9 +0,0 @@
-BR2_or1k=y
-BR2_TOOLCHAIN_EXTERNAL=y
-BR2_TOOLCHAIN_EXTERNAL_DOWNLOAD=y
-BR2_TOOLCHAIN_EXTERNAL_URL="http://autobuild.buildroot.net/toolchains/tarballs/br-openrisc-full-2020.02-500-geee96b0.tar.bz2"
-BR2_TOOLCHAIN_EXTERNAL_GCC_9=y
-BR2_TOOLCHAIN_EXTERNAL_HEADERS_5_4=y
-BR2_TOOLCHAIN_EXTERNAL_LOCALE=y
-# BR2_TOOLCHAIN_EXTERNAL_HAS_THREADS_DEBUG is not set
-BR2_TOOLCHAIN_EXTERNAL_CXX=y
diff --git a/support/config-fragments/autobuild/br-powerpc-603e-basic-cpp.config b/support/config-fragments/autobuild/br-powerpc-603e-basic-cpp.config
index f083462654..045428c1de 100644
--- a/support/config-fragments/autobuild/br-powerpc-603e-basic-cpp.config
+++ b/support/config-fragments/autobuild/br-powerpc-603e-basic-cpp.config
@@ -3,8 +3,8 @@ BR2_powerpc_603e=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-powerpc-603e-basic-cpp-2020.02.tar.bz2"
-BR2_TOOLCHAIN_EXTERNAL_GCC_8=y
-BR2_TOOLCHAIN_EXTERNAL_HEADERS_5_4=y
+BR2_TOOLCHAIN_EXTERNAL_URL="http://autobuild.buildroot.org/toolchains/tarballs/br-powerpc-603e-basic-cpp-2020.11.2.tar.bz2"
+BR2_TOOLCHAIN_EXTERNAL_GCC_9=y
+BR2_TOOLCHAIN_EXTERNAL_HEADERS_5_9=y
# BR2_TOOLCHAIN_EXTERNAL_HAS_THREADS_DEBUG is not set
BR2_TOOLCHAIN_EXTERNAL_CXX=y
diff --git a/support/config-fragments/autobuild/br-powerpc-e500mc-full.config b/support/config-fragments/autobuild/br-powerpc-e500mc-full.config
deleted file mode 100644
index c5edcc177d..0000000000
--- a/support/config-fragments/autobuild/br-powerpc-e500mc-full.config
+++ /dev/null
@@ -1,11 +0,0 @@
-BR2_powerpc=y
-BR2_powerpc_e500mc=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-powerpc-e500mc-full-2020.02.tar.bz2"
-BR2_TOOLCHAIN_EXTERNAL_GCC_8=y
-BR2_TOOLCHAIN_EXTERNAL_HEADERS_5_4=y
-BR2_TOOLCHAIN_EXTERNAL_LOCALE=y
-# BR2_TOOLCHAIN_EXTERNAL_HAS_THREADS_DEBUG is not set
-BR2_TOOLCHAIN_EXTERNAL_CXX=y
diff --git a/support/config-fragments/autobuild/br-powerpc64-power7-glibc.config b/support/config-fragments/autobuild/br-powerpc64-power7-glibc.config
index 5d7171a067..a80047ea66 100644
--- a/support/config-fragments/autobuild/br-powerpc64-power7-glibc.config
+++ b/support/config-fragments/autobuild/br-powerpc64-power7-glibc.config
@@ -2,8 +2,8 @@ BR2_powerpc64=y
BR2_powerpc_power7=y
BR2_TOOLCHAIN_EXTERNAL=y
BR2_TOOLCHAIN_EXTERNAL_DOWNLOAD=y
-BR2_TOOLCHAIN_EXTERNAL_URL="http://autobuild.buildroot.net/toolchains/tarballs/br-powerpc64-power7-glibc-2020.02.tar.bz2"
-BR2_TOOLCHAIN_EXTERNAL_GCC_8=y
-BR2_TOOLCHAIN_EXTERNAL_HEADERS_5_4=y
+BR2_TOOLCHAIN_EXTERNAL_URL="http://autobuild.buildroot.net/toolchains/tarballs/br-powerpc64-power7-glibc-2020.11.2.tar.bz2"
+BR2_TOOLCHAIN_EXTERNAL_GCC_9=y
+BR2_TOOLCHAIN_EXTERNAL_HEADERS_5_9=y
BR2_TOOLCHAIN_EXTERNAL_CUSTOM_GLIBC=y
BR2_TOOLCHAIN_EXTERNAL_CXX=y
diff --git a/support/config-fragments/autobuild/br-powerpc64le-power8-glibc.config b/support/config-fragments/autobuild/br-powerpc64le-power8-glibc.config
deleted file mode 100644
index b743bbc4a0..0000000000
--- a/support/config-fragments/autobuild/br-powerpc64le-power8-glibc.config
+++ /dev/null
@@ -1,9 +0,0 @@
-BR2_powerpc64le=y
-BR2_powerpc_power8=y
-BR2_TOOLCHAIN_EXTERNAL=y
-BR2_TOOLCHAIN_EXTERNAL_DOWNLOAD=y
-BR2_TOOLCHAIN_EXTERNAL_URL="http://autobuild.buildroot.net/toolchains/tarballs/br-powerpc64le-power8-glibc-2020.02.tar.bz2"
-BR2_TOOLCHAIN_EXTERNAL_GCC_8=y
-BR2_TOOLCHAIN_EXTERNAL_HEADERS_5_4=y
-BR2_TOOLCHAIN_EXTERNAL_CUSTOM_GLIBC=y
-BR2_TOOLCHAIN_EXTERNAL_CXX=y
diff --git a/support/config-fragments/autobuild/br-riscv32.config b/support/config-fragments/autobuild/br-riscv32.config
deleted file mode 100644
index d9110a6a86..0000000000
--- a/support/config-fragments/autobuild/br-riscv32.config
+++ /dev/null
@@ -1,9 +0,0 @@
-BR2_riscv=y
-BR2_RISCV_32=y
-BR2_TOOLCHAIN_EXTERNAL=y
-BR2_TOOLCHAIN_EXTERNAL_DOWNLOAD=y
-BR2_TOOLCHAIN_EXTERNAL_URL="http://autobuild.buildroot.net/toolchains/tarballs/br-riscv32-glibc-2020.02.tar.bz2"
-BR2_TOOLCHAIN_EXTERNAL_GCC_8=y
-BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_19=y
-BR2_TOOLCHAIN_EXTERNAL_CUSTOM_GLIBC=y
-BR2_TOOLCHAIN_EXTERNAL_CXX=y
diff --git a/support/config-fragments/autobuild/br-riscv64-musl.config b/support/config-fragments/autobuild/br-riscv64-musl.config
deleted file mode 100644
index fd6ef822aa..0000000000
--- a/support/config-fragments/autobuild/br-riscv64-musl.config
+++ /dev/null
@@ -1,9 +0,0 @@
-BR2_riscv=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/br-riscv64-musl-2020.02.tar.bz2"
-BR2_TOOLCHAIN_EXTERNAL_GCC_9=y
-BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_19=y
-BR2_TOOLCHAIN_EXTERNAL_CUSTOM_MUSL=y
-BR2_TOOLCHAIN_EXTERNAL_CXX=y
diff --git a/support/config-fragments/autobuild/br-riscv64.config b/support/config-fragments/autobuild/br-riscv64.config
deleted file mode 100644
index c5df86392c..0000000000
--- a/support/config-fragments/autobuild/br-riscv64.config
+++ /dev/null
@@ -1,8 +0,0 @@
-BR2_riscv=y
-BR2_TOOLCHAIN_EXTERNAL=y
-BR2_TOOLCHAIN_EXTERNAL_DOWNLOAD=y
-BR2_TOOLCHAIN_EXTERNAL_URL="http://autobuild.buildroot.net/toolchains/tarballs/br-riscv64-glibc-2020.02.tar.bz2"
-BR2_TOOLCHAIN_EXTERNAL_GCC_8=y
-BR2_TOOLCHAIN_EXTERNAL_HEADERS_5_4=y
-BR2_TOOLCHAIN_EXTERNAL_CUSTOM_GLIBC=y
-BR2_TOOLCHAIN_EXTERNAL_CXX=y
diff --git a/support/config-fragments/autobuild/br-s390x-z13-internal-glibc.config b/support/config-fragments/autobuild/br-s390x-z13-internal-glibc.config
new file mode 100644
index 0000000000..56af5fb1ba
--- /dev/null
+++ b/support/config-fragments/autobuild/br-s390x-z13-internal-glibc.config
@@ -0,0 +1,4 @@
+BR2_s390x=y
+BR2_s390x_z13=y
+BR2_TOOLCHAIN_BUILDROOT_GLIBC=y
+BR2_TOOLCHAIN_BUILDROOT_CXX=y
diff --git a/support/config-fragments/autobuild/br-sh4-full.config b/support/config-fragments/autobuild/br-sh4-full.config
deleted file mode 100644
index dc31902874..0000000000
--- a/support/config-fragments/autobuild/br-sh4-full.config
+++ /dev/null
@@ -1,10 +0,0 @@
-BR2_sh=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-sh4-full-2020.02.tar.bz2"
-BR2_TOOLCHAIN_EXTERNAL_GCC_8=y
-BR2_TOOLCHAIN_EXTERNAL_HEADERS_5_4=y
-BR2_TOOLCHAIN_EXTERNAL_LOCALE=y
-# BR2_TOOLCHAIN_EXTERNAL_HAS_THREADS_DEBUG is not set
-BR2_TOOLCHAIN_EXTERNAL_CXX=y
diff --git a/support/config-fragments/autobuild/br-sparc-uclibc.config b/support/config-fragments/autobuild/br-sparc-uclibc.config
deleted file mode 100644
index 8550a01263..0000000000
--- a/support/config-fragments/autobuild/br-sparc-uclibc.config
+++ /dev/null
@@ -1,9 +0,0 @@
-BR2_sparc=y
-BR2_TOOLCHAIN_EXTERNAL=y
-BR2_TOOLCHAIN_EXTERNAL_DOWNLOAD=y
-BR2_TOOLCHAIN_EXTERNAL_URL="http://autobuild.buildroot.org/toolchains/tarballs/br-sparc-uclibc-2020.02.tar.bz2"
-BR2_TOOLCHAIN_EXTERNAL_GCC_8=y
-BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_9=y
-BR2_TOOLCHAIN_EXTERNAL_LOCALE=y
-# BR2_TOOLCHAIN_EXTERNAL_HAS_THREADS_DEBUG is not set
-BR2_TOOLCHAIN_EXTERNAL_CXX=y
diff --git a/support/config-fragments/autobuild/br-sparc64-glibc.config b/support/config-fragments/autobuild/br-sparc64-glibc.config
deleted file mode 100644
index 0b77bb45fa..0000000000
--- a/support/config-fragments/autobuild/br-sparc64-glibc.config
+++ /dev/null
@@ -1,8 +0,0 @@
-BR2_sparc64=y
-BR2_TOOLCHAIN_EXTERNAL=y
-BR2_TOOLCHAIN_EXTERNAL_DOWNLOAD=y
-BR2_TOOLCHAIN_EXTERNAL_URL="http://autobuild.buildroot.org/toolchains/tarballs/br-sparc64-full-2020.02.tar.bz2"
-BR2_TOOLCHAIN_EXTERNAL_GCC_8=y
-BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_14=y
-BR2_TOOLCHAIN_EXTERNAL_CUSTOM_GLIBC=y
-BR2_TOOLCHAIN_EXTERNAL_CXX=y
diff --git a/support/config-fragments/autobuild/br-x86-64-core2-full.config b/support/config-fragments/autobuild/br-x86-64-core2-full.config
deleted file mode 100644
index b6682da202..0000000000
--- a/support/config-fragments/autobuild/br-x86-64-core2-full.config
+++ /dev/null
@@ -1,11 +0,0 @@
-BR2_x86_64=y
-BR2_x86_core2=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-x86-64-core2-full-2020.02.tar.bz2"
-BR2_TOOLCHAIN_EXTERNAL_GCC_8=y
-BR2_TOOLCHAIN_EXTERNAL_HEADERS_5_4=y
-BR2_TOOLCHAIN_EXTERNAL_LOCALE=y
-# BR2_TOOLCHAIN_EXTERNAL_HAS_THREADS_DEBUG is not set
-BR2_TOOLCHAIN_EXTERNAL_CXX=y
diff --git a/support/config-fragments/autobuild/br-x86-64-musl.config b/support/config-fragments/autobuild/br-x86-64-musl.config
deleted file mode 100644
index 03de24d354..0000000000
--- a/support/config-fragments/autobuild/br-x86-64-musl.config
+++ /dev/null
@@ -1,10 +0,0 @@
-BR2_x86_64=y
-BR2_x86_atom=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-x86-64-musl-2020.02.tar.bz2"
-BR2_TOOLCHAIN_EXTERNAL_GCC_8=y
-BR2_TOOLCHAIN_EXTERNAL_HEADERS_5_4=y
-BR2_TOOLCHAIN_EXTERNAL_CUSTOM_MUSL=y
-BR2_TOOLCHAIN_EXTERNAL_CXX=y
diff --git a/support/config-fragments/autobuild/br-xtensa-full.config b/support/config-fragments/autobuild/br-xtensa-full.config
deleted file mode 100644
index 9d0092143c..0000000000
--- a/support/config-fragments/autobuild/br-xtensa-full.config
+++ /dev/null
@@ -1,9 +0,0 @@
-BR2_xtensa=y
-BR2_TOOLCHAIN_EXTERNAL=y
-BR2_TOOLCHAIN_EXTERNAL_DOWNLOAD=y
-BR2_TOOLCHAIN_EXTERNAL_URL="http://autobuild.buildroot.org/toolchains/tarballs/br-xtensa-full-2020.02.tar.bz2"
-BR2_TOOLCHAIN_EXTERNAL_GCC_8=y
-BR2_TOOLCHAIN_EXTERNAL_HEADERS_5_4=y
-BR2_TOOLCHAIN_EXTERNAL_LOCALE=y
-# BR2_TOOLCHAIN_EXTERNAL_HAS_THREADS_DEBUG is not set
-BR2_TOOLCHAIN_EXTERNAL_CXX=y
diff --git a/support/config-fragments/autobuild/toolchain-configs.csv b/support/config-fragments/autobuild/toolchain-configs.csv
index 5b8b9da7e7..f5e9bd8cf9 100644
--- a/support/config-fragments/autobuild/toolchain-configs.csv
+++ b/support/config-fragments/autobuild/toolchain-configs.csv
@@ -4,16 +4,16 @@
# Toolchains used by default by test-pkg:
# Test a regular uClibc toolchain
-support/config-fragments/autobuild/br-arm-full.config,x86_64
+support/config-fragments/autobuild/bootlin-armv5-uclibc.config,x86_64
# Test a toolchain with glibc and a very recent gcc version
-support/config-fragments/autobuild/br-arm-cortex-a9-glibc.config,x86_64
+support/config-fragments/autobuild/bootlin-armv7-glibc.config,x86_64
# Test a noMMU toolchain with no dynamic library support
-support/config-fragments/autobuild/br-arm-cortex-m4-full.config,x86_64
+support/config-fragments/autobuild/bootlin-armv7m-uclibc.config,x86_64
# Test a musl toolchain
-support/config-fragments/autobuild/br-x86-64-musl.config,x86_64
+support/config-fragments/autobuild/bootlin-x86-64-musl.config,x86_64
# Test a MMU toolchain without dynamic library support
support/config-fragments/autobuild/br-arm-full-static.config,x86_64
@@ -24,43 +24,44 @@ support/config-fragments/autobuild/sourcery-arm.config,x86
# Toolchains used by test-pkg only when the '-a' option is passed:
support/config-fragments/autobuild/andes-nds32.config,x86
support/config-fragments/autobuild/arm-aarch64.config,x86_64
+support/config-fragments/autobuild/bootlin-aarch64-glibc.config,x86_64
+support/config-fragments/autobuild/bootlin-arcle-hs38-uclibc.config,x86_64
+support/config-fragments/autobuild/bootlin-armv7-musl.config,x86_64
+support/config-fragments/autobuild/bootlin-m68k-68040-uclibc.config,x86_64
+support/config-fragments/autobuild/bootlin-m68k-5208-uclibc.config,x86_64
+support/config-fragments/autobuild/bootlin-microblazeel-uclibc.config,x86_64
+support/config-fragments/autobuild/bootlin-mipsel-uclibc.config,x86_64
+support/config-fragments/autobuild/bootlin-mipsel32r6-glibc.config,x86_64
+support/config-fragments/autobuild/bootlin-nios2-glibc.config,x86_64
+support/config-fragments/autobuild/bootlin-openrisc-uclibc.config,x86_64
+support/config-fragments/autobuild/bootlin-powerpc64le-power8-glibc.config,x86_64
+support/config-fragments/autobuild/bootlin-powerpc-e500mc-uclibc.config,x86_64
+support/config-fragments/autobuild/bootlin-riscv32-glibc.config,x86_64
+support/config-fragments/autobuild/bootlin-riscv64-glibc.config,x86_64
+support/config-fragments/autobuild/bootlin-riscv64-musl.config,x86_64
+support/config-fragments/autobuild/bootlin-sh4-uclibc.config,x86_64
+support/config-fragments/autobuild/bootlin-sparc-uclibc.config,x86_64
+support/config-fragments/autobuild/bootlin-sparc64-glibc.config,x86_64
support/config-fragments/autobuild/bootlin-x86-64-glibc.config,x86_64
-support/config-fragments/autobuild/br-aarch64-glibc.config,x86_64
+support/config-fragments/autobuild/bootlin-x86-64-uclibc.config,x86_64
+support/config-fragments/autobuild/bootlin-xtensa-uclibc.config,x86_64
support/config-fragments/autobuild/br-arc-full-internal.config,any
support/config-fragments/autobuild/br-arc-internal-glibc.config,any
-support/config-fragments/autobuild/br-arcle-hs38.config,x86_64
support/config-fragments/autobuild/br-arm-basic.config,x86_64
-support/config-fragments/autobuild/br-arm-cortex-a9-musl.config,x86_64
support/config-fragments/autobuild/br-arm-full-nothread.config,x86_64
support/config-fragments/autobuild/br-arm-internal-full.config,any
support/config-fragments/autobuild/br-arm-internal-glibc.config,any
support/config-fragments/autobuild/br-arm-internal-musl.config,any
support/config-fragments/autobuild/br-i386-pentium4-full.config,x86_64
support/config-fragments/autobuild/br-i386-pentium-mmx-musl.config,x86_64
-support/config-fragments/autobuild/br-m68k-5208-full.config,x86_64
-support/config-fragments/autobuild/br-m68k-68040-full.config,x86_64
-support/config-fragments/autobuild/br-microblazeel-full.config,x86_64
support/config-fragments/autobuild/br-microblazeel-full-internal.config,any
support/config-fragments/autobuild/br-mips64-n64-full.config,x86_64
-support/config-fragments/autobuild/br-mips32r6-el-hf-glibc.config,x86_64
support/config-fragments/autobuild/br-mips64r6-el-hf-glibc.config,x86_64
-support/config-fragments/autobuild/br-mipsel-o32-full.config,x86_64
-support/config-fragments/autobuild/br-nios2-glibc.config,x86_64
-support/config-fragments/autobuild/br-openrisc-uclibc.config,x86_64
support/config-fragments/autobuild/br-powerpc-603e-basic-cpp.config,x86_64
-support/config-fragments/autobuild/br-powerpc64le-power8-glibc.config,x86_64
support/config-fragments/autobuild/br-powerpc64-power7-glibc.config,x86_64
-support/config-fragments/autobuild/br-powerpc-e500mc-full.config,x86_64
support/config-fragments/autobuild/br-powerpc-internal-full.config,any
-support/config-fragments/autobuild/br-riscv32.config,x86_64
-support/config-fragments/autobuild/br-riscv64.config,x86_64
support/config-fragments/autobuild/br-riscv64-full-internal.config,any
-support/config-fragments/autobuild/br-riscv64-musl.config,x86_64
-support/config-fragments/autobuild/br-sh4-full.config,x86_64
-support/config-fragments/autobuild/br-sparc-uclibc.config,x86_64
-support/config-fragments/autobuild/br-sparc64-glibc.config,x86_64
-support/config-fragments/autobuild/br-x86-64-core2-full.config,x86_64
-support/config-fragments/autobuild/br-xtensa-full.config,x86_64
+support/config-fragments/autobuild/br-s390x-z13-internal-glibc.config,any
support/config-fragments/autobuild/br-xtensa-full-internal.config,any
support/config-fragments/autobuild/linaro-aarch64.config,x86
support/config-fragments/autobuild/linaro-aarch64-be.config,x86
diff --git a/support/dependencies/check-host-bison-flex.mk b/support/dependencies/check-host-bison-flex.mk
index 233b6c51cc..14a232fd44 100644
--- a/support/dependencies/check-host-bison-flex.mk
+++ b/support/dependencies/check-host-bison-flex.mk
@@ -1,5 +1,9 @@
# If the system lacks bison or flex, add
# dependencies to suitable host packages
+#
+# BR2_{BISON,FLES}_HOST_DEPENDENCY should only be used to build code
+# that runs on host, e.g. Kconfig. To build code for target use plain
+# host-{bison,flex}.
ifeq ($(shell which bison 2>/dev/null),)
BR2_BISON_HOST_DEPENDENCY = host-bison
diff --git a/support/dependencies/check-host-cmake.mk b/support/dependencies/check-host-cmake.mk
index 01f38da376..e1bbcd62c8 100644
--- a/support/dependencies/check-host-cmake.mk
+++ b/support/dependencies/check-host-cmake.mk
@@ -1,9 +1,9 @@
-# Set this to either 3.10 or higher, depending on the highest minimum
+# Set this to either 3.15 or higher, depending on the highest minimum
# version required by any of the packages bundled in Buildroot. If a
# package is bumped or a new one added, and it requires a higher
# version, our cmake infra will catch it and build its own.
#
-BR2_CMAKE_VERSION_MIN = 3.10
+BR2_CMAKE_VERSION_MIN = 3.15
BR2_CMAKE_CANDIDATES ?= cmake cmake3
BR2_CMAKE ?= $(call suitable-host-package,cmake,\
diff --git a/support/dependencies/check-host-tar.sh b/support/dependencies/check-host-tar.sh
index 934cb61299..b7d607a47a 100755
--- a/support/dependencies/check-host-tar.sh
+++ b/support/dependencies/check-host-tar.sh
@@ -33,14 +33,7 @@ fi
major_min=1
minor_min=27
-# Maximal version = 1.29 (1.30 changed --numeric-owner output for
-# filenames > 100 characters). This is really a fix for a bug in
-# earlier tar versions regarding deterministic output so it is
-# unlikely to be reverted in later versions.
-major_max=1
-minor_max=29
-
-if [ $major -lt $major_min -o $major -gt $major_max ]; then
+if [ $major -lt $major_min ]; then
# echo nothing: no suitable tar found
exit 1
fi
@@ -50,10 +43,5 @@ if [ $major -eq $major_min -a $minor -lt $minor_min ]; then
exit 1
fi
-if [ $major -eq $major_max -a $minor -gt $minor_max ]; then
- # echo nothing: no suitable tar found
- exit 1
-fi
-
# valid
echo $tar
diff --git a/support/dependencies/dependencies.sh b/support/dependencies/dependencies.sh
index c1bd614edf..b44d28682c 100755
--- a/support/dependencies/dependencies.sh
+++ b/support/dependencies/dependencies.sh
@@ -180,6 +180,12 @@ if test "${missing_progs}" = "yes" ; then
exit 1
fi
+# apply-patches.sh needs patch with --no-backup-if-mismatch support (GNU, busybox w/DESKTOP)
+if ! patch --no-backup-if-mismatch </dev/null 2>/dev/null; then
+ echo "Your patch program does not support the --no-backup-if-mismatch option. Install GNU patch"
+ exit 1
+fi
+
if grep ^BR2_NEEDS_HOST_UTF8_LOCALE=y $BR2_CONFIG > /dev/null; then
if ! which locale > /dev/null ; then
echo
diff --git a/support/download/git b/support/download/git
index 15d8c66e05..fa98198fe0 100755
--- a/support/download/git
+++ b/support/download/git
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
+# NOTE: if the output of this backend has to change (e.g. we change what gets
+# included in the archive (e.g. LFS), or we change the format of the archive
+# (e.g. tar options, compression ratio or method)), we MUST update the format
+# version in the variable BR_FMT_VERSION_git, in package/pkg-download.mk.
+
# We want to catch any unexpected failure, and exit immediately
set -E
@@ -16,6 +21,8 @@ set -E
# Environment:
# GIT : the git command to call
+. "${0%/*}/helpers"
+
# Save our path and options in case we need to call ourselves again
myname="${0}"
declare -a OPTS=("${@}")
@@ -170,8 +177,8 @@ _git checkout -f -q "'${cset}'"
_git clean -ffdx
# Get date of commit to generate a reproducible archive.
-# %cD is RFC2822, so it's fully qualified, with TZ and all.
-date="$( _git log -1 --pretty=format:%cD )"
+# %ci is ISO 8601, so it's fully qualified, with TZ and all.
+date="$( _git log -1 --pretty=format:%ci )"
# There might be submodules, so fetch them.
if [ ${recurse} -eq 1 ]; then
@@ -191,24 +198,12 @@ if [ ${recurse} -eq 1 ]; then
done
fi
-# Generate the archive, sort with the C locale so that it is reproducible.
+popd >/dev/null
+
+# Generate the archive.
# We do not want the .git dir; we keep other .git files, in case they are the
# only files in their directory.
# The .git dir would generate non reproducible tarballs as it depends on
# the state of the remote server. It also would generate large tarballs
# (gigabytes for some linux trees) when a full clone took place.
-find . -not -type d \
- -and -not -path "./.git/*" >"${output}.list"
-LC_ALL=C sort <"${output}.list" >"${output}.list.sorted"
-
-# Create GNU-format tarballs, since that's the format of the tarballs on
-# sources.buildroot.org and used in the *.hash files
-tar cf - --transform="s#^\./#${basename}/#" \
- --numeric-owner --owner=0 --group=0 --mtime="${date}" --format=gnu \
- -T "${output}.list.sorted" >"${output}.tar"
-gzip -6 -n <"${output}.tar" >"${output}"
-
-rm -f "${output}.list"
-rm -f "${output}.list.sorted"
-
-popd >/dev/null
+mk_tar_gz "${git_cache}" "${basename}" "${date}" "${output}" ".git/*"
diff --git a/support/download/helpers b/support/download/helpers
new file mode 100755
index 0000000000..57cc9fef44
--- /dev/null
+++ b/support/download/helpers
@@ -0,0 +1,76 @@
+# Generate a reproducible archive from the content of a directory
+#
+# $1 : input directory
+# $2 : leading component in archive
+# $3 : ISO8601 date: YYYY-MM-DDThh:mm:ssZZ
+# $4 : output file
+# $5... : globs of filenames to exclude from the archive, suitable for
+# find's -path option, and relative to the input directory $1
+#
+# Notes :
+# - the timestamp is internally rounded to the highest entire second
+# less than or equal to the timestamp (i.e. any sub-second fractional
+# part is ignored)
+# - must not be called with CWD as, or below, the input directory
+# - some temporary files are created in CWD, and removed at the end
+#
+# Example:
+# $ find /path/to/temp/dir
+# /path/to/temp/dir/
+# /path/to/temp/dir/some-file
+# /path/to/temp/dir/some-dir/
+# /path/to/temp/dir/some-dir/some-other-file
+#
+# $ mk_tar_gz /path/to/some/dir \
+# foo_bar-1.2.3 \
+# 1970-01-01T00:00:00Z \
+# /path/to/foo.tar.gz \
+# '.git/*' '.svn/*'
+#
+# $ tar tzf /path/to/foo.tar.gz
+# foo_bar-1.2.3/some-file
+# foo_bar-1.2.3/some-dir/some-other-file
+#
+mk_tar_gz() {
+ local in_dir="${1}"
+ local base_dir="${2}"
+ local date="${3}"
+ local out="${4}"
+ shift 4
+ local glob tmp pax_options
+ local -a find_opts
+
+ for glob; do
+ find_opts+=( -or -path "./${glob#./}" )
+ done
+
+ # Drop sub-second precision to play nice with GNU tar's valid_timespec check
+ date="$(date -d "${date}" -u +%Y-%m-%dT%H:%M:%S+00:00)"
+
+ pax_options="delete=atime,delete=ctime,delete=mtime"
+ pax_options+=",exthdr.name=%d/PaxHeaders/%f,exthdr.mtime={${date}}"
+
+ tmp="$(mktemp --tmpdir="$(pwd)")"
+ pushd "${in_dir}" >/dev/null
+
+ # Establish list
+ find . -not -type d -and -not \( -false "${find_opts[@]}" \) >"${tmp}.list"
+ # Sort list for reproducibility
+ LC_ALL=C sort <"${tmp}.list" >"${tmp}.sorted"
+
+ # Create POSIX tarballs, since that's the format the most reproducible
+ tar cf - --transform="s#^\./#${base_dir}/#" \
+ --numeric-owner --owner=0 --group=0 --mtime="${date}" \
+ --format=posix --pax-option="${pax_options}" \
+ -T "${tmp}.sorted" >"${tmp}.tar"
+
+ # Compress the archive
+ gzip -6 -n <"${tmp}.tar" >"${out}"
+
+ rm -f "${tmp}"{.list,.sorted,.tar}
+
+ popd >/dev/null
+}
+
+# Keep this line and the following as last lines in this file.
+# vim: ft=bash
diff --git a/support/download/svn b/support/download/svn
index 012f286dd9..839dccaf62 100755
--- a/support/download/svn
+++ b/support/download/svn
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
+# NOTE: if the output of this backend has to change (e.g. we change what gets
+# included in the archive, or we change the format of the archive (e.g. tar
+# options, compression ratio or method)), we MUST update the format version
+# in the variable BR_FTM_VERSION_svn, in package/pkg-download.mk.
+
# We want to catch any unexpected failure, and exit immediately
set -e
@@ -15,6 +20,8 @@ set -e
# Environment:
# SVN : the svn command to call
+. "${0%/*}/helpers"
+
verbose=
while getopts "${BR_BACKEND_DL_GETOPTS}" OPT; do
case "${OPT}" in
@@ -45,19 +52,7 @@ _svn export ${verbose} "${@}" "'${uri}@${rev}'" "'${basename}'"
# last line (svn outputs everything on stdout)
date="$( _svn info --show-item last-changed-date "'${uri}@${rev}'" |tail -n 1 )"
-# Generate the archive, sort with the C locale so that it is reproducible.
-# We do not want the .svn dir; we keep other .svn files, in case they are the
-# only files in their directory.
-find "${basename}" -not -type d \
- -and -not -path "./.svn/*" >"${output}.list"
-LC_ALL=C sort <"${output}.list" >"${output}.list.sorted"
-
-# Create GNU-format tarballs, since that's the format of the tarballs on
-# sources.buildroot.org and used in the *.hash files
-tar cf - --transform="s#^\./#${basename}/#" \
- --numeric-owner --owner=0 --group=0 --mtime="${date}" --format=gnu \
- -T "${output}.list.sorted" >"${output}.tar"
-gzip -6 -n <"${output}.tar" >"${output}"
-
-rm -f "${output}.list"
-rm -f "${output}.list.sorted"
+# Generate the archive.
+# We did a 'svn export' above, so it's not a working copy (there is no .svn
+# directory or file to ignore).
+mk_tar_gz "${basename}" "${basename}" "${date}" "${output}"
diff --git a/support/gnuconfig/README.buildroot b/support/gnuconfig/README.buildroot
index 979edf32d9..952eea8b10 100644
--- a/support/gnuconfig/README.buildroot
+++ b/support/gnuconfig/README.buildroot
@@ -18,4 +18,4 @@ Run the script 'update' in this directory, and commit the result.
The current Buildroot version is based on this commit of the config.git
repository (leave alone on its own line, the script updates it):
-e072cc210e5d0584396f6c13ba34cb9c7bd8538d
+d7a4dee7cc25e332b990d0a6d9f0ddd42cb33cf5
diff --git a/support/gnuconfig/config.guess b/support/gnuconfig/config.guess
index 9aff91cfd0..8d70ec2b26 100755
--- a/support/gnuconfig/config.guess
+++ b/support/gnuconfig/config.guess
@@ -2,7 +2,7 @@
# Attempt to guess a canonical system name.
# Copyright 1992-2020 Free Software Foundation, Inc.
-timestamp='2020-08-17'
+timestamp='2020-09-19'
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
@@ -150,17 +150,15 @@ Linux|GNU|GNU/*)
#elif defined(__dietlibc__)
LIBC=dietlibc
#else
+ #include <stdarg.h>
+ #ifdef __DEFINED_va_list
+ LIBC=musl
+ #else
LIBC=gnu
#endif
+ #endif
EOF
eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`"
-
- # If ldd exists, use it to detect musl libc.
- if command -v ldd >/dev/null && \
- ldd --version 2>&1 | grep -q ^musl
- then
- LIBC=musl
- fi
;;
esac
diff --git a/support/gnuconfig/config.sub b/support/gnuconfig/config.sub
index 780c2bbaa0..9bc49a7e92 100755
--- a/support/gnuconfig/config.sub
+++ b/support/gnuconfig/config.sub
@@ -1735,6 +1735,8 @@ esac
case $kernel-$os in
linux-gnu* | linux-dietlibc* | linux-android* | linux-newlib* | linux-musl* | linux-uclibc* )
;;
+ uclinux-uclibc* )
+ ;;
-dietlibc* | -newlib* | -musl* | -uclibc* )
# These are just libc implementations, not actual OSes, and thus
# require a kernel.
diff --git a/support/misc/Vagrantfile b/support/misc/Vagrantfile
index 53f6012f6e..28a74b9929 100644
--- a/support/misc/Vagrantfile
+++ b/support/misc/Vagrantfile
@@ -5,7 +5,7 @@
################################################################################
# Buildroot version to use
-RELEASE='2020.08'
+RELEASE='2020.11.3'
### Change here for more memory/cores ###
VM_MEMORY=2048
diff --git a/support/scripts/apply-patches.sh b/support/scripts/apply-patches.sh
index 66fef262ee..9fb488c570 100755
--- a/support/scripts/apply-patches.sh
+++ b/support/scripts/apply-patches.sh
@@ -113,13 +113,13 @@ function apply_patch {
echo " to be applied : ${path}/${patch}"
exit 1
fi
- if grep -q "^rename from" ${path}/${patch} && \
- grep -q "^rename to" ${path}/${patch} ; then
+ if ${uncomp} "${path}/$patch" | grep -q "^rename from" && \
+ ${uncomp} "${path}/$patch" | grep -q "^rename to" ; then
echo "Error: patch contains some renames, not supported by old patch versions"
exit 1
fi
echo "${path}/${patch}" >> ${builddir}/.applied_patches_list
- ${uncomp} "${path}/$patch" | patch -g0 -p1 -E -d "${builddir}" -t -N $silent
+ ${uncomp} "${path}/$patch" | patch -g0 -p1 -E --no-backup-if-mismatch -d "${builddir}" -t -N $silent
if [ $? != 0 ] ; then
echo "Patch failed! Please fix ${patch}!"
exit 1
@@ -168,6 +168,3 @@ if [ "`find $builddir/ '(' -name '*.rej' -o -name '.*.rej' ')' -print`" ] ; then
echo "Aborting. Reject files found."
exit 1
fi
-
-# Remove backup files
-find $builddir/ '(' -name '*.orig' -o -name '.*.orig' ')' -exec rm -f {} \;
diff --git a/support/scripts/boot-qemu-image.py b/support/scripts/boot-qemu-image.py
index dbbba552ad..0d4ad825fc 100755
--- a/support/scripts/boot-qemu-image.py
+++ b/support/scripts/boot-qemu-image.py
@@ -18,6 +18,10 @@ def main():
if not sys.argv[1].startswith('qemu_'):
sys.exit(0)
+ if not os.path.exists('output/images/start-qemu.sh'):
+ print('qemu-start.sh is missing, cannot test.')
+ sys.exit(0)
+
qemu_start = os.path.join(os.getcwd(), 'output/images/start-qemu.sh')
child = pexpect.spawn(qemu_start, ['serial-only'],
@@ -32,7 +36,7 @@ def main():
time.sleep(1)
try:
- child.expect(["buildroot login:", pexpect.TIMEOUT], timeout=60)
+ child.expect(["buildroot login:"], timeout=60)
except pexpect.EOF as e:
# Some emulations require a fork of qemu-system, which may be
# missing on the system, and is not provided by Buildroot.
@@ -54,7 +58,7 @@ def main():
child.sendline("root\r")
try:
- child.expect(["# ", pexpect.TIMEOUT], timeout=60)
+ child.expect(["# "], timeout=60)
except pexpect.EOF:
print("Cannot connect to shell")
sys.exit(1)
@@ -65,7 +69,7 @@ def main():
child.sendline("poweroff\r")
try:
- child.expect(["System halted", pexpect.TIMEOUT], timeout=60)
+ child.expect(["System halted"], timeout=60)
child.expect(pexpect.EOF)
except pexpect.EOF:
pass
diff --git a/support/scripts/br2-external b/support/scripts/br2-external
index ededd2d900..56dc6f53ca 100755
--- a/support/scripts/br2-external
+++ b/support/scripts/br2-external
@@ -161,6 +161,8 @@ do_kconfig() {
toolchains
jpeg
openssl
+ skeleton
+ init
)
for br2 in "${items[@]}"; do
@@ -224,6 +226,22 @@ do_kconfig() {
else
printf '# No openssl from: %s\n\n' "${br2_desc}"
fi >>"${outputdir}/.br2-external.in.openssl"
+
+ if [ -f "${br2_ext}/provides/skeleton.in" ]; then
+ printf 'comment "skeleton from: %s"\n' "${br2_desc}"
+ printf 'source "%s/provides/skeleton.in"\n' "${br2_ext}"
+ printf '\n'
+ else
+ printf '# No skeleton from: %s\n\n' "${br2_desc}"
+ fi >>"${outputdir}/.br2-external.in.skeleton"
+
+ if [ -f "${br2_ext}/provides/init.in" ]; then
+ printf 'comment "init from: %s"\n' "${br2_desc}"
+ printf 'source "%s/provides/init.in"\n' "${br2_ext}"
+ printf '\n'
+ else
+ printf '# No init from: %s\n\n' "${br2_desc}"
+ fi >>"${outputdir}/.br2-external.in.init"
done
printf 'endmenu\n' >>"${outputdir}/.br2-external.in.menus"
diff --git a/support/scripts/cpedb.py b/support/scripts/cpedb.py
new file mode 100644
index 0000000000..f4daf56124
--- /dev/null
+++ b/support/scripts/cpedb.py
@@ -0,0 +1,174 @@
+#!/usr/bin/env python3
+
+import xml.etree.ElementTree as ET
+from xml.etree.ElementTree import Element, SubElement
+import gzip
+import os
+import requests
+import time
+from xml.dom import minidom
+
+VALID_REFS = ['VENDOR', 'VERSION', 'CHANGE_LOG', 'PRODUCT', 'PROJECT', 'ADVISORY']
+
+CPEDB_URL = "https://static.nvd.nist.gov/feeds/xml/cpe/dictionary/official-cpe-dictionary_v2.3.xml.gz"
+
+ns = {
+ '': 'http://cpe.mitre.org/dictionary/2.0',
+ 'cpe-23': 'http://scap.nist.gov/schema/cpe-extension/2.3',
+ 'xml': 'http://www.w3.org/XML/1998/namespace'
+}
+
+
+class CPE:
+ def __init__(self, cpe_str, titles, refs):
+ self.cpe_str = cpe_str
+ self.titles = titles
+ self.references = refs
+ self.cpe_cur_ver = "".join(self.cpe_str.split(":")[5:6])
+
+ def update_xml_dict(self):
+ ET.register_namespace('', 'http://cpe.mitre.org/dictionary/2.0')
+ cpes = Element('cpe-list')
+ cpes.set('xmlns:cpe-23', "http://scap.nist.gov/schema/cpe-extension/2.3")
+ cpes.set('xmlns:ns6', "http://scap.nist.gov/schema/scap-core/0.1")
+ cpes.set('xmlns:scap-core', "http://scap.nist.gov/schema/scap-core/0.3")
+ cpes.set('xmlns:config', "http://scap.nist.gov/schema/configuration/0.1")
+ cpes.set('xmlns:xsi', "http://www.w3.org/2001/XMLSchema-instance")
+ cpes.set('xmlns:meta', "http://scap.nist.gov/schema/cpe-dictionary-metadata/0.2")
+ cpes.set('xsi:schemaLocation', " ".join(["http://scap.nist.gov/schema/cpe-extension/2.3",
+ "https://scap.nist.gov/schema/cpe/2.3/cpe-dictionary-extension_2.3.xsd",
+ "http://cpe.mitre.org/dictionary/2.0",
+ "https://scap.nist.gov/schema/cpe/2.3/cpe-dictionary_2.3.xsd",
+ "http://scap.nist.gov/schema/cpe-dictionary-metadata/0.2",
+ "https://scap.nist.gov/schema/cpe/2.1/cpe-dictionary-metadata_0.2.xsd",
+ "http://scap.nist.gov/schema/scap-core/0.3",
+ "https://scap.nist.gov/schema/nvd/scap-core_0.3.xsd",
+ "http://scap.nist.gov/schema/configuration/0.1",
+ "https://scap.nist.gov/schema/nvd/configuration_0.1.xsd",
+ "http://scap.nist.gov/schema/scap-core/0.1",
+ "https://scap.nist.gov/schema/nvd/scap-core_0.1.xsd"]))
+ item = SubElement(cpes, 'cpe-item')
+ cpe_short_name = CPE.short_name(self.cpe_str)
+ cpe_new_ver = CPE.version_update(self.cpe_str)
+
+ item.set('name', 'cpe:/' + cpe_short_name)
+ self.titles[0].text.replace(self.cpe_cur_ver, cpe_new_ver)
+ for title in self.titles:
+ item.append(title)
+ if self.references:
+ item.append(self.references)
+ cpe23item = SubElement(item, 'cpe-23:cpe23-item')
+ cpe23item.set('name', self.cpe_str)
+
+ # Generate the XML as a string
+ xmlstr = ET.tostring(cpes)
+
+ # And use minidom to pretty print the XML
+ return minidom.parseString(xmlstr).toprettyxml(encoding="utf-8").decode("utf-8")
+
+ @staticmethod
+ def version(cpe):
+ return cpe.split(":")[5]
+
+ @staticmethod
+ def product(cpe):
+ return cpe.split(":")[4]
+
+ @staticmethod
+ def short_name(cpe):
+ return ":".join(cpe.split(":")[2:6])
+
+ @staticmethod
+ def version_update(cpe):
+ return ":".join(cpe.split(":")[5:6])
+
+ @staticmethod
+ def no_version(cpe):
+ return ":".join(cpe.split(":")[:5])
+
+
+class CPEDB:
+ def __init__(self, nvd_path):
+ self.all_cpes = dict()
+ self.all_cpes_no_version = dict()
+ self.nvd_path = nvd_path
+
+ def get_xml_dict(self):
+ print("CPE: Setting up NIST dictionary")
+ if not os.path.exists(os.path.join(self.nvd_path, "cpe")):
+ os.makedirs(os.path.join(self.nvd_path, "cpe"))
+
+ cpe_dict_local = os.path.join(self.nvd_path, "cpe", os.path.basename(CPEDB_URL))
+ if not os.path.exists(cpe_dict_local) or os.stat(cpe_dict_local).st_mtime < time.time() - 86400:
+ print("CPE: Fetching xml manifest from [" + CPEDB_URL + "]")
+ cpe_dict = requests.get(CPEDB_URL)
+ open(cpe_dict_local, "wb").write(cpe_dict.content)
+
+ print("CPE: Unzipping xml manifest...")
+ nist_cpe_file = gzip.GzipFile(fileobj=open(cpe_dict_local, 'rb'))
+ print("CPE: Converting xml manifest to dict...")
+ tree = ET.parse(nist_cpe_file)
+ all_cpedb = tree.getroot()
+ self.parse_dict(all_cpedb)
+
+ def parse_dict(self, all_cpedb):
+ # Cycle through the dict and build two dict to be used for custom
+ # lookups of partial and complete CPE objects
+ # The objects are then used to create new proposed XML updates if
+ # if is determined one is required
+ # Out of the different language titles, select English
+ for cpe in all_cpedb.findall(".//{http://cpe.mitre.org/dictionary/2.0}cpe-item"):
+ cpe_titles = []
+ for title in cpe.findall('.//{http://cpe.mitre.org/dictionary/2.0}title[@xml:lang="en-US"]', ns):
+ title.tail = None
+ cpe_titles.append(title)
+
+ # Some older CPE don't include references, if they do, make
+ # sure we handle the case of one ref needing to be packed
+ # in a list
+ cpe_ref = cpe.find(".//{http://cpe.mitre.org/dictionary/2.0}references")
+ if cpe_ref:
+ for ref in cpe_ref.findall(".//{http://cpe.mitre.org/dictionary/2.0}reference"):
+ ref.tail = None
+ ref.text = ref.text.upper()
+ if ref.text not in VALID_REFS:
+ ref.text = ref.text + "-- UPDATE this entry, here are some examples and just one word should be used -- " + ' '.join(VALID_REFS) # noqa E501
+ cpe_ref.tail = None
+ cpe_ref.text = None
+
+ cpe_str = cpe.find(".//{http://scap.nist.gov/schema/cpe-extension/2.3}cpe23-item").get('name')
+ item = CPE(cpe_str, cpe_titles, cpe_ref)
+ cpe_str_no_version = CPE.no_version(cpe_str)
+ # This dict must have a unique key for every CPE version
+ # which allows matching to the specific obj data of that
+ # NIST dict entry
+ self.all_cpes.update({cpe_str: item})
+ # This dict has one entry for every CPE (w/o version) to allow
+ # partial match (no valid version) check (the obj is saved and
+ # used as seed for suggested xml updates. By updating the same
+ # non-version'd entry, it assumes the last update here is the
+ # latest version in the NIST dict)
+ self.all_cpes_no_version.update({cpe_str_no_version: item})
+
+ def find_partial(self, cpe_str):
+ cpe_str_no_version = CPE.no_version(cpe_str)
+ if cpe_str_no_version in self.all_cpes_no_version:
+ return cpe_str_no_version
+
+ def find_partial_obj(self, cpe_str):
+ cpe_str_no_version = CPE.no_version(cpe_str)
+ if cpe_str_no_version in self.all_cpes_no_version:
+ return self.all_cpes_no_version[cpe_str_no_version]
+
+ def find_partial_latest_version(self, cpe_str_partial):
+ cpe_obj = self.find_partial_obj(cpe_str_partial)
+ return cpe_obj.cpe_cur_ver
+
+ def find(self, cpe_str):
+ if self.find_partial(cpe_str):
+ if cpe_str in self.all_cpes:
+ return cpe_str
+
+ def gen_update_xml(self, cpe_str):
+ cpe = self.find_partial_obj(cpe_str)
+ return cpe.update_xml_dict()
diff --git a/support/scripts/cve-checker b/support/scripts/cve-checker
deleted file mode 100755
index 998ea5b8af..0000000000
--- a/support/scripts/cve-checker
+++ /dev/null
@@ -1,196 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (C) 2009 by Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
-# Copyright (C) 2020 by Gregory CLEMENT <gregory.clement@bootlin.com>
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-import argparse
-import datetime
-import os
-import json
-import sys
-import cve as cvecheck
-
-
-class Package:
- def __init__(self, name, version, ignored_cves):
- self.name = name
- self.version = version
- self.cves = list()
- self.ignored_cves = ignored_cves
-
-
-def check_package_cves(nvd_path, packages):
- if not os.path.isdir(nvd_path):
- os.makedirs(nvd_path)
-
- for cve in cvecheck.CVE.read_nvd_dir(nvd_path):
- for pkg_name in cve.pkg_names:
- pkg = packages.get(pkg_name, '')
- if pkg and cve.affects(pkg.name, pkg.version, pkg.ignored_cves) == cve.CVE_AFFECTS:
- pkg.cves.append(cve.identifier)
-
-
-html_header = """
-<head>
-<script src=\"https://www.kryogenix.org/code/browser/sorttable/sorttable.js\"></script>
-<style type=\"text/css\">
-table {
- width: 100%;
-}
-td {
- border: 1px solid black;
-}
-td.centered {
- text-align: center;
-}
-td.wrong {
- background: #ff9a69;
-}
-td.correct {
- background: #d2ffc4;
-}
-
-</style>
-<title>CVE status for Buildroot configuration</title>
-</head>
-
-<p id=\"sortable_hint\"></p>
-"""
-
-
-html_footer = """
-</body>
-<script>
-if (typeof sorttable === \"object\") {
- document.getElementById(\"sortable_hint\").innerHTML =
- \"hint: the table can be sorted by clicking the column headers\"
-}
-</script>
-</html>
-"""
-
-
-def dump_html_pkg(f, pkg):
- f.write(" <tr>\n")
- f.write(" <td>%s</td>\n" % pkg.name)
-
- # Current version
- if len(pkg.version) > 20:
- version = pkg.version[:20] + "..."
- else:
- version = pkg.version
- f.write(" <td class=\"centered\">%s</td>\n" % version)
-
- # CVEs
- td_class = ["centered"]
- if len(pkg.cves) == 0:
- td_class.append("correct")
- else:
- td_class.append("wrong")
- f.write(" <td class=\"%s\">\n" % " ".join(td_class))
- for cve in pkg.cves:
- f.write(" <a href=\"https://security-tracker.debian.org/tracker/%s\">%s<br/>\n" % (cve, cve))
- f.write(" </td>\n")
-
- f.write(" </tr>\n")
-
-
-def dump_html_all_pkgs(f, packages):
- f.write("""
-<table class=\"sortable\">
-<tr>
-<td>Package</td>
-<td class=\"centered\">Version</td>
-<td class=\"centered\">CVEs</td>
-</tr>
-""")
- for pkg in packages:
- dump_html_pkg(f, pkg)
- f.write("</table>")
-
-
-def dump_html_gen_info(f, date):
- f.write("<p><i>Generated on %s</i></p>\n" % (str(date)))
-
-
-def dump_html(packages, date, output):
- with open(output, 'w') as f:
- f.write(html_header)
- dump_html_all_pkgs(f, packages)
- dump_html_gen_info(f, date)
- f.write(html_footer)
-
-
-def dump_json(packages, date, output):
- # Format packages as a dictionnary instead of a list
- pkgs = {
- pkg.name: {
- "version": pkg.version,
- "cves": pkg.cves,
- } for pkg in packages
- }
- # The actual structure to dump, add date to it
- final = {'packages': pkgs,
- 'date': str(date)}
- with open(output, 'w') as f:
- json.dump(final, f, indent=2, separators=(',', ': '))
- f.write('\n')
-
-
-def resolvepath(path):
- return os.path.abspath(os.path.expanduser(path))
-
-
-def parse_args():
- parser = argparse.ArgumentParser()
- output = parser.add_argument_group('output', 'Output file(s)')
- output.add_argument('--html', dest='html', type=resolvepath,
- help='HTML output file')
- output.add_argument('--json', dest='json', type=resolvepath,
- help='JSON output file')
- parser.add_argument('--nvd-path', dest='nvd_path',
- help='Path to the local NVD database', type=resolvepath,
- required=True)
- args = parser.parse_args()
- if not args.html and not args.json:
- parser.error('at least one of --html or --json (or both) is required')
- return args
-
-
-def __main__():
- packages = list()
- content = json.load(sys.stdin)
- for item in content:
- pkg = content[item]
- p = Package(item, pkg.get('version', ''), pkg.get('ignore_cves', ''))
- packages.append(p)
-
- args = parse_args()
- date = datetime.datetime.utcnow()
-
- print("Checking packages CVEs")
- check_package_cves(args.nvd_path, {p.name: p for p in packages})
-
- if args.html:
- print("Write HTML")
- dump_html(packages, date, args.html)
- if args.json:
- print("Write JSON")
- dump_json(packages, date, args.json)
-
-
-__main__()
diff --git a/support/scripts/cve.py b/support/scripts/cve.py
index 6396019e0e..6e97ea193f 100755
--- a/support/scripts/cve.py
+++ b/support/scripts/cve.py
@@ -47,6 +47,24 @@ ops = {
}
+# Check if two CPE IDs match each other
+def cpe_matches(cpe1, cpe2):
+ cpe1_elems = cpe1.split(":")
+ cpe2_elems = cpe2.split(":")
+
+ remains = filter(lambda x: x[0] not in ["*", "-"] and x[1] not in ["*", "-"] and x[0] != x[1],
+ zip(cpe1_elems, cpe2_elems))
+ return len(list(remains)) == 0
+
+
+def cpe_product(cpe):
+ return cpe.split(':')[4]
+
+
+def cpe_version(cpe):
+ return cpe.split(':')[5]
+
+
class CVE:
"""An accessor class for CVE Items in NVD files"""
CVE_AFFECTS = 1
@@ -134,7 +152,11 @@ class CVE:
for cpe in node.get('cpe_match', ()):
if not cpe['vulnerable']:
return
- vendor, product, version = cpe['cpe23Uri'].split(':')[3:6]
+ product = cpe_product(cpe['cpe23Uri'])
+ version = cpe_version(cpe['cpe23Uri'])
+ # ignore when product is '-', which means N/A
+ if product == '-':
+ return
op_start = ''
op_end = ''
v_start = ''
@@ -144,10 +166,6 @@ class CVE:
# Version is defined, this is a '=' match
op_start = '='
v_start = version
- elif version == '-':
- # no version information is available
- op_start = '='
- v_start = version
else:
# Parse start version, end version and operators
if 'versionStartIncluding' in cpe:
@@ -167,8 +185,7 @@ class CVE:
v_end = cpe['versionEndExcluding']
yield {
- 'vendor': vendor,
- 'product': product,
+ 'id': cpe['cpe23Uri'],
'v_start': v_start,
'op_start': op_start,
'v_end': v_end,
@@ -186,11 +203,11 @@ class CVE:
return self.nvd_cve['cve']['CVE_data_meta']['ID']
@property
- def pkg_names(self):
- """The set of package names referred by this CVE definition"""
- return set(p['product'] for p in self.each_cpe())
+ def affected_products(self):
+ """The set of CPE products referred by this CVE definition"""
+ return set(cpe_product(p['id']) for p in self.each_cpe())
- def affects(self, name, version, cve_ignore_list):
+ def affects(self, name, version, cve_ignore_list, cpeid=None):
"""
True if the Buildroot Package object passed as argument is affected
by this CVE.
@@ -203,14 +220,15 @@ class CVE:
print("Cannot parse package '%s' version '%s'" % (name, version))
pkg_version = None
+ # if we don't have a cpeid, build one based on name and version
+ if not cpeid:
+ cpeid = "cpe:2.3:*:*:%s:%s:*:*:*:*:*:*:*" % (name, version)
+
for cpe in self.each_cpe():
- if cpe['product'] != name:
+ if not cpe_matches(cpe['id'], cpeid):
continue
- if cpe['v_start'] == '-':
- return self.CVE_AFFECTS
if not cpe['v_start'] and not cpe['v_end']:
- print("No CVE affected version")
- continue
+ return self.CVE_AFFECTS
if not pkg_version:
continue
diff --git a/support/scripts/gen-bootlin-toolchains b/support/scripts/gen-bootlin-toolchains
index ac1a19b3c0..902b7795ee 100755
--- a/support/scripts/gen-bootlin-toolchains
+++ b/support/scripts/gen-bootlin-toolchains
@@ -123,6 +123,16 @@ arches = {
'conditions': ['BR2_or1k'],
'prefix': 'or1k',
},
+ 'powerpc-440fp': {
+ # Not sure it could be used by other powerpc variants?
+ 'conditions': ['BR2_powerpc', 'BR2_powerpc_440fp'],
+ 'prefix': 'powerpc',
+ },
+ 'powerpc-e300c3': {
+ # Not sure it could be used by other powerpc variants?
+ 'conditions': ['BR2_powerpc', 'BR2_powerpc_e300c3'],
+ 'prefix': 'powerpc',
+ },
'powerpc-e500mc': {
# Not sure it could be used by other powerpc variants?
'conditions': ['BR2_powerpc', 'BR2_powerpc_e500mc'],
@@ -132,6 +142,10 @@ arches = {
'conditions': ['BR2_powerpc64', 'BR2_powerpc_e5500'],
'prefix': 'powerpc64',
},
+ 'powerpc64-e6500': {
+ 'conditions': ['BR2_powerpc64', 'BR2_powerpc_e6500'],
+ 'prefix': 'powerpc64',
+ },
'powerpc64-power8': {
'conditions': ['BR2_powerpc64', 'BR2_powerpc_power8'],
'prefix': 'powerpc64',
@@ -196,7 +210,7 @@ arches = {
'prefix': 'i686',
},
'xtensa-lx60': {
- 'conditions': ['BR2_xtensa', 'BR2_xtensa_fsf'],
+ 'conditions': ['BR2_xtensa', 'BR2_XTENSA_CUSTOM', 'BR2_XTENSA_LITTLE_ENDIAN'],
'prefix': 'xtensa',
},
}
@@ -233,18 +247,25 @@ class Toolchain:
f.write("config %s\n" % self.option_name)
f.write("\tbool \"%s %s %s %s\"\n" %
(self.arch, self.libc, self.variant, self.version))
- for c in arches[self.arch]['conditions']:
- f.write("\tdepends on %s\n" % c)
+ depends = []
selects = []
+
+ for c in arches[self.arch]['conditions']:
+ depends.append(c)
+
for frag in self.fragment:
# libc type
if frag.startswith("BR2_TOOLCHAIN_EXTERNAL_CUSTOM_UCLIBC"):
selects.append("BR2_TOOLCHAIN_EXTERNAL_UCLIBC")
elif frag.startswith("BR2_TOOLCHAIN_EXTERNAL_CUSTOM_GLIBC"):
+ # glibc needs mmu support
+ depends.append("BR2_USE_MMU")
+ # glibc doesn't support static only configuration
+ depends.append("!BR2_STATIC_LIBS")
selects.append("BR2_TOOLCHAIN_EXTERNAL_GLIBC")
- # all glibc toolchains have RPC support
- selects.append("BR2_TOOLCHAIN_HAS_NATIVE_RPC")
elif frag.startswith("BR2_TOOLCHAIN_EXTERNAL_CUSTOM_MUSL"):
+ # musl needs mmu support
+ depends.append("BR2_USE_MMU")
selects.append("BR2_TOOLCHAIN_EXTERNAL_MUSL")
# gcc version
@@ -303,6 +324,9 @@ class Toolchain:
if frag.startswith("BR2_TOOLCHAIN_EXTERNAL_OPENMP"):
selects.append("BR2_TOOLCHAIN_HAS_OPENMP")
+ for depend in depends:
+ f.write("\tdepends on %s\n" % depend)
+
for select in selects:
f.write("\tselect %s\n" % select)
diff --git a/support/scripts/generate-gitlab-ci-yml b/support/scripts/generate-gitlab-ci-yml
index e42943953c..3f498e08fd 100755
--- a/support/scripts/generate-gitlab-ci-yml
+++ b/support/scripts/generate-gitlab-ci-yml
@@ -6,9 +6,6 @@ main() {
local template="${1}"
preamble "${template}"
-
- gen_basics
- gen_defconfigs
gen_tests
}
@@ -24,91 +21,85 @@ preamble() {
_EOF_
}
-gen_basics() {
- local tst
-
- # Skip basic tests when explicitly building defconfigs or runtime tests
- case "${CI_COMMIT_REF_NAME}" in
- (*-defconfigs) return;;
- (*-*_defconfig) return;;
- (*-runtime-tests) return;;
- (*-tests.*) return;;
- esac
-
- for tst in DEVELOPERS flake8 package; do
- printf 'check-%s: { extends: .check-%s_base }\n' "${tst}" "${tst}"
- done
-}
+gen_tests() {
+ local -a basics defconfigs runtimes
+ local do_basics do_defconfigs do_runtime
+ local defconfigs_ext cfg tst
-gen_defconfigs() {
- local -a defconfigs
- local template cfg ext
+ basics=( DEVELOPERS flake8 package )
defconfigs=( $(cd configs; LC_ALL=C ls -1 *_defconfig) )
+ runtimes=( $(./support/testing/run-tests -l 2>&1 \
+ | sed -r -e '/^test_run \((.*)\).*/!d; s//\1/' \
+ | LC_ALL=C sort)
+ )
+
if [ -n "${CI_COMMIT_TAG}" ]; then
- # For tags, create a pipeline.
- template=base
+ do_basics=true
+ do_defconfigs=base
+ do_runtime=true
+ elif [ "${CI_PIPELINE_SOURCE}" = "trigger" ]; then
+ case "${BR_SCHEDULE_JOBS}" in
+ (basic)
+ do_basics=true
+ do_defconfigs=check
+ defconfigs_ext=_check
+ ;;
+ (defconfig)
+ do_defconfigs=base
+ ;;
+ (runtime)
+ do_runtime=true
+ ;;
+ esac
+ else
+ case "${CI_COMMIT_REF_NAME}" in
+ (*-basics)
+ do_basics=true
+ do_defconfigs=check
+ defconfigs_ext=_check
+ ;;
+ (*-defconfigs)
+ do_defconfigs=base
+ ;;
+ (*-*_defconfig)
+ defconfigs=( "${CI_COMMIT_REF_NAME##*-}" )
+ do_defconfigs=base
+ ;;
+ (*-runtime-tests)
+ do_runtime=true
+ ;;
+ (*-tests.*)
+ runtimes=( "${CI_COMMIT_REF_NAME##*-}" )
+ do_runtime=true
+ ;;
+ esac
fi
- if [ -n "${CI_PIPELINE_TRIGGERED}" ]; then
- # For pipeline created by using a trigger token.
- template=base
+
+ # If nothing else, at least do the basics to generate a valid pipeline
+ if [ -z "${do_defconfigs}" \
+ -a -z "${do_runtime}" \
+ ]
+ then
+ do_basics=true
fi
- case "${CI_COMMIT_REF_NAME}" in
- # For master, next, and maintenance branches, only check the defconfigs
- (master|next|????.??.x)
- template=check
- ext=_check
- ;;
- # For the branch or tag name named *-defconfigs, create a pipeline.
- (*-defconfigs)
- template=base
- ;;
- (*-*_defconfig)
- defconfigs=( "${CI_COMMIT_REF_NAME##*-}" )
- template=base
- ;;
- esac
- if [ -n "${template}" ]; then
+ if ${do_basics:-false}; then
+ for tst in "${basics[@]}"; do
+ printf 'check-%s: { extends: .check-%s_base }\n' "${tst}" "${tst}"
+ done
+ fi
+
+ if [ -n "${do_defconfigs}" ]; then
for cfg in "${defconfigs[@]}"; do
printf '%s%s: { extends: .defconfig_%s }\n' \
- "${cfg}" "${ext}" "${template}"
+ "${cfg}" "${defconfigs_ext}" "${do_defconfigs}"
done
fi
-}
-
-gen_tests() {
- local -a tests
- local run_tests tst
- tests=( $(./support/testing/run-tests -l 2>&1 \
- | sed -r -e '/^test_run \((.*)\).*/!d; s//\1/'\
- | LC_ALL=C sort)
- )
-
- run_tests=false
- if [ -n "${CI_COMMIT_TAG}" ]; then
- # For tags, create a pipeline.
- run_tests=true
- fi
- if [ -n "${CI_PIPELINE_TRIGGERED}" ]; then
- # For pipeline created by using a trigger token.
- run_tests=true
- fi
- case "${CI_COMMIT_REF_NAME}" in
- # For the branch or tag name named *-runtime-tests, create a pipeline.
- (*-runtime-tests)
- run_tests=true
- ;;
- (*-tests.*)
- tests=( "${CI_COMMIT_REF_NAME##*-}" )
- run_tests=true
- ;;
- esac
-
- if ${run_tests}; then
- printf '%s: { extends: .runtime_test_base }\n' "${tests[@]}"
+ if ${do_runtime:-false}; then
+ printf '%s: { extends: .runtime_test_base }\n' "${runtimes[@]}"
fi
}
diff --git a/support/scripts/pkg-stats b/support/scripts/pkg-stats
index 503cc45c16..6f3ddc561f 100755
--- a/support/scripts/pkg-stats
+++ b/support/scripts/pkg-stats
@@ -28,10 +28,11 @@ import subprocess
import json
import sys
-sys.path.append('utils/')
-from getdeveloperlib import parse_developers # noqa: E402
-import cve as cvecheck # noqa: E402
+brpath = os.path.normpath(os.path.join(os.path.dirname(__file__), "..", ".."))
+sys.path.append(os.path.join(brpath, "utils"))
+from getdeveloperlib import parse_developers # noqa: E402
+from cpedb import CPEDB # noqa: E402
INFRA_RE = re.compile(r"\$\(eval \$\(([a-z-]*)-package\)\)")
URL_RE = re.compile(r"\s*https?://\S*\s*$")
@@ -66,7 +67,7 @@ def get_defconfig_list():
"""
return [
Defconfig(name[:-len('_defconfig')], os.path.join('configs', name))
- for name in os.listdir('configs')
+ for name in os.listdir(os.path.join(brpath, 'configs'))
if name.endswith('_defconfig')
]
@@ -76,6 +77,7 @@ class Package:
all_license_files = list()
all_versions = dict()
all_ignored_cves = dict()
+ all_cpeids = dict()
# This is the list of all possible checks. Add new checks to this list so
# a tool that post-processeds the json output knows the checks before
# iterating over the packages.
@@ -96,7 +98,9 @@ class Package:
self.current_version = None
self.url = None
self.url_worker = None
+ self.cpeid = None
self.cves = list()
+ self.ignored_cves = list()
self.latest_version = {'status': RM_API_STATUS_ERROR, 'version': None, 'id': None}
self.status = {}
@@ -108,9 +112,10 @@ class Package:
Fills in the .url field
"""
self.status['url'] = ("warning", "no Config.in")
- for filename in os.listdir(os.path.dirname(self.path)):
+ pkgdir = os.path.dirname(os.path.join(brpath, self.path))
+ for filename in os.listdir(pkgdir):
if fnmatch.fnmatch(filename, 'Config.*'):
- fp = open(os.path.join(os.path.dirname(self.path), filename), "r")
+ fp = open(os.path.join(pkgdir, filename), "r")
for config_line in fp:
if URL_RE.match(config_line):
self.url = config_line.strip()
@@ -138,10 +143,10 @@ class Package:
Fills in the .infras field
"""
self.infras = list()
- with open(self.path, 'r') as f:
+ with open(os.path.join(brpath, self.path), 'r') as f:
lines = f.readlines()
- for l in lines:
- match = INFRA_RE.match(l)
+ for line in lines:
+ match = INFRA_RE.match(line)
if not match:
continue
infra = match.group(1)
@@ -178,7 +183,7 @@ class Package:
return
hashpath = self.path.replace(".mk", ".hash")
- if os.path.exists(hashpath):
+ if os.path.exists(os.path.join(brpath, hashpath)):
self.status['hash'] = ("ok", "found")
else:
self.status['hash'] = ("error", "missing")
@@ -191,7 +196,7 @@ class Package:
self.status['patches'] = ("na", "no valid package infra")
return
- pkgdir = os.path.dirname(self.path)
+ pkgdir = os.path.dirname(os.path.join(brpath, self.path))
for subdir, _, _ in os.walk(pkgdir):
self.patch_files = fnmatch.filter(os.listdir(subdir), '*.patch')
@@ -210,12 +215,28 @@ class Package:
if var in self.all_versions:
self.current_version = self.all_versions[var]
+ def set_cpeid(self):
+ """
+ Fills in the .cpeid field
+ """
+ var = self.pkgvar()
+ if not self.has_valid_infra:
+ self.status['cpe'] = ("na", "no valid package infra")
+ return
+
+ if var in self.all_cpeids:
+ self.cpeid = self.all_cpeids[var]
+ # Set a preliminary status, it might be overridden by check_package_cpes()
+ self.status['cpe'] = ("warning", "not checked against CPE dictionnary")
+ else:
+ self.status['cpe'] = ("error", "no verified CPE identifier")
+
def set_check_package_warnings(self):
"""
Fills in the .warnings and .status['pkg-check'] fields
"""
- cmd = ["./utils/check-package"]
- pkgdir = os.path.dirname(self.path)
+ cmd = [os.path.join(brpath, "utils/check-package")]
+ pkgdir = os.path.dirname(os.path.join(brpath, self.path))
self.status['pkg-check'] = ("error", "Missing")
for root, dirs, files in os.walk(pkgdir):
for f in files:
@@ -233,12 +254,11 @@ class Package:
self.status['pkg-check'] = ("error", "{} warnings".format(self.warnings))
return
- @property
- def ignored_cves(self):
+ def set_ignored_cves(self):
"""
Give the list of CVEs ignored by the package
"""
- return list(self.all_ignored_cves.get(self.pkgvar(), []))
+ self.ignored_cves = list(self.all_ignored_cves.get(self.pkgvar(), []))
def set_developers(self, developers):
"""
@@ -256,7 +276,13 @@ class Package:
self.status['developers'] = ("warning", "no developers")
def is_status_ok(self, name):
- return self.status[name][0] == 'ok'
+ return name in self.status and self.status[name][0] == 'ok'
+
+ def is_status_error(self, name):
+ return name in self.status and self.status[name][0] == 'error'
+
+ def is_status_na(self, name):
+ return name in self.status and self.status[name][0] == 'na'
def __eq__(self, other):
return self.path == other.path
@@ -300,11 +326,12 @@ def get_pkglist(npackages, package_list):
"toolchain/toolchain-wrapper.mk"]
packages = list()
count = 0
- for root, dirs, files in os.walk("."):
+ for root, dirs, files in os.walk(brpath):
+ root = os.path.relpath(root, brpath)
rootdir = root.split("/")
- if len(rootdir) < 2:
+ if len(rootdir) < 1:
continue
- if rootdir[1] not in WALK_USEFUL_SUBDIRS:
+ if rootdir[0] not in WALK_USEFUL_SUBDIRS:
continue
for f in files:
if not f.endswith(".mk"):
@@ -316,8 +343,7 @@ def get_pkglist(npackages, package_list):
pkgpath = os.path.join(root, f)
skip = False
for exclude in WALK_EXCLUDES:
- # pkgpath[2:] strips the initial './'
- if re.match(exclude, pkgpath[2:]):
+ if re.match(exclude, pkgpath):
skip = True
continue
if skip:
@@ -330,10 +356,16 @@ def get_pkglist(npackages, package_list):
return packages
+def get_config_packages():
+ cmd = ["make", "--no-print-directory", "show-info"]
+ js = json.loads(subprocess.check_output(cmd))
+ return set([v["name"] for v in js.values()])
+
+
def package_init_make_info():
# Fetch all variables at once
variables = subprocess.check_output(["make", "BR2_HAVE_DOT_CONFIG=y", "-s", "printvars",
- "VARS=%_LICENSE %_LICENSE_FILES %_VERSION %_IGNORE_CVES"])
+ "VARS=%_LICENSE %_LICENSE_FILES %_VERSION %_IGNORE_CVES %_CPE_ID"])
variable_list = variables.decode().splitlines()
# We process first the host package VERSION, and then the target
@@ -371,6 +403,10 @@ def package_init_make_info():
pkgvar = pkgvar[:-12]
Package.all_ignored_cves[pkgvar] = value.split()
+ elif pkgvar.endswith("_CPE_ID"):
+ pkgvar = pkgvar[:-7]
+ Package.all_cpeids[pkgvar] = value
+
check_url_count = 0
@@ -405,7 +441,7 @@ async def check_package_urls(packages):
async with aiohttp.ClientSession(connector=connector, trust_env=True) as sess:
packages = [p for p in packages if p.status['url'][0] == 'ok']
for pkg in packages:
- tasks.append(check_url_status(sess, pkg, len(packages)))
+ tasks.append(asyncio.ensure_future(check_url_status(sess, pkg, len(packages))))
await asyncio.wait(tasks)
@@ -523,20 +559,58 @@ async def check_package_latest_version(packages):
async with aiohttp.ClientSession(connector=connector, trust_env=True) as sess:
packages = [p for p in packages if p.has_valid_infra]
for pkg in packages:
- tasks.append(check_package_latest_version_get(sess, pkg, len(packages)))
+ tasks.append(asyncio.ensure_future(check_package_latest_version_get(sess, pkg, len(packages))))
await asyncio.wait(tasks)
+def check_package_cve_affects(cve, cpe_product_pkgs):
+ for product in cve.affected_products:
+ if product not in cpe_product_pkgs:
+ continue
+ for pkg in cpe_product_pkgs[product]:
+ if cve.affects(pkg.name, pkg.current_version, pkg.ignored_cves, pkg.cpeid) == cve.CVE_AFFECTS:
+ pkg.cves.append(cve.identifier)
+
+
def check_package_cves(nvd_path, packages):
if not os.path.isdir(nvd_path):
os.makedirs(nvd_path)
+ cpe_product_pkgs = defaultdict(list)
+ for pkg in packages:
+ if not pkg.has_valid_infra:
+ pkg.status['cve'] = ("na", "no valid package infra")
+ continue
+ if not pkg.current_version:
+ pkg.status['cve'] = ("na", "no version information available")
+ continue
+ if pkg.cpeid:
+ cpe_product = cvecheck.cpe_product(pkg.cpeid)
+ cpe_product_pkgs[cpe_product].append(pkg)
+ else:
+ cpe_product_pkgs[pkg.name].append(pkg)
+
for cve in cvecheck.CVE.read_nvd_dir(nvd_path):
- for pkg_name in cve.pkg_names:
- if pkg_name in packages:
- pkg = packages[pkg_name]
- if cve.affects(pkg.name, pkg.current_version, pkg.ignored_cves) == cve.CVE_AFFECTS:
- pkg.cves.append(cve.identifier)
+ check_package_cve_affects(cve, cpe_product_pkgs)
+
+ for pkg in packages:
+ if 'cve' not in pkg.status:
+ if pkg.cves:
+ pkg.status['cve'] = ("error", "affected by CVEs")
+ else:
+ pkg.status['cve'] = ("ok", "not affected by CVEs")
+
+
+def check_package_cpes(nvd_path, packages):
+ cpedb = CPEDB(nvd_path)
+ cpedb.get_xml_dict()
+ for p in packages:
+ if not p.cpeid:
+ continue
+ if cpedb.find(p.cpeid):
+ p.status['cpe'] = ("ok", "verified CPE identifier")
+ else:
+ p.status['cpe'] = ("error", "CPE identifier unknown in CPE database")
def calculate_stats(packages):
@@ -578,6 +652,10 @@ def calculate_stats(packages):
stats["total-cves"] += len(pkg.cves)
if len(pkg.cves) != 0:
stats["pkg-cves"] += 1
+ if pkg.cpeid:
+ stats["cpe-id"] += 1
+ else:
+ stats["no-cpe-id"] += 1
return stats
@@ -633,6 +711,30 @@ td.version-error {
background: #ccc;
}
+td.cpe-ok {
+ background: #d2ffc4;
+}
+
+td.cpe-nok {
+ background: #ff9a69;
+}
+
+td.cpe-unknown {
+ background: #ffd870;
+}
+
+td.cve-ok {
+ background: #d2ffc4;
+}
+
+td.cve-nok {
+ background: #ff9a69;
+}
+
+td.cve-unknown {
+ background: #ffd870;
+}
+
</style>
<title>Statistics of Buildroot packages</title>
</head>
@@ -678,7 +780,7 @@ def boolean_str(b):
def dump_html_pkg(f, pkg):
f.write(" <tr>\n")
- f.write(" <td>%s</td>\n" % pkg.path[2:])
+ f.write(" <td>%s</td>\n" % pkg.path)
# Patch count
td_class = ["centered"]
@@ -791,13 +893,35 @@ def dump_html_pkg(f, pkg):
# CVEs
td_class = ["centered"]
- if len(pkg.cves) == 0:
- td_class.append("correct")
+ if pkg.is_status_ok("cve"):
+ td_class.append("cve-ok")
+ elif pkg.is_status_error("cve"):
+ td_class.append("cve-nok")
else:
- td_class.append("wrong")
+ td_class.append("cve-unknown")
+ f.write(" <td class=\"%s\">\n" % " ".join(td_class))
+ if pkg.is_status_error("cve"):
+ for cve in pkg.cves:
+ f.write(" <a href=\"https://security-tracker.debian.org/tracker/%s\">%s<br/>\n" % (cve, cve))
+ elif pkg.is_status_na("cve"):
+ f.write(" %s" % pkg.status['cve'][1])
+ else:
+ f.write(" N/A\n")
+ f.write(" </td>\n")
+
+ # CPE ID
+ td_class = ["left"]
+ if pkg.is_status_ok("cpe"):
+ td_class.append("cpe-ok")
+ elif pkg.is_status_error("cpe"):
+ td_class.append("cpe-nok")
+ else:
+ td_class.append("cpe-unknown")
f.write(" <td class=\"%s\">\n" % " ".join(td_class))
- for cve in pkg.cves:
- f.write(" <a href=\"https://security-tracker.debian.org/tracker/%s\">%s<br/>\n" % (cve, cve))
+ if pkg.cpeid:
+ f.write(" <code>%s</code>\n" % pkg.cpeid)
+ if not pkg.is_status_ok("cpe"):
+ f.write(" %s%s\n" % ("<br/>" if pkg.cpeid else "", pkg.status['cpe'][1]))
f.write(" </td>\n")
f.write(" </tr>\n")
@@ -818,6 +942,7 @@ def dump_html_all_pkgs(f, packages):
<td class=\"centered\">Warnings</td>
<td class=\"centered\">Upstream URL</td>
<td class=\"centered\">CVEs</td>
+<td class=\"centered\">CPE ID</td>
</tr>
""")
for pkg in sorted(packages):
@@ -860,6 +985,10 @@ def dump_html_stats(f, stats):
stats["pkg-cves"])
f.write("<tr><td>Total number of CVEs affecting all packages</td><td>%s</td></tr>\n" %
stats["total-cves"])
+ f.write("<tr><td>Packages with CPE ID</td><td>%s</td></tr>\n" %
+ stats["cpe-id"])
+ f.write("<tr><td>Packages without CPE ID</td><td>%s</td></tr>\n" %
+ stats["no-cpe-id"])
f.write("</table>\n")
@@ -926,6 +1055,8 @@ def parse_args():
output.add_argument('--json', dest='json', type=resolvepath,
help='JSON output file')
packages = parser.add_mutually_exclusive_group()
+ packages.add_argument('-c', dest='configpackages', action='store_true',
+ help='Apply to packages enabled in current configuration')
packages.add_argument('-n', dest='npackages', type=int, action='store',
help='Number of packages')
packages.add_argument('-p', dest='packages', action='store',
@@ -939,13 +1070,22 @@ def parse_args():
def __main__():
+ global cvecheck
+
args = parse_args()
+
+ if args.nvd_path:
+ import cve as cvecheck
+
if args.packages:
package_list = args.packages.split(",")
+ elif args.configpackages:
+ package_list = get_config_packages()
else:
package_list = None
date = datetime.datetime.utcnow()
- commit = subprocess.check_output(['git', 'rev-parse',
+ commit = subprocess.check_output(['git', '-C', brpath,
+ 'rev-parse',
'HEAD']).splitlines()[0].decode()
print("Build package list ...")
packages = get_pkglist(args.npackages, package_list)
@@ -965,7 +1105,9 @@ def __main__():
pkg.set_patch_count()
pkg.set_check_package_warnings()
pkg.set_current_version()
+ pkg.set_cpeid()
pkg.set_url()
+ pkg.set_ignored_cves()
pkg.set_developers(developers)
print("Checking URL status")
loop = asyncio.get_event_loop()
@@ -975,7 +1117,8 @@ def __main__():
loop.run_until_complete(check_package_latest_version(packages))
if args.nvd_path:
print("Checking packages CVEs")
- check_package_cves(args.nvd_path, {p.name: p for p in packages})
+ check_package_cves(args.nvd_path, packages)
+ check_package_cpes(args.nvd_path, packages)
print("Calculate stats")
stats = calculate_stats(packages)
if args.html:
diff --git a/support/scripts/setlocalversion b/support/scripts/setlocalversion
index e04c955d9e..d492f2db2f 100755
--- a/support/scripts/setlocalversion
+++ b/support/scripts/setlocalversion
@@ -48,14 +48,28 @@ if head=`git rev-parse --verify --short HEAD 2>/dev/null`; then
fi
# Check for mercurial and a mercurial repo.
+# In the git case, 'git describe' will show the latest tag, and unless we are
+# exactly on that tag, the number of commits since then, and last commit id.
+# Mimic something similar in the Mercurial case.
if hgid=`HGRCPATH= hg id --id --tags 2>/dev/null`; then
tag=`printf '%s' "$hgid" | cut -d' ' -f2 --only-delimited`
# Do we have an untagged version?
if [ -z "$tag" -o "$tag" = tip ]; then
+ # current revision is not tagged, determine latest tag
+ latesttag=`HGRCPATH= hg log -r. -T '{latesttag}' 2>/dev/null`
+ # In case there is more than one tag on the latest tagged commit,
+ # 'latesttag' will separate them by colon (:). We'll retain this.
+ # In case there is no tag at all, 'null' will be returned.
+ if [ "$latesttag" = "null" ]; then
+ latesttag=''
+ fi
+
+ # add the commit id
id=`printf '%s' "$hgid" | sed 's/[+ ].*//'`
- printf '%s%s' -hg "$id"
+ printf '%s%s%s' "${latesttag}" -hg "$id"
else
+ # current revision is tagged, just print the tag
printf ${tag}
fi
diff --git a/support/testing/tests/boot/test_atf.py b/support/testing/tests/boot/test_atf.py
index 08a0b7af2a..e6c11aa742 100644
--- a/support/testing/tests/boot/test_atf.py
+++ b/support/testing/tests/boot/test_atf.py
@@ -41,9 +41,11 @@ class TestATFAllwinner(infra.basetest.BRTest):
BR2_TARGET_UBOOT=y
BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y
BR2_TARGET_UBOOT_CUSTOM_VERSION=y
- BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2017.11"
+ BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2020.10"
BR2_TARGET_UBOOT_BOARD_DEFCONFIG="bananapi_m64"
BR2_TARGET_UBOOT_NEEDS_DTC=y
+ BR2_TARGET_UBOOT_NEEDS_PYTHON3=y
+ BR2_TARGET_UBOOT_NEEDS_PYLIBFDT=y
BR2_TARGET_UBOOT_NEEDS_ATF_BL31=y
BR2_TARGET_UBOOT_FORMAT_CUSTOM=y
BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME="u-boot.itb"
@@ -53,30 +55,3 @@ class TestATFAllwinner(infra.basetest.BRTest):
def test_run(self):
pass
-
-
-class TestATFMarvell(infra.basetest.BRTest):
- config = \
- """
- BR2_aarch64=y
- BR2_TOOLCHAIN_EXTERNAL=y
- BR2_TOOLCHAIN_EXTERNAL_LINARO_AARCH64=y
- BR2_TARGET_ARM_TRUSTED_FIRMWARE=y
- BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_GIT=y
- BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_URL="https://github.com/MarvellEmbeddedProcessors/atf-marvell.git"
- BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_VERSION="711ecd32afe465b38052b5ba374c825b158eea18"
- BR2_TARGET_ARM_TRUSTED_FIRMWARE_PLATFORM="a80x0_mcbin"
- BR2_TARGET_ARM_TRUSTED_FIRMWARE_FIP=y
- BR2_TARGET_ARM_TRUSTED_FIRMWARE_UBOOT_AS_BL33=y
- BR2_TARGET_ARM_TRUSTED_FIRMWARE_ADDITIONAL_VARIABLES="USE_COHERENT_MEM=0"
- BR2_TARGET_BINARIES_MARVELL=y
- BR2_TARGET_MV_DDR_MARVELL=y
- BR2_TARGET_UBOOT=y
- BR2_TARGET_UBOOT_BOARDNAME="mvebu_mcbin-88f8040"
- BR2_TARGET_UBOOT_CUSTOM_VERSION=y
- BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2018.09"
- BR2_TARGET_UBOOT_NEEDS_DTC=y
- """
-
- def test_run(self):
- pass
diff --git a/support/testing/tests/boot/test_syslinux.py b/support/testing/tests/boot/test_syslinux.py
index f25cddfb6c..467d564e18 100644
--- a/support/testing/tests/boot/test_syslinux.py
+++ b/support/testing/tests/boot/test_syslinux.py
@@ -6,6 +6,7 @@ class TestSysLinuxBase(infra.basetest.BRTest):
"""
BR2_x86_i686=y
BR2_TOOLCHAIN_EXTERNAL=y
+ BR2_TOOLCHAIN_EXTERNAL_CUSTOM=y
BR2_TOOLCHAIN_EXTERNAL_DOWNLOAD=y
BR2_TOOLCHAIN_EXTERNAL_URL="http://toolchains.bootlin.com/downloads/releases/toolchains/x86-i686/tarballs/x86-i686--glibc--bleeding-edge-2018.11-1.tar.bz2"
BR2_TOOLCHAIN_EXTERNAL_GCC_8=y
diff --git a/support/testing/tests/core/cpeid-br2-external/Config.in b/support/testing/tests/core/cpeid-br2-external/Config.in
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/support/testing/tests/core/cpeid-br2-external/Config.in
diff --git a/support/testing/tests/core/cpeid-br2-external/external.desc b/support/testing/tests/core/cpeid-br2-external/external.desc
new file mode 100644
index 0000000000..d19ae79e7a
--- /dev/null
+++ b/support/testing/tests/core/cpeid-br2-external/external.desc
@@ -0,0 +1 @@
+name: CPE_ID
diff --git a/support/testing/tests/core/cpeid-br2-external/external.mk b/support/testing/tests/core/cpeid-br2-external/external.mk
new file mode 100644
index 0000000000..47492d7f82
--- /dev/null
+++ b/support/testing/tests/core/cpeid-br2-external/external.mk
@@ -0,0 +1 @@
+include $(sort $(wildcard $(BR2_EXTERNAL_CPE_ID_PATH)/package/*/*.mk))
diff --git a/support/testing/tests/core/cpeid-br2-external/package/cpe-id-pkg1/cpe-id-pkg1.mk b/support/testing/tests/core/cpeid-br2-external/package/cpe-id-pkg1/cpe-id-pkg1.mk
new file mode 100644
index 0000000000..5e7460286b
--- /dev/null
+++ b/support/testing/tests/core/cpeid-br2-external/package/cpe-id-pkg1/cpe-id-pkg1.mk
@@ -0,0 +1,4 @@
+CPE_ID_PKG1_VERSION = 42
+
+$(eval $(generic-package))
+$(eval $(host-generic-package))
diff --git a/support/testing/tests/core/cpeid-br2-external/package/cpe-id-pkg2/cpe-id-pkg2.mk b/support/testing/tests/core/cpeid-br2-external/package/cpe-id-pkg2/cpe-id-pkg2.mk
new file mode 100644
index 0000000000..12b3f3223f
--- /dev/null
+++ b/support/testing/tests/core/cpeid-br2-external/package/cpe-id-pkg2/cpe-id-pkg2.mk
@@ -0,0 +1,3 @@
+CPE_ID_PKG2_VERSION = 67
+
+$(eval $(host-generic-package))
diff --git a/support/testing/tests/core/cpeid-br2-external/package/cpe-id-pkg3/cpe-id-pkg3.mk b/support/testing/tests/core/cpeid-br2-external/package/cpe-id-pkg3/cpe-id-pkg3.mk
new file mode 100644
index 0000000000..5added78df
--- /dev/null
+++ b/support/testing/tests/core/cpeid-br2-external/package/cpe-id-pkg3/cpe-id-pkg3.mk
@@ -0,0 +1,5 @@
+CPE_ID_PKG3_VERSION = 67
+CPE_ID_PKG3_CPE_ID_VALID = YES
+
+$(eval $(generic-package))
+$(eval $(host-generic-package))
diff --git a/support/testing/tests/core/cpeid-br2-external/package/cpe-id-pkg4/cpe-id-pkg4.mk b/support/testing/tests/core/cpeid-br2-external/package/cpe-id-pkg4/cpe-id-pkg4.mk
new file mode 100644
index 0000000000..557acff8a2
--- /dev/null
+++ b/support/testing/tests/core/cpeid-br2-external/package/cpe-id-pkg4/cpe-id-pkg4.mk
@@ -0,0 +1,9 @@
+CPE_ID_PKG4_VERSION = 67
+CPE_ID_PKG4_CPE_ID_VENDOR = foo
+CPE_ID_PKG4_CPE_ID_PRODUCT = bar
+CPE_ID_PKG4_CPE_ID_VERSION = 42
+CPE_ID_PKG4_CPE_ID_UPDATE = b2
+CPE_ID_PKG4_CPE_ID_PREFIX = cpe:2.4:a
+
+$(eval $(generic-package))
+$(eval $(host-generic-package))
diff --git a/support/testing/tests/core/cpeid-br2-external/package/cpe-id-pkg5/cpe-id-pkg5.mk b/support/testing/tests/core/cpeid-br2-external/package/cpe-id-pkg5/cpe-id-pkg5.mk
new file mode 100644
index 0000000000..d0db5f03fe
--- /dev/null
+++ b/support/testing/tests/core/cpeid-br2-external/package/cpe-id-pkg5/cpe-id-pkg5.mk
@@ -0,0 +1,16 @@
+CPE_ID_PKG5_VERSION = 57
+
+CPE_ID_PKG5_CPE_ID_VENDOR = foo
+CPE_ID_PKG5_CPE_ID_PRODUCT = bar
+CPE_ID_PKG5_CPE_ID_VERSION = 42
+CPE_ID_PKG5_CPE_ID_UPDATE = b2
+CPE_ID_PKG5_CPE_ID_PREFIX = cpe:2.4:a
+
+HOST_CPE_ID_PKG5_CPE_ID_VENDOR = baz
+HOST_CPE_ID_PKG5_CPE_ID_PRODUCT = fuz
+HOST_CPE_ID_PKG5_CPE_ID_VERSION = 43
+HOST_CPE_ID_PKG5_CPE_ID_UPDATE = b3
+HOST_CPE_ID_PKG5_CPE_ID_PREFIX = cpe:2.5:a
+
+$(eval $(generic-package))
+$(eval $(host-generic-package))
diff --git a/support/testing/tests/core/test_cpeid.py b/support/testing/tests/core/test_cpeid.py
new file mode 100644
index 0000000000..190f0306e5
--- /dev/null
+++ b/support/testing/tests/core/test_cpeid.py
@@ -0,0 +1,110 @@
+import infra
+import subprocess
+import json
+
+
+class CpeIdTest(infra.basetest.BRConfigTest):
+ config = ""
+ br2_external = [infra.filepath("tests/core/cpeid-br2-external")]
+
+ def get_vars(self, var):
+ cmd = ["make", "--no-print-directory", "-C", self.b.builddir,
+ "VARS=%s%%" % var, "printvars"]
+ lines = subprocess.check_output(cmd).splitlines()
+ return dict([str(x, "utf-8").split("=") for x in lines])
+
+ def get_json(self, pkg):
+ cmd = ["make", "--no-print-directory", "-C", self.b.builddir,
+ "%s-show-info" % pkg]
+ return json.loads(subprocess.check_output(cmd))
+
+ def test_pkg1(self):
+ # this package has no CPE ID information, it should not have
+ # any CPE_ID variable defined.
+ pkg_vars = self.get_vars("CPE_ID_PKG1_CPE_ID")
+ cpe_vars = ["CPE_ID_VALID", "CPE_ID_PRODUCT", "CPE_ID_VERSION", "CPE_ID_UPDATE",
+ "CPE_ID_PREFIX", "CPE_ID"]
+ for v in cpe_vars:
+ self.assertNotIn("CPE_ID_PKG1_%s" % v, pkg_vars)
+ pkg_json = self.get_json("cpe-id-pkg1")
+ self.assertNotIn("cpe-id", pkg_json['cpe-id-pkg1'])
+
+ pkg_vars = self.get_vars("HOST_CPE_ID_PKG1_CPE_ID")
+ for v in cpe_vars:
+ self.assertNotIn("HOST_CPE_ID_PKG1_%s" % v, pkg_vars)
+ pkg_json = self.get_json("host-cpe-id-pkg1")
+ self.assertNotIn("cpe-id", pkg_json['host-cpe-id-pkg1'])
+
+ def test_pkg2(self):
+ # this package has no CPE ID information, it should not have
+ # any CPE_ID variable defined.
+ pkg_vars = self.get_vars("HOST_CPE_ID_PKG2_CPE_ID")
+ cpe_vars = ["CPE_ID_VALID", "CPE_ID_PRODUCT", "CPE_ID_VERSION", "CPE_ID_UPDATE",
+ "CPE_ID_PREFIX", "CPE_ID"]
+ for v in cpe_vars:
+ self.assertNotIn("HOST_CPE_ID_PKG2_%s" % v, pkg_vars)
+ pkg_json = self.get_json("host-cpe-id-pkg2")
+ self.assertNotIn("cpe-id", pkg_json['host-cpe-id-pkg2'])
+
+ def test_pkg3(self):
+ # this package has just <pkg>_CPE_ID_VALID defined, so verify
+ # it has the default CPE_ID value, and that inheritance of the
+ # values for the host package is working
+ pkg_vars = self.get_vars("CPE_ID_PKG3_CPE_ID")
+ self.assertEqual(pkg_vars["CPE_ID_PKG3_CPE_ID"],
+ "cpe:2.3:a:cpe-id-pkg3_project:cpe-id-pkg3:67:*:*:*:*:*:*:*")
+ self.assertEqual(pkg_vars["CPE_ID_PKG3_CPE_ID_VALID"], "YES")
+ pkg_json = self.get_json("cpe-id-pkg3")
+ self.assertEqual(pkg_json['cpe-id-pkg3']['cpe-id'],
+ "cpe:2.3:a:cpe-id-pkg3_project:cpe-id-pkg3:67:*:*:*:*:*:*:*")
+
+ pkg_vars = self.get_vars("HOST_CPE_ID_PKG3_CPE_ID")
+ self.assertEqual(pkg_vars["HOST_CPE_ID_PKG3_CPE_ID"],
+ "cpe:2.3:a:cpe-id-pkg3_project:cpe-id-pkg3:67:*:*:*:*:*:*:*")
+ self.assertEqual(pkg_vars["HOST_CPE_ID_PKG3_CPE_ID_VALID"], "YES")
+ pkg_json = self.get_json("host-cpe-id-pkg3")
+ self.assertEqual(pkg_json['host-cpe-id-pkg3']['cpe-id'],
+ "cpe:2.3:a:cpe-id-pkg3_project:cpe-id-pkg3:67:*:*:*:*:*:*:*")
+
+ def test_pkg4(self):
+ # this package defines
+ # <pkg>_CPE_ID_{VENDOR,PRODUCT,VERSION,UPDATE,PREFIX},
+ # make sure we get the computed <pkg>_CPE_ID, and that it is
+ # inherited by the host variant
+ pkg_vars = self.get_vars("CPE_ID_PKG4_CPE_ID")
+ self.assertEqual(pkg_vars["CPE_ID_PKG4_CPE_ID"],
+ "cpe:2.4:a:foo:bar:42:b2:*:*:*:*:*:*")
+ self.assertEqual(pkg_vars["CPE_ID_PKG4_CPE_ID_VALID"], "YES")
+ pkg_json = self.get_json("cpe-id-pkg4")
+ self.assertEqual(pkg_json['cpe-id-pkg4']['cpe-id'],
+ "cpe:2.4:a:foo:bar:42:b2:*:*:*:*:*:*")
+
+ pkg_vars = self.get_vars("HOST_CPE_ID_PKG4_CPE_ID")
+ self.assertEqual(pkg_vars["HOST_CPE_ID_PKG4_CPE_ID"],
+ "cpe:2.4:a:foo:bar:42:b2:*:*:*:*:*:*")
+ self.assertEqual(pkg_vars["HOST_CPE_ID_PKG4_CPE_ID_VALID"], "YES")
+ pkg_json = self.get_json("host-cpe-id-pkg4")
+ self.assertEqual(pkg_json['host-cpe-id-pkg4']['cpe-id'],
+ "cpe:2.4:a:foo:bar:42:b2:*:*:*:*:*:*")
+
+ def test_pkg5(self):
+ # this package defines
+ # <pkg>_CPE_ID_{VENDOR,PRODUCT,VERSION,UPDATE,PREFIX} and
+ # HOST_<pkg>_CPE_ID_{VENDOR,PRODUCT,VERSION,UPDATE,PREFIX}
+ # separately, with different values. Make sure we get the
+ # right <pkg>_CPE_ID and HOST_<pkg>_CPE_ID values.
+ pkg_vars = self.get_vars("CPE_ID_PKG5_CPE_ID")
+ self.assertEqual(pkg_vars["CPE_ID_PKG5_CPE_ID"],
+ "cpe:2.4:a:foo:bar:42:b2:*:*:*:*:*:*")
+ self.assertEqual(pkg_vars["CPE_ID_PKG5_CPE_ID_VALID"], "YES")
+ pkg_json = self.get_json("cpe-id-pkg5")
+ self.assertEqual(pkg_json['cpe-id-pkg5']['cpe-id'],
+ "cpe:2.4:a:foo:bar:42:b2:*:*:*:*:*:*")
+
+ pkg_vars = self.get_vars("HOST_CPE_ID_PKG5_CPE_ID")
+ self.assertEqual(pkg_vars["HOST_CPE_ID_PKG5_CPE_ID"],
+ "cpe:2.5:a:baz:fuz:43:b3:*:*:*:*:*:*")
+ self.assertEqual(pkg_vars["HOST_CPE_ID_PKG5_CPE_ID_VALID"], "YES")
+ pkg_json = self.get_json("host-cpe-id-pkg5")
+ self.assertEqual(pkg_json['host-cpe-id-pkg5']['cpe-id'],
+ "cpe:2.5:a:baz:fuz:43:b3:*:*:*:*:*:*")
diff --git a/support/testing/tests/core/test_file_capabilities.py b/support/testing/tests/core/test_file_capabilities.py
index 945b48a4c3..b9ece18d7b 100644
--- a/support/testing/tests/core/test_file_capabilities.py
+++ b/support/testing/tests/core/test_file_capabilities.py
@@ -44,4 +44,4 @@ class TestFileCapabilities(infra.basetest.BRTest):
self.assertIn("cap_kill", output[0])
self.assertIn("cap_sys_nice", output[0])
self.assertIn("cap_sys_time", output[0])
- self.assertIn("+eip", output[0])
+ self.assertIn("=eip", output[0])
diff --git a/support/testing/tests/core/test_hardening.py b/support/testing/tests/core/test_hardening.py
index edfb3315db..60e14303a3 100644
--- a/support/testing/tests/core/test_hardening.py
+++ b/support/testing/tests/core/test_hardening.py
@@ -10,6 +10,7 @@ class TestHardeningBase(infra.basetest.BRTest):
BR2_powerpc64=y
BR2_powerpc_e5500=y
BR2_TOOLCHAIN_EXTERNAL=y
+ BR2_TOOLCHAIN_EXTERNAL_CUSTOM=y
BR2_TOOLCHAIN_EXTERNAL_DOWNLOAD=y
BR2_TOOLCHAIN_EXTERNAL_URL="https://toolchains.bootlin.com/downloads/releases/toolchains/powerpc64-e5500/tarballs/powerpc64-e5500--glibc--stable-2018.02-2.tar.bz2"
BR2_TOOLCHAIN_EXTERNAL_GCC_6=y
diff --git a/support/testing/tests/core/test_selinux.py b/support/testing/tests/core/test_selinux.py
new file mode 100644
index 0000000000..683a424d6f
--- /dev/null
+++ b/support/testing/tests/core/test_selinux.py
@@ -0,0 +1,86 @@
+import os
+
+import infra.basetest
+
+
+class TestSELinuxInfra(infra.basetest.BRTest):
+ config = infra.basetest.BASIC_TOOLCHAIN_CONFIG +\
+ """
+ BR2_PACKAGE_REFPOLICY=y
+ BR2_PACKAGE_PYTHON3=y
+ BR2_PACKAGE_SETOOLS=y
+ BR2_TARGET_ROOTFS_CPIO=y
+ """
+
+ def base_test_run(self):
+ cpio_file = os.path.join(self.builddir, "images", "rootfs.cpio")
+ self.emulator.boot(arch="armv5", kernel="builtin",
+ options=["-initrd", cpio_file])
+ self.emulator.login()
+
+
+class TestSELinuxExtraModules(TestSELinuxInfra):
+ config = TestSELinuxInfra.config + \
+ """
+ BR2_REFPOLICY_EXTRA_MODULES="ntp tor"
+ """
+
+ def test_run(self):
+ TestSELinuxInfra.base_test_run(self)
+
+ out, ret = self.emulator.run("seinfo -t ntpd_t", 15)
+ self.assertEqual(ret, 0)
+ self.assertEqual(out[2].strip(), "ntpd_t")
+
+ out, ret = self.emulator.run("seinfo -t tor_t", 15)
+ self.assertEqual(ret, 0)
+ self.assertEqual(out[2].strip(), "tor_t")
+
+
+class TestSELinuxExtraModulesDirs(TestSELinuxInfra):
+ config = TestSELinuxInfra.config + \
+ """
+ BR2_REFPOLICY_EXTRA_MODULES_DIRS="{}"
+ """.format(infra.filepath("tests/core/test_selinux/extra_modules"))
+
+ def test_run(self):
+ TestSELinuxInfra.base_test_run(self)
+
+ out, ret = self.emulator.run("seinfo -t buildroot_test_t", 15)
+ self.assertEqual(ret, 0)
+ self.assertEqual(out[2].strip(), "buildroot_test_t")
+
+
+class TestSELinuxCustomGit(TestSELinuxInfra):
+ config = TestSELinuxInfra.config + \
+ """
+ BR2_PACKAGE_REFPOLICY_CUSTOM_GIT=y
+ BR2_PACKAGE_REFPOLICY_CUSTOM_REPO_URL="https://github.com/SELinuxProject/refpolicy.git"
+ BR2_PACKAGE_REFPOLICY_CUSTOM_REPO_VERSION="RELEASE_2_20200818"
+ """
+
+ def test_run(self):
+ pass
+
+
+class TestSELinuxPackage(TestSELinuxInfra):
+ br2_external = [infra.filepath("tests/core/test_selinux/br2_external")]
+ config = TestSELinuxInfra.config + \
+ """
+ BR2_PACKAGE_SELINUX_TEST=y
+ """
+
+ def test_run(self):
+ TestSELinuxInfra.base_test_run(self)
+
+ out, ret = self.emulator.run("seinfo -t ntpd_t", 15)
+ self.assertEqual(ret, 0)
+ self.assertEqual(out[2].strip(), "ntpd_t")
+
+ out, ret = self.emulator.run("seinfo -t tor_t", 15)
+ self.assertEqual(ret, 0)
+ self.assertEqual(out[2].strip(), "tor_t")
+
+ out, ret = self.emulator.run("seinfo -t buildroot_test_t", 15)
+ self.assertEqual(ret, 0)
+ self.assertEqual(out[2].strip(), "buildroot_test_t")
diff --git a/support/testing/tests/core/test_selinux/br2_external/Config.in b/support/testing/tests/core/test_selinux/br2_external/Config.in
new file mode 100644
index 0000000000..9d9c84ee3c
--- /dev/null
+++ b/support/testing/tests/core/test_selinux/br2_external/Config.in
@@ -0,0 +1 @@
+source "$BR2_EXTERNAL_SELINUX_PATH/package/selinux-test/Config.in"
diff --git a/support/testing/tests/core/test_selinux/br2_external/external.desc b/support/testing/tests/core/test_selinux/br2_external/external.desc
new file mode 100644
index 0000000000..44b5b95f5b
--- /dev/null
+++ b/support/testing/tests/core/test_selinux/br2_external/external.desc
@@ -0,0 +1 @@
+name: SELINUX
diff --git a/support/testing/tests/core/test_selinux/br2_external/external.mk b/support/testing/tests/core/test_selinux/br2_external/external.mk
new file mode 100644
index 0000000000..54d2402d52
--- /dev/null
+++ b/support/testing/tests/core/test_selinux/br2_external/external.mk
@@ -0,0 +1 @@
+include $(sort $(wildcard $(BR2_EXTERNAL_SELINUX_PATH)/package/*/*.mk))
diff --git a/support/testing/tests/core/test_selinux/br2_external/package/selinux-test/Config.in b/support/testing/tests/core/test_selinux/br2_external/package/selinux-test/Config.in
new file mode 100644
index 0000000000..e30ac83105
--- /dev/null
+++ b/support/testing/tests/core/test_selinux/br2_external/package/selinux-test/Config.in
@@ -0,0 +1,4 @@
+config BR2_PACKAGE_SELINUX_TEST
+ bool "SELinux test package"
+ help
+ Test package for SELinux Buildroot helpers.
diff --git a/support/testing/tests/core/test_selinux/br2_external/package/selinux-test/selinux-test.mk b/support/testing/tests/core/test_selinux/br2_external/package/selinux-test/selinux-test.mk
new file mode 100644
index 0000000000..0100b718be
--- /dev/null
+++ b/support/testing/tests/core/test_selinux/br2_external/package/selinux-test/selinux-test.mk
@@ -0,0 +1,9 @@
+################################################################################
+#
+# SELinux test package
+#
+################################################################################
+
+SELINUX_TEST_SELINUX_MODULES = ntp tor
+
+$(eval $(generic-package))
diff --git a/support/testing/tests/core/test_selinux/br2_external/package/selinux-test/selinux/buildroot.fc b/support/testing/tests/core/test_selinux/br2_external/package/selinux-test/selinux/buildroot.fc
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/support/testing/tests/core/test_selinux/br2_external/package/selinux-test/selinux/buildroot.fc
diff --git a/support/testing/tests/core/test_selinux/br2_external/package/selinux-test/selinux/buildroot.if b/support/testing/tests/core/test_selinux/br2_external/package/selinux-test/selinux/buildroot.if
new file mode 100644
index 0000000000..acf797e604
--- /dev/null
+++ b/support/testing/tests/core/test_selinux/br2_external/package/selinux-test/selinux/buildroot.if
@@ -0,0 +1 @@
+## <summary>Buildroot rules</summary>
diff --git a/support/testing/tests/core/test_selinux/br2_external/package/selinux-test/selinux/buildroot.te b/support/testing/tests/core/test_selinux/br2_external/package/selinux-test/selinux/buildroot.te
new file mode 100644
index 0000000000..266bc03be0
--- /dev/null
+++ b/support/testing/tests/core/test_selinux/br2_external/package/selinux-test/selinux/buildroot.te
@@ -0,0 +1,3 @@
+policy_module(buildroot, 1.0.0)
+
+type buildroot_test_t;
diff --git a/support/testing/tests/core/test_selinux/extra_modules/buildroot.fc b/support/testing/tests/core/test_selinux/extra_modules/buildroot.fc
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/support/testing/tests/core/test_selinux/extra_modules/buildroot.fc
diff --git a/support/testing/tests/core/test_selinux/extra_modules/buildroot.if b/support/testing/tests/core/test_selinux/extra_modules/buildroot.if
new file mode 100644
index 0000000000..acf797e604
--- /dev/null
+++ b/support/testing/tests/core/test_selinux/extra_modules/buildroot.if
@@ -0,0 +1 @@
+## <summary>Buildroot rules</summary>
diff --git a/support/testing/tests/core/test_selinux/extra_modules/buildroot.te b/support/testing/tests/core/test_selinux/extra_modules/buildroot.te
new file mode 100644
index 0000000000..266bc03be0
--- /dev/null
+++ b/support/testing/tests/core/test_selinux/extra_modules/buildroot.te
@@ -0,0 +1,3 @@
+policy_module(buildroot, 1.0.0)
+
+type buildroot_test_t;
diff --git a/support/testing/tests/download/br2-external/git-hash/package/bad/bad.hash b/support/testing/tests/download/br2-external/git-hash/package/bad/bad.hash
index b9e1baec84..b44b1f8255 100644
--- a/support/testing/tests/download/br2-external/git-hash/package/bad/bad.hash
+++ b/support/testing/tests/download/br2-external/git-hash/package/bad/bad.hash
@@ -1 +1 @@
-sha256 0000000000000000000000000000000000000000000000000000000000000000 bad-a238b1dfcd825d47d834af3c5223417c8411d90d.tar.gz
+sha256 0000000000000000000000000000000000000000000000000000000000000000 bad-a238b1dfcd825d47d834af3c5223417c8411d90d-br1.tar.gz
diff --git a/support/testing/tests/download/br2-external/git-hash/package/good/good.hash b/support/testing/tests/download/br2-external/git-hash/package/good/good.hash
index 9e92ab8ab9..fc3f60dafd 100644
--- a/support/testing/tests/download/br2-external/git-hash/package/good/good.hash
+++ b/support/testing/tests/download/br2-external/git-hash/package/good/good.hash
@@ -1 +1 @@
-sha256 d00ae598e9e770d607621a86766030b42eaa58156cb8d482b043969da7963c23 good-a238b1dfcd825d47d834af3c5223417c8411d90d.tar.gz
+sha256 682ad1f39f258bfb35e26f213f3798f44bb8105bb55fad47bdc003113765b650 good-a238b1dfcd825d47d834af3c5223417c8411d90d-br1.tar.gz
diff --git a/support/testing/tests/download/br2-external/git-refs/package/git-partial-sha1-branch-head/git-partial-sha1-branch-head.hash b/support/testing/tests/download/br2-external/git-refs/package/git-partial-sha1-branch-head/git-partial-sha1-branch-head.hash
index 648bcceca0..26a6b358e2 100644
--- a/support/testing/tests/download/br2-external/git-refs/package/git-partial-sha1-branch-head/git-partial-sha1-branch-head.hash
+++ b/support/testing/tests/download/br2-external/git-refs/package/git-partial-sha1-branch-head/git-partial-sha1-branch-head.hash
@@ -1,2 +1,2 @@
-sha256 70b76187369e47db69dac02c5696e63b35199cd20490fa473d289dd377774613 git-partial-sha1-branch-head-68c197d0879d485f4f6c.tar.gz
+sha256 c27041b3e874beb0d0218158e7d6507ad1515b684de5eed5fabd0f7205e9718e git-partial-sha1-branch-head-68c197d0879d485f4f6c-br1.tar.gz
sha256 2c1126513651b0d346a4e6d1bb75ac1c9999217e18026302d27bea47b06c7fb2 file
diff --git a/support/testing/tests/download/br2-external/git-refs/package/git-partial-sha1-reachable-by-branch/git-partial-sha1-reachable-by-branch.hash b/support/testing/tests/download/br2-external/git-refs/package/git-partial-sha1-reachable-by-branch/git-partial-sha1-reachable-by-branch.hash
index d064362e2c..ab1edc73a8 100644
--- a/support/testing/tests/download/br2-external/git-refs/package/git-partial-sha1-reachable-by-branch/git-partial-sha1-reachable-by-branch.hash
+++ b/support/testing/tests/download/br2-external/git-refs/package/git-partial-sha1-reachable-by-branch/git-partial-sha1-reachable-by-branch.hash
@@ -1,2 +1,2 @@
-sha256 9db079b9e215799d59975db7b2b26671eff1932ee6cf1075296f2ace3e2cb746 git-partial-sha1-reachable-by-branch-317406308d9259e2231b.tar.gz
+sha256 1bbba9bf2788bd789ed8da4e47cabbf3467b1f706875b3f6b62df38e08fb9aba git-partial-sha1-reachable-by-branch-317406308d9259e2231b-br1.tar.gz
sha256 fabbc65c442bacb5e69b7adfea6d14fbbfc1327134322efd12771dc84387d507 file
diff --git a/support/testing/tests/download/br2-external/git-refs/package/git-partial-sha1-reachable-by-tag/git-partial-sha1-reachable-by-tag.hash b/support/testing/tests/download/br2-external/git-refs/package/git-partial-sha1-reachable-by-tag/git-partial-sha1-reachable-by-tag.hash
index 7696086690..e4a08342a9 100644
--- a/support/testing/tests/download/br2-external/git-refs/package/git-partial-sha1-reachable-by-tag/git-partial-sha1-reachable-by-tag.hash
+++ b/support/testing/tests/download/br2-external/git-refs/package/git-partial-sha1-reachable-by-tag/git-partial-sha1-reachable-by-tag.hash
@@ -1,2 +1,2 @@
-sha256 f2ef9772f13a9ef9a2c7cde0795e179defb12320d1747fc8d2408748ef5844c2 git-partial-sha1-reachable-by-tag-46bae5b639e5a18e2cc4.tar.gz
+sha256 52d223f3b2d625216c259e9ff949ca8818452a531ba61557dd91f3889c7919d7 git-partial-sha1-reachable-by-tag-46bae5b639e5a18e2cc4-br1.tar.gz
sha256 2de87d77a2f226813f2d9bda906e970e4195605cdba6680443c0c04d89c532b6 file
diff --git a/support/testing/tests/download/br2-external/git-refs/package/git-partial-sha1-tag-itself/git-partial-sha1-tag-itself.hash b/support/testing/tests/download/br2-external/git-refs/package/git-partial-sha1-tag-itself/git-partial-sha1-tag-itself.hash
index e627caf91e..6e83e637cf 100644
--- a/support/testing/tests/download/br2-external/git-refs/package/git-partial-sha1-tag-itself/git-partial-sha1-tag-itself.hash
+++ b/support/testing/tests/download/br2-external/git-refs/package/git-partial-sha1-tag-itself/git-partial-sha1-tag-itself.hash
@@ -1,2 +1,2 @@
-sha256 721143b41b8e56cfd9025833f1602e900a490627db2504e5b4907baa23e0019e git-partial-sha1-tag-itself-2b0e0d98a49c97da6a61.tar.gz
+sha256 5cfc004b05f48b3fb419a5db4b7239223d670225fbbb91de2ae151c97910b36c git-partial-sha1-tag-itself-2b0e0d98a49c97da6a61-br1.tar.gz
sha256 6de8772a0a58fa62e2b8c58d4dae55c9db7534ad3b3918ecc849a9008d58f081 file
diff --git a/support/testing/tests/download/br2-external/git-refs/package/git-partial-sha1-tag-points-to/git-partial-sha1-tag-points-to.hash b/support/testing/tests/download/br2-external/git-refs/package/git-partial-sha1-tag-points-to/git-partial-sha1-tag-points-to.hash
index f957a0e23c..7d538e72df 100644
--- a/support/testing/tests/download/br2-external/git-refs/package/git-partial-sha1-tag-points-to/git-partial-sha1-tag-points-to.hash
+++ b/support/testing/tests/download/br2-external/git-refs/package/git-partial-sha1-tag-points-to/git-partial-sha1-tag-points-to.hash
@@ -1,2 +1,2 @@
-sha256 0fbf7fe935f962ceaafcf8e0ffd25dd2a83752c3f0fd055a942a53f8c9235fa7 git-partial-sha1-tag-points-to-516c9c5f64ec66534d4d.tar.gz
+sha256 0f40d7f39bf2e389cc2ce03c73cc0cc9ded1119378aaa68e2a2ef8597f6fd2f3 git-partial-sha1-tag-points-to-516c9c5f64ec66534d4d-br1.tar.gz
sha256 6de8772a0a58fa62e2b8c58d4dae55c9db7534ad3b3918ecc849a9008d58f081 file
diff --git a/support/testing/tests/download/br2-external/git-refs/package/git-sha1-branch-head/git-sha1-branch-head.hash b/support/testing/tests/download/br2-external/git-refs/package/git-sha1-branch-head/git-sha1-branch-head.hash
index 3e8f76d31a..2fc4fbcb95 100644
--- a/support/testing/tests/download/br2-external/git-refs/package/git-sha1-branch-head/git-sha1-branch-head.hash
+++ b/support/testing/tests/download/br2-external/git-refs/package/git-sha1-branch-head/git-sha1-branch-head.hash
@@ -1,2 +1,2 @@
-sha256 a21a2507b6d94ad484e49e3a9ae698f672a57469aab8e1779da77df7c9d4d337 git-sha1-branch-head-68c197d0879d485f4f6cee85544722b79e68e59f.tar.gz
+sha256 3ab67c485ce1825abbbf5db1d90d94dfadc89b30bb740041cfc75fc04021e218 git-sha1-branch-head-68c197d0879d485f4f6cee85544722b79e68e59f-br1.tar.gz
sha256 2c1126513651b0d346a4e6d1bb75ac1c9999217e18026302d27bea47b06c7fb2 file
diff --git a/support/testing/tests/download/br2-external/git-refs/package/git-sha1-reachable-by-branch/git-sha1-reachable-by-branch.hash b/support/testing/tests/download/br2-external/git-refs/package/git-sha1-reachable-by-branch/git-sha1-reachable-by-branch.hash
index f8d7b5dc48..38f0578fd6 100644
--- a/support/testing/tests/download/br2-external/git-refs/package/git-sha1-reachable-by-branch/git-sha1-reachable-by-branch.hash
+++ b/support/testing/tests/download/br2-external/git-refs/package/git-sha1-reachable-by-branch/git-sha1-reachable-by-branch.hash
@@ -1,2 +1,2 @@
-sha256 8909e76d898e651af0bc23fae4103b87888bfe77448d71aaf1fbec3da97a3ce2 git-sha1-reachable-by-branch-317406308d9259e2231bd0d6ddad3de3832bce08.tar.gz
+sha256 a5936d6d6022ea101a6076864a2afa918ab2776764012c4be589027001044041 git-sha1-reachable-by-branch-317406308d9259e2231bd0d6ddad3de3832bce08-br1.tar.gz
sha256 fabbc65c442bacb5e69b7adfea6d14fbbfc1327134322efd12771dc84387d507 file
diff --git a/support/testing/tests/download/br2-external/git-refs/package/git-sha1-reachable-by-tag/git-sha1-reachable-by-tag.hash b/support/testing/tests/download/br2-external/git-refs/package/git-sha1-reachable-by-tag/git-sha1-reachable-by-tag.hash
index 0eb0ca0917..bd4673b15f 100644
--- a/support/testing/tests/download/br2-external/git-refs/package/git-sha1-reachable-by-tag/git-sha1-reachable-by-tag.hash
+++ b/support/testing/tests/download/br2-external/git-refs/package/git-sha1-reachable-by-tag/git-sha1-reachable-by-tag.hash
@@ -1,2 +1,2 @@
-sha256 9b20256a3058221a8e91031f11700d9945ea84e8f328fa8e42e1cb9f7a30e3b2 git-sha1-reachable-by-tag-46bae5b639e5a18e2cc4dc508f080d566baeff59.tar.gz
+sha256 c203f968e358ca478d4c5344b1e4ae9bf13f9fb1120f2ed96a12154dd64195a6 git-sha1-reachable-by-tag-46bae5b639e5a18e2cc4dc508f080d566baeff59-br1.tar.gz
sha256 2de87d77a2f226813f2d9bda906e970e4195605cdba6680443c0c04d89c532b6 file
diff --git a/support/testing/tests/download/br2-external/git-refs/package/git-sha1-tag-itself/git-sha1-tag-itself.hash b/support/testing/tests/download/br2-external/git-refs/package/git-sha1-tag-itself/git-sha1-tag-itself.hash
index 48c1348538..c6862da75e 100644
--- a/support/testing/tests/download/br2-external/git-refs/package/git-sha1-tag-itself/git-sha1-tag-itself.hash
+++ b/support/testing/tests/download/br2-external/git-refs/package/git-sha1-tag-itself/git-sha1-tag-itself.hash
@@ -1,2 +1,2 @@
-sha256 7d301c1a1054d6aee49193ca9e938f4da561ff73fb01719662865aa38bdc4361 git-sha1-tag-itself-2b0e0d98a49c97da6a618ab36337e2058eb733a2.tar.gz
+sha256 57f08e9f3914e79a10e7fb5d346b26fef2773dd22eed0d61fd755e79e62cee93 git-sha1-tag-itself-2b0e0d98a49c97da6a618ab36337e2058eb733a2-br1.tar.gz
sha256 6de8772a0a58fa62e2b8c58d4dae55c9db7534ad3b3918ecc849a9008d58f081 file
diff --git a/support/testing/tests/download/br2-external/git-refs/package/git-sha1-tag-points-to/git-sha1-tag-points-to.hash b/support/testing/tests/download/br2-external/git-refs/package/git-sha1-tag-points-to/git-sha1-tag-points-to.hash
index 3dcafc2094..188cb6897b 100644
--- a/support/testing/tests/download/br2-external/git-refs/package/git-sha1-tag-points-to/git-sha1-tag-points-to.hash
+++ b/support/testing/tests/download/br2-external/git-refs/package/git-sha1-tag-points-to/git-sha1-tag-points-to.hash
@@ -1,2 +1,2 @@
-sha256 c1f9f5734529a31140a71c031534460811f001b4db37d26833f386358150ab47 git-sha1-tag-points-to-516c9c5f64ec66534d4d069c2e408d9ae4dce023.tar.gz
+sha256 1d8b565827137aa21ba37cde382aa291e33a135c697e38dcd31f14e195386327 git-sha1-tag-points-to-516c9c5f64ec66534d4d069c2e408d9ae4dce023-br1.tar.gz
sha256 6de8772a0a58fa62e2b8c58d4dae55c9db7534ad3b3918ecc849a9008d58f081 file
diff --git a/support/testing/tests/download/br2-external/git-refs/package/git-submodule-disabled/git-submodule-disabled.hash b/support/testing/tests/download/br2-external/git-refs/package/git-submodule-disabled/git-submodule-disabled.hash
index 3bd0a44693..c0698e7b28 100644
--- a/support/testing/tests/download/br2-external/git-refs/package/git-submodule-disabled/git-submodule-disabled.hash
+++ b/support/testing/tests/download/br2-external/git-refs/package/git-submodule-disabled/git-submodule-disabled.hash
@@ -1,2 +1,2 @@
-sha256 f9d46ff8a1a344c6c31fa4211220f3085c446abd31626232540703158276f22c git-submodule-disabled-a9dbc1e23c45e8e1b88c0448763f54d714eb6f8f.tar.gz
+sha256 e8e0febc7f1408df22bce2d73d9a30081e03b45e152bc25effd14435ca8b3433 git-submodule-disabled-a9dbc1e23c45e8e1b88c0448763f54d714eb6f8f-br1.tar.gz
sha256 ba8b6ddc4726bfb6a05045ebfd8c43263c968ad1bc601bd46a25bc055008eddc file
diff --git a/support/testing/tests/download/br2-external/git-refs/package/git-submodule-enabled/git-submodule-enabled.hash b/support/testing/tests/download/br2-external/git-refs/package/git-submodule-enabled/git-submodule-enabled.hash
index 7f92c652d3..b95c51fe20 100644
--- a/support/testing/tests/download/br2-external/git-refs/package/git-submodule-enabled/git-submodule-enabled.hash
+++ b/support/testing/tests/download/br2-external/git-refs/package/git-submodule-enabled/git-submodule-enabled.hash
@@ -1 +1 @@
-sha256 139a34c3c844c844dee74b6746418cfa75fbcc4205794ac8c0b3cd7d55a76792 git-submodule-enabled-a9dbc1e23c45e8e1b88c0448763f54d714eb6f8f.tar.gz
+sha256 176c32f10ad11f290b6251d701835450292ba281eb59c7fb57b244407a55ceab git-submodule-enabled-a9dbc1e23c45e8e1b88c0448763f54d714eb6f8f-br1.tar.gz
diff --git a/support/testing/tests/download/br2-external/git-refs/package/git-tag/git-tag.hash b/support/testing/tests/download/br2-external/git-refs/package/git-tag/git-tag.hash
index 1cd0b15f27..c7ebcf0e04 100644
--- a/support/testing/tests/download/br2-external/git-refs/package/git-tag/git-tag.hash
+++ b/support/testing/tests/download/br2-external/git-refs/package/git-tag/git-tag.hash
@@ -1,2 +1,2 @@
-sha256 85dcb5bcf9bed496688d0eb01c7a3ce05c5b46b984cc1e9e76a6dbefd976e6b3 git-tag-mytag.tar.gz
+sha256 c66b2366d8ccb1670951012334fe8d48de3358aef39b3da2912b339448fefcde git-tag-mytag-br1.tar.gz
sha256 6de8772a0a58fa62e2b8c58d4dae55c9db7534ad3b3918ecc849a9008d58f081 file
diff --git a/support/testing/tests/download/br2-external/git-refs/package/git-wrong-content/git-wrong-content.hash b/support/testing/tests/download/br2-external/git-refs/package/git-wrong-content/git-wrong-content.hash
index 47b2b8b7d7..453ffc0ab2 100644
--- a/support/testing/tests/download/br2-external/git-refs/package/git-wrong-content/git-wrong-content.hash
+++ b/support/testing/tests/download/br2-external/git-refs/package/git-wrong-content/git-wrong-content.hash
@@ -1,2 +1,2 @@
- sha256 04715901977503d1df650e0959f4d31d8e7b105e2ac99a2182e0652b8f13baa1 git-wrong-content-a238b1dfcd825d47d834af3c5223417c8411d90d.tar.gz
+ sha256 4a230e667227310289438cd7d899276a0d45ca8778abfd043dfc0a10ed2c9085 git-wrong-content-a238b1dfcd825d47d834af3c5223417c8411d90d-br1.tar.gz
sha256 0000000000000000000000000000000000000000000000000000000000000000 file
diff --git a/support/testing/tests/init/test_systemd.py b/support/testing/tests/init/test_systemd.py
index 371be4ad7d..c0ef5e1202 100644
--- a/support/testing/tests/init/test_systemd.py
+++ b/support/testing/tests/init/test_systemd.py
@@ -91,7 +91,6 @@ class TestInitSystemSystemdRwIfupdown(InitSystemSystemdBase):
"""
BR2_SYSTEM_DHCP="eth0"
# BR2_PACKAGE_SYSTEMD_NETWORKD is not set
- # BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW is not set
BR2_TARGET_ROOTFS_EXT2=y
"""
@@ -106,7 +105,7 @@ class TestInitSystemSystemdRoFull(InitSystemSystemdBase):
"""
BR2_SYSTEM_DHCP="eth0"
# BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW is not set
- BR2_PACKAGE_SYSTEMD_JOURNAL_GATEWAY=y
+ BR2_PACKAGE_SYSTEMD_JOURNAL_REMOTE=y
BR2_PACKAGE_SYSTEMD_BACKLIGHT=y
BR2_PACKAGE_SYSTEMD_BINFMT=y
BR2_PACKAGE_SYSTEMD_COREDUMP=y
@@ -136,7 +135,7 @@ class TestInitSystemSystemdRwFull(InitSystemSystemdBase):
config = InitSystemSystemdBase.config + \
"""
BR2_SYSTEM_DHCP="eth0"
- BR2_PACKAGE_SYSTEMD_JOURNAL_GATEWAY=y
+ BR2_PACKAGE_SYSTEMD_JOURNAL_REMOTE=y
BR2_PACKAGE_SYSTEMD_BACKLIGHT=y
BR2_PACKAGE_SYSTEMD_BINFMT=y
BR2_PACKAGE_SYSTEMD_COREDUMP=y
diff --git a/support/testing/tests/init/test_systemd_selinux.py b/support/testing/tests/init/test_systemd_selinux.py
new file mode 100644
index 0000000000..73604cfc32
--- /dev/null
+++ b/support/testing/tests/init/test_systemd_selinux.py
@@ -0,0 +1,76 @@
+import os
+
+import infra.basetest
+
+
+class TestSELinuxSystemd(infra.basetest.BRTest):
+ config = \
+ """
+ BR2_x86_64=y
+ BR2_x86_corei7=y
+ BR2_TOOLCHAIN_EXTERNAL=y
+ BR2_INIT_SYSTEMD=y
+ BR2_LINUX_KERNEL=y
+ BR2_LINUX_KERNEL_CUSTOM_VERSION=y
+ BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.8.12"
+ BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
+ BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/qemu/x86_64/linux.config"
+ BR2_PACKAGE_LIBSELINUX=y
+ BR2_PACKAGE_REFPOLICY=y
+ """
+
+ def wait_boot(self):
+ # The complete boot with systemd takes more time than what the default multipler permits
+ self.emulator.timeout_multiplier *= 10
+ self.emulator.login()
+
+ def run_tests(self, fstype):
+ kernel = os.path.join(self.builddir, "images", "bzImage")
+ rootfs = os.path.join(self.builddir, "images", "rootfs.{}".format(fstype))
+
+ self.emulator.boot(arch="x86_64", kernel=kernel,
+ kernel_cmdline=["root=/dev/vda", "rootfstype={}".format(fstype),
+ "console=ttyS0", "security=selinux"],
+ options=["-cpu", "Nehalem",
+ "-drive", "file={},if=virtio,format=raw".format(rootfs)])
+ self.wait_boot()
+
+ # Test the reported SELinux mode.
+ out, ret = self.emulator.run("getenforce")
+ self.assertEqual(ret, 0)
+ self.assertEqual(out[0], "Permissive")
+
+ # Check the extended arguments are correctly set.
+ out, ret = self.emulator.run("ls -dZ /")
+ self.assertEqual(ret, 0)
+ self.assertEqual(out[0].split()[0], "system_u:object_r:root_t")
+
+ # Check init's attributes.
+ out, ret = self.emulator.run("cat /proc/1/attr/current")
+ self.assertEqual(ret, 0)
+ self.assertEqual(out[0], "system_u:system_r:init_t\0")
+
+
+class TestSELinuxSystemdExt4(TestSELinuxSystemd):
+ config = TestSELinuxSystemd.config + \
+ """
+ BR2_TARGET_ROOTFS_EXT2=y
+ BR2_TARGET_ROOTFS_EXT2_4=y
+ BR2_TARGET_ROOTFS_EXT2_SIZE="100M"
+ """
+
+ def test_run(self):
+ self.run_tests("ext4")
+
+
+class TestSELinuxSystemdSquashfs(TestSELinuxSystemd):
+ config = TestSELinuxSystemd.config + \
+ """
+ BR2_TARGET_ROOTFS_SQUASHFS=y
+ BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="{}"
+ """.format(
+ infra.filepath("tests/init/test_systemd_selinux/linux-squashfs.fragment"),
+ )
+
+ def test_run(self):
+ self.run_tests("squashfs")
diff --git a/support/testing/tests/init/test_systemd_selinux/linux-squashfs.fragment b/support/testing/tests/init/test_systemd_selinux/linux-squashfs.fragment
new file mode 100644
index 0000000000..7a89d006fa
--- /dev/null
+++ b/support/testing/tests/init/test_systemd_selinux/linux-squashfs.fragment
@@ -0,0 +1 @@
+CONFIG_SQUASHFS=y
diff --git a/support/testing/tests/package/sample_python_pytest_asyncio.py b/support/testing/tests/package/sample_python_pytest_asyncio.py
new file mode 100644
index 0000000000..cdb8cd9fb9
--- /dev/null
+++ b/support/testing/tests/package/sample_python_pytest_asyncio.py
@@ -0,0 +1,31 @@
+import asyncio
+import pytest
+
+
+x = 1
+
+
+@pytest.fixture()
+def f1():
+ global x
+ x = 2
+ yield 15
+ x = 3
+
+
+@pytest.mark.asyncio
+async def test_1():
+ assert x == 1
+
+
+@pytest.mark.asyncio
+async def test_2(f1):
+ assert x == 2
+ assert f1 == 15
+
+
+@pytest.mark.asyncio
+async def test_3():
+ assert x == 3
+ await asyncio.sleep(0.1)
+ assert x == 3
diff --git a/support/testing/tests/package/test_lualdap.py b/support/testing/tests/package/test_lualdap.py
new file mode 100644
index 0000000000..2ec0d58228
--- /dev/null
+++ b/support/testing/tests/package/test_lualdap.py
@@ -0,0 +1,25 @@
+from tests.package.test_lua import TestLuaBase
+
+
+class TestLuaLuaLdap(TestLuaBase):
+ config = TestLuaBase.config + \
+ """
+ BR2_PACKAGE_LUA=y
+ BR2_PACKAGE_LUALDAP=y
+ """
+
+ def test_run(self):
+ self.login()
+ self.module_test("lualdap")
+
+
+class TestLuajitLuaLdap(TestLuaBase):
+ config = TestLuaBase.config + \
+ """
+ BR2_PACKAGE_LUAJIT=y
+ BR2_PACKAGE_LUALDAP=y
+ """
+
+ def test_run(self):
+ self.login()
+ self.module_test("lualdap")
diff --git a/support/testing/tests/package/test_python_pytest_asyncio.py b/support/testing/tests/package/test_python_pytest_asyncio.py
new file mode 100644
index 0000000000..caf034be7b
--- /dev/null
+++ b/support/testing/tests/package/test_python_pytest_asyncio.py
@@ -0,0 +1,20 @@
+import os
+
+from tests.package.test_python import TestPythonPackageBase
+
+
+class TestPythonPy3PytestAsyncio(TestPythonPackageBase):
+ __test__ = True
+ config = TestPythonPackageBase.config + \
+ """
+ BR2_PACKAGE_PYTHON3=y
+ BR2_PACKAGE_PYTHON_PYTEST=y
+ BR2_PACKAGE_PYTHON_PYTEST_ASYNCIO=y
+ """
+ sample_scripts = ["tests/package/sample_python_pytest_asyncio.py"]
+
+ def run_sample_scripts(self):
+ for script in self.sample_scripts:
+ cmd = self.interpreter + " -m pytest " + os.path.basename(script)
+ _, exit_code = self.emulator.run(cmd, timeout=self.timeout)
+ self.assertEqual(exit_code, 0)
diff --git a/support/testing/tests/toolchain/test_external_bootlin.py b/support/testing/tests/toolchain/test_external_bootlin.py
index 9f0df9788b..af60c21f7d 100644
--- a/support/testing/tests/toolchain/test_external_bootlin.py
+++ b/support/testing/tests/toolchain/test_external_bootlin.py
@@ -1553,6 +1553,186 @@ class TestExternalToolchainBootlinOpenriscUclibcStable(TestExternalToolchain):
TestExternalToolchain.common_check(self)
+class TestExternalToolchainBootlinPowerpc440fpGlibcBleedingEdge(TestExternalToolchain):
+ config = """
+ BR2_powerpc=y
+ BR2_powerpc_440fp=y
+ BR2_TOOLCHAIN_EXTERNAL=y
+ BR2_TOOLCHAIN_EXTERNAL_BOOTLIN=y
+ BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_POWERPC_440FP_GLIBC_BLEEDING_EDGE=y
+ # BR2_TARGET_ROOTFS_TAR is not set
+ """
+ toolchain_prefix = "powerpc-linux"
+
+ def test_run(self):
+ TestExternalToolchain.common_check(self)
+
+
+class TestExternalToolchainBootlinPowerpc440fpGlibcStable(TestExternalToolchain):
+ config = """
+ BR2_powerpc=y
+ BR2_powerpc_440fp=y
+ BR2_TOOLCHAIN_EXTERNAL=y
+ BR2_TOOLCHAIN_EXTERNAL_BOOTLIN=y
+ BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_POWERPC_440FP_GLIBC_STABLE=y
+ # BR2_TARGET_ROOTFS_TAR is not set
+ """
+ toolchain_prefix = "powerpc-linux"
+
+ def test_run(self):
+ TestExternalToolchain.common_check(self)
+
+
+class TestExternalToolchainBootlinPowerpc440fpMuslBleedingEdge(TestExternalToolchain):
+ config = """
+ BR2_powerpc=y
+ BR2_powerpc_440fp=y
+ BR2_TOOLCHAIN_EXTERNAL=y
+ BR2_TOOLCHAIN_EXTERNAL_BOOTLIN=y
+ BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_POWERPC_440FP_MUSL_BLEEDING_EDGE=y
+ # BR2_TARGET_ROOTFS_TAR is not set
+ """
+ toolchain_prefix = "powerpc-linux"
+
+ def test_run(self):
+ TestExternalToolchain.common_check(self)
+
+
+class TestExternalToolchainBootlinPowerpc440fpMuslStable(TestExternalToolchain):
+ config = """
+ BR2_powerpc=y
+ BR2_powerpc_440fp=y
+ BR2_TOOLCHAIN_EXTERNAL=y
+ BR2_TOOLCHAIN_EXTERNAL_BOOTLIN=y
+ BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_POWERPC_440FP_MUSL_STABLE=y
+ # BR2_TARGET_ROOTFS_TAR is not set
+ """
+ toolchain_prefix = "powerpc-linux"
+
+ def test_run(self):
+ TestExternalToolchain.common_check(self)
+
+
+class TestExternalToolchainBootlinPowerpc440fpUclibcBleedingEdge(TestExternalToolchain):
+ config = """
+ BR2_powerpc=y
+ BR2_powerpc_440fp=y
+ BR2_TOOLCHAIN_EXTERNAL=y
+ BR2_TOOLCHAIN_EXTERNAL_BOOTLIN=y
+ BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_POWERPC_440FP_UCLIBC_BLEEDING_EDGE=y
+ # BR2_TARGET_ROOTFS_TAR is not set
+ """
+ toolchain_prefix = "powerpc-linux"
+
+ def test_run(self):
+ TestExternalToolchain.common_check(self)
+
+
+class TestExternalToolchainBootlinPowerpc440fpUclibcStable(TestExternalToolchain):
+ config = """
+ BR2_powerpc=y
+ BR2_powerpc_440fp=y
+ BR2_TOOLCHAIN_EXTERNAL=y
+ BR2_TOOLCHAIN_EXTERNAL_BOOTLIN=y
+ BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_POWERPC_440FP_UCLIBC_STABLE=y
+ # BR2_TARGET_ROOTFS_TAR is not set
+ """
+ toolchain_prefix = "powerpc-linux"
+
+ def test_run(self):
+ TestExternalToolchain.common_check(self)
+
+
+class TestExternalToolchainBootlinPowerpce300c3GlibcBleedingEdge(TestExternalToolchain):
+ config = """
+ BR2_powerpc=y
+ BR2_powerpc_e300c3=y
+ BR2_TOOLCHAIN_EXTERNAL=y
+ BR2_TOOLCHAIN_EXTERNAL_BOOTLIN=y
+ BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_POWERPC_E300C3_GLIBC_BLEEDING_EDGE=y
+ # BR2_TARGET_ROOTFS_TAR is not set
+ """
+ toolchain_prefix = "powerpc-linux"
+
+ def test_run(self):
+ TestExternalToolchain.common_check(self)
+
+
+class TestExternalToolchainBootlinPowerpce300c3GlibcStable(TestExternalToolchain):
+ config = """
+ BR2_powerpc=y
+ BR2_powerpc_e300c3=y
+ BR2_TOOLCHAIN_EXTERNAL=y
+ BR2_TOOLCHAIN_EXTERNAL_BOOTLIN=y
+ BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_POWERPC_E300C3_GLIBC_STABLE=y
+ # BR2_TARGET_ROOTFS_TAR is not set
+ """
+ toolchain_prefix = "powerpc-linux"
+
+ def test_run(self):
+ TestExternalToolchain.common_check(self)
+
+
+class TestExternalToolchainBootlinPowerpce300c3MuslBleedingEdge(TestExternalToolchain):
+ config = """
+ BR2_powerpc=y
+ BR2_powerpc_e300c3=y
+ BR2_TOOLCHAIN_EXTERNAL=y
+ BR2_TOOLCHAIN_EXTERNAL_BOOTLIN=y
+ BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_POWERPC_E300C3_MUSL_BLEEDING_EDGE=y
+ # BR2_TARGET_ROOTFS_TAR is not set
+ """
+ toolchain_prefix = "powerpc-linux"
+
+ def test_run(self):
+ TestExternalToolchain.common_check(self)
+
+
+class TestExternalToolchainBootlinPowerpce300c3MuslStable(TestExternalToolchain):
+ config = """
+ BR2_powerpc=y
+ BR2_powerpc_e300c3=y
+ BR2_TOOLCHAIN_EXTERNAL=y
+ BR2_TOOLCHAIN_EXTERNAL_BOOTLIN=y
+ BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_POWERPC_E300C3_MUSL_STABLE=y
+ # BR2_TARGET_ROOTFS_TAR is not set
+ """
+ toolchain_prefix = "powerpc-linux"
+
+ def test_run(self):
+ TestExternalToolchain.common_check(self)
+
+
+class TestExternalToolchainBootlinPowerpce300c3UclibcBleedingEdge(TestExternalToolchain):
+ config = """
+ BR2_powerpc=y
+ BR2_powerpc_e300c3=y
+ BR2_TOOLCHAIN_EXTERNAL=y
+ BR2_TOOLCHAIN_EXTERNAL_BOOTLIN=y
+ BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_POWERPC_E300C3_UCLIBC_BLEEDING_EDGE=y
+ # BR2_TARGET_ROOTFS_TAR is not set
+ """
+ toolchain_prefix = "powerpc-linux"
+
+ def test_run(self):
+ TestExternalToolchain.common_check(self)
+
+
+class TestExternalToolchainBootlinPowerpce300c3UclibcStable(TestExternalToolchain):
+ config = """
+ BR2_powerpc=y
+ BR2_powerpc_e300c3=y
+ BR2_TOOLCHAIN_EXTERNAL=y
+ BR2_TOOLCHAIN_EXTERNAL_BOOTLIN=y
+ BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_POWERPC_E300C3_UCLIBC_STABLE=y
+ # BR2_TARGET_ROOTFS_TAR is not set
+ """
+ toolchain_prefix = "powerpc-linux"
+
+ def test_run(self):
+ TestExternalToolchain.common_check(self)
+
+
class TestExternalToolchainBootlinPowerpce500mcGlibcBleedingEdge(TestExternalToolchain):
config = """
BR2_powerpc=y
@@ -1673,6 +1853,66 @@ class TestExternalToolchainBootlinPowerpc64e5500GlibcStable(TestExternalToolchai
TestExternalToolchain.common_check(self)
+class TestExternalToolchainBootlinPowerpc64e6500GlibcBleedingEdge(TestExternalToolchain):
+ config = """
+ BR2_powerpc64=y
+ BR2_powerpc_e6500=y
+ BR2_TOOLCHAIN_EXTERNAL=y
+ BR2_TOOLCHAIN_EXTERNAL_BOOTLIN=y
+ BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_POWERPC64_E6500_GLIBC_BLEEDING_EDGE=y
+ # BR2_TARGET_ROOTFS_TAR is not set
+ """
+ toolchain_prefix = "powerpc64-linux"
+
+ def test_run(self):
+ TestExternalToolchain.common_check(self)
+
+
+class TestExternalToolchainBootlinPowerpc64e6500GlibcStable(TestExternalToolchain):
+ config = """
+ BR2_powerpc64=y
+ BR2_powerpc_e6500=y
+ BR2_TOOLCHAIN_EXTERNAL=y
+ BR2_TOOLCHAIN_EXTERNAL_BOOTLIN=y
+ BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_POWERPC64_E6500_GLIBC_STABLE=y
+ # BR2_TARGET_ROOTFS_TAR is not set
+ """
+ toolchain_prefix = "powerpc64-linux"
+
+ def test_run(self):
+ TestExternalToolchain.common_check(self)
+
+
+class TestExternalToolchainBootlinPowerpc64e6500MuslBleedingEdge(TestExternalToolchain):
+ config = """
+ BR2_powerpc64=y
+ BR2_powerpc_e6500=y
+ BR2_TOOLCHAIN_EXTERNAL=y
+ BR2_TOOLCHAIN_EXTERNAL_BOOTLIN=y
+ BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_POWERPC64_E6500_MUSL_BLEEDING_EDGE=y
+ # BR2_TARGET_ROOTFS_TAR is not set
+ """
+ toolchain_prefix = "powerpc64-linux"
+
+ def test_run(self):
+ TestExternalToolchain.common_check(self)
+
+
+class TestExternalToolchainBootlinPowerpc64e6500MuslStable(TestExternalToolchain):
+ config = """
+ BR2_powerpc64=y
+ BR2_powerpc_e6500=y
+ BR2_TOOLCHAIN_EXTERNAL=y
+ BR2_TOOLCHAIN_EXTERNAL_BOOTLIN=y
+ BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_POWERPC64_E6500_MUSL_STABLE=y
+ # BR2_TARGET_ROOTFS_TAR is not set
+ """
+ toolchain_prefix = "powerpc64-linux"
+
+ def test_run(self):
+ TestExternalToolchain.common_check(self)
+
+
class TestExternalToolchainBootlinPowerpc64power8GlibcBleedingEdge(TestExternalToolchain):
config = """
BR2_powerpc64=y
@@ -2327,7 +2567,8 @@ class TestExternalToolchainBootlinX86i686UclibcStable(TestExternalToolchain):
class TestExternalToolchainBootlinXtensalx60UclibcBleedingEdge(TestExternalToolchain):
config = """
BR2_xtensa=y
- BR2_xtensa_fsf=y
+ BR2_XTENSA_CUSTOM=y
+ BR2_XTENSA_LITTLE_ENDIAN=y
BR2_TOOLCHAIN_EXTERNAL=y
BR2_TOOLCHAIN_EXTERNAL_BOOTLIN=y
BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_XTENSA_LX60_UCLIBC_BLEEDING_EDGE=y
@@ -2342,7 +2583,8 @@ class TestExternalToolchainBootlinXtensalx60UclibcBleedingEdge(TestExternalToolc
class TestExternalToolchainBootlinXtensalx60UclibcStable(TestExternalToolchain):
config = """
BR2_xtensa=y
- BR2_xtensa_fsf=y
+ BR2_XTENSA_CUSTOM=y
+ BR2_XTENSA_LITTLE_ENDIAN=y
BR2_TOOLCHAIN_EXTERNAL=y
BR2_TOOLCHAIN_EXTERNAL_BOOTLIN=y
BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_XTENSA_LX60_UCLIBC_STABLE=y