2019-09-23 14:03:21

by Masahiro Yamada

[permalink] [raw]
Subject: [PATCH] kbuild: remove ar-option and KBUILD_ARFLAGS

Commit 40df759e2b9e ("kbuild: Fix build with binutils <= 2.19")
introduced ar-option and KBUILD_ARFLAGS to cope with old binutils.

According to Documentation/process/changes.rst, the current minimal
supported version of binutils is 2.21 so you can assume the 'D' option
is always supported. Not only GNU ar but also llvm-ar supports it.

With the 'D' option hard-coded, there is no more user of ar-option
or KBUILD_ARFLAGS.

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

Documentation/kbuild/makefiles.rst | 5 -----
Makefile | 4 ----
arch/powerpc/boot/Makefile | 2 +-
scripts/Kbuild.include | 5 -----
scripts/Makefile.build | 2 +-
scripts/Makefile.lib | 2 +-
6 files changed, 3 insertions(+), 17 deletions(-)

diff --git a/Documentation/kbuild/makefiles.rst b/Documentation/kbuild/makefiles.rst
index 6ba9d5365ff3..b89c88168d6a 100644
--- a/Documentation/kbuild/makefiles.rst
+++ b/Documentation/kbuild/makefiles.rst
@@ -954,11 +954,6 @@ When kbuild executes, the following steps are followed (roughly):

From commandline LDFLAGS_MODULE shall be used (see kbuild.txt).

- KBUILD_ARFLAGS Options for $(AR) when creating archives
-
- $(KBUILD_ARFLAGS) set by the top level Makefile to "D" (deterministic
- mode) if this option is supported by $(AR).
-
KBUILD_LDS

The linker script with full path. Assigned by the top-level Makefile.
diff --git a/Makefile b/Makefile
index 656a8c95789d..88b180b2cb64 100644
--- a/Makefile
+++ b/Makefile
@@ -498,7 +498,6 @@ export CFLAGS_KASAN CFLAGS_KASAN_NOSANITIZE CFLAGS_UBSAN
export KBUILD_AFLAGS AFLAGS_KERNEL AFLAGS_MODULE
export KBUILD_AFLAGS_MODULE KBUILD_CFLAGS_MODULE KBUILD_LDFLAGS_MODULE
export KBUILD_AFLAGS_KERNEL KBUILD_CFLAGS_KERNEL
-export KBUILD_ARFLAGS

# Files to ignore in find ... statements

@@ -914,9 +913,6 @@ ifdef CONFIG_RETPOLINE
KBUILD_CFLAGS += $(call cc-option,-fcf-protection=none)
endif

-# use the deterministic mode of AR if available
-KBUILD_ARFLAGS := $(call ar-option,D)
-
include scripts/Makefile.kasan
include scripts/Makefile.extrawarn
include scripts/Makefile.ubsan
diff --git a/arch/powerpc/boot/Makefile b/arch/powerpc/boot/Makefile
index 6841bd52738b..dfbd7f22eef5 100644
--- a/arch/powerpc/boot/Makefile
+++ b/arch/powerpc/boot/Makefile
@@ -50,7 +50,7 @@ endif

BOOTAFLAGS := -D__ASSEMBLY__ $(BOOTCFLAGS) -nostdinc

-BOOTARFLAGS := -cr$(KBUILD_ARFLAGS)
+BOOTARFLAGS := -crD

