2014-12-25 05:32:55

by Masahiro Yamada

[permalink] [raw]
Subject: [PATCH 0/6] kbuild: refactor Makefiles related with cc-version




Masahiro Yamada (6):
kbuild: fix cc-ifversion macro
kbuild: do not add $(call ...) to invoke cc-version or cc-fullversion
kbuild,gcov: remove unnecessary workaround
kbuild,gcov: simplify kernel/gcov/Makefile
kbuild: allow cc-ifversion to have the argument for false condition
kbuild,gcov: simplify kernel/gcov/Makefile more

Documentation/kbuild/makefiles.txt | 9 +++++----
arch/parisc/Makefile | 2 +-
arch/powerpc/Makefile | 6 +++---
arch/x86/Makefile.um | 2 +-
kernel/gcov/Makefile | 36 +++++-------------------------------
scripts/Kbuild.include | 7 ++-----
6 files changed, 17 insertions(+), 45 deletions(-)

--
1.9.1


2014-12-25 05:31:54

by Masahiro Yamada

[permalink] [raw]
Subject: [PATCH 3/6] kbuild,gcov: remove unnecessary workaround

Since commit 371fdc77af44 (kbuild: collect shorthands into
scripts/Kbuild.include), scripts/Makefile.clean includes
scripts/Kbuild.include.

The workaround and the comment block in kernel/gcov/Makefile
are no longer necessary.

Signed-off-by: Masahiro Yamada <[email protected]>
Cc: Peter Oberparleiter <[email protected]>
---

kernel/gcov/Makefile | 13 +------------
1 file changed, 1 insertion(+), 12 deletions(-)

diff --git a/kernel/gcov/Makefile b/kernel/gcov/Makefile
index 6f01fa3..42323c7 100644
--- a/kernel/gcov/Makefile
+++ b/kernel/gcov/Makefile
@@ -10,18 +10,7 @@ ifeq ($(CONFIG_GCOV_FORMAT_3_4),y)
else ifeq ($(CONFIG_GCOV_FORMAT_4_7),y)
cc-ver := 0407
else
-# Use cc-version if available, otherwise set 0
-#
-# scripts/Kbuild.include, which contains cc-version function, is not included
-# during make clean "make -f scripts/Makefile.clean obj=kernel/gcov"
-# Meaning cc-ver is empty causing if-lt test to fail with
-# "/bin/sh: line 0: [: -lt: unary operator expected" error mesage.
-# This has no affect on the clean phase, but the error message could be
-# confusing/annoying. So this dummy workaround sets cc-ver to zero if cc-version
-# is not available. We can probably move if-lt to Kbuild.include, so it's also
-# not defined during clean or to include Kbuild.include in
-# scripts/Makefile.clean. But the following workaround seems least invasive.
- cc-ver := $(if $(cc-version),$(cc-version),0)
+ cc-ver := $(cc-version)
endif

obj-$(CONFIG_GCOV_KERNEL) := base.o fs.o
--
1.9.1

2014-12-25 05:32:00

by Masahiro Yamada

[permalink] [raw]
Subject: [PATCH 1/6] kbuild: fix cc-ifversion macro

The macro "cc-version" takes no argument. Drop $(CC) from the
"cc-ifversion" definition.

Signed-off-by: Masahiro Yamada <[email protected]>
---

