[20/30] kconfig: add basic helper macros to scripts/Kconfig.include

Message ID 1523595999-27433-21-git-send-email-yamada.masahiro@socionext.com
State New
Headers show
Series
  • kconfig: move compiler capability tests to Kconfig
Related show

Commit Message

Masahiro Yamada April 13, 2018, 5:06 a.m.
Kconfig got text processing tools like we see in Make.  Add Kconfig
helper macros to scripts/Kconfig.include like we collect Makefile
macros in scripts/Kbuild.include.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>

Reviewed-by: Kees Cook <keescook@chromium.org>

Reviewed-by: Ulf Magnusson <ulfalizer@gmail.com>

---

Changes in v3:
  - Move helpers to scripts/Kconfig.include

Changes in v2: None

 Kconfig                 |  2 ++
 MAINTAINERS             |  1 +
 scripts/Kconfig.include | 17 +++++++++++++++++
 3 files changed, 20 insertions(+)
 create mode 100644 scripts/Kconfig.include

-- 
2.7.4

Comments

Ulf Magnusson April 15, 2018, 7:41 a.m. | #1
On Fri, Apr 13, 2018 at 7:06 AM, Masahiro Yamada
<yamada.masahiro@socionext.com> wrote:
> Kconfig got text processing tools like we see in Make.  Add Kconfig

> helper macros to scripts/Kconfig.include like we collect Makefile

> macros in scripts/Kbuild.include.

>

> Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>

> Reviewed-by: Kees Cook <keescook@chromium.org>

> Reviewed-by: Ulf Magnusson <ulfalizer@gmail.com>

> ---

>

> Changes in v3:

>   - Move helpers to scripts/Kconfig.include

>

> Changes in v2: None

>

>  Kconfig                 |  2 ++

>  MAINTAINERS             |  1 +

>  scripts/Kconfig.include | 17 +++++++++++++++++

>  3 files changed, 20 insertions(+)

>  create mode 100644 scripts/Kconfig.include

>

> diff --git a/Kconfig b/Kconfig

> index 5b55d87..a90d9f9 100644

> --- a/Kconfig

> +++ b/Kconfig

> @@ -7,4 +7,6 @@ mainmenu "Linux/$(ARCH) $(KERNELVERSION) Kernel Configuration"

>

>  comment "Compiler: $(CC_VERSION_TEXT)"

>

> +source "scripts/Kconfig.include"

> +

>  source "arch/$(SRCARCH)/Kconfig"

> diff --git a/MAINTAINERS b/MAINTAINERS

> index b9dab38..d962f4a 100644

> --- a/MAINTAINERS

> +++ b/MAINTAINERS

> @@ -7624,6 +7624,7 @@ L:        linux-kbuild@vger.kernel.org

>  S:     Maintained

>  F:     Documentation/kbuild/kconfig*

>  F:     scripts/kconfig/

> +F:     scripts/Kconfig.include

>

>  KDUMP

>  M:     Dave Young <dyoung@redhat.com>

> diff --git a/scripts/Kconfig.include b/scripts/Kconfig.include

> new file mode 100644

> index 0000000..cac7a81

> --- /dev/null

> +++ b/scripts/Kconfig.include

> @@ -0,0 +1,17 @@

> +# Kconfig helper macros

> +

> +# Convenient variables

> +comma   := ,

> +quote   := "

> +squote  := '

> +empty   :=

> +space   := $(empty) $(empty)

> +

> +# y if the command exits with 0, n otherwise

> +success = $(shell ($(1)) >/dev/null 2>&1 && echo y || echo n)


'{ $(1); }' might work here, to avoid the extra subshell.

Shaves 20-30% off the runtime here in a silly
system("(true) >/dev/null 2>&1 && echo y || echo n") vs.
system("{ true; } >/dev/null 2>&1 && echo y || echo n")
comparison.

> +

> +# y if the given compiler flag is supported, n otherwise

> +cc-option = $(success $(CC) -Werror $(1) -c -x c /dev/null -o /dev/null)

> +

> +# y if the given linker flag is supported, n otherwise

> +ld-option = $(success $(LD) -v $(1))

> --

> 2.7.4

>


Cheers,
Ulf
Masahiro Yamada April 15, 2018, 3:02 p.m. | #2
2018-04-15 16:41 GMT+09:00 Ulf Magnusson <ulfalizer@gmail.com>:
> On Fri, Apr 13, 2018 at 7:06 AM, Masahiro Yamada

> <yamada.masahiro@socionext.com> wrote:

