All of lore.kernel.org
 help / color / mirror / Atom feed
From: Masahiro Yamada <yamada.masahiro@socionext.com>
To: linux-kbuild@vger.kernel.org
Cc: Sam Ravnborg <sam@ravnborg.org>,
	Linus Torvalds <torvalds@linux-foundation.org>,
	Arnd Bergmann <arnd@arndb.de>,
	Ulf Magnusson <ulfalizer@gmail.com>,
	Kees Cook <keescook@chromium.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Randy Dunlap <rdunlap@infradead.org>,
	"Luis R . Rodriguez" <mcgrof@kernel.org>,
	Nicolas Pitre <nico@linaro.org>,
	Masahiro Yamada <yamada.masahiro@socionext.com>,
	Peter Oberparleiter <oberpar@linux.vnet.ibm.com>,
	kernel-hardening@lists.openwall.com,
	linux-kernel@vger.kernel.org, Ingo Molnar <mingo@redhat.com>,
	Will Deacon <will.deacon@arm.com>,
	Catalin Marinas <catalin.marinas@arm.com>,
	Emese Revfy <re.emese@gmail.com>,
	linux-arm-kernel@lists.infradead.org
Subject: [PATCH v2 00/21] kconfig: move compiler capability tests to Kconfig
Date: Tue, 27 Mar 2018 14:29:14 +0900	[thread overview]
Message-ID: <1522128575-5326-1-git-send-email-yamada.masahiro@socionext.com> (raw)


Here is v2 to start to move compiler capability tests to Kconfig.

V1:
https://lkml.org/lkml/2018/2/16/610

I brushed up the implementation even more.

Major changes for v2:
[1] Environments and functions are expanded in the lexer (zconf.l)
    The parser (zconf.y) receives expanded tokens.  This simplifies
    the implementation.

[2] Implement only one built-in function 'shell'.  This returns
    stdout from the command.  We need something to return 'y' or 'n'.
    This is now implemented as a macro 'success'.

[3] Macros (user-defined function) are defined by 'macro' keyword
    instead of string type symbol.

    ex1) macro success $(shell ($(1) && echo y) || echo n)
    ex2) macro cc-option $(success $CC -Werror $(1) -c -x c /dev/null -o /dev/null)

My plan for v3
--------------

The MW is approaching, but I'd like to make it more lovely if
I have some time.

While I was writing these patches, I noticed a kind of similarity
between Makefile and Kconfig.

Makefile can define variables and functions to do text processing
during the parse phase.  After parsing, it builds up dependency
graph, and moves on to the execution phase.  Then, it generates
objects as needed by checking time-stamps.

[Makefile]

  OBJ := foo.o
  SRC := foo.c
  CC := gcc

  $(OBJ): $(SRC)
            $(CC) -c -o $(OBJ) $(SRC)

[Makefile after text processing]

  foo.o: foo.c
          gcc -c -o foo.o foo.c

Now, we are adding tools for text processing to Kconfig.  Functions
are statically expanded by the lexer.  After all source files are
parsed, Kconfig moves on to the evaluation phase.  Then, users can
tweak symbol values from menus.

So, we should be able to describe Kconfig like follows:

[Kconfig]

   MY_SYMBOL := CC_STACKPROTECTOR
   MY_PROMPT := "Stackprotector"
   success = $(shell ($(1) && echo y) || echo n)
   cc-option = $(success $CC -Werror $(1) -c -x c /dev/null -o /dev/null)

   config $(MY_SYMBOL)
           bool $(MY_PROMPT)
           depends on $(cc-option -fstack-protector)

[Kconfig after text processing]

   config CC_STACKPROTECTOR
           bool "Stackptector"
           depends on y

So, I think it is better to use '=' assignment for defining functions.
I will remove the 'macro' keyword.
Also, support variables.  A variable is a function with no argument.
So, it will be easy to implement it as a sub-set of function feature.
It is better to support two flavors of assignments, '=' and ':=' as well.

