Hi Eric, On Mon, Jul 26, 2021 at 10:27 PM Eric W. Biederman <ebiederm@xxxxxxxxxxxx> wrote: > Masahiro Yamada <masahiroy@xxxxxxxxxx> writes: > > On Wed, Jul 21, 2021 at 4:58 AM Arnd Bergmann <arnd@xxxxxxxxxx> wrote: > >> On Tue, Jul 20, 2021 at 7:43 PM Linus Torvalds > >> <torvalds@xxxxxxxxxxxxxxxxxxxx> wrote: > >> > On Tue, Jul 20, 2021 at 1:05 AM Masahiro Yamada <masahiroy@xxxxxxxxxx> 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'. > > > > > > There is no need to add a hook to include such makefile fragment(s). > > > > Quite opposite, you can put your Makefile (in a different filename) > > that includes the top Makefile. > > > > > > I think this is what people are already doing: > > > > > > GNU Make looks for 'GNUmakefile', 'makefile', and 'Makefile' > > in this order. > > > > > > So, you can put 'GNUmakefile' with your favorite setups. > > > > > > $ cat GNUmakefile > > ARCH=arm64 > > CROSS_COMPILE=aarch64-linux-gnu- > > CC=clang > > include Makefile > > Very weird. > > I just tested this and it does not work. > I did this: > > $ cat GNUmakefile > ARCH = alpha > CROSS_COMPILE = $(arch-prefix alpha) > include Makefile > > In one of my build directories and the main makefile simply does not see > the value of ARCH or CROSS_COMPILE I set. I have confirmed that my > GNUmakefile is being read, because everything breaks if I remove the > include line. > > Does anyone have any ideas? > > Something so we don't have to specify all of these variables on the make > command line would be nice. Just including the main Makefile does not work. That's why I went with the more convoluted solution in https://lore.kernel.org/linux-kbuild/CAMuHMdXJBqrpzaSNDJgic14ESiHV6cCcb_5E-st6iniXdmm9_g@xxxxxxxxxxxxxx/ Please try the attached, which combines everything above in a single file, and which works for me. Note that "$(arch-prefix alpha)" didn't work for me (it resolved to "gcc"?), so I used "alpha-linux-gnu-" instead. Good luck! Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@xxxxxxxxxxxxxx In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds
Attachment:
GNUmakefile
Description: Binary data