On Tue, Feb 25, 2020 at 5:08 AM Kees Cook <keescook@xxxxxxxxxxxx> wrote: > > On Mon, Feb 24, 2020 at 09:41:28AM -0800, Nick Desaulniers wrote: > > Added to kbuild documentation. Provides more official info on building > > kernels with Clang and LLVM than our wiki. > > > > Suggested-by: Kees Cook <keescook@xxxxxxxxxxxx> > > Reviewed-by: Nathan Chancellor <natechancellor@xxxxxxxxx> > > Signed-off-by: Nick Desaulniers <ndesaulniers@xxxxxxxxxx> > > --- > > Documentation/kbuild/index.rst | 1 + > > Documentation/kbuild/llvm.rst | 80 ++++++++++++++++++++++++++++++++++ > > 2 files changed, 81 insertions(+) > > create mode 100644 Documentation/kbuild/llvm.rst > > > > diff --git a/Documentation/kbuild/index.rst b/Documentation/kbuild/index.rst > > index 0f144fad99a6..3882bd5f7728 100644 > > --- 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 > > > > diff --git a/Documentation/kbuild/llvm.rst b/Documentation/kbuild/llvm.rst > > new file mode 100644 > > index 000000000000..68ae022aebc0 > > --- /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. On going 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 suffix the Clang compiler binary, instead > > s/suffix/prefix/ > > > +`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@xxxxxxxxxxxxxxxx> > > +- `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/ > > Should this also include an update to Documentation/process/changes.rst > with the minimum version required? (I would expect this to be "9" for Clang, > and "11" for ld.lld.) > > Otherwise, yes, with Randy and Masahiro's suggestions, please consider it: > > Reviewed-by: Kees Cook <keescook@xxxxxxxxxxxx> > Hi, that update for documentation purposes was overdue. My last experiments were with Linux v5.3 and llvm-toolchain 9.0 means Clang compiler v9.0 and LLD linker v9.0 on x86-64. With Debian's kernel-config I was able to build OOTB (out-of-the-box) with no extra patches. I cannot speak for higher Linux and/or llvm-toolchain versions/combinations. I would prefer such an information also for the *supported* Linux versions, so people have a good orientation. So for the above scenario, you can add: Reviewed-by: Sedat Dilek <sedat.dilek@xxxxxxxxx>.(Clang and LLD v9.0, Linux v5.3, x86-64) Regards, - Sedat - > -- > Kees Cook > > -- > You received this message because you are subscribed to the Google Groups "Clang Built Linux" group. > To unsubscribe from this group and stop receiving emails from it, send an email to clang-built-linux+unsubscribe@xxxxxxxxxxxxxxxx. > To view this discussion on the web visit https://groups.google.com/d/msgid/clang-built-linux/202002242003.870E5F80%40keescook.