Re: [PATCH 00/23] kconfig: move compiler capability tests to Kconfig
From: Masahiro Yamada <hidden>
Date: 2018-02-21 12:57:03
Also in:
linux-kbuild, linux-sh, linux-um, lkml, sparclinux
2018-02-21 19:52 GMT+09:00 Arnd Bergmann [off-list ref]:
On Wed, Feb 21, 2018 at 11:20 AM, Masahiro Yamada [off-list ref] wrote:quoted
2018-02-21 18:56 GMT+09:00 Arnd Bergmann [off-list ref]:quoted
On Wed, Feb 21, 2018 at 8:38 AM, Masahiro Yamada [off-list ref] wrote:quoted
2018-02-20 0:18 GMT+09:00 Ulf Magnusson [off-list ref]:Let me clarify my concern. When we test the compiler flag, is there a case where a particular flag depends on -m{32,64} ? For example, is there a compiler that supports -fstack-protector for 64bit mode, but unsupports it for 32bit mode? $(cc-option -m32) -> y $(cc-option -m64) -> y $(cc-option -fstack-protector) -> y $(cc-option -m32 -fstack-protector) -> n $(cc-option -m64 -fstack-protector) -> y I guess this is unlikely to happen, but I am not whether it is zero possibility. If this could happen, $(cc-option ) must be evaluated together with correct bi-arch option (either -m32 or -m64). Currently, -m32/-m64 is specified in Makefile, but we are moving compiler tests to Kconfig and, CONFIG_64BIT can be dynamically toggled in Kconfig.I don't think it can happen for this particular combination (stack protector and word size), but I'm sure we'll eventually run into options that need to be tested in combination. For the current CFLAGS_KERNEL setting, we definitely have the case of needing the variables to be evaluated in a specific order.
I was thinking of how we can handle complex cases
in the current approach.
(Case 1)
Compiler flag -foo and -bar interacts, so
we also need to check the combination of the two.
config CC_HAS_FOO
def_bool $(cc-option -foo)
config CC_HAS_BAR
def_bool $(cc-option -bar)
config CC_HAS_FOO_WITH_BAR
def_bool $(cc-option -foo -bar)
(Case 2)
Compiler flag -foo is sensitive to word-size.
So, we need to test this option together with -m32/-m64.
User can toggle CONFIG_64BIT, like i386/x86_64.
config CC_NEEDS_M64
def_bool $(cc-option -m64) && 64BIT
config CC_NEEDS_M32
def_bool $(cc-option -m32) && !64BIT
config CC_HAS_FOO
bool
default $(cc-option -m64 -foo) if CC_NEEDS_M64
default $(cc-option -m32 -foo) if CC_NEEDS_M32
default $(cc-option -foo)
(Case 3)
Compiler flag -foo is sensitive to endian-ness.
config CC_NEEDS_BIG_ENDIAN
def_bool $(cc-option -mbig-endian) && CPU_BIG_ENDIAN
config CC_NEEDS_LITTLE_ENDIAN
def_bool $(cc-option -mlittle-endian) && CPU_LITTLE_ENDIAN
config CC_HAS_FOO
bool
default $(cc-option -mbig-endian -foo) if CC_NEEDS_BIG_ENDIAN
default $(cc-option -mlittle-endian -foo) if CC_NEEDS_LITTLE_ENDIAN
default $(cc-option -foo)
Hmm, I think I can implement those somehow.
But, I hope we do not have many instances like this...
If you know more naive cases, please share your knowledge.
Thanks!
--
Best Regards
Masahiro Yamada