Re: [PATCH v3] kbuild: Set KBUILD_CFLAGS before incl. arch Makefile

From: Masahiro Yamada
Date: Tue Nov 28 2017 - 21:40:58 EST


Hi Nick,

2017-11-29 3:18 GMT+09:00 Nick Desaulniers <ndesaulniers@xxxxxxxxxx>:
> Hi Masahiro,
>
> Thanks for merging Chris' patch, and sorry for taking so long to respond.
>
> On Wed, Nov 22, 2017 at 8:24 PM, Masahiro Yamada
> <yamada.masahiro@xxxxxxxxxxxxx> wrote:
>> Linus suggests to move compiler flag testing to Kconfig.
>
> Do you have an LKML link for context?


https://lkml.org/lkml/2017/11/19/291



> On Wed, Nov 15, 2017 at 6:32 PM, Masahiro Yamada
> <yamada.masahiro@xxxxxxxxxxxxx> wrote:
>> BTW, I notice another issue.
>>
>> If we move clang settings before including arch Makefile,
>> "ifneq ($(CROSS_COMPILE),)" comes early.
>>
>> Some arch Makefiles (arch/mips/Makefile, arch/blackfin/Makefile, etc.)
>> set CROSS_COMPILE there if CROSS_COMPILE is not given.
>>
>> Then, we have a conflict between two requirements among arch.
>>
>> [1] arm64, powerpc use ld-option in their Makefile.
>> So, clang flags must be set before inc. arch Makefile.
>> [2] mips, blackfin, etc. may set CROSS_COMPILE in their Makefile.
>> So, we want to reference CROSS_COMPILE only after inc. arch Makefile
>>
>> I have no idea how to solve it.
>>
>> At this moment, I guess clang is intended to support
>> only limited architectures.
>>
>> It might be OK to be compromised here.
>
> I definitely find it curious that certain arch's define CROSS_COMPILE
> themselves. The benefit is one less argument to supply at compile
> time, but it assumes that the toolchain always has a certain prefix.
> This makes sense to me when cross compiling, but seems odd when
> compiling natively on that arch as the host and target. Maybe those
> arch's use that convention, or simply are always cross compiled for?
>
> Taking a survey of all arch's currently in the kernel via `cd arch; ag
> CROSS_COMPILE` and quickly eyeballing the result:
>
> m68k if not set
> arc if not set
> openrisc for some configs (openrisc/configs/or1ksim_defconfig,
> openrisc/configs/simple_smp_defconfig)
> blackfin if not set
> hexagon for some configs (hexagon/configs/comet_defconfig)
> parisc if not set
> sh if not set
> xtensa if not set
> score always
> arm for some configs (arm/configs/lpc18xx_defconfig)
> h8300 if not set
> mips if not set (and explicitly emptied for some configs,
> mips/configs/nlm_xlr_defconfig )
> unicore32 if not set
> tile if not set
>
> The * if not set (or not being on the list) seems correct, as the top
> level Makefile will handle this correctly. Setting it for some
> configs seems curious (not necessarily wrong?),

Perhaps, the maintainer of those platforms may want to save
one command-line argument at compile time.

> emptying it/always
> setting it via config sounds wrong to me,

arch/mips/configs/nlm_xlr_defconfig explicitly empties it.
It is just redundant because CONFIG_CROSS_COMPILE=""
is the default in Kconfig.
Not necessarily wrong, I think.


> but maybe those hosts don't
> have toolchains and must always be cross compiled for?
>
> For reference, this file in LLVM source defines the supported backend
> targets: https://llvm.org/doxygen/Triple_8h_source.html
>
> Either way, it sounds like we're all set here, I guess I'm just
> curious about the LKML link/context and why some configs set
> CROSS_COMPILE themselves?
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at http://vger.kernel.org/majordomo-info.html



--
Best Regards
Masahiro Yamada