Re: [PATCH] kbuild: collect minimum tool versions into scripts/min-tool-version.sh

2021-03-12 Thread Sedat Dilek
On Thu, Mar 11, 2021 at 10:47 AM 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 you raise the minimum version of Clang/LLVM, you need to update
> clang_min_version in scripts/cc-version.sh and also lld_min_version in
> scripts/ld-version.sh.
>
> Kbuild can handle CC=clang and LD=ld.lld independently, but it does not
> make much sense to maintain their versions separately.
>
> Let's make scripts/min-tool-version.sh a central place of minimum tool
> versions so you do not need to touch multiple files.
>
> This script prints the minimum version of the given tool.
>
>   $ scripts/min-tool-version.sh gcc
>   4.9.0
>   $ scripts/min-tool-version.sh llvm
>   10.0.1
>   $ scripts/min-tool-version.sh binutils
>   2.23.0
>   $ scripts/min-tool-version.sh foo
>   foo: unknown tool
>
> Signed-off-by: Masahiro Yamada 
> Reviewed-by: Nathan Chancellor 

The idea with creating gcc, llvm, binutils etc. files containing the
minimum version-string sounds good to me.

This version here tested on Debian/testing AMD64.

Tested-by: Sedat Dilek  # LLVM/Clang v12.0.0-rc3

- Sedat -

