From 22666aebdbd9ca12a2492f1cbaebdd3d722fb204 Mon Sep 17 00:00:00 2001 From: Lukas Bulwahn Date: Thu, 3 May 2018 06:30:23 +0200 Subject: [PATCH 1/2] compile with clang-5.0, clang-6.0 or Debian's unstable clang-7 As compiling the kernel with clang is a recent development, we may observe different failures between the clang compiler versions. Some kernel configurations may fail with the stable version 5.0 due to clang compiler shortcomings, that have been resolved in the later version 6.0 or in the svn tree of the clang development. Hence, this commit provides dedicated Docker containers with clang-6.0 and clang-7 from Debian's unstable distribution, and extends the scripts select among those clang compiler versions. Signed-off-by: Lukas Bulwahn --- Documentation/Usage.md | 4 ++-- .../Dockerfile | 0 docker/kernel-clang-6.0/Dockerfile | 17 +++++++++++++++++ docker/kernel-clang-7/Dockerfile | 17 +++++++++++++++++ scripts/build-docker.sh | 13 ++++++------- scripts/compile-kernel.sh | 16 ++++++++-------- 6 files changed, 50 insertions(+), 17 deletions(-) rename docker/{kernel-clang => kernel-clang-5.0}/Dockerfile (100%) create mode 100644 docker/kernel-clang-6.0/Dockerfile create mode 100644 docker/kernel-clang-7/Dockerfile diff --git a/Documentation/Usage.md b/Documentation/Usage.md index c90207b..dc9b9d8 100644 --- a/Documentation/Usage.md +++ b/Documentation/Usage.md @@ -9,10 +9,10 @@ The script takes these three arguments: `./scripts/compile-kernel.sh ` For example, to build the current main-line kernel with the default kernel -configuration and clang compiler, run: +configuration and clang-5.0 compiler, run: ``` -./scripts/compile-kernel.sh torvalds defconfig clang +./scripts/compile-kernel.sh torvalds defconfig clang-5.0 ``` For other help, use `./scripts/compile-kernel.sh --help`. diff --git a/docker/kernel-clang/Dockerfile b/docker/kernel-clang-5.0/Dockerfile similarity index 100% rename from docker/kernel-clang/Dockerfile rename to docker/kernel-clang-5.0/Dockerfile diff --git a/docker/kernel-clang-6.0/Dockerfile b/docker/kernel-clang-6.0/Dockerfile new file mode 100644 index 0000000..abda1ae --- /dev/null +++ b/docker/kernel-clang-6.0/Dockerfile @@ -0,0 +1,17 @@ +# Copyright (C) Lukas Bulwahn, BMW Car IT GmbH +# SPDX-License-Identifier: GPL-2.0 +FROM debian:buster + +LABEL maintainer="Lukas Bulwahn " + +# Install tools needed for kernel build and clang compiler +RUN apt-get update && apt-get install --no-install-recommends -y \ + bc \ + bison \ + bsdmainutils \ + clang-6.0 \ + flex \ + libelf-dev \ + libssl-dev \ + make \ + && rm -rf /var/lib/apt/lists/* diff --git a/docker/kernel-clang-7/Dockerfile b/docker/kernel-clang-7/Dockerfile new file mode 100644 index 0000000..5b5b35d --- /dev/null +++ b/docker/kernel-clang-7/Dockerfile @@ -0,0 +1,17 @@ +# Copyright (C) Lukas Bulwahn, BMW Car IT GmbH +# SPDX-License-Identifier: GPL-2.0 +FROM debian:sid + +LABEL maintainer="Lukas Bulwahn " + +# Install tools needed for kernel build and clang compiler +RUN apt-get update && apt-get install --no-install-recommends -y \ + bc \ + bison \ + bsdmainutils \ + clang-7 \ + flex \ + libelf-dev \ + libssl-dev \ + make \ + && rm -rf /var/lib/apt/lists/* diff --git a/scripts/build-docker.sh b/scripts/build-docker.sh index a7b5920..b772831 100755 --- a/scripts/build-docker.sh +++ b/scripts/build-docker.sh @@ -8,10 +8,9 @@ SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" -echo 'Building the Docker image "kernel-gcc"' -cd "$SCRIPT_DIR/../docker/kernel-gcc" -docker build -t kernel-gcc . - -echo 'Building the Docker image "kernel-clang"' -cd "$SCRIPT_DIR/../docker/kernel-clang" -docker build -t kernel-clang . +for DOCKER_IMAGE in $(find $SCRIPT_DIR/../docker -mindepth 1 -maxdepth 1 -type d -printf "%f\n") +do + echo Building the Docker image "$DOCKER_IMAGE" + cd "$SCRIPT_DIR/../docker/$DOCKER_IMAGE" + docker build -t $DOCKER_IMAGE . +done diff --git a/scripts/compile-kernel.sh b/scripts/compile-kernel.sh index 7c45dcb..d96d353 100755 --- a/scripts/compile-kernel.sh +++ b/scripts/compile-kernel.sh @@ -14,7 +14,7 @@ usage() { echo echo " = torvalds | stable | next" echo " = allnoconfig | allmodconfig | allyesconfig | defconfig | randconfig" - echo " = gcc | clang" + echo " = gcc | clang-5.0 | clang-6.0 | clang-7" } # Provide help if requested @@ -83,12 +83,12 @@ esac # Check third argument and set COMPILER case "$3" in - gcc | clang) + gcc | clang-5.0 | clang-6.0 | clang-7) COMPILER=$3 ;; *) echo "Error: Invalid compiler: $3" - echo 'The compiler must be either "gcc" or "clang"' + echo 'The compiler must be "gcc", "clang-5.0", "clang-6.0" or "clang-7"' exit 1 ;; esac @@ -102,13 +102,13 @@ case "$COMPILER" in kernel-gcc \ /bin/sh -c "cd linux && make clean && make $KERNEL_CONFIG && make -j32" ;; - clang) + clang-5.0 | clang-6.0 | clang-7) docker run \ -v "$KERNEL_SRC_DIR:/linux/" \ - kernel-clang \ + kernel-$COMPILER \ /bin/sh -c "cd linux && \ - make CC=clang-5.0 clean && \ - make HOSTCC=clang-5.0 $KERNEL_CONFIG && \ - make -j32 HOSTCC=clang-5.0 CC=clang-5.0" + make CC=$COMPILER clean && \ + make HOSTCC=$COMPILER $KERNEL_CONFIG && \ + make -j32 HOSTCC=$COMPILER CC=$COMPILER" ;; esac From 2b43ad0fa3adb3d31fc6bd1d6c87bfc2ac197d63 Mon Sep 17 00:00:00 2001 From: Lukas Bulwahn Date: Mon, 7 May 2018 08:43:07 +0200 Subject: [PATCH 2/2] provide docker container with a clang-7 snapshot --- .../kernel-clang-7-llvm-snapshot/Dockerfile | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 docker/kernel-clang-7-llvm-snapshot/Dockerfile diff --git a/docker/kernel-clang-7-llvm-snapshot/Dockerfile b/docker/kernel-clang-7-llvm-snapshot/Dockerfile new file mode 100644 index 0000000..a76de59 --- /dev/null +++ b/docker/kernel-clang-7-llvm-snapshot/Dockerfile @@ -0,0 +1,25 @@ +# Copyright (C) Lukas Bulwahn, BMW Car IT GmbH +# SPDX-License-Identifier: GPL-2.0 +FROM debian:buster + +LABEL maintainer="Lukas Bulwahn " + +# Install tools needed for kernel build and clang compiler +RUN apt-get update && apt-get install --no-install-recommends -y \ + bc \ + bison \ + bsdmainutils \ + ca-certificates \ + gnupg \ + gnupg-utils \ + flex \ + libelf-dev \ + libssl-dev \ + make \ + wget + +RUN echo "deb http://apt.llvm.org/unstable/ llvm-toolchain main" >> /etc/apt/sources.list \ + && wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add - \ + && apt-get update \ + && apt-get install --no-install-recommends -y clang-7 \ + && rm -rf /var/lib/apt/lists/*