summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorYing Wang <wangying@google.com>2011-04-14 10:17:34 -0700
committerAndroid Git Automerger <android-git-automerger@android.com>2011-04-14 10:17:34 -0700
commit8c425a9d7cfd7b6c660d1ba2df92adec32c0bee9 (patch)
tree88388c546199c755a4fbb0b63c9376ba9b2bb9f6 /core
parent4d9a8556ffcff525568f49fd22549991b6ec77cd (diff)
parent479ec68292c7ba17ab8e3d849cc1f186847f5cc5 (diff)
downloadbuild-8c425a9d7cfd7b6c660d1ba2df92adec32c0bee9.zip
build-8c425a9d7cfd7b6c660d1ba2df92adec32c0bee9.tar.gz
build-8c425a9d7cfd7b6c660d1ba2df92adec32c0bee9.tar.bz2
am 479ec682: Merge "Fix "argument list too long""
* commit '479ec68292c7ba17ab8e3d849cc1f186847f5cc5': Fix "argument list too long"
Diffstat (limited to 'core')
-rw-r--r--core/definitions.mk26
1 files changed, 21 insertions, 5 deletions
diff --git a/core/definitions.mk b/core/definitions.mk
index 17c8089..6e7a5ad 100644
--- a/core/definitions.mk
+++ b/core/definitions.mk
@@ -980,6 +980,24 @@ endef
## Commands for running ar
###########################################################
+define _concat-if-arg2-not-empty
+$(if $(2),$(hide) $(1) $(2))
+endef
+
+# Split long argument list into smaller groups and call the command repeatedly
+#
+# $(1): the command without arguments
+# $(2): the arguments
+define split-long-arguments
+$(call _concat-if-arg2-not-empty,$(1),$(wordlist 1,500,$(2)))
+$(call _concat-if-arg2-not-empty,$(1),$(wordlist 501,1000,$(2)))
+$(call _concat-if-arg2-not-empty,$(1),$(wordlist 1001,1500,$(2)))
+$(call _concat-if-arg2-not-empty,$(1),$(wordlist 1501,2000,$(2)))
+$(call _concat-if-arg2-not-empty,$(1),$(wordlist 2001,2500,$(2)))
+$(call _concat-if-arg2-not-empty,$(1),$(wordlist 2501,3000,$(2)))
+$(call _concat-if-arg2-not-empty,$(1),$(wordlist 3001,99999,$(2)))
+endef
+
define extract-and-include-target-whole-static-libs
$(foreach lib,$(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES), \
$(hide) echo "preparing StaticLib: $(PRIVATE_MODULE) [including $(lib)]"; \
@@ -1002,8 +1020,7 @@ define transform-o-to-static-lib
@rm -f $@
$(extract-and-include-target-whole-static-libs)
@echo "target StaticLib: $(PRIVATE_MODULE) ($@)"
-$(hide) echo $(filter %.o, $^) | \
- xargs $(TARGET_AR) $(TARGET_GLOBAL_ARFLAGS) $(PRIVATE_ARFLAGS) $@
+$(call split-long-arguments,$(TARGET_AR) $(TARGET_GLOBAL_ARFLAGS) $(PRIVATE_ARFLAGS) $@,$(filter %.o, $^))
endef
###########################################################
@@ -1012,7 +1029,7 @@ endef
define extract-and-include-host-whole-static-libs
$(foreach lib,$(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES), \
- @echo "preparing StaticLib: $(PRIVATE_MODULE) [including $(lib)]"; \
+ $(hide) echo "preparing StaticLib: $(PRIVATE_MODULE) [including $(lib)]"; \
ldir=$(PRIVATE_INTERMEDIATES_DIR)/WHOLE/$(basename $(notdir $(lib)))_objs;\
rm -rf $$ldir; \
mkdir -p $$ldir; \
@@ -1032,8 +1049,7 @@ define transform-host-o-to-static-lib
@rm -f $@
$(extract-and-include-host-whole-static-libs)
@echo "host StaticLib: $(PRIVATE_MODULE) ($@)"
-echo $(filter %.o, $^) | \
- xargs $(HOST_AR) $(HOST_GLOBAL_ARFLAGS) $(PRIVATE_ARFLAGS) $@
+$(call split-long-arguments,$(HOST_AR) $(HOST_GLOBAL_ARFLAGS) $(PRIVATE_ARFLAGS) $@,$(filter %.o, $^))
endef