Masahiro Yamada (21):
  kbuild: remove kbuild cache
  kbuild: remove CONFIG_CROSS_COMPILE support
  kconfig: move and rename sym_expand_string_value()
  kconfig: reference environments directly and remove 'option env='
    syntax
  kconfig: remove string expansion in file_lookup()
  kconfig: remove string expansion for mainmenu after yyparse()
  kconfig: add function support and implement 'shell' function
  kconfig: replace $UNAME_RELEASE with function call
  kconfig: add 'macro' keyword to support user-defined function
  kconfig: add 'success' and 'cc-option' macros
  stack-protector: test compiler capability in Kconfig and drop AUTO
    mode
  kconfig: show compiler version text in the top comment
  kconfig: add CC_IS_GCC and GCC_VERSION
  kconfig: add CC_IS_CLANG and CLANG_VERSION
  gcov: remove CONFIG_GCOV_FORMAT_AUTODETECT
  kcov: imply GCC_PLUGINS and GCC_PLUGIN_SANCOV instead of select'ing
    them
  gcc-plugins: always build plugins with C++
  gcc-plugins: move GCC version check for PowerPC to Kconfig
  gcc-plugins: test GCC plugin support in Kconfig
  gcc-plugins: enable GCC_PLUGINS for COMPILE_TEST
  arm64: move GCC version check for ARCH_SUPPORTS_INT128 to Kconfig

 Documentation/kbuild/kconfig-language.txt |   8 --
 Kconfig                                   |   4 +-
 Makefile                                  | 103 ++------------
 arch/Kconfig                              |  37 ++---
 arch/arm64/Kconfig                        |   1 +
 arch/arm64/Makefile                       |   2 -
 arch/powerpc/Kconfig                      |   2 +-
 arch/sh/Kconfig                           |   4 +-
 arch/sparc/Kconfig                        |   4 +-
 arch/tile/Kconfig                         |   2 +-
 arch/um/Kconfig.common                    |   4 -
 arch/x86/Kconfig                          |  12 +-
 arch/x86/um/Kconfig                       |   4 +-
 init/Kconfig                              |  44 +++---
 kernel/gcov/Kconfig                       |  17 +--
 kernel/gcov/Makefile                      |   2 -
 lib/Kconfig.debug                         |   7 +-
 scripts/Kbuild.include                    | 101 ++------------
 scripts/Makefile.gcc-plugins              |  95 ++++---------
 scripts/clang-version.sh                  |  24 ++--
 scripts/gcc-plugin.sh                     |  37 +----
 scripts/gcc-plugins/Makefile              |  15 +-
 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/env.c                     |  95 +++++++++++++
 scripts/kconfig/function.c                | 225 ++++++++++++++++++++++++++++++
 scripts/kconfig/kconf_id.c                |   1 -
 scripts/kconfig/lkc.h                     |   9 +-
 scripts/kconfig/lkc_proto.h               |   7 +-
 scripts/kconfig/menu.c                    |   3 -
 scripts/kconfig/symbol.c                  | 109 ---------------
 scripts/kconfig/util.c                    |  96 ++++++++++---
 scripts/kconfig/zconf.l                   |  51 ++++++-
 scripts/kconfig/zconf.y                   |  35 ++---
 35 files changed, 608 insertions(+), 595 deletions(-)
 create mode 100644 scripts/kconfig/env.c
 create mode 100644 scripts/kconfig/function.c

-- 
2.7.4

WARNING: multiple messages have this Message-ID (diff)
From: yamada.masahiro@socionext.com (Masahiro Yamada)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v2 00/21] kconfig: move compiler capability tests to Kconfig
Date: Tue, 27 Mar 2018 14:29:14 +0900	[thread overview]
Message-ID: <1522128575-5326-1-git-send-email-yamada.masahiro@socionext.com> (raw)


Here is v2 to start to move compiler capability tests to Kconfig.

V1:
https://lkml.org/lkml/2018/2/16/610

I brushed up the implementation even more.

Major changes for v2:
[1] Environments and functions are expanded in the lexer (zconf.l)
    The parser (zconf.y) receives expanded tokens.  This simplifies
    the implementation.

[2] Implement only one built-in function 'shell'.  This returns
    stdout from the command.  We need something to return 'y' or 'n'.
    This is now implemented as a macro 'success'.

