linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Masahiro Yamada <masahiroy@kernel.org>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Nick Desaulniers <ndesaulniers@google.com>,
	Miguel Ojeda <ojeda@kernel.org>,
	Fangrui Song <maskray@google.com>,
	Michal Marek <michal.lkml@markovi.net>,
	Arnd Bergmann <arnd@kernel.org>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	Linux Kbuild mailing list <linux-kbuild@vger.kernel.org>,
	clang-built-linux <clang-built-linux@googlegroups.com>,
	Geert Uytterhoeven <geert@linux-m68k.org>,
	Christoph Hellwig <hch@infradead.org>,
	Nathan Chancellor <nathan@kernel.org>
Subject: Re: [PATCH v2 2/2] Makefile: infer CROSS_COMPILE from SRCARCH for LLVM=1 LLVM_IAS=1
Date: Wed, 21 Jul 2021 13:31:49 +0900	[thread overview]
Message-ID: <CAK7LNATsdF9+dpqf3OWNpi2dcrT52QcPkNog5reGewbwo8rGBg@mail.gmail.com> (raw)
In-Reply-To: <CAHk-=wgGxu4_hgzdYpFuKd95SfnkJbPTWAQ9-fMgmMN1Oxs2xQ@mail.gmail.com>

On Wed, Jul 21, 2021 at 2:43 AM Linus Torvalds
<torvalds@linux-foundation.org> wrote:
>
> On Tue, Jul 20, 2021 at 1:05 AM Masahiro Yamada <masahiroy@kernel.org> wrote:
> >
> > LLVM=1 is a convenient switch to change all the
> > defaults, but yet you can flip each tool individually.
>
> Actually, I'd argue that "LLVM=1" is *not* a convenient switch.
> Neither are the individual other command line settings.
>
> When clang was the odd man out, and special, it all made sense.
> Changing the path to CC was similar to changing the path to AWK. And
> that's obviously why we have what we have.
>
> But clang has become a primary compiler for some kernel communities,
> and I think it might be time to just re-visit that entirely.
>
> In particular, I think we should just make it a Kconfig option. I hate
> the command flag stuff so much, that my clang tree literally has this
> patch in it:
>
>     -CC = $(CROSS_COMPILE)gcc
>     +CC = $(CROSS_COMPILE)clang
>
> so that I can just do the same "make -j128" in both my gcc tree and my
> clang tree.
>
> But each build tree already has its own .config file, so it would be a
> lot more convenient if that was how the compiler was chosen, and then
> "make oldconfig" would just DTRT.
>
> We do most of the other heavy lifting in this area in Kconfig anyway,
> why not add that compiler choice?


This does not work in the current design.

When we moved compiler tests to Kconfig from Makefile at v4.18,
I discussed a lot about the implementation.
Especially 'static' vs 'dynamic'.
(mostly Ulf Magnusson actively gave me feed backs)


static model
    Kconfig is given with a fixed set of toolchains.
    All macros such as cc-option are expanded in the early parse stage
    before proceeding to the configuration stage.


dynamic  model
   Every time a user toggles a CONFIG option, it feeds back to
   cc-option because CONFIG options (such as CONFIG_64BIT)
   might affect cc-option. In this model, CONFIG_CROSS_COMPILE
   works well.




Of course, the dynamic model is much more complex,
and I could not find a sane syntax to achieve it.

So, I implemented the static model; in this model,
$(cc-option ) are all constant values.

So, you cannot do:


  choice
         prompt "Compiler suite"

  config GCC
          "GCC and GNU binutils"

   config LLVM
           "LLVM (clang and llvm tools)"

  endchoice



To achieve this, we need the dynamic model.

Every time a user switches between CONFIG_GCC and CONFIG_LLVM,
all the cc-options must be re-evaluated.
This does not work in the current implementation.






BTW, keeping the command line interface
such as CROSS_COMPILE=...  CC=... LD=...
is useful when the kernel is built from umbrella
projects such as Buildroot, OpenEmbedded, etc.

Such projects build compilers by themselves,
and feed the exact compiler paths to the kernel.

