Re: kbuild: check the minimum compiler version in Kconfig

From: Florian Fainelli
Date: Wed Nov 16 2022 - 17:56:31 EST


On 11/16/22 14:48, Nick Desaulniers wrote:
On Wed, Nov 16, 2022 at 1:48 PM Florian Fainelli <f.fainelli@xxxxxxxxx> wrote:

Hi Masahiro, Nick,

The compiler version check performed with
aec6c60a01d3a3170242d6a99372a388e1136dc6 ("kbuild: check the minimum
compiler version in Kconfig") can be defeated and prevent running the
*config targets if specifying LLVM=1 on the command line, in that way:

BR_BINARIES_DIR=/local/users/fainelli/buildroot-llvm/output/arm64/images
LLVM=1 LLVM_IAS=1 PKG_CONFIG_PATH="" /usr/bin/make -j49 -C
/local/users/fainelli/buildroot-llvm/output/arm64/build/linux-custom
HOSTCC="/usr/bin/gcc"
HOSTCC="/local/users/fainelli/buildroot-llvm/output/arm64/host/bin/ccache
/usr/bin/gcc -O2
-I/local/users/fainelli/buildroot-llvm/output/arm64/host/include
-DNDEBUG -L/local/users/fainelli/buildroot-llvm/output/arm64/host/lib
-Wl,-rpath,/local/users/fainelli/buildroot-llvm/output/arm64/host/lib"
ARCH=arm64
INSTALL_MOD_PATH=/local/users/fainelli/buildroot-llvm/output/arm64/target
CROSS_COMPILE="/local/users/fainelli/buildroot-llvm/output/arm64/host/bin/aarch64-linux-"
WERROR=0
DEPMOD=/local/users/fainelli/buildroot-llvm/output/arm64/host/sbin/depmod
INSTALL_MOD_STRIP=1 HOSTCC="/usr/bin/gcc" menuconfig
UPD scripts/kconfig/mconf-cfg
HOSTCC scripts/kconfig/mconf.o
HOSTCC scripts/kconfig/lxdialog/checklist.o
HOSTCC scripts/kconfig/lxdialog/inputbox.o
HOSTCC scripts/kconfig/lxdialog/menubox.o
HOSTCC scripts/kconfig/lxdialog/textbox.o
HOSTCC scripts/kconfig/lxdialog/util.o
HOSTCC scripts/kconfig/lxdialog/yesno.o
HOSTLD scripts/kconfig/mconf
***
*** Compiler is too old.
*** Your Clang version: 10.0.0
*** Minimum Clang version: 10.0.1
***
scripts/Kconfig.include:44: Sorry, this compiler is not supported.

Here, the compiler check is actually checking the host compiler clang
version installed on my Ubuntu 20.04 system, as opposed to the cross
compiler clang version that is being used.

LLVM=1 will use `clang` as found by your $PATH. Where did you express
to make what the "cross compiler clang version" is? (And why do you
set HOSTCC three times)

We are setting CROSS_COMPILE to express the cross compiler clang prefix to use.

Setting HOSTCC three times is done by buildroot, it does it through make flags, and then variables passed to make etc. clearly we could change that, but that's out of scope is not it?
--
Florian