All of lore.kernel.org
 help / color / mirror / Atom feed
From: Masahiro Yamada <masahiroy@kernel.org>
To: Nathan Chancellor <nathan@kernel.org>
Cc: Linux Kbuild mailing list <linux-kbuild@vger.kernel.org>,
	clang-built-linux <clang-built-linux@googlegroups.com>,
	Nick Desaulniers <ndesaulniers@google.com>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 2/4] kbuild: collect minimum tool versions into scripts/tool-version.sh
Date: Fri, 5 Mar 2021 15:40:52 +0900	[thread overview]
Message-ID: <CAK7LNASnGqdAtjhNfPmk0dKA-v5aC4FB8Si+fCAkcjDLK0kv-A@mail.gmail.com> (raw)
In-Reply-To: <20210304001141.7lejurony2poqkid@archlinux-ax161>

On Thu, Mar 4, 2021 at 9:11 AM Nathan Chancellor <nathan@kernel.org> wrote:
>
> On Thu, Mar 04, 2021 at 03:33:31AM +0900, Masahiro Yamada wrote:
> > 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 <masahiroy@kernel.org>
>
> Reviewed-by: Nathan Chancellor <nathan@kernel.org>
>
> Two comments below.
>
> > ---
> >
> >  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
>
> I realize these scripts are currently called by their full path but is
> it worth making this '$(dirname "$(readlink -f "$0")")' here and in
> ld-version.sh just in case that does not happen?

Not sure.
A relative path still works.
So, I did not do what I did not need to do.




> >  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"
> > --
> > 2.27.0
> >
>
> Would scripts/tool-version.sh be easier to read and interpret using a
> case statement?


Actually, I wrote code that way.

But, I liked shorter code, and
wanted to collect magic numbers
to the top of this file.

Only the tricky part is the 'eval' statement,
but I hope it would not be too difficult to understand.



> #!/bin/sh
> # SPDX-License-Identifier: GPL-2.0-only
> #
> # Print the minimum supported version of the given tool.
> # When you raise the minimum version, please update
> # Documentation/process/changes.rst as well.
>
> case "$1" in
> binutils)
>     echo "2.23.0"
>     ;;
> gcc)
>     # 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
>         echo "5.1.0"
>     else
>         echo "4.9.0"
>     fi
>     ;;
> icc)
>     # temporary
>     echo "16.0.3"
>     ;;
> llvm)
>     echo "10.0.1"
>     ;;
> *)
>     echo "$1: unknown tool" >&2
>     exit 1
>     ;;
> esac
>
> --
> You received this message because you are subscribed to the Google Groups "Clang Built Linux" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to clang-built-linux+unsubscribe@googlegroups.com.
> To view this discussion on the web visit https://groups.google.com/d/msgid/clang-built-linux/20210304001141.7lejurony2poqkid%40archlinux-ax161.



--
Best Regards
Masahiro Yamada

  reply	other threads:[~2021-03-05  6:41 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-03-03 18:33 [PATCH 1/4] kbuild: remove LLVM=1 test from HAS_LTO_CLANG Masahiro Yamada
2021-03-03 18:33 ` [PATCH 2/4] kbuild: collect minimum tool versions into scripts/tool-version.sh Masahiro Yamada
2021-03-04  0:11   ` Nathan Chancellor
2021-03-05  6:40     ` Masahiro Yamada [this message]
2021-03-12 17:21     ` Masahiro Yamada
2021-03-04 22:10   ` Nicolas Pitre
2021-03-05  6:41     ` Masahiro Yamada
2021-03-03 18:33 ` [PATCH 3/4] kbuild: check the minimum assembler version in Kconfig Masahiro Yamada
2021-03-04  0:28   ` Nathan Chancellor
2021-03-05  1:25   ` Nick Desaulniers
2021-03-05 17:48     ` Masahiro Yamada
2021-03-07  4:42       ` Nathan Chancellor
2021-03-03 18:33 ` [PATCH 4/4] kbuild: dwarf: use AS_VERSION instead of test_dwarf5_support.sh Masahiro Yamada
2021-03-03 20:44   ` Nick Desaulniers
2021-03-12 17:18     ` Masahiro Yamada
2021-03-04  0:30   ` Nathan Chancellor
2021-03-03 20:47 ` [PATCH 1/4] kbuild: remove LLVM=1 test from HAS_LTO_CLANG Nick Desaulniers
2021-03-05  6:06   ` Masahiro Yamada
2021-03-08 19:11   ` Sami Tolvanen
2021-03-03 23:37 ` Nathan Chancellor

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAK7LNASnGqdAtjhNfPmk0dKA-v5aC4FB8Si+fCAkcjDLK0kv-A@mail.gmail.com \
    --to=masahiroy@kernel.org \
    --cc=clang-built-linux@googlegroups.com \
    --cc=linux-kbuild@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=nathan@kernel.org \
    --cc=ndesaulniers@google.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.