[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAK7LNAS4cRT7Jgdp10HUB4gCMU9OHOq3DKEHVfHhYzkbOPqsdw@mail.gmail.com>
Date: Sat, 19 Nov 2022 06:07:54 +0900
From: Masahiro Yamada <masahiroy@...nel.org>
To: linux-kbuild@...r.kernel.org
Cc: linux-kernel@...r.kernel.org
Subject: Re: [PATCH 1/6] kbuild: add test-{le,ge,lt,gt} macros
On Sat, Nov 19, 2022 at 4:53 AM Masahiro Yamada <masahiroy@...nel.org> wrote:
>
> Because GNU Make is only able to handle strings, it is very hard to
> perform arighmetic in Makefiles.
arighmetic -> arithmetic
>
> When we compare two integers, we invokes shell. One example is in the
invokes -> invoke
> top Makefile:
>
> ifeq ($(shell test $(CONFIG_LLD_VERSION) -lt 130000; echo $$?),0)
>
> This is more expensive than using built-in functions since it forks a
> process.
>
> If we know the two have the same number of digits, we can do better.
>
> This commit adds four macros, test-le, test-ge, test-lt, test-gt.
>
> $(call test-lt, A, B) is evaluated to 'y' if A is less than B, or
> empty otherwise. This will replace $(call shell test A -lt B).
>
> Again, the limitation is that A and B must have the same number of
> digits because these macros are based on $(sort ) function.
>
> $(call test-lt, 1, 9) --> y (Works!)
> $(call test-lt, 10, 9) --> y (Not work...)
>
> To make the latter work, you need to add '0' prefix to align the number
> of digits:
>
> $(call test-lt, 10, 09) --> empty (Works!)
>
> Actually, we can live with this limitation in many places. As for the
> example above, we know $(CONFIG_LLD_VERSION) is 6-digits because the
> minimal supported version of LLVM is 11.0.0.
>
> So, the shell invocation can be replaced with more efficient code:
>
> ifeq ($(call test-lt, $(CONFIG_LLD_VERSION), 130000),y)
>
> Of course, this assumption will break when LLVM 100 is released, but it
> will be far in the future.
>
> Signed-off-by: Masahiro Yamada <masahiroy@...nel.org>
> ---
--
Best Regards
Masahiro Yamada
Powered by blists - more mailing lists