Too long command line is an annoyance when
we build the kernel manually.












>
> Obviously it would be gated by the tests to see which compilers are
> _installed_ (and that they are valid versions), so that it doesn't ask
> stupid things ("do you want gcc or clang" when only one of them is
> installed and/or viable).
>
> Hmm? So then any "LLVM=1" thing would be about the "make config"
> stage, not the actual build stage.
>
> (It has annoyed me for years that if you want to cross-compile, you
> first have to do "make ARCH=xyz config" and then remember to do "make
> ARCH=xyz" for the build too, but I cross-compile so seldom that I've
> never really cared).
>
> Let the flame wars^H^Hpolite discussions ensue..
>
>                         Linus

--
Best Regards
Masahiro Yamada

  parent reply	other threads:[~2021-07-21  4:33 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-07-08 23:25 [PATCH v2 0/2] infer CROSS_COMPILE from SRCARCH for LLVM=1 LLVM_IAS=1 Nick Desaulniers
2021-07-08 23:25 ` [PATCH v2 1/2] Makefile: move initial clang flag handling into scripts/Makefile.clang Nick Desaulniers
2021-07-09 20:12   ` Nathan Chancellor
2021-07-08 23:25 ` [PATCH v2 2/2] Makefile: infer CROSS_COMPILE from SRCARCH for LLVM=1 LLVM_IAS=1 Nick Desaulniers
2021-07-09 20:44   ` Nathan Chancellor
2021-07-20  8:04   ` Masahiro Yamada
2021-07-20 17:30     ` Nathan Chancellor
2021-07-21  3:49       ` Masahiro Yamada
2021-07-28 18:59         ` Nick Desaulniers
2021-07-28 22:35           ` Masahiro Yamada
2021-07-20 17:42     ` Linus Torvalds
2021-07-20 19:58       ` Arnd Bergmann
2021-07-20 20:18         ` Nick Desaulniers
2021-07-21  4:04         ` Masahiro Yamada
2021-07-23 19:54           ` Geert Uytterhoeven
2021-07-24 13:46             ` Masahiro Yamada
2021-07-26 20:27           ` Eric W. Biederman
2021-07-27  7:07             ` Geert Uytterhoeven
2021-07-27  7:49               ` Arnd Bergmann
2021-07-27  7:55                 ` Geert Uytterhoeven
2021-07-27  8:21                   ` Arnd Bergmann
2021-07-27 10:10             ` Masahiro Yamada
2021-07-27 14:16               ` Eric W. Biederman
2021-07-27 15:45                 ` Masahiro Yamada
2021-07-27 18:46                   ` Eric W. Biederman
2021-07-28 22:31                     ` Masahiro Yamada
2021-07-20 20:52       ` Nick Desaulniers
2021-07-20 21:11         ` Linus Torvalds
2021-07-20 21:27           ` Nick Desaulniers
2021-07-21  4:53         ` Masahiro Yamada
2021-07-20 21:29       ` Nick Desaulniers
2021-07-20 21:54         ` Linus Torvalds
2021-07-20 23:19           ` Linus Torvalds
2021-07-20 23:22             ` Linus Torvalds
2021-07-21  5:12             ` Masahiro Yamada
2021-07-21  4:52           ` Christoph Hellwig
2021-07-21  5:33             ` Masahiro Yamada
2021-07-21  4:31       ` Masahiro Yamada [this message]
2021-07-21  4:44       ` Christoph Hellwig

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAK7LNATsdF9+dpqf3OWNpi2dcrT52QcPkNog5reGewbwo8rGBg@mail.gmail.com \
    --to=masahiroy@kernel.org \
    --cc=arnd@kernel.org \
    --cc=clang-built-linux@googlegroups.com \
    --cc=geert@linux-m68k.org \
    --cc=hch@infradead.org \
    --cc=linux-kbuild@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=maskray@google.com \
    --cc=michal.lkml@markovi.net \
    --cc=nathan@kernel.org \
    --cc=ndesaulniers@google.com \
    --cc=ojeda@kernel.org \
    --cc=torvalds@linux-foundation.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).