Web lists-archives.com

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




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