diff options
Diffstat (limited to 'core/definitions.mk')
-rw-r--r-- | core/definitions.mk | 303 |
1 files changed, 218 insertions, 85 deletions
diff --git a/core/definitions.mk b/core/definitions.mk index d90376e..fcd5c1a 100644 --- a/core/definitions.mk +++ b/core/definitions.mk @@ -403,6 +403,14 @@ $(1): $(2) endef ########################################################### +## Reverse order of a list +########################################################### + +define reverse-list +$(if $(1),$(call reverse-list,$(wordlist 2,$(words $(1)),$(1)))) $(firstword $(1)) +endef + +########################################################### ## The intermediates directory. Where object files go for ## a given target. We could technically get away without ## the "_intermediates" suffix on the directory, but it's @@ -602,6 +610,36 @@ $(foreach lib,$(1),$(call _java-lib-full-dep,$(lib),$(2))) endef ########################################################### +## Convert "core ext framework" to "out/.../classes.jack ..." +## $(1): library list +## $(2): Non-empty if IS_HOST_MODULE +########################################################### + +# $(1): library name +# $(2): Non-empty if IS_HOST_MODULE +define _jack-lib-full-classes +$(call _java-lib-dir,$(1),$(2))/classes.jack +endef + +# $(1): library name list +# $(2): Non-empty if IS_HOST_MODULE +define jack-lib-files +$(foreach lib,$(1),$(call _jack-lib-full-classes,$(lib),$(2))) +endef + +# $(1): library name +# $(2): Non-empty if IS_HOST_MODULE +define _jack-lib-full-dep +$(call _jack-lib-full-classes,$(1),$(2)) +endef + +# $(1): library name list +# $(2): Non-empty if IS_HOST_MODULE +define jack-lib-deps +$(foreach lib,$(1),$(call _jack-lib-full-dep,$(lib),$(2))) +endef + +########################################################### ## Run rot13 on a string ## $(1): the string. Must be one line. ########################################################### @@ -957,7 +995,7 @@ $(hide) touch $@ endef ###################################################################### -## Commands for running protoc to compile .proto into .pb.cc and .pb.h +## Commands for running protoc to compile .proto into .pb.cc (or.pb.c) and .pb.h ###################################################################### define transform-proto-to-cc @mkdir -p $(dir $@) @@ -965,10 +1003,9 @@ define transform-proto-to-cc $(hide) $(PROTOC) \ $(addprefix --proto_path=, $(PRIVATE_PROTO_INCLUDES)) \ $(PRIVATE_PROTOC_FLAGS) \ - --cpp_out=$(PRIVATE_PROTO_CC_OUTPUT_DIR) $< + $< endef - ########################################################### ## Commands for running gcc to compile a C++ file ########################################################### @@ -1357,6 +1394,7 @@ define transform-host-o-to-shared-lib-inner $(hide) $(PRIVATE_CXX) \ -Wl,-rpath-link=$($(PRIVATE_2ND_ARCH_VAR_PREFIX)HOST_OUT_INTERMEDIATE_LIBRARIES) \ -Wl,-rpath,\$$ORIGIN/../$(notdir $($(PRIVATE_2ND_ARCH_VAR_PREFIX)HOST_OUT_SHARED_LIBRARIES)) \ + -Wl,-rpath,\$$ORIGIN/$(notdir $($(PRIVATE_2ND_ARCH_VAR_PREFIX)HOST_OUT_SHARED_LIBRARIES)) \ -shared -Wl,-soname,$(notdir $@) \ $($(PRIVATE_2ND_ARCH_VAR_PREFIX)HOST_GLOBAL_LD_DIRS) \ $(if $(PRIVATE_NO_DEFAULT_COMPILER_FLAGS),, \ @@ -1573,6 +1611,7 @@ $(hide) $(PRIVATE_CXX) \ $(call normalize-host-libraries,$(PRIVATE_ALL_SHARED_LIBRARIES)) \ -Wl,-rpath-link=$($(PRIVATE_2ND_ARCH_VAR_PREFIX)HOST_OUT_INTERMEDIATE_LIBRARIES) \ -Wl,-rpath,\$$ORIGIN/../$(notdir $($(PRIVATE_2ND_ARCH_VAR_PREFIX)HOST_OUT_SHARED_LIBRARIES)) \ + -Wl,-rpath,\$$ORIGIN/$(notdir $($(PRIVATE_2ND_ARCH_VAR_PREFIX)HOST_OUT_SHARED_LIBRARIES)) \ $($(PRIVATE_2ND_ARCH_VAR_PREFIX)HOST_GLOBAL_LD_DIRS) \ $(if $(PRIVATE_NO_DEFAULT_COMPILER_FLAGS),, \ $(PRIVATE_HOST_GLOBAL_LDFLAGS) \ @@ -1625,7 +1664,8 @@ $(hide) $(AAPT) package $(PRIVATE_AAPT_FLAGS) -m \ $(if $(filter --version-code,$(PRIVATE_AAPT_FLAGS)),,$(addprefix --version-code , $(PLATFORM_SDK_VERSION))) \ $(if $(filter --version-name,$(PRIVATE_AAPT_FLAGS)),,$(addprefix --version-name , $(PLATFORM_VERSION)-$(BUILD_NUMBER))) \ $(addprefix --rename-manifest-package , $(PRIVATE_MANIFEST_PACKAGE_NAME)) \ - $(addprefix --rename-instrumentation-target-package , $(PRIVATE_MANIFEST_INSTRUMENTATION_FOR)) + $(addprefix --rename-instrumentation-target-package , $(PRIVATE_MANIFEST_INSTRUMENTATION_FOR)) \ + --skip-symbols-without-default-localization endef ifeq ($(HOST_OS),windows) @@ -1634,12 +1674,6 @@ else xlint_unchecked := -Xlint:unchecked endif -ifeq (true, $(ENABLE_INCREMENTALJAVAC)) -incremental_dex := --incremental -else -incremental_dex := -endif - # emit-line, <word list>, <output file> define emit-line $(if $(1),echo -n '$(strip $(1)) ' >> $(2)) @@ -1759,68 +1793,146 @@ define transform-java-to-classes.jar $(call compile-java,$(TARGET_JAVAC),$(PRIVATE_BOOTCLASSPATH)) endef -# Override the above definitions if we want to do incremetal javac -ifeq (true, $(ENABLE_INCREMENTALJAVAC)) -define compile-java +# Invoke Jack to compile java from source to dex and jack files. +# +# Some historical notes: +# - below we write the list of java files to java-source-list to avoid argument +# list length problems with Cygwin +# - we filter out duplicate java file names because Jack doesn't like them. +define jack-java-to-dex +$(hide) rm -f $@ +$(hide) rm -f $(PRIVATE_CLASSES_JACK) +$(hide) rm -rf $(PRIVATE_JACK_INTERMEDIATES_DIR) $(hide) mkdir -p $(dir $@) -$(hide) mkdir -p $(PRIVATE_CLASS_INTERMEDIATES_DIR) -$(hide) touch $(PRIVATE_CLASS_INTERMEDIATES_DIR)/newstamp -$(call unzip-jar-files,$(PRIVATE_STATIC_JAVA_LIBRARIES),$(PRIVATE_CLASS_INTERMEDIATES_DIR)) -$(hide) if [ -e $(PRIVATE_CLASS_INTERMEDIATES_DIR)/stamp ] ; then \ - newerFlag=$$(echo -n "-newer $(PRIVATE_CLASS_INTERMEDIATES_DIR)/stamp") ; \ - fi ; \ - find $(PRIVATE_JAVA_SOURCES) $$newerFlag > $(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list ; \ - if [ -d "$(PRIVATE_SOURCE_INTERMEDIATES_DIR)" ]; then \ - find $(PRIVATE_SOURCE_INTERMEDIATES_DIR) -name '*.java' $$newerFlag >> $(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list; \ - fi -$(hide) tr ' ' '\n' < $(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list \ - | sort -u > $(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list-uniq -@echo "(Incremental) build source files:" -@cat $(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list-uniq -$(hide) if [ -s $(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list-uniq ] ; then \ - $(1) -encoding UTF-8 \ - $(strip $(PRIVATE_JAVAC_DEBUG_FLAGS)) \ - $(if $(findstring true,$(PRIVATE_WARNINGS_ENABLE)),$(xlint_unchecked),) \ - $(2) \ - $(addprefix -classpath ,$(strip \ - $(call normalize-path-list,$(PRIVATE_ALL_JAVA_LIBRARIES) $(PRIVATE_CLASS_INTERMEDIATES_DIR)))) \ - $(if $(findstring true,$(PRIVATE_WARNINGS_ENABLE)),$(xlint_unchecked),) \ - -extdirs "" -d $(PRIVATE_CLASS_INTERMEDIATES_DIR) \ - $(PRIVATE_JAVACFLAGS) \ - \@$(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list-uniq \ - || ( exit 41 ) \ +$(hide) mkdir -p $(dir $(PRIVATE_CLASSES_JACK)) +$(hide) mkdir -p $(PRIVATE_JACK_INTERMEDIATES_DIR) +$(if $(PRIVATE_JACK_INCREMENTAL_DIR),$(hide) mkdir -p $(PRIVATE_JACK_INCREMENTAL_DIR)) +$(call dump-words-to-file,$(PRIVATE_JAVA_SOURCES),$(PRIVATE_JACK_INTERMEDIATES_DIR)/java-source-list) +$(hide) if [ -d "$(PRIVATE_SOURCE_INTERMEDIATES_DIR)" ]; then \ + find $(PRIVATE_SOURCE_INTERMEDIATES_DIR) -name '*.java' >> $(PRIVATE_JACK_INTERMEDIATES_DIR)/java-source-list; \ fi -$(hide) rm -f $(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list -$(hide) rm -f $(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list-uniq +$(hide) tr ' ' '\n' < $(PRIVATE_JACK_INTERMEDIATES_DIR)/java-source-list \ + | sort -u > $(PRIVATE_JACK_INTERMEDIATES_DIR)/java-source-list-uniq +$(if $(PRIVATE_JACK_PROGUARD_FLAGS), \ + $(hide) echo -basedirectory $(CURDIR) > $@.flags; \ + echo $(PRIVATE_JACK_PROGUARD_FLAGS) >> $@.flags; \ +) +$(if $(PRIVATE_EXTRA_JAR_ARGS), + $(hide) mkdir -p $@.res.tmp + $(hide) $(call create-empty-package-at,$@.res.tmp.zip) + $(hide) $(call add-java-resources-to,$@.res.tmp.zip) + $(hide) $(call unzip-jar-files,$@.res.tmp.zip,$@.res.tmp) + $(hide) rm $@.res.tmp.zip) +$(hide) if [ -s $(PRIVATE_JACK_INTERMEDIATES_DIR)/java-source-list-uniq ] ; then \ + export tmpEcjArg="@$(PRIVATE_JACK_INTERMEDIATES_DIR)/java-source-list-uniq"; \ +else \ + export tmpEcjArg=""; \ +fi; \ +$(call call-jack,$(PRIVATE_JACK_VM_ARGS),$(PRIVATE_JACK_EXTRA_ARGS)) \ + $(strip $(PRIVATE_JACK_FLAGS)) \ + $(strip $(PRIVATE_JACK_DEBUG_FLAGS)) \ + $(if $(NO_OPTIMIZE_DX), \ + -D jack.dex.optimize="false") \ + $(if $(PRIVATE_RMTYPEDEFS), \ + -D jack.android.remove-typedef="true") \ + $(addprefix --classpath ,$(strip \ + $(call normalize-path-list,$(PRIVATE_BOOTCLASSPATH_JAVA_LIBRARIES) $(PRIVATE_ALL_JACK_LIBRARIES)))) \ + $(addprefix --import ,$(call reverse-list,$(PRIVATE_STATIC_JACK_LIBRARIES))) \ + $(if $(PRIVATE_EXTRA_JAR_ARGS),--import-resource $@.res.tmp) \ + -D jack.import.resource.policy=keep-first \ + -D jack.import.type.policy=keep-first \ + --output-jack $(PRIVATE_CLASSES_JACK) \ + -D jack.java.source.version=1.7 \ + $(if $(PRIVATE_JACK_INCREMENTAL_DIR),--incremental-folder $(PRIVATE_JACK_INCREMENTAL_DIR)) \ + --output-dex $(PRIVATE_JACK_INTERMEDIATES_DIR) \ + $(addprefix --config-jarjar ,$(strip $(PRIVATE_JARJAR_RULES))) \ + $(if $(PRIVATE_JACK_PROGUARD_FLAGS),--config-proguard $@.flags) \ + $$tmpEcjArg \ + || ( rm -rf $(PRIVATE_CLASSES_JACK); rm -rf $(PRIVATE_JACK_INTERMEDIATES_DIR); exit 41 ) +$(hide) mv $(PRIVATE_JACK_INTERMEDIATES_DIR)/classes*.dex $(dir $@) +$(hide) rm -f $(PRIVATE_JACK_INTERMEDIATES_DIR)/java-source-list +$(if $(PRIVATE_EXTRA_JAR_ARGS),$(hide) rm -rf $@.res.tmp) +$(hide) mv $(PRIVATE_JACK_INTERMEDIATES_DIR)/java-source-list-uniq $(PRIVATE_JACK_INTERMEDIATES_DIR).java-source-list +$(if $(PRIVATE_JAR_PACKAGES), $(hide) echo unsupported options PRIVATE_JAR_PACKAGES in $@; exit 53) +$(if $(PRIVATE_JAR_EXCLUDE_PACKAGES), $(hide) echo unsupported options JAR_EXCLUDE_PACKAGES in $@; exit 53) +$(if $(PRIVATE_JAR_MANIFEST), $(hide) echo unsupported options JAR_MANIFEST in $@; exit 53) +endef + +define transform-jar-to-jack + $(hide) mkdir -p $(dir $@) + $(JILL) $(PRIVATE_JILL_FLAGS) --output $@.tmpjill.jack $< + $(hide) mkdir -p $@.tmpjill.res + $(hide) $(call unzip-jar-files,$<,$@.tmpjill.res) + $(hide) find $@.tmpjill.res -iname "*.class" -delete + $(hide) $(call call-jack,$(PRIVATE_JACK_VM_ARGS),$(PRIVATE_JACK_EXTRA_ARGS)) \ + -D jack.import.resource.policy=keep-first \ + -D jack.import.type.policy=keep-first \ + --import $@.tmpjill.jack \ + --import-resource $@.tmpjill.res \ + --output-jack $@ + $(hide) rm -rf $@.tmpjill.res + $(hide) rm $@.tmpjill.jack +endef + + +# Invoke Jack to compile java from source to jack files without shrink or obfuscation. +# +# Some historical notes: +# - below we write the list of java files to java-source-list to avoid argument +# list length problems with Cygwin +# - we filter out duplicate java file names because Jack doesn't like them. +define java-to-jack $(hide) rm -f $@ -$(if $(PRIVATE_JAR_EXCLUDE_FILES), $(hide) find $(PRIVATE_CLASS_INTERMEDIATES_DIR) \ - -name $(word 1, $(PRIVATE_JAR_EXCLUDE_FILES)) \ - $(addprefix -o -name , $(wordlist 2, 999, $(PRIVATE_JAR_EXCLUDE_FILES))) \ - | xargs rm -rf) -$(if $(PRIVATE_JAR_PACKAGES), \ - $(hide) find $(PRIVATE_CLASS_INTERMEDIATES_DIR) -mindepth 1 -type f \ - $(foreach pkg, $(PRIVATE_JAR_PACKAGES), \ - -not -path $(PRIVATE_CLASS_INTERMEDIATES_DIR)/$(subst .,/,$(pkg))/\*) -delete ; \ - find $(PRIVATE_CLASS_INTERMEDIATES_DIR) -empty -delete) -$(if $(PRIVATE_JAR_EXCLUDE_PACKAGES), $(hide) rm -rf \ - $(foreach pkg, $(PRIVATE_JAR_EXCLUDE_PACKAGES), \ - $(PRIVATE_CLASS_INTERMEDIATES_DIR)/$(subst .,/,$(pkg)))) -$(if $(PRIVATE_RMTYPEDEFS), $(hide) $(RMTYPEDEFS) -v $(PRIVATE_CLASS_INTERMEDIATES_DIR)) -$(if $(PRIVATE_JAR_MANIFEST), \ - $(hide) sed -e 's/%BUILD_NUMBER%/$(BUILD_NUMBER)/' \ - $(PRIVATE_JAR_MANIFEST) > $(dir $@)/manifest.mf && \ - jar -cfm $@ $(dir $@)/manifest.mf \ - -C $(PRIVATE_CLASS_INTERMEDIATES_DIR) ., \ - $(hide) jar -cf $@ -C $(PRIVATE_CLASS_INTERMEDIATES_DIR) .) -$(if $(PRIVATE_EXTRA_JAR_ARGS),$(call add-java-resources-to,$@)) -$(hide) mv $(PRIVATE_CLASS_INTERMEDIATES_DIR)/newstamp $(PRIVATE_CLASS_INTERMEDIATES_DIR)/stamp -endef - -define transform-java-to-classes.jar -@echo "target Java: $(PRIVATE_MODULE) ($(PRIVATE_CLASS_INTERMEDIATES_DIR))" -$(call compile-java,$(TARGET_JAVAC),$(PRIVATE_BOOTCLASSPATH)) +$(hide) rm -rf $(PRIVATE_JACK_INTERMEDIATES_DIR) +$(hide) mkdir -p $(dir $@) +$(hide) mkdir -p $(PRIVATE_JACK_INTERMEDIATES_DIR) +$(if $(PRIVATE_JACK_INCREMENTAL_DIR),$(hide) mkdir -p $(PRIVATE_JACK_INCREMENTAL_DIR)) +$(call dump-words-to-file,$(PRIVATE_JAVA_SOURCES),$(PRIVATE_JACK_INTERMEDIATES_DIR)/java-source-list) +$(hide) if [ -d "$(PRIVATE_SOURCE_INTERMEDIATES_DIR)" ]; then \ + find $(PRIVATE_SOURCE_INTERMEDIATES_DIR) -name '*.java' >> $(PRIVATE_JACK_INTERMEDIATES_DIR)/java-source-list; \ +fi +$(hide) tr ' ' '\n' < $(PRIVATE_JACK_INTERMEDIATES_DIR)/java-source-list \ + | sort -u > $(PRIVATE_JACK_INTERMEDIATES_DIR)/java-source-list-uniq +$(if $(PRIVATE_JACK_PROGUARD_FLAGS), \ + $(hide) echo -basedirectory $(CURDIR) > $@.flags; \ + echo $(PRIVATE_JACK_PROGUARD_FLAGS) >> $@.flags; \ +) +$(if $(PRIVATE_EXTRA_JAR_ARGS), + $(hide) mkdir -p $@.res.tmp + $(hide) $(call create-empty-package-at,$@.res.tmp.zip) + $(hide) $(call add-java-resources-to,$@.res.tmp.zip) + $(hide) unzip -qo $@.res.tmp.zip -d $@.res.tmp + $(hide) rm $@.res.tmp.zip) +$(hide) if [ -s $(PRIVATE_JACK_INTERMEDIATES_DIR)/java-source-list-uniq ] ; then \ + export tmpEcjArg="@$(PRIVATE_JACK_INTERMEDIATES_DIR)/java-source-list-uniq"; \ +else \ + export tmpEcjArg=""; \ +fi; \ +$(call call-jack,$(PRIVATE_JACK_VM_ARGS),$(PRIVATE_JACK_EXTRA_ARGS)) \ + $(strip $(PRIVATE_JACK_FLAGS)) \ + $(strip $(PRIVATE_JACK_DEBUG_FLAGS)) \ + $(if $(NO_OPTIMIZE_DX), \ + -D jack.dex.optimize="false") \ + $(addprefix --classpath ,$(strip \ + $(call normalize-path-list,$(PRIVATE_BOOTCLASSPATH_JAVA_LIBRARIES) $(PRIVATE_ALL_JACK_LIBRARIES)))) \ + $(addprefix --import ,$(call reverse-list,$(PRIVATE_STATIC_JACK_LIBRARIES))) \ + $(if $(PRIVATE_EXTRA_JAR_ARGS),--import-resource $@.res.tmp) \ + -D jack.import.resource.policy=keep-first \ + -D jack.import.type.policy=keep-first \ + -D jack.java.source.version=1.7 \ + $(if $(PRIVATE_JACK_INCREMENTAL_DIR),--incremental-folder $(PRIVATE_JACK_INCREMENTAL_DIR)) \ + --output-jack $@ \ + $(addprefix --config-jarjar ,$(strip $(PRIVATE_JARJAR_RULES))) \ + $(if $(PRIVATE_JACK_PROGUARD_FLAGS),--config-proguard $@.flags) \ + $$tmpEcjArg \ + || ( rm -f $@ ; exit 41 ) +$(hide) rm -f $(PRIVATE_JACK_INTERMEDIATES_DIR)/java-source-list +$(if $(PRIVATE_EXTRA_JAR_ARGS),$(hide) rm -rf $@.res.tmp) +$(hide) mv $(PRIVATE_JACK_INTERMEDIATES_DIR)/java-source-list-uniq $(PRIVATE_JACK_INTERMEDIATES_DIR).java-source-list +$(if $(PRIVATE_JAR_PACKAGES), $(hide) echo unsupported options PRIVATE_JAR_PACKAGES in $@; exit 53) +$(if $(PRIVATE_JAR_EXCLUDE_PACKAGES), $(hide) echo unsupported options JAR_EXCLUDE_PACKAGES in $@; exit 53) +$(if $(PRIVATE_JAR_MANIFEST), $(hide) echo unsupported options JAR_MANIFEST in $@; exit 53) endef -endif # ENABLE_INCREMENTALJAVAC define transform-classes.jar-to-emma $(hide) java -classpath $(EMMA_JAR) emma instr -outmode fullcopy -outfile \ @@ -1838,7 +1950,6 @@ $(hide) rm -f $(dir $@)classes*.dex $(hide) $(DX) \ $(if $(findstring windows,$(HOST_OS)),,-JXms16M -JXmx2048M) \ --dex --output=$(dir $@) \ - $(incremental_dex) \ $(if $(NO_OPTIMIZE_DX), \ --no-optimize) \ $(if $(GENERATE_DEX_DEBUG), \ @@ -1852,12 +1963,20 @@ endef # Create a mostly-empty .jar file that we'll add to later. # The MacOS jar tool doesn't like creating empty jar files, # so we need to give it something. +# $(1) package to create +define create-empty-package-at +@mkdir -p $(dir $(1)) +$(hide) touch $(dir $(1))zipdummy +$(hide) (cd $(dir $(1)) && jar cf $(notdir $(1)) zipdummy) +$(hide) zip -qd $(1) zipdummy +$(hide) rm $(dir $(1))zipdummy +endef + +# Create a mostly-empty .jar file that we'll add to later. +# The MacOS jar tool doesn't like creating empty jar files, +# so we need to give it something. define create-empty-package -@mkdir -p $(dir $@) -$(hide) touch $(dir $@)zipdummy -$(hide) (cd $(dir $@) && jar cf $(notdir $@) zipdummy) -$(hide) zip -qd $@ zipdummy -$(hide) rm $(dir $@)zipdummy +$(call create-empty-package-at,$@) endef # Copy an arhchive file and delete any class files and empty folders inside. @@ -1895,6 +2014,7 @@ $(hide) $(AAPT) package -u $(PRIVATE_AAPT_FLAGS) \ $(if $(filter --version-name,$(PRIVATE_AAPT_FLAGS)),,$(addprefix --version-name , $(PLATFORM_VERSION)-$(BUILD_NUMBER))) \ $(addprefix --rename-manifest-package , $(PRIVATE_MANIFEST_PACKAGE_NAME)) \ $(addprefix --rename-instrumentation-target-package , $(PRIVATE_MANIFEST_INSTRUMENTATION_FOR)) \ + --skip-symbols-without-default-localization \ -F $@ endef @@ -1912,8 +2032,7 @@ $(hide) mkdir -p $(addprefix $(dir $@)lib/,$(PRIVATE_JNI_SHARED_LIBRARIES_ABI)) $(foreach abi,$(PRIVATE_JNI_SHARED_LIBRARIES_ABI),\ $(call _add-jni-shared-libs-to-package-per-abi,$(abi),\ $(patsubst $(abi):%,%,$(filter $(abi):%,$(PRIVATE_JNI_SHARED_LIBRARIES))))) -$(hide) (cd $(dir $@) && zip -r \ - $(if $(filter true, $(PRIVATE_PAGE_ALIGN_JNI_SHARED_LIBRARIES)),-0,) $(notdir $@) lib) +$(hide) (cd $(dir $@) && zip -r -0 $(notdir $@) lib) $(hide) rm -rf $(dir $@)lib endef @@ -1931,6 +2050,19 @@ $(hide) jar uf $(1) @$(1).jar-arg-list @rm -f $(1).jar-arg-list endef +# Add resources carried by static Jack libraries. +# +define add-carried-jack-resources + $(hide) if [ -d $(PRIVATE_JACK_INTERMEDIATES_DIR) ] ; then \ + jack_res_jar_flags=$$(find $(PRIVATE_JACK_INTERMEDIATES_DIR) -type f \ + | sed -e "s?^$(PRIVATE_JACK_INTERMEDIATES_DIR)/? -C $(PRIVATE_JACK_INTERMEDIATES_DIR) ?"); \ + if [ -n "$$jack_res_jar_flags" ] ; then \ + echo $$jack_res_jar_flags >$(dir $@)jack_res_jar_flags; \ + jar uf $@ $$jack_res_jar_flags; \ + fi; \ +fi +endef + # Sign a package using the specified key/cert. # define sign-package @@ -1946,21 +2078,22 @@ endef define align-package $(hide) mv $@ $@.unaligned $(hide) $(ZIPALIGN) \ - -f \ - $(if $(filter true, $(PRIVATE_PAGE_ALIGN_JNI_SHARED_LIBRARIES)),-p,) \ + -f -p \ 4 \ $@.unaligned $@.aligned $(hide) mv $@.aligned $@ endef +# Uncompress shared libraries embedded in an apk. +# define uncompress-shared-libs -$(hide) rm -rf $(dir $@)/tmpworkdir -$(hide) mv $@ $@.compressed -$(hide) mkdir $(dir $@)/tmpworkdir -$(hide) unzip $@.compressed 'lib/*.so' -d $(dir $@)/tmpworkdir -$(hide) ( cd $(dir $@)/tmpworkdir && zip -D -r -0 ../$(notdir $@).compressed lib ) -$(hide) mv $@.compressed $@ -$(hide) rm -rf $(dir $@)/tmpworkdir +$(hide) if unzip -l $@ $(PRIVATE_EMBEDDED_JNI_LIBS) >/dev/null ; then \ + rm -rf $(dir $@)uncompressedlibs && mkdir $(dir $@)uncompressedlibs; \ + unzip $@ $(PRIVATE_EMBEDDED_JNI_LIBS) -d $(dir $@)uncompressedlibs && \ + zip -d $@ 'lib/*.so' && \ + ( cd $(dir $@)uncompressedlibs && zip -D -r -0 ../$(notdir $@) lib ) && \ + rm -rf $(dir $@)uncompressedlibs; \ + fi endef define install-dex-debug |