ifdef CONFIG_CC_IS_CLANG
BOOTCFLAGS += $(CLANG_FLAGS)
diff --git a/scripts/Kbuild.include b/scripts/Kbuild.include
index e31fd6a8b2a3..956668239ef5 100644
--- a/scripts/Kbuild.include
+++ b/scripts/Kbuild.include
@@ -143,11 +143,6 @@ cc-ifversion = $(shell [ $(CONFIG_GCC_VERSION)0 $(1) $(2)000 ] && echo $(3) || e
# Usage: KBUILD_LDFLAGS += $(call ld-option, -X, -Y)
ld-option = $(call try-run, $(LD) $(KBUILD_LDFLAGS) $(1) -v,$(1),$(2),$(3))

-# ar-option
-# Usage: KBUILD_ARFLAGS := $(call ar-option,D)
-# Important: no spaces around options
-ar-option = $(call try-run, $(AR) rc$(1) "$$TMP",$(1),$(2))
-
# ld-version
# Note this is mainly for HJ Lu's 3 number binutil versions
ld-version = $(shell $(LD) --version | $(srctree)/scripts/ld-version.sh)
diff --git a/scripts/Makefile.build b/scripts/Makefile.build
index 611bda95ac5e..f199341f04eb 100644
--- a/scripts/Makefile.build
+++ b/scripts/Makefile.build
@@ -395,7 +395,7 @@ $(sort $(subdir-obj-y)): $(subdir-ym) ;
ifdef builtin-target

quiet_cmd_ar_builtin = AR $@
- cmd_ar_builtin = rm -f $@; $(AR) rcSTP$(KBUILD_ARFLAGS) $@ $(real-prereqs)
+ cmd_ar_builtin = rm -f $@; $(AR) cDPrST $@ $(real-prereqs)

$(builtin-target): $(real-obj-y) FORCE
$(call if_changed,ar_builtin)
diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib
index 23e524027740..15895fd4ef9f 100644
--- a/scripts/Makefile.lib
+++ b/scripts/Makefile.lib
@@ -238,7 +238,7 @@ quiet_cmd_ld = LD $@
# ---------------------------------------------------------------------------

quiet_cmd_ar = AR $@
- cmd_ar = rm -f $@; $(AR) rcsTP$(KBUILD_ARFLAGS) $@ $(real-prereqs)
+ cmd_ar = rm -f $@; $(AR) cDPrsT $@ $(real-prereqs)

# Objcopy
# ---------------------------------------------------------------------------
--
2.17.1


2019-09-26 08:36:01

by Nick Desaulniers

[permalink] [raw]
Subject: Re: [PATCH] kbuild: remove ar-option and KBUILD_ARFLAGS

On Tue, Sep 24, 2019 at 9:38 AM Masahiro Yamada
<[email protected]> wrote:
>
> Commit 40df759e2b9e ("kbuild: Fix build with binutils <= 2.19")
> introduced ar-option and KBUILD_ARFLAGS to cope with old binutils.
>
> According to Documentation/process/changes.rst, the current minimal
> supported version of binutils is 2.21 so you can assume the 'D' option
> is always supported. Not only GNU ar but also llvm-ar supports it.

Yep, a nice cleanup. Thanks for the patch and I appreciate checking llvm-ar.
Reviewed-by: Nick Desaulniers <[email protected]>
Tested-by: Nick Desaulniers <[email protected]>

>
> With the 'D' option hard-coded, there is no more user of ar-option
> or KBUILD_ARFLAGS.
>
> Signed-off-by: Masahiro Yamada <[email protected]>
> ---
>
> Documentation/kbuild/makefiles.rst | 5 -----
> Makefile | 4 ----
> arch/powerpc/boot/Makefile | 2 +-
> scripts/Kbuild.include | 5 -----
> scripts/Makefile.build | 2 +-
> scripts/Makefile.lib | 2 +-
> 6 files changed, 3 insertions(+), 17 deletions(-)
>
> diff --git a/Documentation/kbuild/makefiles.rst b/Documentation/kbuild/makefiles.rst
> index 6ba9d5365ff3..b89c88168d6a 100644
> --- a/Documentation/kbuild/makefiles.rst
> +++ b/Documentation/kbuild/makefiles.rst
> @@ -954,11 +954,6 @@ When kbuild executes, the following steps are followed (roughly):
>
> From commandline LDFLAGS_MODULE shall be used (see kbuild.txt).
>
> - KBUILD_ARFLAGS Options for $(AR) when creating archives
> -
> - $(KBUILD_ARFLAGS) set by the top level Makefile to "D" (deterministic
> - mode) if this option is supported by $(AR).
> -
> KBUILD_LDS
>
> The linker script with full path. Assigned by the top-level Makefile.
> diff --git a/Makefile b/Makefile
> index 656a8c95789d..88b180b2cb64 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -498,7 +498,6 @@ export CFLAGS_KASAN CFLAGS_KASAN_NOSANITIZE CFLAGS_UBSAN
> export KBUILD_AFLAGS AFLAGS_KERNEL AFLAGS_MODULE
> export KBUILD_AFLAGS_MODULE KBUILD_CFLAGS_MODULE KBUILD_LDFLAGS_MODULE
> export KBUILD_AFLAGS_KERNEL KBUILD_CFLAGS_KERNEL
> -export KBUILD_ARFLAGS
>
> # Files to ignore in find ... statements
>
> @@ -914,9 +913,6 @@ ifdef CONFIG_RETPOLINE
> KBUILD_CFLAGS += $(call cc-option,-fcf-protection=none)
> endif
>
> -# use the deterministic mode of AR if available
> -KBUILD_ARFLAGS := $(call ar-option,D)
> -
> include scripts/Makefile.kasan
> include scripts/Makefile.extrawarn
> include scripts/Makefile.ubsan
> diff --git a/arch/powerpc/boot/Makefile b/arch/powerpc/boot/Makefile
> index 6841bd52738b..dfbd7f22eef5 100644
> --- a/arch/powerpc/boot/Makefile
> +++ b/arch/powerpc/boot/Makefile
> @@ -50,7 +50,7 @@ endif
>
> BOOTAFLAGS := -D__ASSEMBLY__ $(BOOTCFLAGS) -nostdinc
>
> -BOOTARFLAGS := -cr$(KBUILD_ARFLAGS)
> +BOOTARFLAGS := -crD
>
> ifdef CONFIG_CC_IS_CLANG
> BOOTCFLAGS += $(CLANG_FLAGS)
> diff --git a/scripts/Kbuild.include b/scripts/Kbuild.include
> index e31fd6a8b2a3..956668239ef5 100644
> --- a/scripts/Kbuild.include
> +++ b/scripts/Kbuild.include
> @@ -143,11 +143,6 @@ cc-ifversion = $(shell [ $(CONFIG_GCC_VERSION)0 $(1) $(2)000 ] && echo $(3) || e
> # Usage: KBUILD_LDFLAGS += $(call ld-option, -X, -Y)
> ld-option = $(call try-run, $(LD) $(KBUILD_LDFLAGS) $(1) -v,$(1),$(2),$(3))
>
> -# ar-option
> -# Usage: KBUILD_ARFLAGS := $(call ar-option,D)
> -# Important: no spaces around options
> -ar-option = $(call try-run, $(AR) rc$(1) "$$TMP",$(1),$(2))
> -
> # ld-version
> # Note this is mainly for HJ Lu's 3 number binutil versions
> ld-version = $(shell $(LD) --version | $(srctree)/scripts/ld-version.sh)
> diff --git a/scripts/Makefile.build b/scripts/Makefile.build
> index 611bda95ac5e..f199341f04eb 100644
> --- a/scripts/Makefile.build
> +++ b/scripts/Makefile.build
> @@ -395,7 +395,7 @@ $(sort $(subdir-obj-y)): $(subdir-ym) ;
> ifdef builtin-target
>
> quiet_cmd_ar_builtin = AR $@
> - cmd_ar_builtin = rm -f $@; $(AR) rcSTP$(KBUILD_ARFLAGS) $@ $(real-prereqs)
> + cmd_ar_builtin = rm -f $@; $(AR) cDPrST $@ $(real-prereqs)
>
> $(builtin-target): $(real-obj-y) FORCE
> $(call if_changed,ar_builtin)
> diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib
> index 23e524027740..15895fd4ef9f 100644
> --- a/scripts/Makefile.lib
> +++ b/scripts/Makefile.lib
> @@ -238,7 +238,7 @@ quiet_cmd_ld = LD $@
> # ---------------------------------------------------------------------------
>
> quiet_cmd_ar = AR $@
> - cmd_ar = rm -f $@; $(AR) rcsTP$(KBUILD_ARFLAGS) $@ $(real-prereqs)
> + cmd_ar = rm -f $@; $(AR) cDPrsT $@ $(real-prereqs)
>
> # Objcopy
> # ---------------------------------------------------------------------------
> --
> 2.17.1
>
> --
> 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 [email protected].
> To view this discussion on the web visit https://groups.google.com/d/msgid/clang-built-linux/20190921064954.11196-1-yamada.masahiro%40socionext.com.



--
Thanks,
~Nick Desaulniers