> ---
>
>  scripts/cc-version.sh   | 20 +---
>  scripts/ld-version.sh   | 11 ---
>  scripts/min-tool-version.sh | 27 +++
>  3 files changed, 36 insertions(+), 22 deletions(-)
>  create mode 100755 scripts/min-tool-version.sh
>
> diff --git a/scripts/cc-version.sh b/scripts/cc-version.sh
> index 3f2ee885b116..f1952c522466 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.gn1...@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
>
> +min_tool_version=$(dirname $0)/min-tool-version.sh
> +
>  case "$name" in
>  GCC)
> version=$2.$3.$4
> -   min_version=$gcc_min_version
> +   min_version=$($min_tool_version gcc)
> ;;
>  Clang)
> version=$2.$3.$4
> -   min_version=$clang_min_version
> +   min_version=$($min_tool_version llvm)
> ;;
>  ICC)
> version=$(($2 / 100)).$(($2 % 100)).$3
> -   min_version=$icc_min_version
> +   min_version=$($min_tool_version icc)
> ;;
>  *)
> echo "$orig_args: unknown compiler" >&2
> diff --git a/scripts/ld-version.sh b/scripts/ld-version.sh
> index 30debf78aa09..5b9481e98b4f 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
>
> +min_tool_version=$(dirname $0)/min-tool-version.sh
> +
>  if [ "$1" = GNU -a "$2" = ld ]; then
> shift $(($# - 1))
> version=$1
> -   min_version=$bfd_min_version
> +   min_version=$($min_tool_version binutils)
> name=BFD
> disp_name="GNU ld"
>  elif [ "$1" = GNU -a "$2" = gold ]; then
> @@ -51,7 +48,7 @@ else
>
> if [ "$1" = LLD ]; then
> version=$2
> -   min_version=$lld_min_version
> +   min_version=$($min_tool_version llvm)
> name=LLD
> disp_name=LLD
> else
> diff --git a/scripts/min-tool-version.sh b/scripts/min-tool-version.sh
> new file mode 100755
> index ..37c438d766d7
> --- /dev/null
> +++ b/scripts/min-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.
> +min_gcc_version=4.9.0
> +min_llvm_version=10.0.1
> +min_icc_version=16.0.3 # temporary
> +min_binutils_version=2.23.0
> +
> +# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63293
> +# https://lore.kernel.org/r/20210107111841.gn1...@shell.armlinux.org.uk
> +if [ "$SRCARCH" = arm64 ]; then
> +   min_gcc_version=5.1.0
> +fi
> +
> +eval min_version="\$min_${1}_version"
> +if [ -z "$min_version" ]; then
> +   echo "$1: unknown tool" >&2
> +   exit 1
> +fi
> +
> +echo "$min_version"
> --
> 2.27.0
>
> --
> You received this message because you are subscribed to the Google Groups 
> "Clang Built 

Re: [PATCH] kbuild: collect minimum tool versions into scripts/min-tool-version.sh

2021-03-11 Thread Nicolas Pitre
On Thu, 11 Mar 2021, Miguel Ojeda wrote:

> On Thu, Mar 11, 2021 at 10:47 AM Masahiro Yamada  wrote:
> >
> > +# When you raise the minimum version, please update
> > +# Documentation/process/changes.rst as well.
> > +min_gcc_version=4.9.0
> > +min_llvm_version=10.0.1
> > +min_icc_version=16.0.3 # temporary
> > +min_binutils_version=2.23.0
> 
> +1 to creating a central place for all minimum versions.
> 
> Acked-by: Miguel Ojeda 
> 
> I wonder if you considered creating a folder with files like
> `scripts/min_versions/gcc` containing the version string. That would
> make it easier for reading from other languages or even importing them
> dynamically into the documentation, thus removing even more
> duplication.

Alternatively, the documentation could be the actual reference and the 
script would parse the documentation to get those values out.


Nicolas


Re: [PATCH] kbuild: collect minimum tool versions into scripts/min-tool-version.sh

2021-03-11 Thread Miguel Ojeda
On Thu, Mar 11, 2021 at 11:34 AM Masahiro Yamada  wrote:
>
> Hmm, that is a simple, clean idea.
> Then, we can simply read out the file
>
> $ cat scripts/min_versions/gcc
> 4.9.0

Exactly!

> I do not know how to handle
> per-arch versions in this case.

Perhaps we should just push for 5.1.0 everywhere ;-P

Otherwise, we could still have `min-tool-versions.sh` with something like:

$ cat scripts/min_versions/gcc
4.9.0
$ cat scripts/min_versions/gcc_arm64
5.1.0
$ cat scripts/min-tool-versions.sh
if min_versions/$tool_$arch exists
print that one
else
print the default one: min_versions/$tool

i.e. having the plain files allow us to extend the cases without
listing them explicitly in the script, plus it is anyway useful to
separate data from code :-)

Cheers,
Miguel


Re: [PATCH] kbuild: collect minimum tool versions into scripts/min-tool-version.sh

2021-03-11 Thread Masahiro Yamada
On Thu, Mar 11, 2021 at 7:18 PM Miguel Ojeda
 wrote:
>
> On Thu, Mar 11, 2021 at 10:47 AM Masahiro Yamada  wrote:
> >
> > +# When you raise the minimum version, please update
> > +# Documentation/process/changes.rst as well.
> > +min_gcc_version=4.9.0
> > +min_llvm_version=10.0.1
> > +min_icc_version=16.0.3 # temporary
> > +min_binutils_version=2.23.0
>
> +1 to creating a central place for all minimum versions.
>
> Acked-by: Miguel Ojeda 
>
> I wonder if you considered creating a folder with files like
> `scripts/min_versions/gcc` containing the version string. That would
> make it easier for reading from other languages or even importing them
> dynamically into the documentation, thus removing even more
> duplication.
>
> Cheers,
> Miguel


Hmm, that is a simple, clean idea.
Then, we can simply read out the file

$ cat scripts/min_versions/gcc
4.9.0

I do not know how to handle
per-arch versions in this case.




Or, we might need to stick to shell-scripting
to handle this.

scripts/min_versions/gcc
#!/bin/sh
# SPDX-License-Identifier: GPL-2.0-only
if [ "$SRCARCH" = arm64 ]; then
   echo 5.1.0
else
   echo 4.9.0
fi


-- 
Best Regards
Masahiro Yamada


Re: [PATCH] kbuild: collect minimum tool versions into scripts/min-tool-version.sh

2021-03-11 Thread Miguel Ojeda
On Thu, Mar 11, 2021 at 10:47 AM Masahiro Yamada  wrote:
>
> +# When you raise the minimum version, please update
> +# Documentation/process/changes.rst as well.
> +min_gcc_version=4.9.0
> +min_llvm_version=10.0.1
> +min_icc_version=16.0.3 # temporary
> +min_binutils_version=2.23.0

+1 to creating a central place for all minimum versions.

Acked-by: Miguel Ojeda 

I wonder if you considered creating a folder with files like
`scripts/min_versions/gcc` containing the version string. That would
make it easier for reading from other languages or even importing them
dynamically into the documentation, thus removing even more
duplication.

Cheers,
Miguel


[PATCH] kbuild: collect minimum tool versions into scripts/min-tool-version.sh

2021-03-11 Thread Masahiro Yamada
The kernel build uses various tools, many of which are provided by the
same software suite, for example, LLVM and Binutils.

When you raise the minimum version of Clang/LLVM, you need to update
clang_min_version in scripts/cc-version.sh and also lld_min_version in
scripts/ld-version.sh.

Kbuild can handle CC=clang and LD=ld.lld independently, but it does not
make much sense to maintain their versions separately.

Let's make scripts/min-tool-version.sh a central place of minimum tool
versions so you do not need to touch multiple files.

This script prints the minimum version of the given tool.

  $ scripts/min-tool-version.sh gcc
  4.9.0
  $ scripts/min-tool-version.sh llvm
  10.0.1
  $ scripts/min-tool-version.sh binutils
  2.23.0
  $ scripts/min-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/min-tool-version.sh | 27 +++
 3 files changed, 36 insertions(+), 22 deletions(-)
 create mode 100755 scripts/min-tool-version.sh

diff --git a/scripts/cc-version.sh b/scripts/cc-version.sh
index 3f2ee885b116..f1952c522466 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.gn1...@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
 
+min_tool_version=$(dirname $0)/min-tool-version.sh
+
 case "$name" in
 GCC)
