| From foo@baz Fri 21 Aug 2020 04:30:09 PM CEST |
| From: Nick Desaulniers <ndesaulniers@google.com> |
| Date: Wed, 26 Feb 2020 15:23:36 -0800 |
| Subject: Documentation/llvm: add documentation on building w/ Clang/LLVM |
| |
| From: Nick Desaulniers <ndesaulniers@google.com> |
| |
| commit fcf1b6a35c16ac500fa908a4022238e5d666eabf upstream. |
| |
| added to kbuild documentation. Provides more official info on building |
| kernels with Clang and LLVM than our wiki. |
| |
| Suggested-by: Kees Cook <keescook@chromium.org> |
| Reviewed-by: Kees Cook <keescook@chromium.org> |
| Reviewed-by: Nathan Chancellor <natechancellor@gmail.com> |
| Reviewed-by: Sedat Dilek <sedat.dilek@gmail.com> |
| Signed-off-by: Nick Desaulniers <ndesaulniers@google.com> |
| Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| Documentation/kbuild/index.rst | 1 |
| Documentation/kbuild/llvm.rst | 80 +++++++++++++++++++++++++++++++++++++++++ |
| MAINTAINERS | 1 |
| 3 files changed, 82 insertions(+) |
| create mode 100644 Documentation/kbuild/llvm.rst |
| |
| --- a/Documentation/kbuild/index.rst |
| +++ b/Documentation/kbuild/index.rst |
| @@ -19,6 +19,7 @@ Kernel Build System |
| |
| issues |
| reproducible-builds |
| + llvm |
| |
| .. only:: subproject and html |
| |
| --- /dev/null |
| +++ b/Documentation/kbuild/llvm.rst |
| @@ -0,0 +1,80 @@ |
| +============================== |
| +Building Linux with Clang/LLVM |
| +============================== |
| + |
| +This document covers how to build the Linux kernel with Clang and LLVM |
| +utilities. |
| + |
| +About |
| +----- |
| + |
| +The Linux kernel has always traditionally been compiled with GNU toolchains |
| +such as GCC and binutils. Ongoing work has allowed for `Clang |
| +<https://clang.llvm.org/>`_ and `LLVM <https://llvm.org/>`_ utilities to be |
| +used as viable substitutes. Distributions such as `Android |
| +<https://www.android.com/>`_, `ChromeOS |
| +<https://www.chromium.org/chromium-os>`_, and `OpenMandriva |
| +<https://www.openmandriva.org/>`_ use Clang built kernels. `LLVM is a |
| +collection of toolchain components implemented in terms of C++ objects |
| +<https://www.aosabook.org/en/llvm.html>`_. Clang is a front-end to LLVM that |
| +supports C and the GNU C extensions required by the kernel, and is pronounced |
| +"klang," not "see-lang." |
| + |
| +Clang |
| +----- |
| + |
| +The compiler used can be swapped out via `CC=` command line argument to `make`. |
| +`CC=` should be set when selecting a config and during a build. |
| + |
| + make CC=clang defconfig |
| + |
| + make CC=clang |
| + |
| +Cross Compiling |
| +--------------- |
| + |
| +A single Clang compiler binary will typically contain all supported backends, |
| +which can help simplify cross compiling. |
| + |
| + ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- make CC=clang |
| + |
| +`CROSS_COMPILE` is not used to prefix the Clang compiler binary, instead |
| +`CROSS_COMPILE` is used to set a command line flag: `--target <triple>`. For |
| +example: |
| + |
| + clang --target aarch64-linux-gnu foo.c |
| + |
| +LLVM Utilities |
| +-------------- |
| + |
| +LLVM has substitutes for GNU binutils utilities. These can be invoked as |
| +additional parameters to `make`. |
| + |
| + make CC=clang AS=clang LD=ld.lld AR=llvm-ar NM=llvm-nm STRIP=llvm-strip \\ |
| + OBJCOPY=llvm-objcopy OBJDUMP=llvm-objdump OBJSIZE=llvm-objsize \\ |
| + READELF=llvm-readelf HOSTCC=clang HOSTCXX=clang++ HOSTAR=llvm-ar \\ |
| + HOSTLD=ld.lld |
| + |
| +Getting Help |
| +------------ |
| + |
| +- `Website <https://clangbuiltlinux.github.io/>`_ |
| +- `Mailing List <https://groups.google.com/forum/#!forum/clang-built-linux>`_: <clang-built-linux@googlegroups.com> |
| +- `Issue Tracker <https://github.com/ClangBuiltLinux/linux/issues>`_ |
| +- IRC: #clangbuiltlinux on chat.freenode.net |
| +- `Telegram <https://t.me/ClangBuiltLinux>`_: @ClangBuiltLinux |
| +- `Wiki <https://github.com/ClangBuiltLinux/linux/wiki>`_ |
| +- `Beginner Bugs <https://github.com/ClangBuiltLinux/linux/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22>`_ |
| + |
| +Getting LLVM |
| +------------- |
| + |
| +- http://releases.llvm.org/download.html |
| +- https://github.com/llvm/llvm-project |
| +- https://llvm.org/docs/GettingStarted.html |
| +- https://llvm.org/docs/CMake.html |
| +- https://apt.llvm.org/ |
| +- https://www.archlinux.org/packages/extra/x86_64/llvm/ |
| +- https://github.com/ClangBuiltLinux/tc-build |
| +- https://github.com/ClangBuiltLinux/linux/wiki/Building-Clang-from-source |
| +- https://android.googlesource.com/platform/prebuilts/clang/host/linux-x86/ |
| --- a/MAINTAINERS |
| +++ b/MAINTAINERS |
| @@ -4028,6 +4028,7 @@ B: https://github.com/ClangBuiltLinux/li |
| C: irc://chat.freenode.net/clangbuiltlinux |
| S: Supported |
| K: \b(?i:clang|llvm)\b |
| +F: Documentation/kbuild/llvm.rst |
| |
| CLEANCACHE API |
| M: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> |