alistair23-linux/scripts/kconfig
Masahiro Yamada 9ced3bddec kconfig: support user-defined function and recursively expanded variable
Now, we got a basic ability to test compiler capability in Kconfig.

config CC_HAS_STACKPROTECTOR
        def_bool $(shell,($(CC) -Werror -fstack-protector -E -x c /dev/null -o /dev/null 2>/dev/null) && echo y || echo n)

This works, but it is ugly to repeat this long boilerplate.

We want to describe like this:

config CC_HAS_STACKPROTECTOR
        bool
        default $(cc-option,-fstack-protector)

It is straight-forward to add a new function, but I do not like to
hard-code specialized functions like that.  Hence, here is another
feature, user-defined function.  This works as a textual shorthand
with parameterization.

A user-defined function is defined by using the = operator, and can
be referenced in the same way as built-in functions.  A user-defined
function in Make is referenced like $(call my-func,arg1,arg2), but I
omitted the 'call' to make the syntax shorter.

The definition of a user-defined function contains $(1), $(2), etc.
in its body to reference the parameters.  It is grammatically valid
to pass more or fewer arguments when calling it.  We already exploit
this feature in our makefiles; scripts/Kbuild.include defines cc-option
which takes two arguments at most, but most of the callers pass only
one argument.

By the way, a variable is supported as a subset of this feature since
a variable is "a user-defined function with zero argument".  In this
context, I mean "variable" as recursively expanded variable.  I will
add a different flavored variable in the next commit.

The code above can be written as follows:

[Example Code]

  success = $(shell,($(1)) >/dev/null 2>&1 && echo y || echo n)
  cc-option = $(success,$(CC) -Werror $(1) -E -x c /dev/null -o /dev/null)

  config CC_HAS_STACKPROTECTOR
          def_bool $(cc-option,-fstack-protector)

[Result]
  $ make -s alldefconfig && tail -n 1 .config
  CONFIG_CC_HAS_STACKPROTECTOR=y

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
2018-05-29 03:31:19 +09:00
..
lxdialog kconfig: drop localization support 2018-05-28 18:25:21 +09:00
tests kconfig: make default prompt of mainmenu less specific 2018-05-29 03:31:19 +09:00
.gitignore kconfig: drop localization support 2018-05-28 18:25:21 +09:00
conf.c kconfig: drop localization support 2018-05-28 18:25:21 +09:00
confdata.c kconfig: reference environment variables directly and remove 'option env=' 2018-05-29 03:28:58 +09:00
expr.c kconfig: make unmet dependency warnings readable 2018-03-26 02:04:06 +09:00
expr.h kconfig: make unmet dependency warnings readable 2018-03-26 02:04:06 +09:00
gconf-cfg.sh kconfig: refactor GTK+ package checks for building gconf 2018-05-28 18:25:21 +09:00
gconf.c kconfig: drop localization support 2018-05-28 18:25:21 +09:00
gconf.glade scripts/kconfig/gconf.glade Update broken web addresses. 2010-09-17 16:54:42 +02:00
images.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
kconf_id.c kconfig: reference environment variables directly and remove 'option env=' 2018-05-29 03:28:58 +09:00
list.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
lkc.h kconfig: reference environment variables directly and remove 'option env=' 2018-05-29 03:28:58 +09:00
lkc_proto.h kconfig: support user-defined function and recursively expanded variable 2018-05-29 03:31:19 +09:00
Makefile kconfig: drop localization support 2018-05-28 18:25:21 +09:00
mconf-cfg.sh kconfig: refactor ncurses package checks for building mconf and nconf 2018-05-28 18:25:21 +09:00
mconf.c kconfig: drop localization support 2018-05-28 18:25:21 +09:00
menu.c kconfig: reference environment variables directly and remove 'option env=' 2018-05-29 03:28:58 +09:00
merge_config.sh kconfig/merge_config.sh: Accept a single file 2015-10-14 16:19:37 +02:00
nconf-cfg.sh kconfig: refactor ncurses package checks for building mconf and nconf 2018-05-28 18:25:21 +09:00
nconf.c kconfig: drop localization support 2018-05-28 18:25:21 +09:00
nconf.gui.c kconfig: add xrealloc() helper 2018-02-10 11:26:04 +09:00
nconf.h kconfig: drop localization support 2018-05-28 18:25:21 +09:00
preprocess.c kconfig: support user-defined function and recursively expanded variable 2018-05-29 03:31:19 +09:00
qconf-cfg.sh kconfig: refactor Qt package checks for building qconf 2018-05-28 18:25:21 +09:00
qconf.cc kconfig: drop localization support 2018-05-28 18:25:21 +09:00
qconf.h Port xconfig to Qt5 - Source format. 2015-10-14 14:59:03 +02:00
streamline_config.pl scripts: Switch to more portable Perl shebang 2017-05-14 11:20:44 +09:00
symbol.c kconfig: remove sym_expand_string_value() 2018-05-29 03:31:19 +09:00
util.c kconfig: remove string expansion in file_lookup() 2018-05-29 03:28:58 +09:00
zconf.l kconfig: support user-defined function and recursively expanded variable 2018-05-29 03:31:19 +09:00
zconf.y kconfig: support user-defined function and recursively expanded variable 2018-05-29 03:31:19 +09:00