On Tue, Jul 27, 2021 at 5:27 AM 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. > > Eric Worked for me. Could you tell me the exact steps you did? This is my case: My kernel source tree is located at $HOME/ref/linux alpha tool chains are located at $HOME/tools/alpha-10.1.0/bin I tried a simple GNUmakefile with 3 lines. You can see 'make' is building the alpha kernel Please see below: masahiro@grover:~/ref/linux$ cat GNUmakefile ARCH = alpha CROSS_COMPILE = $(HOME)/tools/alpha-10.1.0/bin/alpha-linux- include Makefile masahiro@grover:~/ref/linux$ make mrproper CLEAN arch/alpha/kernel CLEAN certs CLEAN drivers/tty/vt CLEAN drivers/video/logo CLEAN kernel CLEAN lib CLEAN security/selinux CLEAN usr/include CLEAN usr CLEAN vmlinux.symvers modules-only.symvers modules.builtin modules.builtin.modinfo CLEAN scripts/basic CLEAN scripts/dtc CLEAN scripts/genksyms CLEAN scripts/kconfig CLEAN scripts/mod CLEAN scripts/selinux/genheaders CLEAN scripts/selinux/mdp CLEAN scripts CLEAN include/config include/generated arch/alpha/include/generated .config .config.old .version Module.symvers masahiro@grover:~/ref/linux$ make defconfig HOSTCC scripts/basic/fixdep HOSTCC scripts/kconfig/conf.o HOSTCC scripts/kconfig/confdata.o HOSTCC scripts/kconfig/expr.o LEX scripts/kconfig/lexer.lex.c YACC scripts/kconfig/parser.tab.[ch] HOSTCC scripts/kconfig/lexer.lex.o HOSTCC scripts/kconfig/menu.o HOSTCC scripts/kconfig/parser.tab.o HOSTCC scripts/kconfig/preprocess.o HOSTCC scripts/kconfig/symbol.o HOSTCC scripts/kconfig/util.o HOSTLD scripts/kconfig/conf *** Default configuration is based on 'defconfig' # # configuration written to .config # masahiro@grover:~/ref/linux$ make SYSHDR arch/alpha/include/generated/uapi/asm/unistd_32.h SYSTBL arch/alpha/include/generated/asm/syscall_table.h HOSTCC scripts/kallsyms WRAP arch/alpha/include/generated/uapi/asm/bpf_perf_event.h WRAP arch/alpha/include/generated/uapi/asm/ipcbuf.h WRAP arch/alpha/include/generated/uapi/asm/msgbuf.h WRAP arch/alpha/include/generated/uapi/asm/poll.h WRAP arch/alpha/include/generated/uapi/asm/sembuf.h WRAP arch/alpha/include/generated/uapi/asm/shmbuf.h WRAP arch/alpha/include/generated/asm/export.h WRAP arch/alpha/include/generated/asm/kvm_para.h WRAP arch/alpha/include/generated/asm/mcs_spinlock.h WRAP arch/alpha/include/generated/asm/compat.h WRAP arch/alpha/include/generated/asm/current.h WRAP arch/alpha/include/generated/asm/exec.h WRAP arch/alpha/include/generated/asm/fb.h WRAP arch/alpha/include/generated/asm/irq_work.h WRAP arch/alpha/include/generated/asm/kmap_size.h WRAP arch/alpha/include/generated/asm/kprobes.h WRAP arch/alpha/include/generated/asm/local64.h WRAP arch/alpha/include/generated/asm/mmiowb.h WRAP arch/alpha/include/generated/asm/module.lds.h WRAP arch/alpha/include/generated/asm/msi.h WRAP arch/alpha/include/generated/asm/preempt.h WRAP arch/alpha/include/generated/asm/sections.h WRAP arch/alpha/include/generated/asm/simd.h WRAP arch/alpha/include/generated/asm/softirq_stack.h WRAP arch/alpha/include/generated/asm/trace_clock.h WRAP arch/alpha/include/generated/asm/unaligned.h WRAP arch/alpha/include/generated/asm/vermagic.h UPD include/config/kernel.release UPD include/generated/uapi/linux/version.h UPD include/generated/utsrelease.h CC scripts/mod/empty.o HOSTCC scripts/mod/mk_elfconfig MKELF scripts/mod/elfconfig.h HOSTCC scripts/mod/modpost.o CC scripts/mod/devicetable-offsets.s UPD scripts/mod/devicetable-offsets.h HOSTCC scripts/mod/file2alias.o HOSTCC scripts/mod/sumversion.o HOSTLD scripts/mod/modpost CC kernel/bounds.s UPD include/generated/bounds.h UPD include/generated/timeconst.h CC arch/alpha/kernel/asm-offsets.s UPD include/generated/asm-offsets.h CALL scripts/checksyscalls.sh <stdin>:1515:2: warning: #warning syscall clone3 not implemented [-Wcpp] CALL scripts/atomic/check-atomics.sh CC init/main.o CHK include/generated/compile.h UPD include/generated/compile.h CC init/version.o CC init/do_mounts.o CC init/noinitramfs.o CC init/calibrate.o CC init/init_task.o AR init/built-in.a AR usr/built-in.a AS arch/alpha/kernel/head.o LDS arch/alpha/kernel/vmlinux.lds AS arch/alpha/kernel/entry.o CC arch/alpha/kernel/traps.o CC arch/alpha/kernel/process.o CC arch/alpha/kernel/osf_sys.o CC arch/alpha/kernel/irq.o CC arch/alpha/kernel/irq_alpha.o CC arch/alpha/kernel/signal.o CC arch/alpha/kernel/setup.o CC arch/alpha/kernel/ptrace.o CC arch/alpha/kernel/time.o AS arch/alpha/kernel/systbls.o CC arch/alpha/kernel/err_common.o CC arch/alpha/kernel/io.o CC arch/alpha/kernel/bugs.o CC arch/alpha/kernel/console.o CC arch/alpha/kernel/pci.o CC arch/alpha/kernel/pci_iommu.o CC arch/alpha/kernel/pci-sysfs.o CC arch/alpha/kernel/module.o CC arch/alpha/kernel/rtc.o CC arch/alpha/kernel/core_apecs.o CC arch/alpha/kernel/core_cia.o CC arch/alpha/kernel/core_irongate.o CC arch/alpha/kernel/core_lca.o CC arch/alpha/kernel/core_mcpcia.o CC arch/alpha/kernel/core_polaris.o CC arch/alpha/kernel/core_t2.o CC arch/alpha/kernel/core_tsunami.o CC arch/alpha/kernel/sys_alcor.o CC arch/alpha/kernel/sys_cabriolet.o CC arch/alpha/kernel/sys_dp264.o CC arch/alpha/kernel/sys_eb64p.o CC arch/alpha/kernel/sys_eiger.o CC arch/alpha/kernel/sys_jensen.o CC arch/alpha/kernel/sys_miata.o CC arch/alpha/kernel/sys_mikasa.o CC arch/alpha/kernel/sys_nautilus.o CC arch/alpha/kernel/sys_noritake.o CC arch/alpha/kernel/sys_rawhide.o CC arch/alpha/kernel/sys_ruffian.o CC arch/alpha/kernel/sys_rx164.o CC arch/alpha/kernel/sys_sable.o CC arch/alpha/kernel/sys_sio.o CC arch/alpha/kernel/sys_sx164.o CC arch/alpha/kernel/sys_takara.o CC arch/alpha/kernel/irq_pyxis.o CC arch/alpha/kernel/irq_i8259.o CC arch/alpha/kernel/irq_srm.o CC arch/alpha/kernel/err_ev6.o CC arch/alpha/kernel/es1888.o CC arch/alpha/kernel/smc37c669.o CC arch/alpha/kernel/smc37c93x.o CC arch/alpha/kernel/pc873xx.o CC arch/alpha/kernel/gct.o CC arch/alpha/kernel/srmcons.o AR arch/alpha/kernel/built-in.a CC [M] arch/alpha/kernel/srm_env.o CC arch/alpha/mm/init.o CC arch/alpha/mm/fault.o AR arch/alpha/mm/built-in.a CC arch/alpha/math-emu/math.o ^Cmake[2]: *** Deleting file 'arch/alpha/math-emu/math.o' make[2]: *** [scripts/Makefile.build:271: arch/alpha/math-emu/math.o] Interrupt make[1]: *** [scripts/Makefile.build:514: arch/alpha/math-emu] Interrupt make: *** [Makefile:1842: arch/alpha] Interrupt -- Best Regards Masahiro Yamada