diff mbox series

[v5,24/31] kconfig: add CC_IS_GCC and GCC_VERSION

Message ID 1527499328-13213-25-git-send-email-yamada.masahiro@socionext.com
State Accepted
Commit a4353898980cc46b28c03fc401d4d916d82c6f4f
Headers show
Series kconfig: move compiler capability tests to Kconfig | expand

Commit Message

Masahiro Yamada May 28, 2018, 9:22 a.m. UTC
This will be useful to specify the required compiler version,
like this:

config FOO
        bool "Use Foo"
        depends on GCC_VERSION >= 40800
        help
          This feature requires GCC 4.8 or newer.

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

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

---

Changes in v5: None
Changes in v4: None
Changes in v3: None
Changes in v2: None

 init/Kconfig | 8 ++++++++
 1 file changed, 8 insertions(+)

-- 
2.7.4

Comments

Stefan Agner June 4, 2018, 9:49 p.m. UTC | #1
Hi Masahiro,

On 28.05.2018 11:22, Masahiro Yamada wrote:
> This will be useful to specify the required compiler version,

> like this:

> 

> config FOO

>         bool "Use Foo"

>         depends on GCC_VERSION >= 40800

>         help

>           This feature requires GCC 4.8 or newer.

> 


I tried using CC_IS_GCC today while using clang. It seems that it is set
to y despite I am using CC=clang.

.config looks like this after config:

...
CONFIG_CC_IS_GCC=y
CONFIG_GCC_VERSION=40201
CONFIG_CC_IS_CLANG=y
CONFIG_CLANG_VERSION=60000
...


I am using clang 6.0.0 on Arch Linux, which seems to return a version
when using gcc-version.sh:
./scripts/gcc-version.sh clang | sed 's/^0*//'
402

I guess that should not be the case?

--
Stefan

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

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

> ---

> 

> Changes in v5: None

> Changes in v4: None

> Changes in v3: None

> Changes in v2: None

> 

>  init/Kconfig | 8 ++++++++

>  1 file changed, 8 insertions(+)

> 

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

> index f1b0cfb..2e33d93 100644

> --- a/init/Kconfig

> +++ b/init/Kconfig

> @@ -8,6 +8,14 @@ config DEFCONFIG_LIST

>  	default ARCH_DEFCONFIG

>  	default "arch/$(ARCH)/defconfig"

>  

> +config CC_IS_GCC

> +	def_bool $(success,$(CC) --version | grep -q gcc)

> +

> +config GCC_VERSION

> +	int

> +	default $(shell,$(srctree)/scripts/gcc-version.sh -p $(CC) | sed

> 's/^0*//') if CC_IS_GCC

> +	default 0

> +

>  config CONSTRUCTORS

>  	bool

>  	depends on !UML
Masahiro Yamada June 5, 2018, 12:07 a.m. UTC | #2
Hi Stefan

2018-06-05 6:49 GMT+09:00 Stefan Agner <stefan@agner.ch>:
> Hi Masahiro,

>

> On 28.05.2018 11:22, Masahiro Yamada wrote:

>> This will be useful to specify the required compiler version,

>> like this:

>>

>> config FOO

>>         bool "Use Foo"

>>         depends on GCC_VERSION >= 40800

>>         help

>>           This feature requires GCC 4.8 or newer.

>>

>

> I tried using CC_IS_GCC today while using clang. It seems that it is set

> to y despite I am using CC=clang.

>

> .config looks like this after config:

>

> ...

> CONFIG_CC_IS_GCC=y

> CONFIG_GCC_VERSION=40201

> CONFIG_CC_IS_CLANG=y

> CONFIG_CLANG_VERSION=60000

> ...

>

>

> I am using clang 6.0.0 on Arch Linux, which seems to return a version

> when using gcc-version.sh:

> ./scripts/gcc-version.sh clang | sed 's/^0*//'

> 402

>

> I guess that should not be the case?

>



What will 'clang --version' print on your machine?
Stefan Agner June 5, 2018, 5:50 a.m. UTC | #3
On 05.06.2018 02:07, Masahiro Yamada wrote:
> Hi Stefan

> 

