summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBen Hutchings <ben@decadent.org.uk>2020-08-20 22:01:19 +0100
committerBen Hutchings <ben@decadent.org.uk>2020-08-20 22:09:17 +0100
commit98c69e6f8c0996531013f6d7ee4a87af6e9d097c (patch)
tree213b523316d2e98b6798a39456e28bebe8224695
parent2d4165492e66a78fffa6a3dee7dccbf9e5e41755 (diff)
downloadklibc-maint-98c69e6f8c0996531013f6d7ee4a87af6e9d097c.tar.gz
test-many-klibc: Add tests using LLVM tools (clang and ld.lld)
These still mostly fail, but it's now possible to build for most architectures and run static executables for some.
-rwxr-xr-xtest-many-klibcs34
1 files changed, 33 insertions, 1 deletions
diff --git a/test-many-klibcs b/test-many-klibcs
index aa3ac5a..da5fab1 100755
--- a/test-many-klibcs
+++ b/test-many-klibcs
@@ -1,7 +1,8 @@
#!/bin/bash -eu
# This requires:
-# * Cross-toolchains (gcc-$toolsarch)
+# * Native and cross GNU toolchain (gcc, gcc-$toolsarch)
+# * LLVM toolchain (clang, lld)
# * QEMU user-space static binaries (qemu-user-static)
# * rsync
# * sudo
@@ -22,6 +23,23 @@ build_gnu() {
|| return
}
+build_llvm() {
+ echo "I: Using $(clang --version | head -1)"
+ echo "I: Using $(ld.lld --version | head -1)"
+
+ mkdir -p "build/llvm-$toolsarch"
+ echo "I: Generating kernel UAPI headers for ARCH=$kernelarch"
+ make -C ../linux "ARCH=$kernelarch" \
+ "INSTALL_HDR_PATH=$PWD/build/llvm-$toolsarch/linux" headers_install \
+ || return
+ echo "I: Building with ARCH=$arch CROSS_COMPILE=$toolsarch- CC='clang -target $toolsarch' HOSTCC=clang LD=ld.lld $makeflags"
+ make -C "build/llvm-$toolsarch" -f "$PWD/../klibc/Makefile" -j"$nproc" \
+ "ARCH=$arch" "CROSS_COMPILE=$toolsarch-" "KBUILD_SRC=$PWD/../klibc" \
+ "CC=clang -target $toolsarch" "HOSTCC=clang" "LD=ld.lld" \
+ $makeflags all test \
+ || return
+}
+
do_install() {
# Set up a tmpfs in case the current filesystem is mounted nodev
mkdir -p install
@@ -237,27 +255,41 @@ process alpha alpha gnu alpha-linux-gnu alpha
#process arm arm gnu arm-linux-gnu arm
process arm arm gnu arm-linux-gnueabi arm "CONFIG_AEABI=y"
process arm arm gnu arm-linux-gnueabihf arm "CONFIG_AEABI=y CPU_ARCH=armv7-a CPU_TUNE=cortex-a8 CONFIG_KLIBC_THUMB=y"
+process arm arm llvm arm-linux-gnueabihf arm "CONFIG_AEABI=y CPU_ARCH=armv7-a CPU_TUNE=cortex-a8 CONFIG_KLIBC_THUMB=y"
process arm64 arm64 gnu aarch64-linux-gnu aarch64
+process arm64 arm64 llvm aarch64-linux-gnu aarch64
process i386 x86 gnu i686-linux-gnu i386
+process i386 x86 llvm i686-linux-gnu i386
# ia64 cross-compiler is currently missing in Debian, as is QEMU support.
#process ia64 ia64 gnu ia64-linux-gnu ???
process m68k m68k gnu m68k-linux-gnu m68k
process mips mips gnu mips-linux-gnu mips
+process mips mips llvm mips-linux-gnu mips
process mips64 mips gnu mips64-linux-gnuabi64 mips64
+process mips64 mips llvm mips64-linux-gnuabi64 mips64
process mips mips gnu mipsel-linux-gnu mipsel
+process mips mips llvm mipsel-linux-gnu mipsel
process mips64 mips gnu mips64el-linux-gnuabi64 mips64el
+process mips64 mips llvm mips64el-linux-gnuabi64 mips64el
process parisc parisc gnu hppa-linux-gnu hppa
process ppc powerpc gnu powerpc-linux-gnu ppc
+process ppc powerpc llvm powerpc-linux-gnu ppc
process ppc64 powerpc gnu powerpc64-linux-gnu ppc64
+process ppc64 powerpc llvm powerpc64-linux-gnu ppc64
process ppc64 powerpc gnu powerpc64le-linux-gnu ppc64le
+process ppc64 powerpc llvm powerpc64le-linux-gnu ppc64le
process riscv64 riscv gnu riscv64-linux-gnu riscv64
+process riscv64 riscv llvm riscv64-linux-gnu riscv64
# 32-bit s390 is no longer supported in Debian.
#process s390 s390 gnu s390-linux-gnu s390
process s390x s390 gnu s390x-linux-gnu s390x
+process s390x s390 llvm s390x-linux-gnu s390x
process sh sh gnu sh4-linux-gnu sh4
# 32-bit sparc is no longer supported in Debian.
#process sparc sparc gnu sparc-linux-gnu sparc
process sparc64 sparc gnu sparc64-linux-gnu sparc64
+process sparc64 sparc llvm sparc64-linux-gnu sparc64
process x86_64 x86 gnu x86_64-linux-gnu x86_64
+process x86_64 x86 llvm x86_64-linux-gnu x86_64
echo "I: $0 finished at $(date)"