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 |
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
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?
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
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
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 --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