scripts/Kbuild.include | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/scripts/Kbuild.include b/scripts/Kbuild.include
index a6f7914..a972666 100644
--- a/scripts/Kbuild.include
+++ b/scripts/Kbuild.include
@@ -146,7 +146,7 @@ cc-fullversion = $(shell $(KBUILD_SHELL) \

# cc-ifversion
# Usage: EXTRA_CFLAGS += $(call cc-ifversion, -lt, 0402, -O1)
-cc-ifversion = $(shell [ $(call cc-version, $(CC)) $(1) $(2) ] && echo $(3))
+cc-ifversion = $(shell [ $(call cc-version) $(1) $(2) ] && echo $(3))

# cc-ldoption
# Usage: ldflags += $(call cc-ldoption, -Wl$(comma)--hash-style=both)
--
1.9.1

2014-12-25 05:31:50

by Masahiro Yamada

[permalink] [raw]
Subject: [PATCH 4/6] kbuild,gcov: simplify kernel/gcov/Makefile

Kbuild descends into kernel/gcov/ directory only when
CONFIG_GCOV_KERNEL is enabled. (See kernel/Makefile)

CONFIG_GCOV_KERNEL check can be omitted in kernel/gcov/Makefile.

Signed-off-by: Masahiro Yamada <[email protected]>
Cc: Peter Oberparleiter <[email protected]>
---

kernel/gcov/Makefile | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/kernel/gcov/Makefile b/kernel/gcov/Makefile
index 42323c7..69b3515 100644
--- a/kernel/gcov/Makefile
+++ b/kernel/gcov/Makefile
@@ -13,10 +13,10 @@ else
cc-ver := $(cc-version)
endif

-obj-$(CONFIG_GCOV_KERNEL) := base.o fs.o
+obj-y := base.o fs.o

ifeq ($(call if-lt, $(cc-ver), 0407),1)
- obj-$(CONFIG_GCOV_KERNEL) += gcc_3_4.o
+ obj-y += gcc_3_4.o
else
- obj-$(CONFIG_GCOV_KERNEL) += gcc_4_7.o
+ obj-y += gcc_4_7.o
endif
--
1.9.1

2014-12-25 05:31:53

by Masahiro Yamada

[permalink] [raw]
Subject: [PATCH 6/6] kbuild,gcov: simplify kernel/gcov/Makefile more

CONFIG_GCOV_FORMAT_3_4 / _4_7 / _AUTODETECT are exclusive.
Compare the CC version only when _AUTODETECT is enabled.

This change should have no impact.

Signed-off-by: Masahiro Yamada <[email protected]>
Cc: Peter Oberparleiter <[email protected]>
---

kernel/gcov/Makefile | 23 ++++-------------------
1 file changed, 4 insertions(+), 19 deletions(-)

diff --git a/kernel/gcov/Makefile b/kernel/gcov/Makefile
index 69b3515..752d648 100644
--- a/kernel/gcov/Makefile
+++ b/kernel/gcov/Makefile
@@ -1,22 +1,7 @@
ccflags-y := -DSRCTREE='"$(srctree)"' -DOBJTREE='"$(objtree)"'

-# if-lt
-# Usage VAR := $(call if-lt, $(a), $(b))
-# Returns 1 if (a < b)
-if-lt = $(shell [ $(1) -lt $(2) ] && echo 1)
-
-ifeq ($(CONFIG_GCOV_FORMAT_3_4),y)
- cc-ver := 0304
-else ifeq ($(CONFIG_GCOV_FORMAT_4_7),y)
- cc-ver := 0407
-else
- cc-ver := $(cc-version)
-endif
-
obj-y := base.o fs.o
-
-ifeq ($(call if-lt, $(cc-ver), 0407),1)
- obj-y += gcc_3_4.o
-else
- obj-y += gcc_4_7.o
-endif
+obj-$(CONFIG_GCOV_FORMAT_3_4) += gcc_3_4.o
+obj-$(CONFIG_GCOV_FORMAT_4_7) += gcc_4_7.o
+obj-$(CONFIG_GCOV_FORMAT_AUTODETECT) += $(call cc-ifversion, -lt, 0407, \
+ gcc_3_4.o, gcc_4_7.o)
--
1.9.1

2014-12-25 05:32:31

by Masahiro Yamada

[permalink] [raw]
Subject: [PATCH 5/6] kbuild: allow cc-ifversion to have the argument for false condition

The macro "try-run" can have an argument for each of true and false
cases. Having an argument for the false case of cc-ifversion (and
ld-ifversion) would be useful too.

Signed-off-by: Masahiro Yamada <[email protected]>
---

Documentation/kbuild/makefiles.txt | 5 +++--
scripts/Kbuild.include | 4 ++--
2 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/Documentation/kbuild/makefiles.txt b/Documentation/kbuild/makefiles.txt
index 7b3487a..a64f3c6 100644
--- a/Documentation/kbuild/makefiles.txt
+++ b/Documentation/kbuild/makefiles.txt
@@ -531,8 +531,9 @@ more details, with real examples.
than or equal to gcc 3.0.

cc-ifversion
- cc-ifversion tests the version of $(CC) and equals last argument if
- version expression is true.
+ cc-ifversion tests the version of $(CC) and equals the fourth parameter
+ if version expression is true, or the fifth (if given) if the version
+ expression is false.

Example:
#fs/reiserfs/Makefile
diff --git a/scripts/Kbuild.include b/scripts/Kbuild.include
index 69c9f57..6182fa6 100644
--- a/scripts/Kbuild.include
+++ b/scripts/Kbuild.include
@@ -144,7 +144,7 @@ cc-fullversion = $(shell $(KBUILD_SHELL) \

# cc-ifversion
# Usage: EXTRA_CFLAGS += $(call cc-ifversion, -lt, 0402, -O1)
-cc-ifversion = $(shell [ $(cc-version) $(1) $(2) ] && echo $(3))
+cc-ifversion = $(shell [ $(cc-version) $(1) $(2) ] && echo $(3) || echo $(4))

# cc-ldoption
# Usage: ldflags += $(call cc-ldoption, -Wl$(comma)--hash-style=both)
@@ -167,7 +167,7 @@ ld-version = $(shell $(LD) --version | $(srctree)/scripts/ld-version.sh)

# ld-ifversion
# Usage: $(call ld-ifversion, -ge, 22252, y)
-ld-ifversion = $(shell [ $(ld-version) $(1) $(2) ] && echo $(3))
+ld-ifversion = $(shell [ $(ld-version) $(1) $(2) ] && echo $(3) || echo $(4))

######

--
1.9.1

2014-12-25 05:32:57

by Masahiro Yamada

[permalink] [raw]
Subject: [PATCH 2/6] kbuild: do not add $(call ...) to invoke cc-version or cc-fullversion

The macros cc-version, cc-fullversion and ld-version take no argument.
It is not necessary to add $(call ...) to invoke them.

Signed-off-by: Masahiro Yamada <[email protected]>
---

Documentation/kbuild/makefiles.txt | 4 ++--
arch/parisc/Makefile | 2 +-
arch/powerpc/Makefile | 6 +++---
arch/x86/Makefile.um | 2 +-
kernel/gcov/Makefile | 2 +-
scripts/Kbuild.include | 7 ++-----
6 files changed, 10 insertions(+), 13 deletions(-)

diff --git a/Documentation/kbuild/makefiles.txt b/Documentation/kbuild/makefiles.txt
index a311db8..7b3487a 100644
--- a/Documentation/kbuild/makefiles.txt
+++ b/Documentation/kbuild/makefiles.txt
@@ -524,7 +524,7 @@ more details, with real examples.
Example:
#arch/x86/Makefile
cflags-y += $(shell \
- if [ $(call cc-version) -ge 0300 ] ; then \
+ if [ $(cc-version) -ge 0300 ] ; then \
echo "-mregparm=3"; fi ;)

In the above example, -mregparm=3 is only used for gcc version greater
@@ -552,7 +552,7 @@ more details, with real examples.

Example:
#arch/powerpc/Makefile
- $(Q)if test "$(call cc-fullversion)" = "040200" ; then \
+ $(Q)if test "$(cc-fullversion)" = "040200" ; then \
echo -n '*** GCC-4.2.0 cannot compile the 64-bit powerpc ' ; \
false ; \
fi
diff --git a/arch/parisc/Makefile b/arch/parisc/Makefile
index e9b4b6a..ff5e55f 100644
--- a/arch/parisc/Makefile
+++ b/arch/parisc/Makefile
@@ -149,7 +149,7 @@ endef
# we require gcc 3.3 or above to compile the kernel
archprepare: checkbin
checkbin:
- @if test "$(call cc-version)" -lt "0303"; then \
+ @if test "$(cc-version)" -lt "0303"; then \
echo -n "Sorry, GCC v3.3 or above is required to build " ; \
echo "the kernel." ; \
false ; \
diff --git a/arch/powerpc/Makefile b/arch/powerpc/Makefile
index 132d9c6..fc502e0 100644
--- a/arch/powerpc/Makefile
+++ b/arch/powerpc/Makefile
@@ -314,7 +314,7 @@ TOUT := .tmp_gas_check
# - Require gcc 4.0 or above on 64-bit
# - gcc-4.2.0 has issues compiling modules on 64-bit
checkbin:
- @if test "$(call cc-version)" = "0304" ; then \
+ @if test "$(cc-version)" = "0304" ; then \
if ! /bin/echo mftb 5 | $(AS) -v -mppc -many -o $(TOUT) >/dev/null 2>&1 ; then \
echo -n '*** ${VERSION}.${PATCHLEVEL} kernels no longer build '; \
echo 'correctly with gcc-3.4 and your version of binutils.'; \
@@ -322,13 +322,13 @@ checkbin:
false; \
fi ; \
fi
- @if test "$(call cc-version)" -lt "0400" \
+ @if test "$(cc-version)" -lt "0400" \
&& test "x${CONFIG_PPC64}" = "xy" ; then \
echo -n "Sorry, GCC v4.0 or above is required to build " ; \
echo "the 64-bit powerpc kernel." ; \
false ; \
fi
- @if test "$(call cc-fullversion)" = "040200" \
+ @if test "$(cc-fullversion)" = "040200" \
&& test "x${CONFIG_MODULES}${CONFIG_PPC64}" = "xyy" ; then \
echo -n '*** GCC-4.2.0 cannot compile the 64-bit powerpc ' ; \
echo 'kernel with modules enabled.' ; \
diff --git a/arch/x86/Makefile.um b/arch/x86/Makefile.um
index 36b62bc..95eba55 100644
--- a/arch/x86/Makefile.um
+++ b/arch/x86/Makefile.um
@@ -30,7 +30,7 @@ cflags-y += -ffreestanding
# Disable unit-at-a-time mode on pre-gcc-4.0 compilers, it makes gcc use
# a lot more stack due to the lack of sharing of stacklots. Also, gcc
# 4.3.0 needs -funit-at-a-time for extern inline functions.
-KBUILD_CFLAGS += $(shell if [ $(call cc-version) -lt 0400 ] ; then \
+KBUILD_CFLAGS += $(shell if [ $(cc-version) -lt 0400 ] ; then \
echo $(call cc-option,-fno-unit-at-a-time); \
else echo $(call cc-option,-funit-at-a-time); fi ;)

diff --git a/kernel/gcov/Makefile b/kernel/gcov/Makefile
index 52aa7e8..6f01fa3 100644
--- a/kernel/gcov/Makefile
+++ b/kernel/gcov/Makefile
@@ -21,7 +21,7 @@ else
# is not available. We can probably move if-lt to Kbuild.include, so it's also
# not defined during clean or to include Kbuild.include in
# scripts/Makefile.clean. But the following workaround seems least invasive.
- cc-ver := $(if $(call cc-version),$(call cc-version),0)
+ cc-ver := $(if $(cc-version),$(cc-version),0)
endif

obj-$(CONFIG_GCOV_KERNEL) := base.o fs.o
diff --git a/scripts/Kbuild.include b/scripts/Kbuild.include
index a972666..69c9f57 100644
--- a/scripts/Kbuild.include
+++ b/scripts/Kbuild.include
@@ -136,17 +136,15 @@ cc-disable-warning = $(call try-run,\
$(CC) $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS) -W$(strip $(1)) -c -x c /dev/null -o "$$TMP",-Wno-$(strip $(1)))

# cc-version
-# Usage gcc-ver := $(call cc-version)
cc-version = $(shell $(KBUILD_SHELL) $(srctree)/scripts/gcc-version.sh $(CC))

# cc-fullversion
-# Usage gcc-ver := $(call cc-fullversion)
cc-fullversion = $(shell $(KBUILD_SHELL) \
$(srctree)/scripts/gcc-version.sh -p $(CC))

# cc-ifversion
# Usage: EXTRA_CFLAGS += $(call cc-ifversion, -lt, 0402, -O1)
-cc-ifversion = $(shell [ $(call cc-version) $(1) $(2) ] && echo $(3))
+cc-ifversion = $(shell [ $(cc-version) $(1) $(2) ] && echo $(3))

# cc-ldoption
# Usage: ldflags += $(call cc-ldoption, -Wl$(comma)--hash-style=both)
@@ -164,13 +162,12 @@ ld-option = $(call try-run,\
ar-option = $(call try-run, $(AR) rc$(1) "$$TMP",$(1),$(2))

# ld-version
-# Usage: $(call ld-version)
# Note this is mainly for HJ Lu's 3 number binutil versions
ld-version = $(shell $(LD) --version | $(srctree)/scripts/ld-version.sh)

# ld-ifversion
# Usage: $(call ld-ifversion, -ge, 22252, y)
-ld-ifversion = $(shell [ $(call ld-version) $(1) $(2) ] && echo $(3))
+ld-ifversion = $(shell [ $(ld-version) $(1) $(2) ] && echo $(3))

######

--
1.9.1

2014-12-25 22:41:22

by Helge Deller

[permalink] [raw]
Subject: Re: [PATCH 2/6] kbuild: do not add $(call ...) to invoke cc-version or cc-fullversion

On 12/25/2014 06:31 AM, Masahiro Yamada wrote:
> The macros cc-version, cc-fullversion and ld-version take no argument.
> It is not necessary to add $(call ...) to invoke them.
>
> Signed-off-by: Masahiro Yamada <[email protected]>
> ---
>
> Documentation/kbuild/makefiles.txt | 4 ++--
> arch/parisc/Makefile | 2 +-

For the parisc change:
Acked-by: Helge Deller <[email protected]>


Helge

> arch/powerpc/Makefile | 6 +++---
> arch/x86/Makefile.um | 2 +-
> kernel/gcov/Makefile | 2 +-
> scripts/Kbuild.include | 7 ++-----
> 6 files changed, 10 insertions(+), 13 deletions(-)
>
> diff --git a/Documentation/kbuild/makefiles.txt b/Documentation/kbuild/makefiles.txt
> index a311db8..7b3487a 100644
> --- a/Documentation/kbuild/makefiles.txt
> +++ b/Documentation/kbuild/makefiles.txt
> @@ -524,7 +524,7 @@ more details, with real examples.
> Example:
> #arch/x86/Makefile
> cflags-y += $(shell \
> - if [ $(call cc-version) -ge 0300 ] ; then \
> + if [ $(cc-version) -ge 0300 ] ; then \
> echo "-mregparm=3"; fi ;)
>
> In the above example, -mregparm=3 is only used for gcc version greater
> @@ -552,7 +552,7 @@ more details, with real examples.
>
> Example:
> #arch/powerpc/Makefile
> - $(Q)if test "$(call cc-fullversion)" = "040200" ; then \
> + $(Q)if test "$(cc-fullversion)" = "040200" ; then \
> echo -n '*** GCC-4.2.0 cannot compile the 64-bit powerpc ' ; \
> false ; \
> fi
> diff --git a/arch/parisc/Makefile b/arch/parisc/Makefile
> index e9b4b6a..ff5e55f 100644
> --- a/arch/parisc/Makefile
> +++ b/arch/parisc/Makefile
> @@ -149,7 +149,7 @@ endef
> # we require gcc 3.3 or above to compile the kernel
> archprepare: checkbin
> checkbin:
> - @if test "$(call cc-version)" -lt "0303"; then \
> + @if test "$(cc-version)" -lt "0303"; then \
> echo -n "Sorry, GCC v3.3 or above is required to build " ; \
> echo "the kernel." ; \
> false ; \
> diff --git a/arch/powerpc/Makefile b/arch/powerpc/Makefile
> index 132d9c6..fc502e0 100644
> --- a/arch/powerpc/Makefile
> +++ b/arch/powerpc/Makefile
> @@ -314,7 +314,7 @@ TOUT := .tmp_gas_check
> # - Require gcc 4.0 or above on 64-bit
> # - gcc-4.2.0 has issues compiling modules on 64-bit
> checkbin:
> - @if test "$(call cc-version)" = "0304" ; then \
> + @if test "$(cc-version)" = "0304" ; then \
> if ! /bin/echo mftb 5 | $(AS) -v -mppc -many -o $(TOUT) >/dev/null 2>&1 ; then \
> echo -n '*** ${VERSION}.${PATCHLEVEL} kernels no longer build '; \
> echo 'correctly with gcc-3.4 and your version of binutils.'; \
> @@ -322,13 +322,13 @@ checkbin:
> false; \
> fi ; \
> fi
> - @if test "$(call cc-version)" -lt "0400" \
> + @if test "$(cc-version)" -lt "0400" \
> && test "x${CONFIG_PPC64}" = "xy" ; then \
> echo -n "Sorry, GCC v4.0 or above is required to build " ; \
> echo "the 64-bit powerpc kernel." ; \
> false ; \
> fi
> - @if test "$(call cc-fullversion)" = "040200" \
> + @if test "$(cc-fullversion)" = "040200" \
> && test "x${CONFIG_MODULES}${CONFIG_PPC64}" = "xyy" ; then \
> echo -n '*** GCC-4.2.0 cannot compile the 64-bit powerpc ' ; \
> echo 'kernel with modules enabled.' ; \
> diff --git a/arch/x86/Makefile.um b/arch/x86/Makefile.um
> index 36b62bc..95eba55 100644
> --- a/arch/x86/Makefile.um
> +++ b/arch/x86/Makefile.um
> @@ -30,7 +30,7 @@ cflags-y += -ffreestanding
> # Disable unit-at-a-time mode on pre-gcc-4.0 compilers, it makes gcc use
> # a lot more stack due to the lack of sharing of stacklots. Also, gcc
> # 4.3.0 needs -funit-at-a-time for extern inline functions.
> -KBUILD_CFLAGS += $(shell if [ $(call cc-version) -lt 0400 ] ; then \
> +KBUILD_CFLAGS += $(shell if [ $(cc-version) -lt 0400 ] ; then \
> echo $(call cc-option,-fno-unit-at-a-time); \
> else echo $(call cc-option,-funit-at-a-time); fi ;)
>
> diff --git a/kernel/gcov/Makefile b/kernel/gcov/Makefile
> index 52aa7e8..6f01fa3 100644
> --- a/kernel/gcov/Makefile
> +++ b/kernel/gcov/Makefile
> @@ -21,7 +21,7 @@ else
> # is not available. We can probably move if-lt to Kbuild.include, so it's also
> # not defined during clean or to include Kbuild.include in
> # scripts/Makefile.clean. But the following workaround seems least invasive.
> - cc-ver := $(if $(call cc-version),$(call cc-version),0)
> + cc-ver := $(if $(cc-version),$(cc-version),0)
> endif
>
> obj-$(CONFIG_GCOV_KERNEL) := base.o fs.o
> diff --git a/scripts/Kbuild.include b/scripts/Kbuild.include
> index a972666..69c9f57 100644
> --- a/scripts/Kbuild.include
> +++ b/scripts/Kbuild.include
> @@ -136,17 +136,15 @@ cc-disable-warning = $(call try-run,\
> $(CC) $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS) -W$(strip $(1)) -c -x c /dev/null -o "$$TMP",-Wno-$(strip $(1)))
>
> # cc-version
> -# Usage gcc-ver := $(call cc-version)
> cc-version = $(shell $(KBUILD_SHELL) $(srctree)/scripts/gcc-version.sh $(CC))
>
> # cc-fullversion
> -# Usage gcc-ver := $(call cc-fullversion)
> cc-fullversion = $(shell $(KBUILD_SHELL) \
> $(srctree)/scripts/gcc-version.sh -p $(CC))
>
> # cc-ifversion
> # Usage: EXTRA_CFLAGS += $(call cc-ifversion, -lt, 0402, -O1)
> -cc-ifversion = $(shell [ $(call cc-version) $(1) $(2) ] && echo $(3))
> +cc-ifversion = $(shell [ $(cc-version) $(1) $(2) ] && echo $(3))
>
> # cc-ldoption
> # Usage: ldflags += $(call cc-ldoption, -Wl$(comma)--hash-style=both)
> @@ -164,13 +162,12 @@ ld-option = $(call try-run,\
> ar-option = $(call try-run, $(AR) rc$(1) "$$TMP",$(1),$(2))
>
> # ld-version
> -# Usage: $(call ld-version)
> # Note this is mainly for HJ Lu's 3 number binutil versions
> ld-version = $(shell $(LD) --version | $(srctree)/scripts/ld-version.sh)
>
> # ld-ifversion
> # Usage: $(call ld-ifversion, -ge, 22252, y)
> -ld-ifversion = $(shell [ $(call ld-version) $(1) $(2) ] && echo $(3))
> +ld-ifversion = $(shell [ $(ld-version) $(1) $(2) ] && echo $(3))
>
> ######
>
>