version=$2.$3.$4
-   min_version=$gcc_min_version
+   min_version=$($min_tool_version gcc)
;;
 Clang)
version=$2.$3.$4
-   min_version=$clang_min_version
+   min_version=$($min_tool_version llvm)
;;
 ICC)
version=$(($2 / 100)).$(($2 % 100)).$3
-   min_version=$icc_min_version
+   min_version=$($min_tool_version icc)
;;
 *)
echo "$orig_args: unknown compiler" >&2
diff --git a/scripts/ld-version.sh b/scripts/ld-version.sh
index 30debf78aa09..5b9481e98b4f 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
 
+min_tool_version=$(dirname $0)/min-tool-version.sh
+
 if [ "$1" = GNU -a "$2" = ld ]; then
shift $(($# - 1))
version=$1
-   min_version=$bfd_min_version
+   min_version=$($min_tool_version binutils)
name=BFD
disp_name="GNU ld"
 elif [ "$1" = GNU -a "$2" = gold ]; then
@@ -51,7 +48,7 @@ else
 
if [ "$1" = LLD ]; then
version=$2
-   min_version=$lld_min_version
+   min_version=$($min_tool_version llvm)
name=LLD
disp_name=LLD
else
diff --git a/scripts/min-tool-version.sh b/scripts/min-tool-version.sh
new file mode 100755
index ..37c438d766d7
--- /dev/null
+++ b/scripts/min-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.
+min_gcc_version=4.9.0
+min_llvm_version=10.0.1
+min_icc_version=16.0.3 # temporary
+min_binutils_version=2.23.0
+
+# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63293
+# https://lore.kernel.org/r/20210107111841.gn1...@shell.armlinux.org.uk
+if [ "$SRCARCH" = arm64 ]; then
+   min_gcc_version=5.1.0
+fi
+
+eval min_version="\$min_${1}_version"
+if [ -z "$min_version" ]; then
+   echo "$1: unknown tool" >&2
+   exit 1
+fi
+
+echo "$min_version"
-- 
2.27.0