25 Apr, 2021

1 commit

  • 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 create a central place of minimum tool versions so you do not need
    to touch multiple files. scripts/min-tool-version.sh prints the minimum
    version of the given tool.

    Signed-off-by: Masahiro Yamada
    Reviewed-by: Nathan Chancellor
    Acked-by: Miguel Ojeda
    Tested-by: Sedat Dilek

    Masahiro Yamada
     

16 Feb, 2021

1 commit

  • Paul Gortmaker reported a regression in the GCC version check. [1]
    If you use GCC 4.8, the build breaks before showing the error message
    "error Sorry, your version of GCC is too old - please use 4.9 or newer."

    I do not want to apply his fix-up since it implies we would not be able
    to remove any cc-option test. Anyway, I admit checking the GCC version
    in is too late.

    Almost at the same time, Linus also suggested to move the compiler
    version error to Kconfig time. [2]

    I unified the two similar scripts, gcc-version.sh and clang-version.sh
    into cc-version.sh. The old scripts invoked the compiler multiple times
    (3 times for gcc-version.sh, 4 times for clang-version.sh). I refactored
    the code so the new one invokes the compiler just once, and also tried
    my best to use shell-builtin commands where possible.

    The new script runs faster.

    $ time ./scripts/clang-version.sh clang
    120000

    real 0m0.029s
    user 0m0.012s
    sys 0m0.021s

    $ time ./scripts/cc-version.sh clang
    Clang 120000

    real 0m0.009s
    user 0m0.006s
    sys 0m0.004s

    cc-version.sh also shows an error message if the compiler is too old:

    $ make defconfig CC=clang-9
    *** Default configuration is based on 'x86_64_defconfig'
    ***
    *** Compiler is too old.
    *** Your Clang version: 9.0.1
    *** Minimum Clang version: 10.0.1
    ***
    scripts/Kconfig.include:46: Sorry, this compiler is not supported.
    make[1]: *** [scripts/kconfig/Makefile:81: defconfig] Error 1
    make: *** [Makefile:602: defconfig] Error 2

    The new script takes care of ICC because we have
    although I am not sure if building the kernel with ICC is well-supported.

    [1]: https://lore.kernel.org/r/20210110190807.134996-1-paul.gortmaker@windriver.com
    [2]: https://lore.kernel.org/r/CAHk-=wh-+TMHPTFo1qs-MYyK7tZh-OQovA=pP3=e06aCVp6_kA@mail.gmail.com

    Fixes: 87de84c9140e ("kbuild: remove cc-option test of -Werror=date-time")
    Reported-by: Paul Gortmaker
    Suggested-by: Linus Torvalds
    Reviewed-by: Nick Desaulniers
    Tested-by: Nick Desaulniers
    Reviewed-by: Nathan Chancellor
    Tested-by: Nathan Chancellor
    Reviewed-by: Miguel Ojeda
    Tested-by: Miguel Ojeda
    Tested-by: Sedat Dilek
    Signed-off-by: Masahiro Yamada

    Masahiro Yamada