Messages in this thread | | | From | Linus Torvalds <> | Date | Thu, 8 Feb 2018 09:19:34 -0800 | Subject | Re: [RFC PATCH 0/7] Kconfig: add new special property shell= to test compiler options in Kconfig |
| |
On Thu, Feb 8, 2018 at 8:19 AM, Masahiro Yamada <yamada.masahiro@socionext.com> wrote: > This was prompted by the email from Linus today's morning.
Thanks.
> I implmented this in a rush today, so there are still many TODOs, > but I put it here to start discussion. > > I think it is working, but as you notice, it is tedious to repeat something > like follows: > > config CC_HAS_STACKPROTECTOR > bool > option shell="$CC -Werror -fstack-protector -c -x c /dev/null"
Yeah.
I do think we want to have the "shell" thing as a generic escape for other things too, but *realistically*, the primary target for this is compiler flags, and I think we should target that specifically with a shorthand.
Doing some statistics, and looking for
flag = $(call xyz ...)
patterns in our makefiles (ignoring single uses), it really is cc-option that dominates:
2 name-fix 2 try-run 3 __cc-option 3 grep-libs 3 strip-libs 4 flags 4 get-executable 4 ld-option 4 logo-cfiles 5 as-option 5 cc-cross-prefix 6 cc-ldoption 6 cc-supports 7 cc-option-yn 7 tune 9 cc-ifversion 30 as-instr 48 cc-disable-warning 239 cc-option
so I think that's the one that we want to special-case.
If we then have a _usable_ - but perhaps not wonderful "shell" escape to do any random thing (including scripts etc), that will take care of the rest, but cc-option is so common that I think it's worth making a special Kconfig syntax for them. For all I know, the others aren't even worth Kconfig options at all.
> I was thinking of something like follows: > > config CC_STACKPROTECTOR > bool > option shell="$(CC_OPTION -fstack-protector)"
I think we should go even further, and just make it be
config CC_STACKPROTECTOR bool option cc_option="-fstack-protector"
and actually have the Kconfig language itself have this special-cased.
And obviously that "option cc_option" would be *implemented* as just "option shell", with just some stupid string substitution. So it really would be purely a shorthand for readability.
What do you think?
And btw, the patches look nice. What I like in particular is that they don't even seem to add a lot of lines: the new shell option code is almost balanced out by the Kconfig script simplifications. And maybe it's just that I read C a lot better than I read GNU Makefile magic, but I think it's more understandable too.
Linus
| |