[3] Macros (user-defined function) are defined by 'macro' keyword
    instead of string type symbol.

    ex1) macro success $(shell ($(1) && echo y) || echo n)
    ex2) macro cc-option $(success $CC -Werror $(1) -c -x c /dev/null -o /dev/null)

My plan for v3
--------------

The MW is approaching, but I'd like to make it more lovely if
I have some time.

While I was writing these patches, I noticed a kind of similarity
between Makefile and Kconfig.

Makefile can define variables and functions to do text processing
during the parse phase.  After parsing, it builds up dependency
graph, and moves on to the execution phase.  Then, it generates
objects as needed by checking time-stamps.

[Makefile]

  OBJ := foo.o
  SRC := foo.c
  CC := gcc

  $(OBJ): $(SRC)
            $(CC) -c -o $(OBJ) $(SRC)

[Makefile after text processing]

  foo.o: foo.c
          gcc -c -o foo.o foo.c

Now, we are adding tools for text processing to Kconfig.  Functions
are statically expanded by the lexer.  After all source files are
parsed, Kconfig moves on to the evaluation phase.  Then, users can
tweak symbol values from menus.

So, we should be able to describe Kconfig like follows:

[Kconfig]

   MY_SYMBOL := CC_STACKPROTECTOR
   MY_PROMPT := "Stackprotector"
   success = $(shell ($(1) && echo y) || echo n)
   cc-option = $(success $CC -Werror $(1) -c -x c /dev/null -o /dev/null)

   config $(MY_SYMBOL)
           bool $(MY_PROMPT)
           depends on $(cc-option -fstack-protector)

[Kconfig after text processing]

   config CC_STACKPROTECTOR
           bool "Stackptector"
           depends on y

So, I think it is better to use '=' assignment for defining functions.
I will remove the 'macro' keyword.
Also, support variables.  A variable is a function with no argument.
So, it will be easy to implement it as a sub-set of function feature.
It is better to support two flavors of assignments, '=' and ':=' as well.

Masahiro Yamada (21):
  kbuild: remove kbuild cache
  kbuild: remove CONFIG_CROSS_COMPILE support
  kconfig: move and rename sym_expand_string_value()
  kconfig: reference environments directly and remove 'option env='
    syntax
  kconfig: remove string expansion in file_lookup()
  kconfig: remove string expansion for mainmenu after yyparse()
  kconfig: add function support and implement 'shell' function
  kconfig: replace $UNAME_RELEASE with function call
  kconfig: add 'macro' keyword to support user-defined function
  kconfig: add 'success' and 'cc-option' macros
  stack-protector: test compiler capability in Kconfig and drop AUTO
    mode
  kconfig: show compiler version text in the top comment
  kconfig: add CC_IS_GCC and GCC_VERSION
  kconfig: add CC_IS_CLANG and CLANG_VERSION
  gcov: remove CONFIG_GCOV_FORMAT_AUTODETECT
  kcov: imply GCC_PLUGINS and GCC_PLUGIN_SANCOV instead of select'ing
    them
  gcc-plugins: always build plugins with C++
  gcc-plugins: move GCC version check for PowerPC to Kconfig
  gcc-plugins: test GCC plugin support in Kconfig
  gcc-plugins: enable GCC_PLUGINS for COMPILE_TEST
  arm64: move GCC version check for ARCH_SUPPORTS_INT128 to Kconfig

 Documentation/kbuild/kconfig-language.txt |   8 --
 Kconfig                                   |   4 +-
 Makefile                                  | 103 ++------------
 arch/Kconfig                              |  37 ++---
 arch/arm64/Kconfig                        |   1 +
 arch/arm64/Makefile                       |   2 -
 arch/powerpc/Kconfig                      |   2 +-
 arch/sh/Kconfig                           |   4 +-
 arch/sparc/Kconfig                        |   4 +-
 arch/tile/Kconfig                         |   2 +-
 arch/um/Kconfig.common                    |   4 -
 arch/x86/Kconfig                          |  12 +-
 arch/x86/um/Kconfig                       |   4 +-
 init/Kconfig                              |  44 +++---
 kernel/gcov/Kconfig                       |  17 +--
 kernel/gcov/Makefile                      |   2 -
 lib/Kconfig.debug                         |   7 +-
 scripts/Kbuild.include                    | 101 ++------------
 scripts/Makefile.gcc-plugins              |  95 ++++---------
 scripts/clang-version.sh                  |  24 ++--
 scripts/gcc-plugin.sh                     |  37 +----
 scripts/gcc-plugins/Makefile              |  15 +-
 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/env.c                     |  95 +++++++++++++
 scripts/kconfig/function.c                | 225 ++++++++++++++++++++++++++++++
 scripts/kconfig/kconf_id.c                |   1 -
 scripts/kconfig/lkc.h                     |   9 +-
 scripts/kconfig/lkc_proto.h               |   7 +-
 scripts/kconfig/menu.c                    |   3 -
 scripts/kconfig/symbol.c                  | 109 ---------------
 scripts/kconfig/util.c                    |  96 ++++++++++---
 scripts/kconfig/zconf.l                   |  51 ++++++-
 scripts/kconfig/zconf.y                   |  35 ++---
 35 files changed, 608 insertions(+), 595 deletions(-)
 create mode 100644 scripts/kconfig/env.c
 create mode 100644 scripts/kconfig/function.c

