Messages in this thread | | | From | Arnd Bergmann <> | Date | Tue, 20 Jul 2021 21:58:32 +0200 | Subject | Re: [PATCH v2 2/2] Makefile: infer CROSS_COMPILE from SRCARCH for LLVM=1 LLVM_IAS=1 |
| |
On Tue, Jul 20, 2021 at 7:43 PM Linus Torvalds <torvalds@linux-foundation.org> wrote: > On Tue, Jul 20, 2021 at 1:05 AM Masahiro Yamada <masahiroy@kernel.org> wrote: > > We do most of the other heavy lifting in this area in Kconfig anyway, > why not add that compiler choice? > > 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).
I don't see a good way of making Kconfig options both select the compiler and defining variables based on the compiler, since that would mean teaching Kconfig about re-evaluating all compiler dependent settings whenever the first option changes.
I do have another idea that I think would work though.
> 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).
The best thing that I have come up with is a pre-configure step, where an object tree gets seeded with a makefile fragment that gets included for any 'make' invocation. This would set 'ARCH=', 'CROSS_COMPILE', 'CC=' and possibly any other option that gets passed to 'make' as a variable and has to exist before calling 'make *config'.
This is probably the easiest part here, and it lets you set up multiple object directories in which you can then do
make O=obj-x86 defconfig vmlinux modules -skj32 make O=obj-x86-clang make O=obj-arm64 randconfig ...
without ever having to type the additional CC/CROSS_COMPILE/LLVM variables again.
One step further is the script that automatically finds a working toolchain for a given architecture and sets up that object directory accordingly, or even downloads a working cross-toolchain from kernel.org when asked to do that.
Arnd
| |