From patchwork Wed Mar 3 18:33:30 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Masahiro Yamada X-Patchwork-Id: 12114255 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-22.0 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI, MENTIONS_GIT_HOSTING,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 35286C433E6 for ; Wed, 3 Mar 2021 21:21:16 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id E20C4600EF for ; Wed, 3 Mar 2021 21:21:15 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1387623AbhCCTcK (ORCPT ); Wed, 3 Mar 2021 14:32:10 -0500 Received: from conuserg-09.nifty.com ([210.131.2.76]:63536 "EHLO conuserg-09.nifty.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1580824AbhCCSfQ (ORCPT ); Wed, 3 Mar 2021 13:35:16 -0500 Received: from localhost.localdomain (122-103-140-163.kyoto.fdn.vectant.ne.jp [122.103.140.163]) (authenticated) by conuserg-09.nifty.com with ESMTP id 123IXcJc023524; Thu, 4 Mar 2021 03:33:38 +0900 DKIM-Filter: OpenDKIM Filter v2.10.3 conuserg-09.nifty.com 123IXcJc023524 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nifty.com; s=dec2015msa; t=1614796418; bh=Ty6hgSJlEGo2TmgYh5EvVwMWKVKlHFxHVBQFp4A9PZc=; h=From:To:Cc:Subject:Date:From; b=sFQoLeT+Cy/QbM2/MnqVN+TuQNPtcVWeyhcf3Xy1BB/D2p/80WkwsuY9z0mhfMgHB OXmxQ/DkDEwMTZfIoNNBgy8mGaFyzbJXCeXH5b9WYVnrBP0VmRdZhfgGPerfwVP+32 HIITkDOCAQognggVWcDp36CThUauLrtGhfI2zhkYRCXCxZGu4lBoAQq0VR5ecBUl7q S6ATFAQYnxWEFG+FkehkDedRPqP7jBvwfHCmMkQl2mDpeMM0OGjmMPAunV9KjqKqBI A1yyiE2L06Zu6OFAmGtzsCUtb8hPmaqmjl1BjDrErKQDyHFVfVgRS3B8VLRczYCzpj QZM+EHOY6cgOQ== X-Nifty-SrcIP: [122.103.140.163] From: Masahiro Yamada To: linux-kbuild@vger.kernel.org Cc: clang-built-linux@googlegroups.com, Nick Desaulniers , Masahiro Yamada , Nathan Chancellor , linux-kernel@vger.kernel.org Subject: [PATCH 1/4] kbuild: remove LLVM=1 test from HAS_LTO_CLANG Date: Thu, 4 Mar 2021 03:33:30 +0900 Message-Id: <20210303183333.46543-1-masahiroy@kernel.org> X-Mailer: git-send-email 2.27.0 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-kbuild@vger.kernel.org This guarding is wrong. As Documentation/kbuild/llvm.rst notes, LLVM=1 switches the default of tools, but you can still override CC, LD, etc. individually. BTW, LLVM is not 1/0 flag. If LLVM is not passed in, it is empty. Non-zero return code is all treated as failure anyway. So, $(success,test $(LLVM) -eq 1) and $(success,test "$(LLVM)" = 1) works equivalently in the sense that both are expanded to 'n' if LLVM is not given. The difference is that the former internally fails due to syntax error. $ test ${LLVM} -eq 1 bash: test: -eq: unary operator expected $ echo $? 2 $ test "${LLVM}" -eq 1 bash: test: : integer expression expected $ echo $? 2 $ test "${LLVM}" = 1 echo $? 1 $ test -n "${LLVM}" $ echo $? 1 Signed-off-by: Masahiro Yamada Reviewed-by: Nathan Chancellor --- arch/Kconfig | 1 - 1 file changed, 1 deletion(-) diff --git a/arch/Kconfig b/arch/Kconfig index 2bb30673d8e6..2af10ebe5ed0 100644 --- a/arch/Kconfig +++ b/arch/Kconfig @@ -632,7 +632,6 @@ config HAS_LTO_CLANG def_bool y # Clang >= 11: https://github.com/ClangBuiltLinux/linux/issues/510 depends on CC_IS_CLANG && CLANG_VERSION >= 110000 && LD_IS_LLD - depends on $(success,test $(LLVM) -eq 1) depends on $(success,test $(LLVM_IAS) -eq 1) depends on $(success,$(NM) --help | head -n 1 | grep -qi llvm) depends on $(success,$(AR) --help | head -n 1 | grep -qi llvm) From patchwork Wed Mar 3 18:33:31 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Masahiro Yamada X-Patchwork-Id: 12114257 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-17.0 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id A6D1BC433DB for ; Wed, 3 Mar 2021 21:21:16 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 797A2600EF for ; Wed, 3 Mar 2021 21:21:16 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1387636AbhCCTcQ (ORCPT ); Wed, 3 Mar 2021 14:32:16 -0500 Received: from conuserg-09.nifty.com ([210.131.2.76]:63519 "EHLO conuserg-09.nifty.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1580816AbhCCSfQ (ORCPT ); Wed, 3 Mar 2021 13:35:16 -0500 Received: from localhost.localdomain (122-103-140-163.kyoto.fdn.vectant.ne.jp [122.103.140.163]) (authenticated) by conuserg-09.nifty.com with ESMTP id 123IXcJd023524; Thu, 4 Mar 2021 03:33:39 +0900 DKIM-Filter: OpenDKIM Filter v2.10.3 conuserg-09.nifty.com 123IXcJd023524 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nifty.com; s=dec2015msa; t=1614796419; bh=LVGA05n7Wz/yiErDayOXN6cwfEkjWcwwyvZ95yePyvU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=y3lXvknLyDYHn7Ph6cwWTdu1Ua9KHWn/Q5qZh6Jc26uYc68QH8Gl9+KYm5wmZBB42 5n19u4O/kmWJ0xqYvybf4EUDvpHGK97mr4NutwLRCY6a0+/DU0SbsiEjtzJDupdto1 OFiDZq7Sg/OVMBKUuOt/jU46taGzJAHnMlCo/MlqC1W7gvCabx5jHCrX4JFtwzTBp4 MXt2jPJ5XdeT8V43nIlPfC/+U5YJy6Z57nO6JEw5kSDuGIixlnm3RVM9Wlq3m78j5+ rrvONxIipPDpm2FvlkaRXx13hGC5OlggfJNJB5Wb89cdbY7u8fnpmCLhTp0qb2y7YJ INxrqZNC1kozg== X-Nifty-SrcIP: [122.103.140.163] From: Masahiro Yamada To: linux-kbuild@vger.kernel.org Cc: clang-built-linux@googlegroups.com, Nick Desaulniers , Masahiro Yamada , Nathan Chancellor , linux-kernel@vger.kernel.org Subject: [PATCH 2/4] kbuild: collect minimum tool versions into scripts/tool-version.sh Date: Thu, 4 Mar 2021 03:33:31 +0900 Message-Id: <20210303183333.46543-2-masahiroy@kernel.org> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20210303183333.46543-1-masahiroy@kernel.org> References: <20210303183333.46543-1-masahiroy@kernel.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-kbuild@vger.kernel.org The kernel build uses various tools, many of which are provided by the same software suite, for example, LLVM and Binutils. When we raise the minimal version of Clang/LLVM, we need to update clang_min_version in scripts/cc-version.sh and also lld_min_version in scripts/ld-version.sh. In fact, Kbuild can handle CC=clang and LD=ld.lld independently, and we could manage their minimal version separately, but it does not make much sense. Make scripts/tool-version.sh a central place of minimum tool versions so that we do not need to touch multiple files. This script prints the minimal version of the given tool. $ scripts/tool-version.sh gcc 4.9.0 $ scripts/tool-version.sh llvm 10.0.1 $ scripts/tool-version.sh binutils 2.23.0 $ scripts/tool-version.sh foo foo: unknown tool Signed-off-by: Masahiro Yamada Reviewed-by: Nathan Chancellor --- scripts/cc-version.sh | 20 +++++--------------- scripts/ld-version.sh | 11 ++++------- scripts/tool-version.sh | 27 +++++++++++++++++++++++++++ 3 files changed, 36 insertions(+), 22 deletions(-) create mode 100755 scripts/tool-version.sh diff --git a/scripts/cc-version.sh b/scripts/cc-version.sh index 3f2ee885b116..4772f1ef9cac 100755 --- a/scripts/cc-version.sh +++ b/scripts/cc-version.sh @@ -6,18 +6,6 @@ set -e -# When you raise the minimum compiler version, please update -# Documentation/process/changes.rst as well. -gcc_min_version=4.9.0 -clang_min_version=10.0.1 -icc_min_version=16.0.3 # temporary - -# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63293 -# https://lore.kernel.org/r/20210107111841.GN1551@shell.armlinux.org.uk -if [ "$SRCARCH" = arm64 ]; then - gcc_min_version=5.1.0 -fi - # Print the compiler name and some version components. get_compiler_info() { @@ -48,18 +36,20 @@ set -- $(get_compiler_info "$@") name=$1 +tool_version=$(dirname $0)/tool-version.sh + case "$name" in GCC) version=$2.$3.$4 - min_version=$gcc_min_version + min_version=$($tool_version gcc) ;; Clang) version=$2.$3.$4 - min_version=$clang_min_version + min_version=$($tool_version llvm) ;; ICC) version=$(($2 / 100)).$(($2 % 100)).$3 - min_version=$icc_min_version + min_version=$($tool_version icc) ;; *) echo "$orig_args: unknown compiler" >&2 diff --git a/scripts/ld-version.sh b/scripts/ld-version.sh index a463273509b5..e824f7675693 100755 --- a/scripts/ld-version.sh +++ b/scripts/ld-version.sh @@ -6,11 +6,6 @@ set -e -# When you raise the minimum linker version, please update -# Documentation/process/changes.rst as well. -bfd_min_version=2.23.0 -lld_min_version=10.0.1 - # Convert the version string x.y.z to a canonical 5 or 6-digit form. get_canonical_version() { @@ -35,10 +30,12 @@ set -- $("$@" --version) IFS=' ' set -- $1 +tool_version=$(dirname $0)/tool-version.sh + if [ "$1" = GNU -a "$2" = ld ]; then shift $(($# - 1)) version=$1 - min_version=$bfd_min_version + min_version=$($tool_version binutils) name=BFD disp_name="GNU ld" elif [ "$1" = GNU -a "$2" = gold ]; then @@ -46,7 +43,7 @@ elif [ "$1" = GNU -a "$2" = gold ]; then exit 1 elif [ "$1" = LLD ]; then version=$2 - min_version=$lld_min_version + min_version=$($tool_version llvm) name=LLD disp_name=LLD else diff --git a/scripts/tool-version.sh b/scripts/tool-version.sh new file mode 100755 index 000000000000..b4aa27e2c3d3 --- /dev/null +++ b/scripts/tool-version.sh @@ -0,0 +1,27 @@ +#!/bin/sh +# SPDX-License-Identifier: GPL-2.0-only +# +# Print the minimum supported version of the given tool. + +set -e + +# When you raise the minimum version, please update +# Documentation/process/changes.rst as well. +gcc_min_version=4.9.0 +llvm_min_version=10.0.1 +icc_min_version=16.0.3 # temporary +binutils_min_version=2.23.0 + +# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63293 +# https://lore.kernel.org/r/20210107111841.GN1551@shell.armlinux.org.uk +if [ "$SRCARCH" = arm64 ]; then + gcc_min_version=5.1.0 +fi + +eval min_version="\$${1}_min_version" +if [ -z "$min_version" ]; then + echo "$1: unknown tool" >&2 + exit 1 +fi + +echo "$min_version" From patchwork Wed Mar 3 18:33:32 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Masahiro Yamada X-Patchwork-Id: 12114261 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-22.0 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI, MENTIONS_GIT_HOSTING,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id C9B4DC4332B for ; Wed, 3 Mar 2021 21:21:17 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 98E6F64ECF for ; Wed, 3 Mar 2021 21:21:17 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1387658AbhCCTca (ORCPT ); Wed, 3 Mar 2021 14:32:30 -0500 Received: from conuserg-09.nifty.com ([210.131.2.76]:63652 "EHLO conuserg-09.nifty.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1580862AbhCCSfY (ORCPT ); Wed, 3 Mar 2021 13:35:24 -0500 Received: from localhost.localdomain (122-103-140-163.kyoto.fdn.vectant.ne.jp [122.103.140.163]) (authenticated) by conuserg-09.nifty.com with ESMTP id 123IXcJe023524; Thu, 4 Mar 2021 03:33:39 +0900 DKIM-Filter: OpenDKIM Filter v2.10.3 conuserg-09.nifty.com 123IXcJe023524 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nifty.com; s=dec2015msa; t=1614796420; bh=Pb1Yn9QvQ5AqxXkqEhyuLAwufQCMvV+RCtumnsJ0qLI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Hdk8QCc0QBD0wXv5XQm0bhs082hZoScaAVjKvmLgguaZNjIB8DqE+y3UwoXWeGA72 eq3fuWMsDEuxwdBqGlbOQw65sUkDeYH4FzoMc4EbrZyOd1uqDKV/HqHqsx5y9Z98ra 48o3+GAPma/UfL+pNigYUnUGyYFkC8SpFED+66Tn3Kjnw7zH9vsfWluqLuTTEW8sXG MDbpTzSKiOIpHJMT3sQdoZD8oTFT94OXU0xeKBUvIg+3EqOtYy/CBJoM4LzgytuWup EtxPJi937UZvWQsMBq6OZjOKlOhNcc7+0QjiLqTUSkK+/2Kiq7j2GKjZRBJZGwFYRV YBTXhrF2nHXOQ== X-Nifty-SrcIP: [122.103.140.163] From: Masahiro Yamada To: linux-kbuild@vger.kernel.org Cc: clang-built-linux@googlegroups.com, Nick Desaulniers , Masahiro Yamada , Nathan Chancellor , linux-kernel@vger.kernel.org Subject: [PATCH 3/4] kbuild: check the minimum assembler version in Kconfig Date: Thu, 4 Mar 2021 03:33:32 +0900 Message-Id: <20210303183333.46543-3-masahiroy@kernel.org> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20210303183333.46543-1-masahiroy@kernel.org> References: <20210303183333.46543-1-masahiroy@kernel.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-kbuild@vger.kernel.org Documentation/process/changes.rst defines the minimum assembler version (binutils version), but we have never checked it in the build time. Kbuild never invokes 'as' directly because all assembly files in the kernel tree are *.S, hence must be preprocessed. I do not expect raw assembly source files (*.s) would be added to the kernel tree. Therefore, we always use $(CC) as the assembler driver, and commit aa824e0c962b ("kbuild: remove AS variable") removed 'AS'. However, we are still interested in the version of the assembler sitting behind. As usual, the --version option prints the version string. $ as --version | head -n 1 GNU assembler (GNU Binutils for Ubuntu) 2.35.1 But, we do not have $(AS). So, we can add the -Wa prefix so that $(CC) passes --version down to the backing assembler. $ gcc -Wa,--version | head -n 1 gcc: fatal error: no input files compilation terminated. OK, we need to input something to satisfy gcc. $ gcc -Wa,--version -c -x assembler /dev/null -o /dev/null | head -n 1 GNU assembler (GNU Binutils for Ubuntu) 2.35.1 The combination of Clang and GNU assembler works in the same way: $ clang -no-integrated-as -Wa,--version -c -x assembler /dev/null -o /dev/null | head -n 1 GNU assembler (GNU Binutils for Ubuntu) 2.35.1 Clang with the integrated assembler fails like this: $ clang -integrated-as -Wa,--version -c -x assembler /dev/null -o /dev/null | head -n 1 clang: error: unsupported argument '--version' to option 'Wa,' With all this in my mind, I implemented scripts/as-version.sh. $ scripts/as-version.sh gcc GNU 23501 $ scripts/as-version.sh clang -no-integrated-as GNU 23501 $ scripts/as-version.sh clang -integrated-as LLVM 0 Signed-off-by: Masahiro Yamada --- arch/Kconfig | 3 +- init/Kconfig | 12 +++++++ scripts/Kconfig.include | 6 ++++ scripts/as-version.sh | 77 +++++++++++++++++++++++++++++++++++++++++ 4 files changed, 96 insertions(+), 2 deletions(-) create mode 100755 scripts/as-version.sh diff --git a/arch/Kconfig b/arch/Kconfig index 2af10ebe5ed0..d7214f4ae1f7 100644 --- a/arch/Kconfig +++ b/arch/Kconfig @@ -631,8 +631,7 @@ config ARCH_SUPPORTS_LTO_CLANG_THIN config HAS_LTO_CLANG def_bool y # Clang >= 11: https://github.com/ClangBuiltLinux/linux/issues/510 - depends on CC_IS_CLANG && CLANG_VERSION >= 110000 && LD_IS_LLD - depends on $(success,test $(LLVM_IAS) -eq 1) + depends on CC_IS_CLANG && CLANG_VERSION >= 110000 && LD_IS_LLD && AS_IS_LLVM depends on $(success,$(NM) --help | head -n 1 | grep -qi llvm) depends on $(success,$(AR) --help | head -n 1 | grep -qi llvm) depends on ARCH_SUPPORTS_LTO_CLANG diff --git a/init/Kconfig b/init/Kconfig index 22946fe5ded9..f76e5a44e4fe 100644 --- a/init/Kconfig +++ b/init/Kconfig @@ -41,6 +41,18 @@ config CLANG_VERSION default $(cc-version) if CC_IS_CLANG default 0 +config AS_IS_GNU + def_bool $(success,test "$(as-name)" = GNU) + +config AS_IS_LLVM + def_bool $(success,test "$(as-name)" = LLVM) + +config AS_VERSION + int + # If it is integrated assembler, the version is the same as Clang's one. + default CLANG_VERSION if AS_IS_LLVM + default $(as-version) + config LD_IS_BFD def_bool $(success,test "$(ld-name)" = BFD) diff --git a/scripts/Kconfig.include b/scripts/Kconfig.include index 58fdb5308725..0496efd6e117 100644 --- a/scripts/Kconfig.include +++ b/scripts/Kconfig.include @@ -45,6 +45,12 @@ $(error-if,$(success,test -z "$(cc-info)"),Sorry$(comma) this compiler is not su cc-name := $(shell,set -- $(cc-info) && echo $1) cc-version := $(shell,set -- $(cc-info) && echo $2) +# Get the assembler name, version, and error out if it is not supported. +as-info := $(shell,$(srctree)/scripts/as-version.sh $(CC) $(CLANG_FLAGS)) +$(error-if,$(success,test -z "$(as-info)"),Sorry$(comma) this assembler is not supported.) +as-name := $(shell,set -- $(as-info) && echo $1) +as-version := $(shell,set -- $(as-info) && echo $2) + # Get the linker name, version, and error out if it is not supported. ld-info := $(shell,$(srctree)/scripts/ld-version.sh $(LD)) $(error-if,$(success,test -z "$(ld-info)"),Sorry$(comma) this linker is not supported.) diff --git a/scripts/as-version.sh b/scripts/as-version.sh new file mode 100755 index 000000000000..205d8b9fc4d4 --- /dev/null +++ b/scripts/as-version.sh @@ -0,0 +1,77 @@ +#!/bin/sh +# SPDX-License-Identifier: GPL-2.0-only +# +# Print the assembler name and its version in a 5 or 6-digit form. +# Also, perform the minimum version check. +# (If it is the integrated assembler, return 0 as the version, and +# the version check is skipped.) + +set -e + +# Convert the version string x.y.z to a canonical 5 or 6-digit form. +get_canonical_version() +{ + IFS=. + set -- $1 + + # If the 2nd or 3rd field is missing, fill it with a zero. + # + # The 4th field, if present, is ignored. + # This occurs in development snapshots as in 2.35.1.20201116 + echo $((10000 * $1 + 100 * ${2:-0} + ${3:-0})) +} + +orig_args="$@" + +# Get the first line of the --version output. +IFS=' +' +# Add 2>&1 to check both stdout and stderr. +# If the backing assembler is binutils, we get the version string in stdout. +# If it is clang's integrated assembler, we get the following error in stderr: +# clang: error: unsupported argument '--version' to option 'Wa,' +# To avoid the error message affected by locale, set LC_MESSAGES=C just in case. +set -- $(LC_MESSAGES=C "$@" -Wno-unused-command-line-argument -Wa,--version -c -x assembler /dev/null -o /dev/null 2>&1) +line="$1" + +if [ "$line" = "clang: error: unsupported argument '--version' to option 'Wa,'" ]; then + # For the intergrated assembler, we do not check the version here. + # It is the same as the clang version, and it has been already checked + # by scripts/cc-version.sh. + echo LLVM 0 + exit 0 +fi + +# Split the line on spaces. +IFS=' ' +set -- $line + +tool_version=$(dirname $0)/tool-version.sh + +if [ "$1" = GNU -a "$2" = assembler ]; then + shift $(($# - 1)) + version=$1 + min_version=$($tool_version binutils) + name=GNU +else + echo "$orig_args: unknown assembler invoked" >&2 + exit 1 +fi + +# Some distributions append a package release number, as in 2.34-4.fc32 +# Trim the hyphen and any characters that follow. +version=${version%-*} + +cversion=$(get_canonical_version $version) +min_cversion=$(get_canonical_version $min_version) + +if [ "$cversion" -lt "$min_cversion" ]; then + echo >&2 "***" + echo >&2 "*** Assembler is too old." + echo >&2 "*** Your $name assembler version: $version" + echo >&2 "*** Minimum $name assembler version: $min_version" + echo >&2 "***" + exit 1 +fi + +echo $name $cversion From patchwork Wed Mar 3 18:33:33 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Masahiro Yamada X-Patchwork-Id: 12114259 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-17.0 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4F422C433E9 for ; Wed, 3 Mar 2021 21:21:17 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 19C3464ECF for ; Wed, 3 Mar 2021 21:21:17 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1387648AbhCCTcU (ORCPT ); Wed, 3 Mar 2021 14:32:20 -0500 Received: from conuserg-09.nifty.com ([210.131.2.76]:63528 "EHLO conuserg-09.nifty.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1580818AbhCCSfQ (ORCPT ); Wed, 3 Mar 2021 13:35:16 -0500 Received: from localhost.localdomain (122-103-140-163.kyoto.fdn.vectant.ne.jp [122.103.140.163]) (authenticated) by conuserg-09.nifty.com with ESMTP id 123IXcJf023524; Thu, 4 Mar 2021 03:33:40 +0900 DKIM-Filter: OpenDKIM Filter v2.10.3 conuserg-09.nifty.com 123IXcJf023524 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nifty.com; s=dec2015msa; t=1614796420; bh=15Gw1OMyTCRaFX0xouVnd9dK3+GD/W8zTLjDYa/3v+4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=nlmwcihYvhHHhQfbIRm8Ub+D4LAi85osdDpldUd7eoMbK1J3dL7fVLi6k8UFQLyXX E99np0tUwTTp7tGcHP7WunVzgLueNPzyy8m1vPmetZMNRxStlIJGyfwpO4NmSSzmqd WA2FTn4/ThaLjmNZRwh+8t0iA0ZwHPU0570rVEqdZ+cqRseiFzaLr2Pj/8CFbiXEG2 T2CT79g0dwavGQqeNZoeTqo+pjZVSF06EYOCPrc0OsdBjwF01ODd62qfrXXVro9sPw o4HubnYCPmBgocnALJQbakSgFa8qzJCsUpt/ECKqB6sYgLoTFbSbFOCZi0awcNoI34 Ny8eGxoep1Gkg== X-Nifty-SrcIP: [122.103.140.163] From: Masahiro Yamada To: linux-kbuild@vger.kernel.org Cc: clang-built-linux@googlegroups.com, Nick Desaulniers , Masahiro Yamada , Nathan Chancellor , linux-kernel@vger.kernel.org Subject: [PATCH 4/4] kbuild: dwarf: use AS_VERSION instead of test_dwarf5_support.sh Date: Thu, 4 Mar 2021 03:33:33 +0900 Message-Id: <20210303183333.46543-4-masahiroy@kernel.org> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20210303183333.46543-1-masahiroy@kernel.org> References: <20210303183333.46543-1-masahiroy@kernel.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-kbuild@vger.kernel.org The test code in scripts/test_dwarf5_support.sh is somewhat difficult to understand, but after all, we want to check binutils >= 2.35.2 From the former discussion, the requrement for generating DRAWF v5 from C code is as follows: - gcc + binutils as -> requires gcc 5.0+ (but 7.0+ for full support) - clang + binutils as -> requires binutils 2.35.2+ - clang + integrated as -> OK Signed-off-by: Masahiro Yamada Reviewed-by: Nathan Chancellor --- lib/Kconfig.debug | 3 +-- scripts/test_dwarf5_support.sh | 8 -------- 2 files changed, 1 insertion(+), 10 deletions(-) delete mode 100755 scripts/test_dwarf5_support.sh diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug index 2779c29d9981..f3337a38925d 100644 --- a/lib/Kconfig.debug +++ b/lib/Kconfig.debug @@ -284,8 +284,7 @@ config DEBUG_INFO_DWARF4 config DEBUG_INFO_DWARF5 bool "Generate DWARF Version 5 debuginfo" - depends on GCC_VERSION >= 50000 || CC_IS_CLANG - depends on CC_IS_GCC || $(success,$(srctree)/scripts/test_dwarf5_support.sh $(CC) $(CLANG_FLAGS)) + depends on GCC_VERSION >= 50000 || (CC_IS_CLANG && AS_IS_GNU && AS_VERSION >= 23502) || (CC_IS_CLANG && AS_IS_LLVM) depends on !DEBUG_INFO_BTF help Generate DWARF v5 debug info. Requires binutils 2.35.2, gcc 5.0+ (gcc diff --git a/scripts/test_dwarf5_support.sh b/scripts/test_dwarf5_support.sh deleted file mode 100755 index c46e2456b47a..000000000000 --- a/scripts/test_dwarf5_support.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh -# SPDX-License-Identifier: GPL-2.0 - -# Test that the assembler doesn't need -Wa,-gdwarf-5 when presented with DWARF -# v5 input, such as `.file 0` and `md5 0x00`. Should be fixed in GNU binutils -# 2.35.2. https://sourceware.org/bugzilla/show_bug.cgi?id=25611 -echo '.file 0 "filename" md5 0x7a0b65214090b6693bd1dc24dd248245' | \ - $* -gdwarf-5 -Wno-unused-command-line-argument -c -x assembler -o /dev/null -