>> Kconfig got text processing tools like we see in Make.  Add Kconfig

>> helper macros to scripts/Kconfig.include like we collect Makefile

>> macros in scripts/Kbuild.include.

>>

>> Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>

>> Reviewed-by: Kees Cook <keescook@chromium.org>

>> Reviewed-by: Ulf Magnusson <ulfalizer@gmail.com>

>> ---

>>

>> Changes in v3:

>>   - Move helpers to scripts/Kconfig.include

>>

>> Changes in v2: None

>>

>>  Kconfig                 |  2 ++

>>  MAINTAINERS             |  1 +

>>  scripts/Kconfig.include | 17 +++++++++++++++++

>>  3 files changed, 20 insertions(+)

>>  create mode 100644 scripts/Kconfig.include

>>

>> diff --git a/Kconfig b/Kconfig

>> index 5b55d87..a90d9f9 100644

>> --- a/Kconfig

>> +++ b/Kconfig

>> @@ -7,4 +7,6 @@ mainmenu "Linux/$(ARCH) $(KERNELVERSION) Kernel Configuration"

>>

>>  comment "Compiler: $(CC_VERSION_TEXT)"

>>

>> +source "scripts/Kconfig.include"

>> +

>>  source "arch/$(SRCARCH)/Kconfig"

>> diff --git a/MAINTAINERS b/MAINTAINERS

>> index b9dab38..d962f4a 100644

>> --- a/MAINTAINERS

>> +++ b/MAINTAINERS

>> @@ -7624,6 +7624,7 @@ L:        linux-kbuild@vger.kernel.org

>>  S:     Maintained

>>  F:     Documentation/kbuild/kconfig*

>>  F:     scripts/kconfig/

>> +F:     scripts/Kconfig.include

>>

>>  KDUMP

>>  M:     Dave Young <dyoung@redhat.com>

>> diff --git a/scripts/Kconfig.include b/scripts/Kconfig.include

>> new file mode 100644

>> index 0000000..cac7a81

>> --- /dev/null

>> +++ b/scripts/Kconfig.include

>> @@ -0,0 +1,17 @@

>> +# Kconfig helper macros

>> +

>> +# Convenient variables

>> +comma   := ,

>> +quote   := "

>> +squote  := '

>> +empty   :=

>> +space   := $(empty) $(empty)

>> +

>> +# y if the command exits with 0, n otherwise

>> +success = $(shell ($(1)) >/dev/null 2>&1 && echo y || echo n)

>

> '{ $(1); }' might work here, to avoid the extra subshell.

>

> Shaves 20-30% off the runtime here in a silly

> system("(true) >/dev/null 2>&1 && echo y || echo n") vs.

> system("{ true; } >/dev/null 2>&1 && echo y || echo n")

> comparison.



You are right.   Will do so in the next version.






-- 
Best Regards
Masahiro Yamada

Patch

diff --git a/Kconfig b/Kconfig
index 5b55d87..a90d9f9 100644
--- a/Kconfig
+++ b/Kconfig
@@ -7,4 +7,6 @@  mainmenu "Linux/$(ARCH) $(KERNELVERSION) Kernel Configuration"
 
 comment "Compiler: $(CC_VERSION_TEXT)"
 
+source "scripts/Kconfig.include"
+
 source "arch/$(SRCARCH)/Kconfig"
diff --git a/MAINTAINERS b/MAINTAINERS
index b9dab38..d962f4a 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -7624,6 +7624,7 @@  L:	linux-kbuild@vger.kernel.org
 S:	Maintained
 F:	Documentation/kbuild/kconfig*
 F:	scripts/kconfig/
+F:	scripts/Kconfig.include
 
 KDUMP
 M:	Dave Young <dyoung@redhat.com>
diff --git a/scripts/Kconfig.include b/scripts/Kconfig.include
new file mode 100644
index 0000000..cac7a81
--- /dev/null
+++ b/scripts/Kconfig.include
@@ -0,0 +1,17 @@ 
+# Kconfig helper macros
+
+# Convenient variables
+comma   := ,
+quote   := "
+squote  := '
+empty   :=
+space   := $(empty) $(empty)
+
+# y if the command exits with 0, n otherwise
+success = $(shell ($(1)) >/dev/null 2>&1 && echo y || echo n)
+
+# y if the given compiler flag is supported, n otherwise
+cc-option = $(success $(CC) -Werror $(1) -c -x c /dev/null -o /dev/null)
+
+# y if the given linker flag is supported, n otherwise
+ld-option = $(success $(LD) -v $(1))