kbuild: Fix build with binutils <= 2.19
authorMichal Marek <mmarek@suse.cz>
Wed, 20 Apr 2011 11:45:30 +0000 (13:45 +0200)
committerMichal Marek <mmarek@suse.cz>
Wed, 20 Apr 2011 13:39:22 +0000 (15:39 +0200)
The D option of ar is only available in newer versions.

Signed-off-by: Michal Marek <mmarek@suse.cz>
Documentation/kbuild/makefiles.txt
Makefile
scripts/Kbuild.include
scripts/Makefile.build

index 5d145bb443c0a87957eb37cbb75c4ffb7543623f..40e082bb8c5233ca683ad9e1894ce87f00bf7568 100644 (file)
@@ -955,6 +955,11 @@ When kbuild executes, the following steps are followed (roughly):
        used when linking modules. This is often a linker script.
        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).
+
 --- 6.2 Add prerequisites to archprepare:
 
        The archprepare: rule is used to list prerequisites that need to be
index c3bd316b16f40714b3090e8f16a12be0fd32becd..d7c42319fe1e9fd77cf9873cd8b949c9f14d9195 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -382,6 +382,7 @@ export KBUILD_CFLAGS CFLAGS_KERNEL CFLAGS_MODULE CFLAGS_GCOV
 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
 
 # When compiling out-of-tree modules, put MODVERDIR in the module
 # tree rather than in the kernel tree. The kernel tree might
@@ -612,6 +613,9 @@ KBUILD_CFLAGS       += $(call cc-option,-fno-strict-overflow)
 # conserve stack if available
 KBUILD_CFLAGS   += $(call cc-option,-fconserve-stack)
 
+# use the deterministic mode of AR if available
+KBUILD_ARFLAGS := $(call ar-option,D)
+
 # check for 'asm goto'
 ifeq ($(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-goto.sh $(CC)), y)
        KBUILD_CFLAGS += -DCC_HAVE_ASM_GOTO
index ed2773edfe71bae99adc0a7b64a454912dfd4477..fae2d8d8cb09db6026fe01f98752de524b962aac 100644 (file)
@@ -141,6 +141,11 @@ cc-ldoption = $(call try-run,\
 ld-option = $(call try-run,\
        $(CC) /dev/null -c -o "$$TMPO" ; $(LD) $(1) "$$TMPO" -o "$$TMP",$(1),$(2))
 
+# 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))
+
 ######
 
 ###
index 5f87d3709f9fe18eba67edc6c65ab560e1787482..e1244ef308ce6c726681b5234b2fd6686b173f2f 100644 (file)
@@ -345,7 +345,7 @@ quiet_cmd_link_o_target = LD      $@
 cmd_link_o_target = $(if $(strip $(obj-y)),\
                      $(LD) $(ld_flags) -r -o $@ $(filter $(obj-y), $^) \
                      $(cmd_secanalysis),\
-                     rm -f $@; $(AR) rcsD $@)
+                     rm -f $@; $(AR) rcs$(KBUILD_ARFLAGS) $@)
 
 $(builtin-target): $(obj-y) FORCE
        $(call if_changed,link_o_target)
@@ -371,7 +371,7 @@ $(modorder-target): $(subdir-ym) FORCE
 #
 ifdef lib-target
 quiet_cmd_link_l_target = AR      $@
-cmd_link_l_target = rm -f $@; $(AR) rcsD $@ $(lib-y)
+cmd_link_l_target = rm -f $@; $(AR) rcs$(KBUILD_ARFLAGS) $@ $(lib-y)
 
 $(lib-target): $(lib-y) FORCE
        $(call if_changed,link_l_target)