• Masahiro Yamada's avatar
    kbuild: support LLVM=1 to switch the default tools to Clang/LLVM · 7aaf09fd
    Masahiro Yamada authored
    commit a0d1c951 upstream.
    
    As Documentation/kbuild/llvm.rst implies, building the kernel with a
    full set of LLVM tools gets very verbose and unwieldy.
    
    Provide a single switch LLVM=1 to use Clang and LLVM tools instead
    of GCC and Binutils. You can pass it from the command line or as an
    environment variable.
    
    Please note LLVM=1 does not turn on the integrated assembler. You need
    to pass LLVM_IAS=1 to use it. When the upstream kernel is ready for the
    integrated assembler, I think we can make it default.
    
    We discussed what we need, and we agreed to go with a simple boolean
    flag that switches both target and host tools:
    
      https://lkml.org/lkml/2020/3/28/494
      https://lkml.org/lkml/2020/4/3/43
    
    Some items discussed, but not adopted:
    
    - LLVM_DIR
    
      When multiple versions of LLVM are installed, I just thought supporting
      LLVM_DIR=/path/to/my/llvm/bin/ might be useful.
    
      CC      = $(LLVM_DIR)clang
      LD      = $(LLVM_DIR)ld.lld
        ...
    
      However, we can handle this by modifying PATH. So, we decided to not do
      this.
    
    - LLVM_SUFFIX
    
      Some distributions (e.g. Debian) package specific versions of LLVM with
      naming conventions that use the version as a suffix.
    
      CC      = clang$(LLVM_SUFFIX)
      LD      = ld.lld(LLVM_SUFFIX)
        ...
    
      will allow a user to pass LLVM_SUFFIX=-11 to use clang-11 etc.,
      but the suffixed versions in /usr/bin/ are symlinks to binaries in
      /usr/lib/llvm-#/bin/, so this can also be handled by PATH.
    Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
    Reviewed-by: default avatarNathan Chancellor <natechancellor@gmail.com>
    Tested-by: Nathan Chancellor <natechancellor@gmail.com> # build
    Tested-by: default avatarNick Desaulniers <ndesaulniers@google.com>
    Reviewed-by: default avatarNick Desaulniers <ndesaulniers@google.com>
    Signed-off-by: default avatarNick Desaulniers <ndesaulniers@google.com>
    [nd: conflict in exported vars list from not backporting commit
     e83b9f55 ("kbuild: add ability to generate BTF type info for vmlinux")]
    [nd: hunk against Documentation/kbuild/kbuild.rst dropped due to not backporting
     commit cd238eff ("docs: kbuild: convert docs to ReST and rename to *.rst")]
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    7aaf09fd
Makefile 59.3 KB