Message ID | 1522128575-5326-15-git-send-email-yamada.masahiro@socionext.com |
---|---|
State | Superseded |
Headers | show |
Series | kconfig: move compiler capability tests to Kconfig | expand |
On Mon, Mar 26, 2018 at 10:29 PM, Masahiro Yamada <yamada.masahiro@socionext.com> wrote: > This will be useful to describe the clang version dependency. > > Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com> One aspect of clang version checking that may be "weird" (and likely won't be meaningful for very long as we're about to raise the minimum gcc version), is that clang claims to be gcc version 4.2 if you look at #defines. This is already handled in compiler.h, but may be weird in Kconfig. Regardless: Reviewed-by: Kees Cook <keescook@chromium.org> -Kees -- Kees Cook Pixel Security
2018-03-28 20:22 GMT+09:00 Kees Cook <keescook@chromium.org>: > On Mon, Mar 26, 2018 at 10:29 PM, Masahiro Yamada > <yamada.masahiro@socionext.com> wrote: >> This will be useful to describe the clang version dependency. >> >> Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com> > > One aspect of clang version checking that may be "weird" (and likely > won't be meaningful for very long as we're about to raise the minimum > gcc version), is that clang claims to be gcc version 4.2 if you look > at #defines. This is already handled in compiler.h, but may be weird > in Kconfig. > CONFIG_CLANG_VERSION gives me real clang version. $ clang --version clang version 7.0.0 (http://llvm.org/git/clang.git f1d1f4c4591e81cfa80034df094b26d7eb4fa92b) (http://llvm.org/git/llvm.git d157ba2f80790d23d717c4ff3f5bee30d98d6a51) Target: x86_64-unknown-linux-gnu Thread model: posix InstalledDir: /home/masahiro/toolchains/clang-latest/bin $ make CC=clang defconfig *** Default configuration is based on 'x86_64_defconfig' # # configuration written to .config # $ grep CLANG_VERSION .config CONFIG_CLANG_VERSION=70000 I am just porting https://patchwork.kernel.org/patch/10085765/ to Kconfig. -- Best Regards Masahiro Yamada
diff --git a/init/Kconfig b/init/Kconfig index 923cab5..5998034 100644 --- a/init/Kconfig +++ b/init/Kconfig @@ -22,6 +22,13 @@ config GCC_VERSION default $(shell $srctree/scripts/gcc-version.sh -p $CC | sed 's/^0*//') if CC_IS_GCC default 0 +config CC_IS_CLANG + def_bool $(success $CC --version | grep -q clang) + +config CLANG_VERSION + int + default $(shell $srctree/scripts/clang-version.sh $CC) + config CONSTRUCTORS bool depends on !UML diff --git a/scripts/clang-version.sh b/scripts/clang-version.sh index 9780efa..d8002d2 100755 --- a/scripts/clang-version.sh +++ b/scripts/clang-version.sh @@ -10,24 +10,22 @@ # clang-5.0.1 etc. # -if [ "$1" = "-p" ] ; then - with_patchlevel=1; - shift; -fi - compiler="$*" if [ ${#compiler} -eq 0 ]; then - echo "Error: No compiler specified." - printf "Usage:\n\t$0 <clang-command>\n" + echo "Error: No compiler specified." >&2 + printf "Usage:\n\t$0 <clang-command>\n" >&2 + echo 0 + exit 1 +fi + +if !( $compiler --version | grep -q clang) ; then + echo "This is not clang." >&2 + echo 0 exit 1 fi MAJOR=$(echo __clang_major__ | $compiler -E -x c - | tail -n 1) MINOR=$(echo __clang_minor__ | $compiler -E -x c - | tail -n 1) -if [ "x$with_patchlevel" != "x" ] ; then - PATCHLEVEL=$(echo __clang_patchlevel__ | $compiler -E -x c - | tail -n 1) - printf "%02d%02d%02d\\n" $MAJOR $MINOR $PATCHLEVEL -else - printf "%02d%02d\\n" $MAJOR $MINOR -fi +PATCHLEVEL=$(echo __clang_patchlevel__ | $compiler -E -x c - | tail -n 1) +printf "%d%02d%02d\\n" $MAJOR $MINOR $PATCHLEVEL
This will be useful to describe the clang version dependency. Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com> --- Changes in v2: None init/Kconfig | 7 +++++++ scripts/clang-version.sh | 24 +++++++++++------------- 2 files changed, 18 insertions(+), 13 deletions(-) -- 2.7.4