All of lore.kernel.org
 help / color / mirror / Atom feed
From: Masahiro Yamada <yamada.masahiro@socionext.com>
To: Linux Kbuild mailing list <linux-kbuild@vger.kernel.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>,
	Sam Ravnborg <sam@ravnborg.org>,
	Ulf Magnusson <ulfalizer@gmail.com>,
	"Luis R . Rodriguez" <mcgrof@kernel.org>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	Kees Cook <keescook@chromium.org>,
	Emese Revfy <re.emese@gmail.com>, X86 ML <x86@kernel.org>,
	Nicholas Piggin <npiggin@gmail.com>
Subject: Re: [PATCH v4 00/31] kconfig: move compiler capability tests to Kconfig
Date: Tue, 22 May 2018 14:37:57 +0900	[thread overview]
Message-ID: <CAK7LNATQNboP7=31eJWSndNdwJH6+u62PoCCdMN3jAjgRQnaMA@mail.gmail.com> (raw)
In-Reply-To: <CAK7LNARZaQK6xojz7GHEb1+-aHckJnR=tA=HJXiQaJ3AwypM-g@mail.gmail.com>

Hi reviewers,


2018-05-17 23:22 GMT+09:00 Masahiro Yamada <yamada.masahiro@socionext.com>:
> 2018-05-17 16:51 GMT+09:00 Nicholas Piggin <npiggin@gmail.com>:
>> On Thu, 17 May 2018 15:16:39 +0900
>> Masahiro Yamada <yamada.masahiro@socionext.com> wrote:
>>
>>> [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.  By moving the
>>> compiler capability tests to Kconfig, Kconfig entries will be visible
>>> only when they are available.
>>>
>>> [Major Changes in V4]
>>
>> Do you have a git tree for v4? I can test it with the powerpc patches.
>>
>> The new scripting capability in kconfig has allowed us to already
>> improve the config process on powerpc:
>>
>> https://marc.info/?l=linuxppc-embedded&m=152648110727868&w=2
>>
>> I'm sure there's more clever things we can do with it but I haven't
>> had time to think about it yet. One thing that comes to mind is that
>> It might be nice to show the option as disabled, then the user could
>> upgrade their compiler to get the options they want.
>>
>> Anyway v3 worked fine for me, the documentation is really nice, I
>> could implement the above patch without any problem despite being a
>> kbuild dummy. Thanks for the series, ack from me.
>
>
> For easier review and test,
> I pushed v4 to the following branch:
>
>
> git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild.git
> kconfig-shell-v4
>



Planned change for v5
---------------------

I am thinking of more simplification for v5.
This is my thought.


V4 supported the _lazy_ expansion and 'if' function.


If you have ever looked into GNU Make source code,
you may know some functions lazily expand arguments.

https://git.savannah.gnu.org/cgit/make.git/tree/src/function.c#n2339


"foreach", "if", "or", "and" are specified with "EXP? = 0".

Those 4 functions expand arguments as-needed.

For example,

$(if $(cond),$(yes-case),$(no-case))


The 'if' function receive arguments before expansion,
then expands $(cond) first.

$(yes-case) is expanded only when $(cond)
turns out to be a non-empty string.
In this case, $(no-case) is not evaluated at all.


$(error msg), if it is evaluated,
immediately terminates Makefile parsing



That's why $(error ) in Makefile are generally used
in the either of the following forms:

ifeq ...
  $(error blah blah)
endif

  OR

$(if $(cond),$(error blah blah))





This does not work in user-defined functions.

$(call my-func,$(cond),$(error blah blah))


This always terminates parsing regardless of $(cond).

Because the 'call' function is specified with "EXP? = 1",
arguments are expanded (i.e. evaluated)
before they are passed to the 'call' function.


Let's say, you implemented your helper macros based on the
'if' built-in function, like follows:

# return $(2) or $(3), depending on the gcc version.
gcc-ifversion = $(if $(shell test $(gcc-version) -ge $(1) && echo y),$(2),$(3))


In this case, both $(2) and $(3) are evaluated
before the condition part is checked.
So, we end up with unneeded calculation
where we know $(2) and $(3) are exclusively used.


We can exploit the laziness
only when we use the 'if' function in raw form.
This use cases are limited.

We use helper macros anyway,
and the advantage of the lazy expansion disappear
in user-defined functions.


After consideration, I am reluctant to implement the lazy expansion
(at least until we find it is necessary).

To keep the source code simple,
I do not want to implement what we may or may not need.
At this moment, I am not so sure whether it is useful.


So, here is a planned change in v5:

Kconfig expands arguments before passing them to a function.

This means,
$(error blah blah) would never be useful.


I will remove "error" and "warning" built-in functions.

Instead, I will add "error-on" and "warning-on" built-in functions.

 -  $(error-on,<cond>,<message>)

   If <cond> contains any character,
   it terminates file parsing, showing <message> to stderr.

 -  $(warning-on,<cond>,<message>)

   If <cond> contains any character,
   show <message> to stderr.


I will remove 'if' function too.
If we give up its laziness, we can implement it as
a user-defined function.




-- 
Best Regards
Masahiro Yamada

      reply	other threads:[~2018-05-22  5:38 UTC|newest]

Thread overview: 69+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-05-17  6:16 [PATCH v4 00/31] kconfig: move compiler capability tests to Kconfig Masahiro Yamada
2018-05-17  6:16 ` [PATCH v4 01/31] kbuild: remove kbuild cache Masahiro Yamada
2018-05-17  6:16 ` [PATCH v4 02/31] kbuild: remove CONFIG_CROSS_COMPILE support Masahiro Yamada
2018-05-17  6:16 ` [PATCH v4 03/31] kconfig: reference environment variables directly and remove 'option env=' Masahiro Yamada
2018-05-20 15:46   ` Ulf Magnusson
2018-05-21  4:43     ` Masahiro Yamada
2018-05-21 11:06       ` Ulf Magnusson
2018-05-21 11:11         ` Ulf Magnusson
2018-05-24  4:45         ` Masahiro Yamada
2018-05-26 20:47           ` Ulf Magnusson
2018-05-17  6:16 ` [PATCH v4 04/31] kconfig: remove string expansion in file_lookup() Masahiro Yamada
2018-05-17  6:16 ` [PATCH v4 05/31] kconfig: remove string expansion for mainmenu after yyparse() Masahiro Yamada
2018-05-20 14:39   ` Sam Ravnborg
2018-05-21  5:38     ` Masahiro Yamada
2018-05-17  6:16 ` [PATCH v4 06/31] kconfig: remove sym_expand_string_value() Masahiro Yamada
2018-05-17  6:28   ` Kees Cook
2018-05-17  6:16 ` [PATCH v4 07/31] kconfig: add built-in function support Masahiro Yamada
2018-05-20 14:50   ` Sam Ravnborg
2018-05-21  5:18     ` Masahiro Yamada
2018-05-21  6:16       ` Sam Ravnborg
2018-05-21  6:41         ` Masahiro Yamada
2018-05-21  7:14           ` Sam Ravnborg
2018-05-21 14:23     ` Ulf Magnusson
2018-05-21 14:32       ` Ulf Magnusson
2018-05-21 15:10         ` Ulf Magnusson
2018-05-22  3:11           ` Masahiro Yamada
2018-05-22  4:50             ` Ulf Magnusson
2018-05-22  4:58               ` Ulf Magnusson
2018-05-17  6:16 ` [PATCH v4 08/31] kconfig: add 'shell' built-in function Masahiro Yamada
2018-05-17  6:16 ` [PATCH v4 09/31] kconfig: replace $(UNAME_RELEASE) with function call Masahiro Yamada
2018-05-17  6:16 ` [PATCH v4 10/31] kconfig: begin PARAM state only when seeing a command keyword Masahiro Yamada
2018-05-17  6:16 ` [PATCH v4 11/31] kconfig: support user-defined function and recursively expanded variable Masahiro Yamada
2018-05-17  6:16 ` [PATCH v4 12/31] kconfig: support simply " Masahiro Yamada
2018-05-17  6:16 ` [PATCH v4 13/31] kconfig: support append assignment operator Masahiro Yamada
2018-05-17  6:16 ` [PATCH v4 14/31] kconfig: expand lefthand side of assignment statement Masahiro Yamada
2018-05-17  6:16 ` [PATCH v4 15/31] kconfig: add 'info', 'warning', and 'error' built-in functions Masahiro Yamada
2018-05-17  6:38   ` Kees Cook
2018-05-17  6:16 ` [PATCH v4 16/31] kconfig: add 'if' built-in function Masahiro Yamada
2018-05-17  6:16 ` [PATCH v4 17/31] kconfig: add 'filename' and 'lineno' built-in variables Masahiro Yamada
2018-05-17  6:39   ` Kees Cook
2018-05-17  6:16 ` [PATCH v4 18/31] kconfig: error out if a recursive variable references itself Masahiro Yamada
2018-05-17  6:16 ` [PATCH v4 19/31] Documentation: kconfig: document a new Kconfig macro language Masahiro Yamada
2018-05-17  6:38   ` Kees Cook
2018-05-17  6:38     ` Kees Cook
2018-05-17  6:55     ` Masahiro Yamada
2018-05-17  6:55       ` Masahiro Yamada
2018-05-26  2:14   ` Randy Dunlap
2018-05-17  6:16 ` [PATCH v4 20/31] kconfig: test: add Kconfig macro language tests Masahiro Yamada
2018-05-17  6:41   ` Kees Cook
2018-05-17  6:48     ` Masahiro Yamada
2018-05-17  6:17 ` [PATCH v4 21/31] kconfig: show compiler version text in the top comment Masahiro Yamada
2018-05-17  6:17 ` [PATCH v4 22/31] kconfig: add basic helper macros to scripts/Kconfig.include Masahiro Yamada
2018-05-17  6:17 ` [PATCH v4 23/31] stack-protector: test compiler capability in Kconfig and drop AUTO mode Masahiro Yamada
2018-05-17  6:26   ` Kees Cook
2018-05-17  6:17 ` [PATCH v4 24/31] kconfig: add CC_IS_GCC and GCC_VERSION Masahiro Yamada
2018-05-17  6:17 ` [PATCH v4 25/31] kconfig: add CC_IS_CLANG and CLANG_VERSION Masahiro Yamada
2018-05-17  6:17 ` [PATCH v4 26/31] gcov: remove CONFIG_GCOV_FORMAT_AUTODETECT Masahiro Yamada
2018-05-17  6:17 ` [PATCH v4 27/31] kcov: test compiler capability in Kconfig and correct dependency Masahiro Yamada
2018-05-17  6:33   ` Kees Cook
2018-05-17  6:17 ` [PATCH v4 28/31] gcc-plugins: move GCC version check for PowerPC to Kconfig Masahiro Yamada
2018-05-17  6:29   ` Kees Cook
2018-05-17  6:17 ` [PATCH v4 29/31] gcc-plugins: test plugin support in Kconfig and clean up Makefile Masahiro Yamada
2018-05-17  6:32   ` Kees Cook
2018-05-17  6:17 ` [PATCH v4 30/31] gcc-plugins: allow to enable GCC_PLUGINS for COMPILE_TEST Masahiro Yamada
2018-05-17  6:27   ` Kees Cook
2018-05-17  6:17 ` [PATCH v4 31/31] arm64: move GCC version check for ARCH_SUPPORTS_INT128 to Kconfig Masahiro Yamada
2018-05-17  7:51 ` [PATCH v4 00/31] kconfig: move compiler capability tests " Nicholas Piggin
2018-05-17 14:22   ` Masahiro Yamada
2018-05-22  5:37     ` Masahiro Yamada [this message]

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='CAK7LNATQNboP7=31eJWSndNdwJH6+u62PoCCdMN3jAjgRQnaMA@mail.gmail.com' \
    --to=yamada.masahiro@socionext.com \
    --cc=keescook@chromium.org \
    --cc=linux-kbuild@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mcgrof@kernel.org \
    --cc=npiggin@gmail.com \
    --cc=re.emese@gmail.com \
    --cc=sam@ravnborg.org \
    --cc=torvalds@linux-foundation.org \
    --cc=ulfalizer@gmail.com \
    --cc=x86@kernel.org \
    /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.