
On Tue, May 19, 2020 at 1:55 AM Tom Rini trini@konsulko.com wrote:
On Mon, May 18, 2020 at 11:23:20AM -0400, Tom Rini wrote:
On Mon, May 18, 2020 at 11:55:11AM +0900, Masahiro Yamada wrote:
Tom,
On Thu, May 14, 2020 at 9:32 PM Tom Rini trini@konsulko.com wrote:
As part of re-syncing our Kconfig logic up to v4.19, we had missed adding this new file that includes helper macros. To quote the upstream commit e1cfdc0e72fc ("kconfig: add basic helper macros to scripts/Kconfig.include"):
Kconfig got text processing tools like we see in Make. Add Kconfig helper macros to scripts/Kconfig.include like we collect Makefile macros in scripts/Kbuild.include.
Cc: Masahiro Yamada yamada.masahiro@socionext.com Signed-off-by: Tom Rini trini@konsulko.com
If you want to align with Linux kernel, please go ahead.
Some notes.
Previously, CROSS_COMPILE was not required at the Kconfig stage.
So, people was able to do this:
make qemu_arm64_defconfig make CROSS_COMPILE=aarch64-linux-gnu-
Going forward, Kconfig requires CROSS_COMPILE set correctly.
make CROSS_COMPILE=aarch64-linux-gnu- qemu_arm64_defconfig make CROSS_COMPILE=aarch64-linux-gnu-
Maybe, passing CROSS_COMPILE as an environment variable is handier
export CROSS_COMPILE=aarch64-linux-gnu- make qemu_arm64_defconfig make
When you upgrade the compiler, in theory, you must re-run Kconfig because the .config now contains the compiler information.
If you want to do this automatically, you can import CC_VERSION_TEXT.
Specifically, the following two commits: 21c54b774744719c386fbdc829b0e7759edb8ece 315bab4e972d9795529b764718d475492db40c0f
OK, so we really want to grab those changes as well at the time, thanks!
Trying this out and trying to follow the code a bit, the first commit is helpful for us in that it's good to have the compiler noted in the file. But even without it, with this series applied we see: $ make O=/tmp/rpi3_32b HOSTCC=clang-10 CROSS_COMPILE=~/.buildman-toolchains/gcc-9.2.0-nolibc/arm-linux-gnueabi/bin/arm-linux-gnueabi- CC="clang-10 -target arm-linux-gnueabi" rpi_3_32b_config make[1]: Entering directory '/tmp/rpi3_32b' HOSTCC scripts/basic/fixdep GEN ./Makefile HOSTCC scripts/kconfig/conf.o YACC scripts/kconfig/zconf.tab.c LEX scripts/kconfig/zconf.lex.c HOSTCC scripts/kconfig/zconf.tab.o HOSTLD scripts/kconfig/conf # # configuration written to .config # make[1]: Leaving directory '/tmp/rpi3_32b' $ make O=/tmp/rpi3_32b HOSTCC=clang-10 CROSS_COMPILE=~/.buildman-toolchains/gcc-9.2.0-nolibc/arm-linux-gnueabi/bin/arm-linux-gnueabi- make[1]: Entering directory '/tmp/rpi3_32b' GEN ./Makefile scripts/kconfig/conf --syncconfig Kconfig UPD include/config.h CFG u-boot.cfg ...
So we're getting syncconfig run and CC-related changes are caught.
This is because you changed the environment variable, $(CC).
I meant the situation, "the compiler version is updated without changing the installation path".
I think this does not happen quite often, but I assumed the following scenario.
- "apt-get upgrade" will upgrade distro compilers. The executables in /usr/bin/ are overwritten.
- If you have cross compilers in $(HOME)/bin etc., you may want to simply overwrite to upgrade the compilers.
For the second commit, since ARCH comes from CONFIG_SYS_ARCH and not the make line/environment, we don't have that problem to start with? Thanks!
Sorry, I missed ARCH comes from CONFIG_SYS_ARCH in U-Boot. That is a difference from Linux.
arch/*/config.mk define CROSS_COMPILE.
arch/m68k/config.mk:ifeq ($(CROSS_COMPILE),) arch/m68k/config.mk:CROSS_COMPILE := m68k-elf- arch/microblaze/config.mk:ifeq ($(CROSS_COMPILE),) arch/microblaze/config.mk:CROSS_COMPILE := mb- arch/nds32/config.mk:ifeq ($(CROSS_COMPILE),) arch/nds32/config.mk:CROSS_COMPILE := nds32le-linux- arch/nios2/config.mk:ifeq ($(CROSS_COMPILE),) arch/nios2/config.mk:CROSS_COMPILE := nios2-elf- arch/powerpc/config.mk:ifeq ($(CROSS_COMPILE),) arch/powerpc/config.mk:CROSS_COMPILE := ppc_8xx- arch/powerpc/config.mk:ifeq ($(CROSS_COMPILE),powerpc-netbsd-) arch/powerpc/config.mk:ifeq ($(CROSS_COMPILE),powerpc-openbsd-) arch/sh/config.mk:ifeq ($(CROSS_COMPILE),) arch/sh/config.mk:CROSS_COMPILE := sh4-linux- arch/x86/cpu/config.mk:CROSS_COMPILE ?= i386-linux- arch/xtensa/config.mk:CROSS_COMPILE ?= xtensa-linux-
If you apply patch, you cannot support CROSS_COMPILE defines in arch/*/config.mk
U-Boot determines SYS_ARCH from Kconfig. After Kconfig, the build system can include the correct arch/*/config.mk, but it is too late to pick up CROSS_COMPILE.