Message ID | 20200225210250.64366-1-ndesaulniers@google.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [v2] Documentation/llvm: add documentation on building w/ Clang/LLVM | expand |
Hi. On Wed, Feb 26, 2020 at 6:02 AM Nick Desaulniers <ndesaulniers@google.com> wrote: > > Added to kbuild documentation. Provides more official info on building > kernels with Clang and LLVM than our wiki. > > Suggested-by: Randy Dunlap <rdunlap@infradead.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> > --- > Changes V1 -> V2: > * s/On going/ongoing/ > * add Randy's Suggested-by I do not understand this tag update. As far as I saw the review process, I do not think Randy deserves to have Suggested-by because he just pointed out a typo (on going -> ongoing) : https://patchwork.kernel.org/patch/11401189/#23179575 (or, was there off-line activity I had missed?) > * add Nathan and Sedat's Reviewed-by > * Upgrade Kees' Sugguested-by to Reviewed-by We can add both Suggested-by: Kees Cook <keescook@chromium.org> and Reviewed-by: Kees Cook <keescook@chromium.org> I think Suggested-by and Reviewed-by should be orthogonal. Thanks. > * s/suffix/prefix/ > > > 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..d6c79eb4e23e > --- /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/ > -- > 2.25.0.265.gbab2e86ba0-goog > -- Best Regards Masahiro Yamada
On Wed, Feb 26, 2020 at 12:31 PM Masahiro Yamada <masahiroy@kernel.org> wrote: > > Hi. > > > On Wed, Feb 26, 2020 at 6:02 AM Nick Desaulniers > <ndesaulniers@google.com> wrote: > > > > Added to kbuild documentation. Provides more official info on building > > kernels with Clang and LLVM than our wiki. > > > > Suggested-by: Randy Dunlap <rdunlap@infradead.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> > > --- > > Changes V1 -> V2: > > * s/On going/ongoing/ > > * add Randy's Suggested-by > > > I do not understand this tag update. > > As far as I saw the review process, > I do not think Randy deserves to have Suggested-by > because he just pointed out a typo (on going -> ongoing) : > https://patchwork.kernel.org/patch/11401189/#23179575 > > (or, was there off-line activity I had missed?) > Hi Masahiro, I got some credits from Nick for a review by seeing a typo - not on a review of the code - and H. Peter Anvin asked why. I am not sure what is here the correct credit to give. Depends a "Reviewed-by" and/or "Suggested-by" on a technical review? My POV: When people take time to look over patches they should get credits - sort of esteem. Regards, - Sedat - P.S.: Tipp: Use codespell to find typos :-). [1] https://git.kernel.org/linus/0e2e160033283e20f688d8bad5b89460cc5bfcc4 "x86/asm: Add _ASM_ARG* constants for argument registers to <asm/asm.h>"
On Wed, Feb 26, 2020 at 9:26 PM Sedat Dilek <sedat.dilek@gmail.com> wrote: > > On Wed, Feb 26, 2020 at 12:31 PM Masahiro Yamada <masahiroy@kernel.org> wrote: > > > > Hi. > > > > > > On Wed, Feb 26, 2020 at 6:02 AM Nick Desaulniers > > <ndesaulniers@google.com> wrote: > > > > > > Added to kbuild documentation. Provides more official info on building > > > kernels with Clang and LLVM than our wiki. > > > > > > Suggested-by: Randy Dunlap <rdunlap@infradead.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> > > > --- > > > Changes V1 -> V2: > > > * s/On going/ongoing/ > > > * add Randy's Suggested-by > > > > > > I do not understand this tag update. > > > > As far as I saw the review process, > > I do not think Randy deserves to have Suggested-by > > because he just pointed out a typo (on going -> ongoing) : > > https://patchwork.kernel.org/patch/11401189/#23179575 > > > > (or, was there off-line activity I had missed?) > > > > Hi Masahiro, > > I got some credits from Nick for a review by seeing a typo - not on a > review of the code - and H. Peter Anvin asked why. > > I am not sure what is here the correct credit to give. > Depends a "Reviewed-by" and/or "Suggested-by" on a technical review? Documentation/process/submitting-patches.rst 13) Using Reported-by:, Tested-by:, Reviewed-by:, Suggested-by: and Fixes: is a helpful guideline.
On Wed, Feb 26, 2020 at 1:39 PM Masahiro Yamada <masahiroy@kernel.org> wrote: > > On Wed, Feb 26, 2020 at 9:26 PM Sedat Dilek <sedat.dilek@gmail.com> wrote: > > > > On Wed, Feb 26, 2020 at 12:31 PM Masahiro Yamada <masahiroy@kernel.org> wrote: > > > > > > Hi. > > > > > > > > > On Wed, Feb 26, 2020 at 6:02 AM Nick Desaulniers > > > <ndesaulniers@google.com> wrote: > > > > > > > > Added to kbuild documentation. Provides more official info on building > > > > kernels with Clang and LLVM than our wiki. > > > > > > > > Suggested-by: Randy Dunlap <rdunlap@infradead.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> > > > > --- > > > > Changes V1 -> V2: > > > > * s/On going/ongoing/ > > > > * add Randy's Suggested-by > > > > > > > > > I do not understand this tag update. > > > > > > As far as I saw the review process, > > > I do not think Randy deserves to have Suggested-by > > > because he just pointed out a typo (on going -> ongoing) : > > > https://patchwork.kernel.org/patch/11401189/#23179575 > > > > > > (or, was there off-line activity I had missed?) > > > > > > > Hi Masahiro, > > > > I got some credits from Nick for a review by seeing a typo - not on a > > review of the code - and H. Peter Anvin asked why. > > > > I am not sure what is here the correct credit to give. > > Depends a "Reviewed-by" and/or "Suggested-by" on a technical review? > > > > Documentation/process/submitting-patches.rst > > 13) Using Reported-by:, Tested-by:, Reviewed-by:, Suggested-by: and Fixes: > > is a helpful guideline. > Thanks for CCing Randy and the pointer to "Documentation/process/submitting-patches.rst" file. This document [1] is mostly focusing on technical handling. - Sedat - [1] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/process/submitting-patches.rst#n584
On 2/26/20 3:30 AM, Masahiro Yamada wrote: > Hi. > > > On Wed, Feb 26, 2020 at 6:02 AM Nick Desaulniers > <ndesaulniers@google.com> wrote: >> >> Added to kbuild documentation. Provides more official info on building >> kernels with Clang and LLVM than our wiki. >> >> Suggested-by: Randy Dunlap <rdunlap@infradead.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> >> --- >> Changes V1 -> V2: >> * s/On going/ongoing/ >> * add Randy's Suggested-by > > > I do not understand this tag update. > > As far as I saw the review process, > I do not think Randy deserves to have Suggested-by > because he just pointed out a typo (on going -> ongoing) : I agree. > https://patchwork.kernel.org/patch/11401189/#23179575 > > (or, was there off-line activity I had missed?)
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..d6c79eb4e23e --- /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/