> 2018-06-05 6:49 GMT+09:00 Stefan Agner <stefan@agner.ch>:

>> Hi Masahiro,

>>

>> On 28.05.2018 11:22, Masahiro Yamada wrote:

>>> This will be useful to specify the required compiler version,

>>> like this:

>>>

>>> config FOO

>>>         bool "Use Foo"

>>>         depends on GCC_VERSION >= 40800

>>>         help

>>>           This feature requires GCC 4.8 or newer.

>>>

>>

>> I tried using CC_IS_GCC today while using clang. It seems that it is set

>> to y despite I am using CC=clang.

>>

>> .config looks like this after config:

>>

>> ...

>> CONFIG_CC_IS_GCC=y

>> CONFIG_GCC_VERSION=40201

>> CONFIG_CC_IS_CLANG=y

>> CONFIG_CLANG_VERSION=60000

>> ...

>>

>>

>> I am using clang 6.0.0 on Arch Linux, which seems to return a version

>> when using gcc-version.sh:

>> ./scripts/gcc-version.sh clang | sed 's/^0*//'

>> 402

>>

>> I guess that should not be the case?

>>

> 

> 

> What will 'clang --version' print on your machine?


$ clang --version
clang version 6.0.0 (tags/RELEASE_600/final)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir:
/home/ags/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabihf/bin

I use a symlink to clang in my cross compiler toolchain, that is why
InstalledDir points to a GCC toolchain.

--
Stefan
Masahiro Yamada June 5, 2018, 6:27 a.m. UTC | #4
2018-06-05 14:50 GMT+09:00 Stefan Agner <stefan@agner.ch>:
> On 05.06.2018 02:07, Masahiro Yamada wrote:

>> Hi Stefan

>>

>> 2018-06-05 6:49 GMT+09:00 Stefan Agner <stefan@agner.ch>:

>>> Hi Masahiro,

>>>

>>> On 28.05.2018 11:22, Masahiro Yamada wrote:

>>>> This will be useful to specify the required compiler version,

>>>> like this:

>>>>

>>>> config FOO

>>>>         bool "Use Foo"

>>>>         depends on GCC_VERSION >= 40800

>>>>         help

>>>>           This feature requires GCC 4.8 or newer.

>>>>

>>>

>>> I tried using CC_IS_GCC today while using clang. It seems that it is set

>>> to y despite I am using CC=clang.

>>>

>>> .config looks like this after config:

>>>

>>> ...

>>> CONFIG_CC_IS_GCC=y

>>> CONFIG_GCC_VERSION=40201

>>> CONFIG_CC_IS_CLANG=y

>>> CONFIG_CLANG_VERSION=60000

>>> ...

>>>

>>>

>>> I am using clang 6.0.0 on Arch Linux, which seems to return a version

>>> when using gcc-version.sh:

>>> ./scripts/gcc-version.sh clang | sed 's/^0*//'

>>> 402

>>>

>>> I guess that should not be the case?

>>>

>>

>>

>> What will 'clang --version' print on your machine?

>

> $ clang --version

> clang version 6.0.0 (tags/RELEASE_600/final)

> Target: x86_64-pc-linux-gnu

> Thread model: posix

> InstalledDir:

> /home/ags/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabihf/bin

>

> I use a symlink to clang in my cross compiler toolchain, that is why

> InstalledDir points to a GCC toolchain.

>


Ah, I see.


I will fix it up like follows:


diff --git a/init/Kconfig b/init/Kconfig
index e5a0d89..efc43c6 100644
--- a/init/Kconfig
+++ b/init/Kconfig
@@ -9,7 +9,7 @@ config DEFCONFIG_LIST
        default "arch/$(ARCH)/defconfig"

 config CC_IS_GCC
-       def_bool $(success,$(CC) --version | grep -q gcc)
+       def_bool $(success,$(CC) --version | head -n 1 | grep -q gcc)

 config GCC_VERSION
        int
@@ -17,7 +17,7 @@ config GCC_VERSION
        default 0

 config CC_IS_CLANG
-       def_bool $(success,$(CC) --version | grep -q clang)
+       def_bool $(success,$(CC) --version | head -n 1 | grep -q clang)

 config CLANG_VERSION
        int