-- 
2.7.4

             reply	other threads:[~2018-03-27  5:29 UTC|newest]

Thread overview: 78+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-03-27  5:29 Masahiro Yamada [this message]
2018-03-27  5:29 ` [PATCH v2 00/21] kconfig: move compiler capability tests to Kconfig Masahiro Yamada
2018-03-27  5:29 ` [PATCH v2 01/21] kbuild: remove kbuild cache Masahiro Yamada
2018-03-28  3:26   ` Kees Cook
2018-03-27  5:29 ` [PATCH v2 02/21] kbuild: remove CONFIG_CROSS_COMPILE support Masahiro Yamada
2018-03-28  3:28   ` Kees Cook
2018-03-27  5:29 ` [PATCH v2 03/21] kconfig: move and rename sym_expand_string_value() Masahiro Yamada
2018-03-28  3:29   ` Kees Cook
2018-03-27  5:29 ` [PATCH v2 04/21] kconfig: reference environments directly and remove 'option env=' syntax Masahiro Yamada
2018-03-28  3:33   ` Kees Cook
2018-03-29  2:19   ` Ulf Magnusson
2018-03-29  2:56     ` Ulf Magnusson
2018-03-29 17:38       ` Ulf Magnusson
2018-03-30  5:30     ` Masahiro Yamada
2018-04-01  2:27   ` Ulf Magnusson
2018-04-01  2:40     ` Ulf Magnusson
2018-04-13  6:02     ` Masahiro Yamada
2018-03-27  5:29 ` [PATCH v2 05/21] kconfig: remove string expansion in file_lookup() Masahiro Yamada
2018-03-28  3:34   ` Kees Cook
2018-04-01  2:52   ` Ulf Magnusson
2018-03-27  5:29 ` [PATCH v2 06/21] kconfig: remove string expansion for mainmenu after yyparse() Masahiro Yamada
2018-03-28  3:35   ` Kees Cook
2018-04-01  2:59   ` Ulf Magnusson
2018-03-27  5:29 ` [PATCH v2 07/21] kconfig: add function support and implement 'shell' function Masahiro Yamada
2018-03-28  3:41   ` Kees Cook
2018-04-13  5:32     ` Masahiro Yamada
2018-03-29  2:42   ` Ulf Magnusson
2018-04-01  4:19   ` Ulf Magnusson
2018-04-13  5:37     ` Masahiro Yamada
2018-03-27  5:29 ` [PATCH v2 08/21] kconfig: replace $UNAME_RELEASE with function call Masahiro Yamada
2018-03-28  3:42   ` Kees Cook
2018-04-01  4:38   ` Ulf Magnusson
2018-03-27  5:29 ` [PATCH v2 09/21] kconfig: add 'macro' keyword to support user-defined function Masahiro Yamada
2018-03-28  3:45   ` Kees Cook
2018-04-01  6:05   ` Ulf Magnusson
2018-04-01  6:49     ` Ulf Magnusson
2018-04-13  5:44     ` Masahiro Yamada
2018-03-27  5:29 ` [PATCH v2 10/21] kconfig: add 'success' and 'cc-option' macros Masahiro Yamada
2018-03-28  3:46   ` Kees Cook
2018-04-01  6:28   ` Ulf Magnusson
2018-03-27  5:29 ` [PATCH v2 11/21] stack-protector: test compiler capability in Kconfig and drop AUTO mode Masahiro Yamada
2018-03-28 11:18   ` Kees Cook
2018-04-09  8:54     ` Masahiro Yamada
2018-04-09 15:04       ` Kees Cook
2018-04-10  3:15         ` Masahiro Yamada
2018-03-27  5:29 ` [PATCH v2 12/21] kconfig: show compiler version text in the top comment Masahiro Yamada
2018-03-28  3:26   ` Kees Cook
2018-03-27  5:29 ` [PATCH v2 13/21] kconfig: add CC_IS_GCC and GCC_VERSION Masahiro Yamada
2018-03-28 11:19   ` Kees Cook
2018-03-27  5:29 ` [PATCH v2 14/21] kconfig: add CC_IS_CLANG and CLANG_VERSION Masahiro Yamada
2018-03-28 11:22   ` Kees Cook
2018-03-28 11:52     ` Masahiro Yamada
2018-03-27  5:29 ` [PATCH v2 15/21] gcov: remove CONFIG_GCOV_FORMAT_AUTODETECT Masahiro Yamada
2018-03-27  9:12   ` Peter Oberparleiter
2018-03-28 11:24   ` Kees Cook
2018-03-27  5:29 ` [PATCH v2 16/21] kcov: imply GCC_PLUGINS and GCC_PLUGIN_SANCOV instead of select'ing them Masahiro Yamada
2018-03-28 11:25   ` Kees Cook
2018-03-28 11:53   ` Kees Cook
2018-03-27  5:29 ` [PATCH v2 17/21] gcc-plugins: always build plugins with C++ Masahiro Yamada
2018-03-28 11:29   ` Kees Cook
2018-03-27  5:29 ` [PATCH v2 18/21] gcc-plugins: move GCC version check for PowerPC to Kconfig Masahiro Yamada
2018-03-28 11:30   ` Kees Cook
2018-03-27  5:29 ` [PATCH v2 19/21] gcc-plugins: test GCC plugin support in Kconfig Masahiro Yamada
2018-03-28 11:44   ` Kees Cook
2018-04-11 15:55     ` Masahiro Yamada
2018-04-11 16:09       ` Kees Cook
2018-03-27  5:29 ` [PATCH v2 20/21] gcc-plugins: enable GCC_PLUGINS for COMPILE_TEST Masahiro Yamada
2018-03-28 11:47   ` Kees Cook
2018-04-10  6:15     ` Masahiro Yamada
2018-04-10  7:00       ` Kees Cook
2018-03-27  5:29 ` [PATCH v2 21/21] arm64: move GCC version check for ARCH_SUPPORTS_INT128 to Kconfig Masahiro Yamada
2018-03-27  5:29   ` Masahiro Yamada
2018-03-27 17:28   ` Will Deacon
2018-03-27 17:28     ` Will Deacon
2018-03-28 11:55   ` Kees Cook
2018-03-28 11:55     ` Kees Cook
2018-03-27 16:39 ` [PATCH v2 00/21] kconfig: move compiler capability tests " Masahiro Yamada
2018-03-27 16:39   ` Masahiro Yamada

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1522128575-5326-1-git-send-email-yamada.masahiro@socionext.com \
    --to=yamada.masahiro@socionext.com \
    --cc=arnd@arndb.de \
    --cc=catalin.marinas@arm.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=keescook@chromium.org \
    --cc=kernel-hardening@lists.openwall.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kbuild@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mcgrof@kernel.org \
    --cc=mingo@redhat.com \
    --cc=nico@linaro.org \
    --cc=oberpar@linux.vnet.ibm.com \
    --cc=rdunlap@infradead.org \
    --cc=re.emese@gmail.com \
    --cc=sam@ravnborg.org \
    --cc=tglx@linutronix.de \
    --cc=torvalds@linux-foundation.org \
    --cc=ulfalizer@gmail.com \
    --cc=will.deacon@arm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.