diff --git a/core/base_rules.mk b/core/base_rules.mk index 4ee2985ec1..c182a779e6 100644 --- a/core/base_rules.mk +++ b/core/base_rules.mk @@ -267,7 +267,6 @@ full_static_java_libs := \ JAVA_LIBRARIES,$(lib),$(LOCAL_IS_HOST_MODULE))/javalib.jar) $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_INSTALL_DIR := $(dir $(LOCAL_INSTALLED_MODULE)) -$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_INTERMEDIATES_DIR := $(intermediates) $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_CLASS_INTERMEDIATES_DIR := $(intermediates)/classes $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_SOURCE_INTERMEDIATES_DIR := $(intermediates)/src $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_JAVA_SOURCES := $(all_java_sources) @@ -357,6 +356,8 @@ $(LOCAL_INTERMEDIATE_TARGETS) : PRIVATE_ALL_JAVA_LIBRARIES:= $(full_java_libs) $(LOCAL_INTERMEDIATE_TARGETS) : PRIVATE_IS_HOST_MODULE := $(LOCAL_IS_HOST_MODULE) $(LOCAL_INTERMEDIATE_TARGETS) : PRIVATE_HOST:= $(my_host) +$(LOCAL_INTERMEDIATE_TARGETS) : PRIVATE_INTERMEDIATES_DIR:= $(intermediates) + # Tell the module and all of its sub-modules who it is. $(LOCAL_INTERMEDIATE_TARGETS) : PRIVATE_MODULE:= $(LOCAL_MODULE) diff --git a/core/definitions.mk b/core/definitions.mk index 069855d8f6..f3382c3a07 100644 --- a/core/definitions.mk +++ b/core/definitions.mk @@ -904,12 +904,28 @@ endef ## Commands for running ar ########################################################### +define extract-and-include-whole-static-libs +$(foreach lib,$(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES), \ + @echo "preparing StaticLib: $(PRIVATE_MODULE) [including $(lib)]"; \ + ldir=$(PRIVATE_INTERMEDIATES_DIR)/WHOLE/$(basename $(notdir $(lib)))_objs;\ + rm -rf $$ldir; \ + mkdir -p $$ldir; \ + filelist=; \ + for f in `$(TARGET_AR) t $(lib)`; do \ + $(TARGET_AR) p $(lib) $$f > $$ldir/$$f; \ + filelist="$$filelist $$ldir/$$f"; \ + done ; \ + $(TARGET_AR) $(TARGET_GLOBAL_ARFLAGS) $(PRIVATE_ARFLAGS) $@ $$filelist;\ +) +endef + # Explicitly delete the archive first so that ar doesn't # try to add to an existing archive. define transform-o-to-static-lib @mkdir -p $(dir $@) -@echo "target StaticLib: $(PRIVATE_MODULE) ($@)" @rm -f $@ +$(extract-and-include-whole-static-libs) +@echo "target StaticLib: $(PRIVATE_MODULE) ($@)" $(hide) $(TARGET_AR) $(TARGET_GLOBAL_ARFLAGS) $(PRIVATE_ARFLAGS) $@ $^ endef diff --git a/core/static_library.mk b/core/static_library.mk index 252dfd092b..2138e469b1 100644 --- a/core/static_library.mk +++ b/core/static_library.mk @@ -25,5 +25,6 @@ $(all_objects) : TARGET_GLOBAL_CFLAGS := $(all_objects) : TARGET_GLOBAL_CPPFLAGS := endif +$(LOCAL_BUILT_MODULE): $(built_whole_libraries) $(LOCAL_BUILT_MODULE): $(all_objects) $(transform-o-to-static-lib)