Best Regards
Masahiro Yamada
Stefan Agner June 5, 2018, 8:37 a.m. UTC | #5
On 05.06.2018 08:27, Masahiro Yamada wrote:
> 2018-06-05 14:50 GMT+09:00 Stefan Agner <stefan@agner.ch>:

>> On 05.06.2018 02:07, Masahiro Yamada wrote:

>>> Hi Stefan

>>>

>>> 2018-06-05 6:49 GMT+09:00 Stefan Agner <stefan@agner.ch>:

>>>> Hi Masahiro,

>>>>

>>>> On 28.05.2018 11:22, Masahiro Yamada wrote:

>>>>> This will be useful to specify the required compiler version,

>>>>> like this:

>>>>>

>>>>> config FOO

>>>>>         bool "Use Foo"

>>>>>         depends on GCC_VERSION >= 40800

>>>>>         help

>>>>>           This feature requires GCC 4.8 or newer.

>>>>>

>>>>

>>>> I tried using CC_IS_GCC today while using clang. It seems that it is set

>>>> to y despite I am using CC=clang.

>>>>

>>>> .config looks like this after config:

>>>>

>>>> ...

>>>> CONFIG_CC_IS_GCC=y

>>>> CONFIG_GCC_VERSION=40201

>>>> CONFIG_CC_IS_CLANG=y

>>>> CONFIG_CLANG_VERSION=60000

>>>> ...

>>>>

>>>>

>>>> I am using clang 6.0.0 on Arch Linux, which seems to return a version

>>>> when using gcc-version.sh:

>>>> ./scripts/gcc-version.sh clang | sed 's/^0*//'

>>>> 402

>>>>

>>>> I guess that should not be the case?

>>>>

>>>

>>>

>>> What will 'clang --version' print on your machine?

>>

>> $ clang --version

>> clang version 6.0.0 (tags/RELEASE_600/final)

>> Target: x86_64-pc-linux-gnu

>> Thread model: posix

>> InstalledDir:

>> /home/ags/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabihf/bin

>>

>> I use a symlink to clang in my cross compiler toolchain, that is why

>> InstalledDir points to a GCC toolchain.

>>

> 

> Ah, I see.

> 

> 

> I will fix it up like follows:

> 

> 

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

> index e5a0d89..efc43c6 100644

> --- a/init/Kconfig

> +++ b/init/Kconfig

> @@ -9,7 +9,7 @@ config DEFCONFIG_LIST

>         default "arch/$(ARCH)/defconfig"

> 

>  config CC_IS_GCC

> -       def_bool $(success,$(CC) --version | grep -q gcc)

> +       def_bool $(success,$(CC) --version | head -n 1 | grep -q gcc)


Yes that works for me:

...
CONFIG_GCC_VERSION=0                                                    
                                                                   
CONFIG_CC_IS_CLANG=y                                                    
                                                                   
CONFIG_CLANG_VERSION=60000
...

--
Stefan

> 

>  config GCC_VERSION

>         int

> @@ -17,7 +17,7 @@ config GCC_VERSION

>         default 0

> 

>  config CC_IS_CLANG

> -       def_bool $(success,$(CC) --version | grep -q clang)

> +       def_bool $(success,$(CC) --version | head -n 1 | grep -q clang)

> 

>  config CLANG_VERSION

>         int

> 

> 

> 

> 

> Best Regards

> Masahiro Yamada
diff mbox series

Patch

diff --git a/init/Kconfig b/init/Kconfig
index f1b0cfb..2e33d93 100644
--- a/init/Kconfig
+++ b/init/Kconfig
@@ -8,6 +8,14 @@  config DEFCONFIG_LIST
 	default ARCH_DEFCONFIG
 	default "arch/$(ARCH)/defconfig"
 
+config CC_IS_GCC
+	def_bool $(success,$(CC) --version | grep -q gcc)
+
+config GCC_VERSION
+	int
+	default $(shell,$(srctree)/scripts/gcc-version.sh -p $(CC) | sed 's/^0*//') if CC_IS_GCC
+	default 0
+
 config CONSTRUCTORS
 	bool
 	depends on !UML