Re: [PATCH 00/30] kconfig: move compiler capability tests to Kconfig

From: Masahiro Yamada
Date: Fri Apr 13 2018 - 01:18:13 EST


2018-04-13 14:06 GMT+09:00 Masahiro Yamada <yamada.masahiro@xxxxxxxxxxxxx>:



I forgot to prefix the patch subjects with the version.

This series is V3.







> [Introduction]
>
> The motivation of this work is to move the compiler option tests to
> Kconfig from Makefile. A number of kernel features require the
> compiler support. Enabling such features blindly in Kconfig ends up
> with a lot of nasty build-time testing in Makefiles. If a chosen
> feature turns out unsupported by the compiler, what the build system
> can do is either to disable it (silently!) or to forcibly break the
> build, despite Kconfig has let the user to enable it.
>
> [Major Changes in V3]
>
> This version looks more like Make.
>
> - Use = operator instead of 'macro' keyword
> to define a user-defined function.
>
> - 'Recursively expanded variable' is implemented as a side-effect.
> A variable is a function with zero argument.
>
> - Support simply expanded variable which is defined by := operator
>
> - Support += operator.
> Probably, this feature will be useful to accumulate compiler flags.
> At least, Clang needs some prerequisite flags such as triplet
> to test other compiler flags.
>
> - Support $(info ...) and $(warning ...) built-in functions,
> which were useful while I was debugging this.
>
> - Add documentation
>
> - Add unit tests
>
> - Collect helpers to scripts/Kconfig.include
>
> [TODO items]
>
> I have not been able to finish this. Maybe aiming for v4.18-rc1.
>
> - The text expansion should be able to defer argument expansion.
> This is necessary if we want to implement $(if ...) built-in function.
>
> - Error out recursive expansion of itself.
> For example,
> X = $(X)
> refers itself.
> If referenced, the expansion continues eternally. This must be terminated.
>
> - More compatible behavior?
> Kconfig works mostly like Make, but there are naive cases
> where the behavior is different.
>
> [Old Versions]
>
> V2: https://lkml.org/lkml/2018/2/16/610
> V1: https://lkml.org/lkml/2018/2/16/610
> RFC: https://lkml.org/lkml/2018/2/8/429
>
>
>
> Masahiro Yamada (30):
> gcc-plugins: fix build condition of SANCOV plugin
> kbuild: remove kbuild cache
> kbuild: remove CONFIG_CROSS_COMPILE support
> kconfig: reference environment variables directly and remove 'option
> env='
> kconfig: remove string expansion in file_lookup()
> kconfig: remove string expansion for mainmenu after yyparse()
> kconfig: remove sym_expand_string_value()
> kconfig: add built-in function support
> kconfig: add 'shell' built-in function
> kconfig: replace $(UNAME_RELEASE) with function call
> kconfig: begin PARAM state only when seeing a command keyword
> kconfig: support variable and user-defined function
> kconfig: support simply expanded variable
> kconfig: support append assignment operator
> kconfig: expand lefthand side of assignment statement
> kconfig: add 'info' and 'warning' built-in functions
> Documentation: kconfig: document a new Kconfig macro language
> kconfig: test: test text expansion
> kconfig: show compiler version text in the top comment
> kconfig: add basic helper macros to scripts/Kconfig.include
> stack-protector: test compiler capability in Kconfig and drop AUTO
> mode
> kconfig: add CC_IS_GCC and GCC_VERSION
> kconfig: add CC_IS_CLANG and CLANG_VERSION
> gcov: remove CONFIG_GCOV_FORMAT_AUTODETECT
> kcov: test compiler capability in Kconfig and correct dependency
> gcc-plugins: move GCC version check for PowerPC to Kconfig
> gcc-plugins: test plugin support in Kconfig and clean up Makefile
> gcc-plugins: allow to enable GCC_PLUGINS for COMPILE_TEST
> arm64: move GCC version check for ARCH_SUPPORTS_INT128 to Kconfig
> kbuild: test dead code/data elimination support in Kconfig
>
> Documentation/kbuild/kconfig-language.txt | 8 -
> Documentation/kbuild/kconfig-macro-language.txt | 179 +++++++
> Kconfig | 10 +-
> MAINTAINERS | 3 +-
> Makefile | 113 +---
> arch/Kconfig | 53 +-
> arch/arm64/Kconfig | 1 +
> arch/arm64/Makefile | 2 -
> arch/powerpc/Kconfig | 2 +-
> arch/sh/Kconfig | 4 +-
> arch/sparc/Kconfig | 4 +-
> arch/um/Kconfig.common | 4 -
> arch/x86/Kconfig | 15 +-
> arch/x86/um/Kconfig | 6 +-
> init/Kconfig | 40 +-
> kernel/gcov/Kconfig | 17 +-
> kernel/gcov/Makefile | 2 -
> lib/Kconfig.debug | 11 +-
> scripts/Kbuild.include | 101 +---
> scripts/Kconfig.include | 20 +
> scripts/Makefile.gcc-plugins | 91 +---
> scripts/Makefile.kcov | 10 +-
> scripts/clang-version.sh | 18 +-
> scripts/gcc-plugins/Makefile | 1 +
> scripts/gcc-x86_32-has-stack-protector.sh | 7 +-
> scripts/gcc-x86_64-has-stack-protector.sh | 5 -
> scripts/kconfig/confdata.c | 31 +-
> scripts/kconfig/kconf_id.c | 1 -
> scripts/kconfig/lkc.h | 4 -
> scripts/kconfig/lkc_proto.h | 15 +-
> scripts/kconfig/menu.c | 3 -
> scripts/kconfig/preprocess.c | 594 +++++++++++++++++++++
> scripts/kconfig/symbol.c | 109 ----
> .../kconfig/tests/preprocess/builtin_func/Kconfig | 19 +
> .../tests/preprocess/builtin_func/__init__.py | 8 +
> .../tests/preprocess/builtin_func/expected_stderr | 4 +
> .../tests/preprocess/builtin_func/expected_stdout | 1 +
> scripts/kconfig/tests/preprocess/escape/Kconfig | 49 ++
> .../kconfig/tests/preprocess/escape/__init__.py | 9 +
> .../tests/preprocess/escape/expected_stderr | 10 +
> scripts/kconfig/tests/preprocess/user_func/Kconfig | 19 +
> .../kconfig/tests/preprocess/user_func/__init__.py | 7 +
> .../tests/preprocess/user_func/expected_stderr | 5 +
> scripts/kconfig/tests/preprocess/variable/Kconfig | 39 ++
> .../kconfig/tests/preprocess/variable/__init__.py | 7 +
> .../tests/preprocess/variable/expected_stderr | 7 +
> scripts/kconfig/util.c | 22 +-
> scripts/kconfig/zconf.l | 95 +++-
> scripts/kconfig/zconf.y | 48 +-
> 49 files changed, 1259 insertions(+), 574 deletions(-)
> create mode 100644 Documentation/kbuild/kconfig-macro-language.txt
> create mode 100644 scripts/Kconfig.include
> create mode 100644 scripts/kconfig/preprocess.c
> create mode 100644 scripts/kconfig/tests/preprocess/builtin_func/Kconfig
> create mode 100644 scripts/kconfig/tests/preprocess/builtin_func/__init__.py
> create mode 100644 scripts/kconfig/tests/preprocess/builtin_func/expected_stderr
> create mode 100644 scripts/kconfig/tests/preprocess/builtin_func/expected_stdout
> create mode 100644 scripts/kconfig/tests/preprocess/escape/Kconfig
> create mode 100644 scripts/kconfig/tests/preprocess/escape/__init__.py
> create mode 100644 scripts/kconfig/tests/preprocess/escape/expected_stderr
> create mode 100644 scripts/kconfig/tests/preprocess/user_func/Kconfig
> create mode 100644 scripts/kconfig/tests/preprocess/user_func/__init__.py
> create mode 100644 scripts/kconfig/tests/preprocess/user_func/expected_stderr
> create mode 100644 scripts/kconfig/tests/preprocess/variable/Kconfig
> create mode 100644 scripts/kconfig/tests/preprocess/variable/__init__.py
> create mode 100644 scripts/kconfig/tests/preprocess/variable/expected_stderr
>
> --
> 2.7.4
>



--
Best Regards
Masahiro Yamada