diff options
| -rw-r--r-- | core/Makefile | 9 | ||||
| -rw-r--r-- | core/base_rules.mk | 3 | ||||
| -rw-r--r-- | core/binary.mk | 15 | ||||
| -rw-r--r-- | core/clear_vars.mk | 14 | ||||
| -rw-r--r-- | core/combo/javac.mk | 5 | ||||
| -rw-r--r-- | core/config.mk | 9 | ||||
| -rw-r--r-- | core/configure_local_jack.mk | 9 | ||||
| -rw-r--r-- | core/definitions.mk | 93 | ||||
| -rw-r--r-- | core/dpi_specific_apk.mk | 14 | ||||
| -rw-r--r-- | core/envsetup.mk | 2 | ||||
| -rw-r--r-- | core/header_library.mk | 72 | ||||
| -rw-r--r-- | core/header_library_internal.mk | 21 | ||||
| -rw-r--r-- | core/host_dalvik_java_library.mk | 68 | ||||
| -rw-r--r-- | core/java.mk | 106 | ||||
| -rw-r--r-- | core/java_common.mk | 2 | ||||
| -rw-r--r-- | core/java_library.mk | 22 | ||||
| -rw-r--r-- | core/notice_files.mk | 2 | ||||
| -rw-r--r-- | core/package_internal.mk | 73 | ||||
| -rw-r--r-- | core/static_java_library.mk | 13 | ||||
| -rw-r--r-- | core/version_defaults.mk | 38 | ||||
| -rw-r--r-- | target/product/full_base_telephony.mk | 2 | ||||
| -rw-r--r-- | tools/zipalign/ZipFile.cpp | 103 | ||||
| -rw-r--r-- | tools/zipalign/ZipFile.h | 18 |
23 files changed, 571 insertions, 142 deletions
diff --git a/core/Makefile b/core/Makefile index c24bbe27cf..e41d09e66f 100644 --- a/core/Makefile +++ b/core/Makefile @@ -878,7 +878,7 @@ $(if $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_VENDOR_VERITY_PARTITION),$(hide) ech $(if $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_VBOOT),$(hide) echo "vboot=$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_VBOOT)" >> $(1)) $(if $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_VBOOT),$(hide) echo "vboot_key=$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_VBOOT_SIGNING_KEY)" >> $(1)) $(if $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_VBOOT),$(hide) echo "vboot_subkey=$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_VBOOT_SIGNING_SUBKEY)" >> $(1)) -$(if $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_VBOOT),$(hide) echo "futility=$(FUTILITY)" >> $(1)) +$(if $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_VBOOT),$(hide) echo "futility=$(notdir $(FUTILITY))" >> $(1)) $(if $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_VBOOT),$(hide) echo "vboot_signer_cmd=$(VBOOT_SIGNER)" >> $(1)) $(if $(BOARD_AVB_ENABLE),$(hide) echo "avb_signing_args=$(INTERNAL_AVB_SIGNING_ARGS)" >> $(1)) $(if $(BOARD_AVB_ENABLE),$(hide) echo "avb_avbtool=$(AVBTOOL)" >> $(1)) @@ -1745,7 +1745,9 @@ OTATOOLS := $(HOST_OUT_EXECUTABLES)/minigzip \ $(HOST_OUT_EXECUTABLES)/brillo_update_payload \ $(HOST_OUT_EXECUTABLES)/lib/shflags/shflags \ $(HOST_OUT_EXECUTABLES)/delta_generator \ - $(BLK_ALLOC_TO_BASE_FS) + $(BLK_ALLOC_TO_BASE_FS) \ + $(FUTILITY) \ + $(VBOOT_SIGNER) # Shared libraries. OTATOOLS += \ @@ -1784,10 +1786,11 @@ $(BUILT_OTATOOLS_PACKAGE): zip_root := $(call intermediates-dir-for,PACKAGING,ot $(BUILT_OTATOOLS_PACKAGE): $(OTATOOLS) | $(ACP) @echo "Package OTA tools: $@" $(hide) rm -rf $@ $(zip_root) - $(hide) mkdir -p $(dir $@) $(zip_root)/bin $(zip_root)/framework $(zip_root)/releasetools $(zip_root)/system/extras/verity + $(hide) mkdir -p $(dir $@) $(zip_root)/bin $(zip_root)/framework $(zip_root)/releasetools $(zip_root)/system/extras/verity $(zip_root)/external/vboot_reference/tests/devkeys $(call copy-files-with-structure,$(OTATOOLS),$(HOST_OUT)/,$(zip_root)) $(hide) $(ACP) $(HOST_OUT_JAVA_LIBRARIES)/VeritySigner.jar $(zip_root)/framework/ $(hide) $(ACP) -p system/extras/verity/build_verity_metadata.py $(zip_root)/system/extras/verity/ + $(hide) $(ACP) -p -r external/vboot_reference/tests/devkeys/* $(zip_root)/external/vboot_reference/tests/devkeys $(hide) $(ACP) -r -d -p build/tools/releasetools/* $(zip_root)/releasetools $(hide) rm -rf $@ $(zip_root)/releasetools/*.pyc $(hide) (cd $(zip_root) && zip -qryX $(abspath $@) *) diff --git a/core/base_rules.mk b/core/base_rules.mk index 8cceaad589..e90c1bbd03 100644 --- a/core/base_rules.mk +++ b/core/base_rules.mk @@ -564,6 +564,7 @@ ALL_DEPS.$(LOCAL_MODULE).ALL_DEPS := $(sort \ $(LOCAL_STATIC_LIBRARIES) \ $(LOCAL_WHOLE_STATIC_LIBRARIES) \ $(LOCAL_SHARED_LIBRARIES) \ + $(LOCAL_HEADER_LIBRARIES) \ $(LOCAL_STATIC_JAVA_LIBRARIES) \ $(LOCAL_JAVA_LIBRARIES)\ $(LOCAL_JNI_SHARED_LIBRARIES)) @@ -585,7 +586,7 @@ $(foreach tag,$(my_module_tags),\ ## umbrella targets used to verify builds ########################################################### j_or_n := -ifneq (,$(filter EXECUTABLES SHARED_LIBRARIES STATIC_LIBRARIES NATIVE_TESTS,$(LOCAL_MODULE_CLASS))) +ifneq (,$(filter EXECUTABLES SHARED_LIBRARIES STATIC_LIBRARIES HEADER_LIBRARIES NATIVE_TESTS,$(LOCAL_MODULE_CLASS))) j_or_n := native else ifneq (,$(filter JAVA_LIBRARIES APPS,$(LOCAL_MODULE_CLASS))) diff --git a/core/binary.mk b/core/binary.mk index 304a72ec12..44f0e9546a 100644 --- a/core/binary.mk +++ b/core/binary.mk @@ -40,6 +40,7 @@ my_src_files_exclude := $(LOCAL_SRC_FILES_EXCLUDE) my_static_libraries := $(LOCAL_STATIC_LIBRARIES) my_whole_static_libraries := $(LOCAL_WHOLE_STATIC_LIBRARIES) my_shared_libraries := $(LOCAL_SHARED_LIBRARIES) +my_header_libraries := $(LOCAL_HEADER_LIBRARIES) my_cflags := $(LOCAL_CFLAGS) my_conlyflags := $(LOCAL_CONLYFLAGS) my_cppflags := $(LOCAL_CPPFLAGS) @@ -320,6 +321,7 @@ ifdef LOCAL_IS_HOST_MODULE my_src_files += $(LOCAL_SRC_FILES_$($(my_prefix)OS)) $(LOCAL_SRC_FILES_$($(my_prefix)OS)_$($(my_prefix)$(LOCAL_2ND_ARCH_VAR_PREFIX)ARCH)) my_static_libraries += $(LOCAL_STATIC_LIBRARIES_$($(my_prefix)OS)) my_shared_libraries += $(LOCAL_SHARED_LIBRARIES_$($(my_prefix)OS)) +my_header_libraries += $(LOCAL_HEADER_LIBRARIES_$($(my_prefix)OS)) my_cflags += $(LOCAL_CFLAGS_$($(my_prefix)OS)) my_cppflags += $(LOCAL_CPPFLAGS_$($(my_prefix)OS)) my_ldflags += $(LOCAL_LDFLAGS_$($(my_prefix)OS)) @@ -443,6 +445,7 @@ endif # arch-specific static libraries go first so that generic ones can depend on them my_static_libraries := $(LOCAL_STATIC_LIBRARIES_$($(my_prefix)$(LOCAL_2ND_ARCH_VAR_PREFIX)ARCH)) $(LOCAL_STATIC_LIBRARIES_$(my_32_64_bit_suffix)) $(my_static_libraries) my_whole_static_libraries := $(LOCAL_WHOLE_STATIC_LIBRARIES_$($(my_prefix)$(LOCAL_2ND_ARCH_VAR_PREFIX)ARCH)) $(LOCAL_WHOLE_STATIC_LIBRARIES_$(my_32_64_bit_suffix)) $(my_whole_static_libraries) +my_header_libraries := $(LOCAL_HEADER_LIBRARIES_$($(my_prefix)$(LOCAL_2ND_ARCH_VAR_PREFIX)ARCH)) $(LOCAL_HEADER_LIBRARIES_$(my_32_64_bit_suffix)) $(my_header_libraries) include $(BUILD_SYSTEM)/cxx_stl_setup.mk @@ -1396,7 +1399,9 @@ import_includes_deps := $(strip \ $(foreach l, $(installed_shared_library_module_names), \ $(call intermediates-dir-for,SHARED_LIBRARIES,$(l),$(my_kind),,$(LOCAL_2ND_ARCH_VAR_PREFIX),$(my_host_cross))/export_includes) \ $(foreach l, $(my_static_libraries) $(my_whole_static_libraries), \ - $(call intermediates-dir-for,STATIC_LIBRARIES,$(l),$(my_kind),,$(LOCAL_2ND_ARCH_VAR_PREFIX),$(my_host_cross))/export_includes)) + $(call intermediates-dir-for,STATIC_LIBRARIES,$(l),$(my_kind),,$(LOCAL_2ND_ARCH_VAR_PREFIX),$(my_host_cross))/export_includes) \ + $(foreach l, $(my_header_libraries), \ + $(call intermediates-dir-for,HEADER_LIBRARIES,$(l),$(my_kind),,$(LOCAL_2ND_ARCH_VAR_PREFIX),$(my_host_cross))/export_includes)) $(import_includes): PRIVATE_IMPORT_EXPORT_INCLUDES := $(import_includes_deps) $(import_includes) : $(import_includes_deps) @echo Import includes file: $@ @@ -1430,10 +1435,12 @@ my_link_type_deps := $(strip \ $(foreach l,$(my_whole_static_libraries) $(my_static_libraries), \ $(call intermediates-dir-for,STATIC_LIBRARIES,$(l),$(my_kind),,$(LOCAL_2ND_ARCH_VAR_PREFIX),$(my_host_cross))/link_type)) ifneq ($(LOCAL_MODULE_CLASS),STATIC_LIBRARIES) +ifneq ($(LOCAL_MODULE_CLASS),HEADER_LIBRARIES) my_link_type_deps += $(strip \ $(foreach l,$(my_shared_libraries), \ $(call intermediates-dir-for,SHARED_LIBRARIES,$(l),$(my_kind),,$(LOCAL_2ND_ARCH_VAR_PREFIX),$(my_host_cross))/link_type)) endif +endif $(my_link_type): PRIVATE_DEPS := $(my_link_type_deps) $(my_link_type): PRIVATE_MODULE := $(LOCAL_MODULE) $(my_link_type): PRIVATE_MAKEFILE := $(LOCAL_MODULE_MAKEFILE) @@ -1791,10 +1798,14 @@ export_include_deps += $(strip \ export_include_deps += $(strip \ $(foreach l,$(LOCAL_EXPORT_STATIC_LIBRARY_HEADERS), \ $(call intermediates-dir-for,STATIC_LIBRARIES,$(l),$(my_kind),,$(LOCAL_2ND_ARCH_VAR_PREFIX),$(my_host_cross))/export_includes)) +# Re-export requested headers from header libraries. +export_include_deps += $(strip \ + $(foreach l,$(LOCAL_EXPORT_HEADER_LIBRARY_HEADERS), \ + $(call intermediates-dir-for,HEADER_LIBRARIES,$(l),$(my_kind),,$(LOCAL_2ND_ARCH_VAR_PREFIX),$(my_host_cross))/export_includes)) $(export_includes): PRIVATE_REEXPORTED_INCLUDES := $(export_include_deps) # By adding $(my_generated_sources) it makes sure the headers get generated # before any dependent source files get compiled. -$(export_includes) : $(my_export_c_include_deps) $(my_generated_sources) $(export_include_deps) +$(export_includes) : $(my_export_c_include_deps) $(my_generated_sources) $(export_include_deps) $(LOCAL_EXPORT_C_INCLUDE_DEPS) @echo Export includes file: $< -- $@ $(hide) mkdir -p $(dir $@) && rm -f $@.tmp && touch $@.tmp ifdef my_export_c_include_dirs diff --git a/core/clear_vars.mk b/core/clear_vars.mk index 614a7ca5e5..ae037b3cae 100644 --- a/core/clear_vars.mk +++ b/core/clear_vars.mk @@ -62,10 +62,12 @@ LOCAL_DROIDDOC_SOURCE_PATH:= LOCAL_DROIDDOC_STUB_OUT_DIR:= LOCAL_DROIDDOC_TEMPLATE_DIR:= LOCAL_DROIDDOC_USE_STANDARD_DOCLET:= +LOCAL_DX_FLAGS:= LOCAL_EMMA_COVERAGE_FILTER:= LOCAL_EMMA_INSTRUMENT:= LOCAL_EXPORT_C_INCLUDE_DEPS:= LOCAL_EXPORT_C_INCLUDE_DIRS:= +LOCAL_EXPORT_HEADER_LIBRARY_HEADERS:= LOCAL_EXPORT_PACKAGE_RESOURCES:= LOCAL_EXPORT_SHARED_LIBRARY_HEADERS:= LOCAL_EXPORT_STATIC_LIBRARY_HEADERS:= @@ -82,6 +84,7 @@ LOCAL_GENERATED_SOURCES:= LOCAL_GROUP_STATIC_LIBRARIES:= LOCAL_GTEST:=true LOCAL_HAL_STATIC_LIBRARIES:= +LOCAL_HEADER_LIBRARIES:= LOCAL_INIT_RC:= LOCAL_INSTALLED_MODULE:= LOCAL_INSTALLED_MODULE_STEM:= @@ -94,8 +97,7 @@ LOCAL_IS_RUNTIME_RESOURCE_OVERLAY:= LOCAL_JACK_CLASSPATH:= LOCAL_JACK_COVERAGE_EXCLUDE_FILTER:= LOCAL_JACK_COVERAGE_INCLUDE_FILTER:= -# full or incremental -LOCAL_JACK_ENABLED:=full +LOCAL_JACK_ENABLED:=$(DEFAULT_JACK_ENABLED) # '' (ie disabled), disabled, full, incremental LOCAL_JACK_FLAGS:= LOCAL_JACK_PLUGIN:= LOCAL_JACK_PLUGIN_PATH:= @@ -240,6 +242,7 @@ LOCAL_CLANG_LDFLAGS_$(TARGET_ARCH):= LOCAL_CLANG_$(TARGET_ARCH):= LOCAL_CPPFLAGS_$(TARGET_ARCH):= LOCAL_GENERATED_SOURCES_$(TARGET_ARCH):= +LOCAL_HEADER_LIBRARIES_$(TARGET_ARCH):= LOCAL_LDFLAGS_$(TARGET_ARCH):= LOCAL_PACK_MODULE_RELOCATIONS_$(TARGET_ARCH):= LOCAL_PREBUILT_JNI_LIBS_$(TARGET_ARCH):= @@ -261,6 +264,7 @@ LOCAL_CLANG_LDFLAGS_$(TARGET_2ND_ARCH):= LOCAL_CLANG_$(TARGET_2ND_ARCH):= LOCAL_CPPFLAGS_$(TARGET_2ND_ARCH):= LOCAL_GENERATED_SOURCES_$(TARGET_2ND_ARCH):= +LOCAL_HEADER_LIBRARIES_$(TARGET_2ND_ARCH):= LOCAL_LDFLAGS_$(TARGET_2ND_ARCH):= LOCAL_PACK_MODULE_RELOCATIONS_$(TARGET_2ND_ARCH):= LOCAL_PREBUILT_JNI_LIBS_$(TARGET_2ND_ARCH):= @@ -282,6 +286,7 @@ LOCAL_CLANG_$(HOST_ARCH):= LOCAL_CLANG_LDFLAGS_$(HOST_ARCH):= LOCAL_CPPFLAGS_$(HOST_ARCH):= LOCAL_GENERATED_SOURCES_$(HOST_ARCH):= +LOCAL_HEADER_LIBRARIES_$(HOST_ARCH):= LOCAL_LDFLAGS_$(HOST_ARCH):= LOCAL_REQUIRED_MODULES_$(HOST_ARCH):= LOCAL_SHARED_LIBRARIES_$(HOST_ARCH):= @@ -300,6 +305,7 @@ LOCAL_CLANG_$(HOST_2ND_ARCH):= LOCAL_CLANG_LDFLAGS_$(HOST_2ND_ARCH):= LOCAL_CPPFLAGS_$(HOST_2ND_ARCH):= LOCAL_GENERATED_SOURCES_$(HOST_2ND_ARCH):= +LOCAL_HEADER_LIBRARIES_$(HOST_2ND_ARCH):= LOCAL_LDFLAGS_$(HOST_2ND_ARCH):= LOCAL_REQUIRED_MODULES_$(HOST_2ND_ARCH):= LOCAL_SHARED_LIBRARIES_$(HOST_2ND_ARCH):= @@ -314,6 +320,7 @@ LOCAL_CFLAGS_$(HOST_OS):= LOCAL_C_INCLUDES_$(HOST_OS):= LOCAL_CPPFLAGS_$(HOST_OS):= LOCAL_GENERATED_SOURCES_$(HOST_OS):= +LOCAL_HEADER_LIBRARIES_$(HOST_OS):= LOCAL_LDFLAGS_$(HOST_OS):= LOCAL_LDLIBS_$(HOST_OS):= LOCAL_REQUIRED_MODULES_$(HOST_OS):= @@ -327,6 +334,7 @@ LOCAL_CFLAGS_$(HOST_CROSS_OS):= LOCAL_C_INCLUDES_$(HOST_CROSS_OS):= LOCAL_CPPFLAGS_$(HOST_CROSS_OS):= LOCAL_GENERATED_SOURCES_$(HOST_CROSS_OS):= +LOCAL_HEADER_LIBRARIES_$(HOST_CROSS_OS):= LOCAL_LDFLAGS_$(HOST_CROSS_OS):= LOCAL_LDLIBS_$(HOST_CROSS_OS):= LOCAL_REQUIRED_MODULES_$(HOST_CROSS_OS):= @@ -366,6 +374,8 @@ LOCAL_CPPFLAGS_32:= LOCAL_CPPFLAGS_64:= LOCAL_GENERATED_SOURCES_32:= LOCAL_GENERATED_SOURCES_64:= +LOCAL_HEADER_LIBRARIES_32:= +LOCAL_HEADER_LIBRARIES_64:= LOCAL_INIT_RC_32:= LOCAL_INIT_RC_64:= LOCAL_LDFLAGS_32:= diff --git a/core/combo/javac.mk b/core/combo/javac.mk index 9042d836e3..7f66ea83a9 100644 --- a/core/combo/javac.mk +++ b/core/combo/javac.mk @@ -9,6 +9,11 @@ # COMMON_JAVAC -- Java compiler command with common arguments # +ifndef ANDROID_COMPILE_WITH_JACK +# Defines if compilation with jack is enabled by default. +ANDROID_COMPILE_WITH_JACK := true +endif + common_jdk_flags := -Xmaxerrs 9999999 # Use the indexer wrapper to index the codebase instead of the javac compiler diff --git a/core/config.mk b/core/config.mk index 2f43f46408..0cf12937b8 100644 --- a/core/config.mk +++ b/core/config.mk @@ -92,6 +92,7 @@ CLEAR_VARS:= $(BUILD_SYSTEM)/clear_vars.mk BUILD_HOST_STATIC_LIBRARY:= $(BUILD_SYSTEM)/host_static_library.mk BUILD_HOST_SHARED_LIBRARY:= $(BUILD_SYSTEM)/host_shared_library.mk BUILD_STATIC_LIBRARY:= $(BUILD_SYSTEM)/static_library.mk +BUILD_HEADER_LIBRARY:= $(BUILD_SYSTEM)/header_library.mk BUILD_AUX_STATIC_LIBRARY:= $(BUILD_SYSTEM)/aux_static_library.mk BUILD_AUX_EXECUTABLE:= $(BUILD_SYSTEM)/aux_executable.mk BUILD_SHARED_LIBRARY:= $(BUILD_SYSTEM)/shared_library.mk @@ -601,10 +602,16 @@ E2FSCK := $(HOST_OUT_EXECUTABLES)/e2fsck$(HOST_EXECUTABLE_SUFFIX) MKTARBALL := build/tools/mktarball.sh TUNE2FS := $(HOST_OUT_EXECUTABLES)/tune2fs$(HOST_EXECUTABLE_SUFFIX) JARJAR := $(HOST_OUT_JAVA_LIBRARIES)/jarjar.jar +DESUGAR := $(HOST_OUT_JAVA_LIBRARIES)/desugar.jar DATA_BINDING_COMPILER := $(HOST_OUT_JAVA_LIBRARIES)/databinding-compiler.jar FAT16COPY := build/tools/fat16copy.py CHECK_LINK_TYPE := build/tools/check_link_type.py +ifeq ($(ANDROID_COMPILE_WITH_JACK),true) +DEFAULT_JACK_ENABLED:=full +else +DEFAULT_JACK_ENABLED:= +endif ifneq ($(ANDROID_JACK_EXTRA_ARGS),) JACK_DEFAULT_ARGS := DEFAULT_JACK_EXTRA_ARGS := $(ANDROID_JACK_EXTRA_ARGS) @@ -621,7 +628,7 @@ APPEND2SIMG := $(HOST_OUT_EXECUTABLES)/append2simg VERITY_SIGNER := $(HOST_OUT_EXECUTABLES)/verity_signer BUILD_VERITY_TREE := $(HOST_OUT_EXECUTABLES)/build_verity_tree BOOT_SIGNER := $(HOST_OUT_EXECUTABLES)/boot_signer -FUTILITY := prebuilts/misc/$(BUILD_OS)-$(HOST_PREBUILT_ARCH)/futility/futility +FUTILITY := $(HOST_OUT_EXECUTABLES)/futility-host VBOOT_SIGNER := prebuilts/misc/scripts/vboot_signer/vboot_signer.sh FEC := $(HOST_OUT_EXECUTABLES)/fec diff --git a/core/configure_local_jack.mk b/core/configure_local_jack.mk index 446bab78df..2270c88c46 100644 --- a/core/configure_local_jack.mk +++ b/core/configure_local_jack.mk @@ -21,9 +21,16 @@ endif LOCAL_JACK_ENABLED := $(strip $(LOCAL_JACK_ENABLED)) LOCAL_MODULE := $(strip $(LOCAL_MODULE)) -ifeq ($(filter full incremental,$(LOCAL_JACK_ENABLED)),) +ifneq ($(LOCAL_JACK_ENABLED),full) +ifneq ($(LOCAL_JACK_ENABLED),incremental) +ifdef LOCAL_JACK_ENABLED +ifneq ($(LOCAL_JACK_ENABLED),disabled) $(error $(LOCAL_PATH): invalid LOCAL_JACK_ENABLED "$(LOCAL_JACK_ENABLED)" for $(LOCAL_MODULE)) endif +endif +LOCAL_JACK_ENABLED := +endif +endif ifdef $(LOCAL_MODULE).JACK_VERSION LOCAL_JACK_VERSION := $($(LOCAL_MODULE).JACK_VERSION) diff --git a/core/definitions.mk b/core/definitions.mk index da5aff10fd..71b80e0d30 100644 --- a/core/definitions.mk +++ b/core/definitions.mk @@ -850,18 +850,37 @@ endef ########################################################### -## Color-coded warnings and errors in build rules -## -## $(1): message to print +## Color-coded warnings and errors +## Use echo-(warning|error) in a build rule +## Use pretty-(warning|error) instead of $(warning)/$(error) ########################################################### +ESC_BOLD := \e[1m +ESC_WARNING := \e[35m +ESC_ERROR := \e[31m +ESC_RESET := \e[0m + +# $(1): path (and optionally line) information +# $(2): message to print define echo-warning -echo -e "\e[1;35mwarning:\e[0m \e[1m" $(1) "\e[0m\n" +echo -e "$(ESC_BOLD)$(1): $(ESC_WARNING)warning:$(ESC_RESET)$(ESC_BOLD)" $(2) "$(ESC_RESET)" >&2 endef +# $(1): path (and optionally line) information +# $(2): message to print define echo-error -echo -e "\e[1;31merror:\e[0m \e[1m" $(1) "\e[0m\n" +echo -e "$(ESC_BOLD)$(1): $(ESC_ERROR)error:$(ESC_RESET)$(ESC_BOLD)" $(2) "$(ESC_RESET)" >&2 +endef + +# $(1): message to print +define pretty-warning +$(shell $(call echo-warning,$(LOCAL_MODULE_MAKEFILE),$(LOCAL_MODULE): $(1))) endef +# $(1): message to print +define pretty-error +$(shell $(call echo-error,$(LOCAL_MODULE_MAKEFILE),$(LOCAL_MODULE): $(1))) +$(error done) +endef ########################################################### ## Package filtering @@ -2353,8 +2372,9 @@ $(if $(PRIVATE_HAS_RS_SOURCES), \ $(hide) tr ' ' '\n' < $@.java-source-list \ | sort -u > $@.java-source-list-uniq $(hide) if [ -s $@.java-source-list-uniq ] ; then \ - $(call call-jack) \ + $(call call-jack,$(PRIVATE_JACK_EXTRA_ARGS)) \ $(strip $(PRIVATE_JACK_FLAGS)) \ + $(strip $(PRIVATE_JACK_DEBUG_FLAGS)) \ $(addprefix --classpath ,$(strip \ $(call normalize-path-list,$(call reverse-list,$(PRIVATE_STATIC_JACK_LIBRARIES)) $(PRIVATE_JACK_SHARED_LIBRARIES)))) \ -D jack.import.resource.policy=keep-first \ @@ -2514,6 +2534,43 @@ $(hide) java -classpath $(EMMA_JAR) emma instr -outmode fullcopy -outfile \ $(addprefix -ix , $(PRIVATE_EMMA_COVERAGE_FILTER)) endef +define desugar-classpath +$(filter-out -classpath -bootclasspath "",$(subst :,$(space),$(1))) +endef + +define desugar-classes-jar +@echo Desugar: $@ +@mkdir -p $(dir $@) +$(hide) rm -f $@ $@.tmp +$(hide) java -jar $(DESUGAR) \ + $(addprefix --bootclasspath_entry ,$(call desugar-bootclasspath,$(PRIVATE_BOOTCLASSPATH))) \ + $(addprefix --classpath_entry ,$(PRIVATE_ALL_JAVA_LIBRARIES)) \ + --min_sdk_version 24 --allow_empty_bootclasspath \ + $(if $(filter --core-library,$(PRIVATE_DX_FLAGS)),--core_library) \ + -i $< -o $@.tmp + mv $@.tmp $@ +endef + + +#TODO: use a smaller -Xmx value for most libraries; +# only core.jar and framework.jar need a heap this big. +define transform-classes.jar-to-dex +@echo "target Dex: $(PRIVATE_MODULE)" +@mkdir -p $(dir $@) +$(hide) rm -f $(dir $@)classes*.dex +$(hide) $(DX) \ + -JXms16M -JXmx2048M \ + --dex --output=$(dir $@) \ + $(if $(NO_OPTIMIZE_DX), \ + --no-optimize) \ + $(if $(GENERATE_DEX_DEBUG), \ + --debug --verbose \ + --dump-to=$(@:.dex=.lst) \ + --dump-width=1000) \ + $(PRIVATE_DX_FLAGS) \ + $< +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. @@ -2533,6 +2590,17 @@ define create-empty-package $(call create-empty-package-at,$@) endef +# Copy an arhchive file and delete any class files and empty folders inside. +# $(1): the source archive file. +# $(2): the destination archive file. +define initialize-package-file +@mkdir -p $(dir $(2)) +$(hide) cp -f $(1) $(2) +$(hide) zip -qd $(2) "*.class" \ + $(if $(strip $(PRIVATE_DONT_DELETE_JAR_DIRS)),,"*/") \ + || true # Ignore the error when nothing to delete. +endef + #TODO: we kinda want to build different asset packages for # different configurations, then combine them later (or something). # Per-locale, etc. @@ -2751,13 +2819,6 @@ $(hide) rm -f $@ $(hide) cp -p $< $@ endef -# The same as copy-file-to-target, but use the zipalign tool to do so. -define copy-file-to-target-with-zipalign -@mkdir -p $(dir $@) -$(hide) rm -f $@ -$(hide) $(ZIPALIGN) -f 4 $< $@ -endef - # The same as copy-file-to-target, but strip out "# comment"-style # comments (for config files and such). define copy-file-to-target-strip-comments @@ -2788,12 +2849,6 @@ define transform-prebuilt-to-target $(copy-file-to-target) endef -# Copy a prebuilt file to a target location, using zipalign on it. -define transform-prebuilt-to-target-with-zipalign -@echo "$($(PRIVATE_PREFIX)DISPLAY) Prebuilt APK: $(PRIVATE_MODULE) ($@)" -$(copy-file-to-target-with-zipalign) -endef - # Copy a prebuilt file to a target location, stripping "# comment" comments. define transform-prebuilt-to-target-strip-comments @echo "$($(PRIVATE_PREFIX)DISPLAY) Prebuilt: $(PRIVATE_MODULE) ($@)" diff --git a/core/dpi_specific_apk.mk b/core/dpi_specific_apk.mk index bcc5c18f10..1ca01d514e 100644 --- a/core/dpi_specific_apk.mk +++ b/core/dpi_specific_apk.mk @@ -31,9 +31,15 @@ $(built_dpi_apk): PRIVATE_CERTIFICATE := $(certificate) $(built_dpi_apk): $(additional_certificates) $(built_dpi_apk): PRIVATE_ADDITIONAL_CERTIFICATES := $(additional_certificates) +$(built_dpi_apk): PRIVATE_SOURCE_ARCHIVE := ifneq ($(full_classes_jar),) -$(built_dpi_apk): PRIVATE_JACK_INTERMEDIATES_DIR := $(intermediates.COMMON)/jack-rsc $(built_dpi_apk): PRIVATE_DEX_FILE := $(built_dex) +ifndef LOCAL_JACK_ENABLED +# Use the jarjar processed arhive as the initial package file. +$(built_dpi_apk): PRIVATE_SOURCE_ARCHIVE := $(full_classes_jarjar_jar) +else +$(built_dpi_apk): PRIVATE_JACK_INTERMEDIATES_DIR := $(intermediates.COMMON)/jack-rsc +endif # LOCAL_JACK_ENABLED $(built_dpi_apk): $(built_dex) else $(built_dpi_apk): PRIVATE_DEX_FILE := @@ -46,7 +52,9 @@ $(built_dpi_apk) : $(private_key) $(certificate) $(SIGNAPK_JAR) $(built_dpi_apk) : $(AAPT) $(built_dpi_apk) : $(all_res_assets) $(jni_shared_libraries) $(full_android_manifest) @echo "target Package: $(PRIVATE_MODULE) ($@)" - $(create-empty-package) + $(if $(PRIVATE_SOURCE_ARCHIVE),\ + $(call initialize-package-file,$(PRIVATE_SOURCE_ARCHIVE),$@),\ + $(create-empty-package)) $(add-assets-to-package) ifneq ($(jni_shared_libraries),) $(add-jni-shared-libs-to-package) @@ -56,8 +64,10 @@ ifeq ($(full_classes_jar),) $(if $(PRIVATE_EXTRA_JAR_ARGS),$(call add-java-resources-to,$@)) else $(add-dex-to-package) +ifdef LOCAL_JACK_ENABLED $(add-carried-jack-resources) endif +endif $(sign-package) # Set up global variables to register this apk to the higher-level dependency graph. diff --git a/core/envsetup.mk b/core/envsetup.mk index b0f35b15a4..64668c5eed 100644 --- a/core/envsetup.mk +++ b/core/envsetup.mk @@ -504,7 +504,7 @@ TARGET_INSTALLER_ROOT_OUT := $(TARGET_INSTALLER_OUT)/root TARGET_INSTALLER_SYSTEM_OUT := $(TARGET_INSTALLER_OUT)/root/system COMMON_MODULE_CLASSES := TARGET-NOTICE_FILES HOST-NOTICE_FILES HOST-JAVA_LIBRARIES -PER_ARCH_MODULE_CLASSES := SHARED_LIBRARIES STATIC_LIBRARIES EXECUTABLES GYP RENDERSCRIPT_BITCODE NATIVE_TESTS +PER_ARCH_MODULE_CLASSES := SHARED_LIBRARIES STATIC_LIBRARIES EXECUTABLES GYP RENDERSCRIPT_BITCODE NATIVE_TESTS HEADER_LIBRARIES ifeq (,$(strip $(DIST_DIR))) DIST_DIR := $(OUT_DIR)/dist diff --git a/core/header_library.mk b/core/header_library.mk new file mode 100644 index 0000000000..514467975c --- /dev/null +++ b/core/header_library.mk @@ -0,0 +1,72 @@ +$(call record-module-type,HEADER_LIBRARY) +ifdef LOCAL_IS_HOST_MODULE + my_prefix := HOST_ + LOCAL_HOST_PREFIX := +else + my_prefix := TARGET_ +endif +include $(BUILD_SYSTEM)/multilib.mk + +ifndef my_module_multilib + # libraries default to building for both architecturess + my_module_multilib := both +endif + +LOCAL_2ND_ARCH_VAR_PREFIX := +include $(BUILD_SYSTEM)/module_arch_supported.mk + +ifeq ($(my_module_arch_supported),true) + include $(BUILD_SYSTEM)/header_library_internal.mk +endif + +ifdef $(my_prefix)2ND_ARCH + LOCAL_2ND_ARCH_VAR_PREFIX := $($(my_prefix)2ND_ARCH_VAR_PREFIX) + include $(BUILD_SYSTEM)/module_arch_supported.mk + + ifeq ($(my_module_arch_supported),true) + # Build for 2ND_ARCH + OVERRIDE_BUILT_MODULE_PATH := + LOCAL_BUILT_MODULE := + LOCAL_INSTALLED_MODULE := + LOCAL_INTERMEDIATE_TARGETS := + include $(BUILD_SYSTEM)/header_library_internal.mk + endif + LOCAL_2ND_ARCH_VAR_PREFIX := +endif # 2ND_ARCH + +ifdef LOCAL_IS_HOST_MODULE + ifdef HOST_CROSS_OS + my_prefix := HOST_CROSS_ + LOCAL_HOST_PREFIX := $(my_prefix) + + include $(BUILD_SYSTEM)/module_arch_supported.mk + + ifeq ($(my_module_arch_supported),true) + # Build for 2ND_ARCH + OVERRIDE_BUILT_MODULE_PATH := + LOCAL_BUILT_MODULE := + LOCAL_INSTALLED_MODULE := + LOCAL_INTERMEDIATE_TARGETS := + include $(BUILD_SYSTEM)/header_library_internal.mk + endif + + ifdef HOST_CROSS_2ND_ARCH + LOCAL_2ND_ARCH_VAR_PREFIX := $(HOST_CROSS_2ND_ARCH_VAR_PREFIX) + include $(BUILD_SYSTEM)/module_arch_supported.mk + + ifeq ($(my_module_arch_supported),true) + # Build for HOST_CROSS_2ND_ARCH + OVERRIDE_BUILT_MODULE_PATH := + LOCAL_BUILT_MODULE := + LOCAL_INSTALLED_MODULE := + LOCAL_INTERMEDIATE_TARGETS := + include $(BUILD_SYSTEM)/header_library_internal.mk + endif + LOCAL_2ND_ARCH_VAR_PREFIX := + endif + + LOCAL_HOST_PREFIX := + endif +endif + +my_module_arch_supported := diff --git a/core/header_library_internal.mk b/core/header_library_internal.mk new file mode 100644 index 0000000000..35ee1bc032 --- /dev/null +++ b/core/header_library_internal.mk @@ -0,0 +1,21 @@ +########################################################### +## Standard rules for building a header library. +## +## Additional inputs from base_rules.make: +## None. +########################################################### + +LOCAL_MODULE_CLASS := HEADER_LIBRARIES +LOCAL_UNINSTALLABLE_MODULE := true +ifneq ($(strip $(LOCAL_MODULE_STEM)$(LOCAL_BUILT_MODULE_STEM)),) +$(error $(LOCAL_PATH): Cannot set module stem for a library) +endif + +include $(BUILD_SYSTEM)/binary.mk + +ifneq ($(strip $(all_objects)),) +$(call pretty-error,Header libraries may not have any sources) +endif + +$(LOCAL_BUILT_MODULE): + $(hide) touch $@ diff --git a/core/host_dalvik_java_library.mk b/core/host_dalvik_java_library.mk index 64b610e6a9..0e358447fe 100644 --- a/core/host_dalvik_java_library.mk +++ b/core/host_dalvik_java_library.mk @@ -31,27 +31,39 @@ include $(BUILD_SYSTEM)/configure_local_jack.mk ####################################### include $(BUILD_SYSTEM)/host_java_library_common.mk ####################################### +ifdef LOCAL_JACK_ENABLED ifeq ($(LOCAL_IS_STATIC_JAVA_LIBRARY),true) # For static library, $(LOCAL_BUILT_MODULE) is $(full_classes_jack). LOCAL_BUILT_MODULE_STEM := classes.jack endif +endif ifneq ($(LOCAL_NO_STANDARD_LIBRARIES),true) LOCAL_JAVA_LIBRARIES := core-oj-hostdex core-libart-hostdex $(LOCAL_JAVA_LIBRARIES) endif +full_classes_compiled_jar := $(intermediates.COMMON)/classes-full-debug.jar +full_classes_jarjar_jar := $(intermediates.COMMON)/classes-jarjar.jar +full_classes_jar := $(intermediates.COMMON)/classes.jar full_classes_jack := $(intermediates.COMMON)/classes.jack jack_check_timestamp := $(intermediates.COMMON)/jack.check.timestamp built_dex := $(intermediates.COMMON)/classes.dex LOCAL_INTERMEDIATE_TARGETS += \ + $(full_classes_compiled_jar) \ + $(full_classes_jarjar_jar) \ $(full_classes_jack) \ + $(full_classes_jar) \ $(jack_check_timestamp) \ $(built_dex) # See comment in java.mk ifndef LOCAL_CHECKED_MODULE +ifdef LOCAL_JACK_ENABLED LOCAL_CHECKED_MODULE := $(jack_check_timestamp) +else +LOCAL_CHECKED_MODULE := $(full_classes_compiled_jar) +endif endif ####################################### @@ -65,6 +77,61 @@ include $(BUILD_SYSTEM)/java_common.mk $(cleantarget): PRIVATE_CLEAN_FILES += $(intermediates.COMMON) +ifndef LOCAL_JACK_ENABLED + +$(full_classes_compiled_jar): PRIVATE_JAVA_LAYERS_FILE := $(layers_file) +$(full_classes_compiled_jar): PRIVATE_JAVACFLAGS := $(GLOBAL_JAVAC_DEBUG_FLAGS) $(LOCAL_JAVACFLAGS) +$(full_classes_compiled_jar): PRIVATE_JAR_EXCLUDE_FILES := +$(full_classes_compiled_jar): PRIVATE_JAR_PACKAGES := +$(full_classes_compiled_jar): PRIVATE_JAR_EXCLUDE_PACKAGES := +$(full_classes_compiled_jar): \ + $(java_sources) \ + $(java_resource_sources) \ + $(full_java_lib_deps) \ + $(jar_manifest_file) \ + $(proto_java_sources_file_stamp) \ + $(LOCAL_ADDITIONAL_DEPENDENCIES) + $(transform-host-java-to-package) + +# Run jarjar if necessary, otherwise just copy the file. +ifneq ($(strip $(LOCAL_JARJAR_RULES)),) +$(full_classes_jarjar_jar): PRIVATE_JARJAR_RULES := $(LOCAL_JARJAR_RULES) +$(full_classes_jarjar_jar): $(full_classes_compiled_jar) $(LOCAL_JARJAR_RULES) | $(JARJAR) + @echo JarJar: $@ + $(hide) java -jar $(JARJAR) process $(PRIVATE_JARJAR_RULES) $< $@ +else +$(full_classes_jarjar_jar): $(full_classes_compiled_jar) | $(ACP) + @echo Copying: $@ + $(hide) $(ACP) -fp $< $@ +endif + +$(full_classes_jar): $(full_classes_jarjar_jar) | $(ACP) + @echo Copying: $@ + $(hide) $(ACP) -fp $< $@ + +ifeq ($(LOCAL_IS_STATIC_JAVA_LIBRARY),true) +# No dex; all we want are the .class files with resources. +$(LOCAL_BUILT_MODULE) : $(java_resource_sources) +$(LOCAL_BUILT_MODULE) : $(full_classes_jar) + @echo "host Static Jar: $(PRIVATE_MODULE) ($@)" + $(copy-file-to-target) + +else # !LOCAL_IS_STATIC_JAVA_LIBRARY +$(built_dex): PRIVATE_INTERMEDIATES_DIR := $(intermediates.COMMON) +$(built_dex): PRIVATE_DX_FLAGS := $(LOCAL_DX_FLAGS) +$(built_dex): $(full_classes_jar) $(DX) + $(transform-classes.jar-to-dex) + +$(LOCAL_BUILT_MODULE): PRIVATE_DEX_FILE := $(built_dex) +$(LOCAL_BUILT_MODULE): PRIVATE_SOURCE_ARCHIVE := $(full_classes_jarjar_jar) +$(LOCAL_BUILT_MODULE): PRIVATE_DONT_DELETE_JAR_DIRS := $(LOCAL_DONT_DELETE_JAR_DIRS) +$(LOCAL_BUILT_MODULE): $(built_dex) $(java_resource_sources) + @echo "Host Jar: $(PRIVATE_MODULE) ($@)" + $(call initialize-package-file,$(PRIVATE_SOURCE_ARCHIVE),$@) + $(add-dex-to-package) + +endif # !LOCAL_IS_STATIC_JAVA_LIBRARY +else # LOCAL_JACK_ENABLED $(LOCAL_INTERMEDIATE_TARGETS): \ PRIVATE_JACK_INTERMEDIATES_DIR := $(intermediates.COMMON)/jack-rsc @@ -116,6 +183,7 @@ endif # LOCAL_IS_STATIC_JAVA_LIBRARY $(jack_check_timestamp): $(jack_all_deps) | setup-jack-server @echo Checking build with Jack: $@ $(jack-check-java) +endif # LOCAL_JACK_ENABLED USE_CORE_LIB_BOOTCLASSPATH := diff --git a/core/java.mk b/core/java.mk index baf097b010..41b3abe9fb 100644 --- a/core/java.mk +++ b/core/java.mk @@ -96,14 +96,35 @@ endif intermediates := $(call local-intermediates-dir) intermediates.COMMON := $(call local-intermediates-dir,COMMON) +# Choose leaf name for the compiled jar file. +ifeq ($(LOCAL_EMMA_INSTRUMENT),true) +full_classes_compiled_jar_leaf := classes-no-debug-var.jar +built_dex_intermediate_leaf := no-local +else +full_classes_compiled_jar_leaf := classes-full-debug.jar +built_dex_intermediate_leaf := with-local +endif + ifeq ($(LOCAL_PROGUARD_ENABLED),disabled) LOCAL_PROGUARD_ENABLED := endif -full_classes_compiled_jar := $(intermediates.COMMON)/classes-full-debug.jar -full_classes_jarjar_jar := $(intermediates.COMMON)/classes-jarjar.jar -full_classes_proguard_jar := $(intermediates.COMMON)/proguard.classes.jar -built_dex_intermediate := $(intermediates.COMMON)/dex-dir/classes.dex +ifdef LOCAL_PROGUARD_ENABLED +proguard_jar_leaf := proguard.classes.jar +else +proguard_jar_leaf := noproguard.classes.jar +endif + +full_classes_compiled_jar := $(intermediates.COMMON)/$(full_classes_compiled_jar_leaf) +full_classes_desugar_jar := $(intermediates.COMMON)/desugar.classes.jar +jarjar_leaf := classes-jarjar.jar +full_classes_jarjar_jar := $(intermediates.COMMON)/$(jarjar_leaf) +emma_intermediates_dir := $(intermediates.COMMON)/emma_out +# emma is hardcoded to use the leaf name of its input for the output file -- +# only the output directory can be changed +full_classes_emma_jar := $(emma_intermediates_dir)/lib/$(jarjar_leaf) +full_classes_proguard_jar := $(intermediates.COMMON)/$(proguard_jar_leaf) +built_dex_intermediate := $(intermediates.COMMON)/$(built_dex_intermediate_leaf)/classes.dex full_classes_stubs_jar := $(intermediates.COMMON)/stubs.jar ifeq ($(LOCAL_MODULE_CLASS)$(LOCAL_SRC_FILES)$(LOCAL_STATIC_JAVA_LIBRARIES)$(LOCAL_SOURCE_FILES_ALL_GENERATED),APPS) @@ -122,7 +143,9 @@ jack_check_timestamp := $(intermediates.COMMON)/jack.check.timestamp LOCAL_INTERMEDIATE_TARGETS += \ $(full_classes_compiled_jar) \ + $(full_classes_desugar_jar) \ $(full_classes_jarjar_jar) \ + $(full_classes_emma_jar) \ $(full_classes_jar) \ $(full_classes_proguard_jar) \ $(built_dex_intermediate) \ @@ -322,7 +345,15 @@ endif # command line. ifndef LOCAL_CHECKED_MODULE ifdef full_classes_jar +ifdef LOCAL_JACK_ENABLED LOCAL_CHECKED_MODULE := $(jack_check_timestamp) +else +ifeq ($(LOCAL_IS_STATIC_JAVA_LIBRARY),true) +LOCAL_CHECKED_MODULE := $(full_classes_compiled_jar) +else +LOCAL_CHECKED_MODULE := $(built_dex) +endif +endif endif endif @@ -421,20 +452,57 @@ $(full_classes_compiled_jar): \ javac-check : $(full_classes_compiled_jar) javac-check-$(LOCAL_MODULE) : $(full_classes_compiled_jar) +my_desugaring := +ifndef LOCAL_JACK_ENABLED +ifeq ($(LOCAL_JAVA_LANGUAGE_VERSION),1.8) +my_desugaring := true +$(full_classes_desugar_jar): PRIVATE_DX_FLAGS := $(LOCAL_DX_FLAGS) +$(full_classes_desugar_jar): $(full_classes_compiled_jar) $(DESUGAR) + $(desugar-classes-jar) +endif +endif + +ifndef my_desugaring +full_classes_desugar_jar := $(full_classes_compiled_jar) +endif + # Run jarjar if necessary, otherwise just copy the file. ifneq ($(strip $(LOCAL_JARJAR_RULES)),) $(full_classes_jarjar_jar): PRIVATE_JARJAR_RULES := $(LOCAL_JARJAR_RULES) -$(full_classes_jarjar_jar): $(full_classes_compiled_jar) $(LOCAL_JARJAR_RULES) | $(JARJAR) +$(full_classes_jarjar_jar): $(full_classes_desugar_jar) $(LOCAL_JARJAR_RULES) | $(JARJAR) @echo JarJar: $@ $(hide) java -jar $(JARJAR) process $(PRIVATE_JARJAR_RULES) $< $@ else -$(full_classes_jarjar_jar): $(full_classes_compiled_jar) | $(ACP) +$(full_classes_jarjar_jar): $(full_classes_desugar_jar) | $(ACP) @echo Copying: $@ $(hide) $(ACP) -fp $< $@ endif +ifeq ($(LOCAL_EMMA_INSTRUMENT),true) +$(full_classes_emma_jar): PRIVATE_EMMA_COVERAGE_FILE := $(intermediates.COMMON)/coverage.emma.ignore +$(full_classes_emma_jar): PRIVATE_EMMA_INTERMEDIATES_DIR := $(emma_intermediates_dir) +# module level coverage filter can be defined using LOCAL_EMMA_COVERAGE_FILTER +# in Android.mk +ifdef LOCAL_EMMA_COVERAGE_FILTER +$(full_classes_emma_jar): PRIVATE_EMMA_COVERAGE_FILTER := $(LOCAL_EMMA_COVERAGE_FILTER) +else +# by default, avoid applying emma instrumentation onto emma classes itself, +# otherwise there will be exceptions thrown +$(full_classes_emma_jar): PRIVATE_EMMA_COVERAGE_FILTER := *,-emma,-emmarun,-com.vladium.* +endif +# this rule will generate both $(PRIVATE_EMMA_COVERAGE_FILE) and +# $(full_classes_emma_jar) +$(full_classes_emma_jar): $(full_classes_jarjar_jar) | $(EMMA_JAR) + $(transform-classes.jar-to-emma) + +else +$(full_classes_emma_jar): $(full_classes_jarjar_jar) + @echo Copying: $@ + $(copy-file-to-target) +endif + # Keep a copy of the jar just before proguard processing. -$(full_classes_jar): $(full_classes_jarjar_jar) | $(ACP) +$(full_classes_jar): $(full_classes_emma_jar) | $(ACP) @echo Copying: $@ $(hide) $(ACP) -fp $< $@ @@ -481,7 +549,11 @@ common_proguard_flag_files := ifeq ($(filter nosystem,$(LOCAL_PROGUARD_ENABLED)),) common_proguard_flag_files += $(BUILD_SYSTEM)/proguard.flags ifeq ($(LOCAL_EMMA_INSTRUMENT),true) +ifdef LOCAL_JACK_ENABLED common_proguard_flag_files += $(BUILD_SYSTEM)/proguard.jacoco.flags +else +common_proguard_flags += -include $(BUILD_SYSTEM)/proguard.emma.flags +endif # LOCAL_JACK_ENABLED endif # If this is a test package, add proguard keep flags for tests. ifneq ($(LOCAL_INSTRUMENTATION_FOR)$(filter tests,$(LOCAL_MODULE_TAGS)),) @@ -521,9 +593,10 @@ legacy_proguard_flags := -injars $(link_instr_classes_jar) \ -applymapping $(link_instr_intermediates_dir.COMMON)/proguard_dictionary \ -verbose \ $(legacy_proguard_flags) - +ifdef LOCAL_JACK_ENABLED jack_proguard_flags += -applymapping $(link_instr_intermediates_dir.COMMON)/jack_dictionary full_jack_deps += $(link_instr_intermediates_dir.COMMON)/jack_dictionary +endif # Sometimes (test + main app) uses different keep rules from the main app - # apply the main app's dictionary anyway. @@ -556,6 +629,21 @@ $(full_classes_proguard_jar) : $(full_classes_jar) | $(ACP) endif # LOCAL_PROGUARD_ENABLED defined +ifndef LOCAL_JACK_ENABLED +$(built_dex_intermediate): PRIVATE_DX_FLAGS := $(LOCAL_DX_FLAGS) +# If you instrument class files that have local variable debug information in +# them emma does not correctly maintain the local variable table. +# This will cause an error when you try to convert the class files for Android. +# The workaround here is to build different dex file here based on emma switch +# then later copy into classes.dex. When emma is on, dx is run with --no-locals +# option to remove local variable information +ifeq ($(LOCAL_EMMA_INSTRUMENT),true) +$(built_dex_intermediate): PRIVATE_DX_FLAGS += --no-locals +endif +$(built_dex_intermediate): $(full_classes_proguard_jar) $(DX) + $(transform-classes.jar-to-dex) +endif # LOCAL_JACK_ENABLED is disabled + $(built_dex): $(built_dex_intermediate) | $(ACP) @echo Copying: $@ $(hide) mkdir -p $(dir $@) @@ -588,6 +676,7 @@ $(LOCAL_MODULE)-findbugs : $(findbugs_html) endif # full_classes_jar is defined +ifdef LOCAL_JACK_ENABLED $(LOCAL_INTERMEDIATE_TARGETS): \ PRIVATE_JACK_INTERMEDIATES_DIR := $(intermediates.COMMON)/jack-rsc ifeq ($(LOCAL_JACK_ENABLED),incremental) @@ -689,3 +778,4 @@ $(noshrob_classes_jack): $(jack_all_deps) $(LOCAL_JACK_PLUGIN_PATH) | setup-jack @echo Building with Jack: $@ $(java-to-jack) endif # full_classes_jar is defined +endif # LOCAL_JACK_ENABLED diff --git a/core/java_common.mk b/core/java_common.mk index dbdea26a10..8fc4fb66b4 100644 --- a/core/java_common.mk +++ b/core/java_common.mk @@ -320,6 +320,7 @@ ALL_MODULES.$(my_register_name).INTERMEDIATE_SOURCE_DIR := \ ########################################################### # JACK ########################################################### +ifdef LOCAL_JACK_ENABLED ifdef need_compile_java LOCAL_JACK_FLAGS += -D jack.java.source.version=$(LOCAL_JAVA_LANGUAGE_VERSION) @@ -373,6 +374,7 @@ $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_JACK_SHARED_LIBRARIES:= $(full_shared_jac $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_JARJAR_RULES := $(LOCAL_JARJAR_RULES) endif # need_compile_java +endif # LOCAL_JACK_ENABLED ########################################################### diff --git a/core/java_library.mk b/core/java_library.mk index b132fa68fa..f770a54fba 100644 --- a/core/java_library.mk +++ b/core/java_library.mk @@ -29,9 +29,11 @@ LOCAL_BUILT_MODULE_STEM := javalib.jar include $(BUILD_SYSTEM)/configure_local_jack.mk ################################# +ifdef LOCAL_JACK_ENABLED ifdef LOCAL_IS_STATIC_JAVA_LIBRARY LOCAL_BUILT_MODULE_STEM := classes.jack endif +endif intermediates.COMMON := $(call local-intermediates-dir,COMMON) @@ -46,8 +48,12 @@ endif ifeq (true,$(EMMA_INSTRUMENT)) ifeq (true,$(LOCAL_EMMA_INSTRUMENT)) ifeq (true,$(EMMA_INSTRUMENT_STATIC)) +ifdef LOCAL_JACK_ENABLED # Jack supports coverage with Jacoco LOCAL_STATIC_JAVA_LIBRARIES += jacocoagent +else +LOCAL_STATIC_JAVA_LIBRARIES += emma +endif # LOCAL_JACK_ENABLED endif # LOCAL_EMMA_INSTRUMENT endif # EMMA_INSTRUMENT_STATIC else @@ -61,21 +67,37 @@ include $(BUILD_SYSTEM)/java.mk ifeq ($(LOCAL_IS_STATIC_JAVA_LIBRARY),true) # No dex; all we want are the .class files with resources. $(common_javalib.jar) : $(java_resource_sources) +ifdef LOCAL_PROGUARD_ENABLED +$(common_javalib.jar) : $(full_classes_proguard_jar) +else $(common_javalib.jar) : $(full_classes_jar) +endif @echo "target Static Jar: $(PRIVATE_MODULE) ($@)" $(copy-file-to-target) +ifdef LOCAL_JACK_ENABLED $(LOCAL_BUILT_MODULE) : $(full_classes_jack) +else +$(LOCAL_BUILT_MODULE) : $(common_javalib.jar) +endif $(copy-file-to-target) else # !LOCAL_IS_STATIC_JAVA_LIBRARY $(common_javalib.jar): PRIVATE_DEX_FILE := $(built_dex) +$(common_javalib.jar): PRIVATE_SOURCE_ARCHIVE := $(full_classes_jarjar_jar) +$(common_javalib.jar): PRIVATE_DONT_DELETE_JAR_DIRS := $(LOCAL_DONT_DELETE_JAR_DIRS) $(common_javalib.jar) : $(built_dex) $(java_resource_sources) | $(ZIPTIME) @echo "target Jar: $(PRIVATE_MODULE) ($@)" +ifdef LOCAL_JACK_ENABLED $(create-empty-package) +else + $(call initialize-package-file,$(PRIVATE_SOURCE_ARCHIVE),$@) +endif $(add-dex-to-package) +ifdef LOCAL_JACK_ENABLED $(add-carried-jack-resources) +endif $(remove-timestamps-from-package) ifdef LOCAL_DEX_PREOPT diff --git a/core/notice_files.mk b/core/notice_files.mk index 8a0ae6f58b..447e59ba6d 100644 --- a/core/notice_files.mk +++ b/core/notice_files.mk @@ -36,7 +36,7 @@ ifdef LOCAL_INSTALLED_MODULE module_installed_filename := $(patsubst $(PRODUCT_OUT)/%,%,$(LOCAL_INSTALLED_MODULE)) else # This module isn't installable - ifeq ($(LOCAL_MODULE_CLASS),STATIC_LIBRARIES) + ifneq ($(filter STATIC_LIBRARIES HEADER_LIBRARIES,$(LOCAL_MODULE_CLASS)),) # Stick the static libraries with the dynamic libraries. # We can't use xxx_OUT_STATIC_LIBRARIES because it points into # device-obj or host-obj. diff --git a/core/package_internal.mk b/core/package_internal.mk index 694716a969..2e4878d6c0 100644 --- a/core/package_internal.mk +++ b/core/package_internal.mk @@ -209,10 +209,12 @@ endif # need_compile_res endif # !custom LOCAL_PROGUARD_FLAGS := $(addprefix -include ,$(proguard_options_file)) $(LOCAL_PROGUARD_FLAGS) +ifdef LOCAL_JACK_ENABLED ifndef LOCAL_JACK_PROGUARD_FLAGS LOCAL_JACK_PROGUARD_FLAGS := $(LOCAL_PROGUARD_FLAGS) endif LOCAL_JACK_PROGUARD_FLAGS := $(addprefix -include ,$(proguard_options_file)) $(LOCAL_JACK_PROGUARD_FLAGS) +endif # LOCAL_JACK_ENABLED ifeq (true,$(EMMA_INSTRUMENT)) ifndef LOCAL_EMMA_INSTRUMENT @@ -225,22 +227,35 @@ else LOCAL_EMMA_INSTRUMENT := false endif # EMMA_INSTRUMENT is true -ifneq ($(LOCAL_SRC_FILES)$(LOCAL_STATIC_JAVA_LIBRARIES)$(LOCAL_SOURCE_FILES_ALL_GENERATED),) -# Only add jacocoagent if the package contains some java code ifeq (true,$(LOCAL_EMMA_INSTRUMENT)) ifeq (true,$(EMMA_INSTRUMENT_STATIC)) +ifdef LOCAL_JACK_ENABLED # Jack supports coverage with Jacoco +ifneq ($(LOCAL_SRC_FILES)$(LOCAL_STATIC_JAVA_LIBRARIES)$(LOCAL_SOURCE_FILES_ALL_GENERATED),) +# Only add jacocoagent if the package contains some java code LOCAL_STATIC_JAVA_LIBRARIES += jacocoagent -else # ! EMMA_INSTRUMENT_STATIC +endif # Contains java code +else +LOCAL_STATIC_JAVA_LIBRARIES += emma +endif # LOCAL_JACK_ENABLED +else ifdef LOCAL_SDK_VERSION ifdef TARGET_BUILD_APPS # In unbundled build, merge the coverage library into the apk. +ifdef LOCAL_JACK_ENABLED # Jack supports coverage with Jacoco +ifneq ($(LOCAL_SRC_FILES)$(LOCAL_STATIC_JAVA_LIBRARIES)$(LOCAL_SOURCE_FILES_ALL_GENERATED),) +# Only add jacocoagent if the package contains some java code LOCAL_STATIC_JAVA_LIBRARIES += jacocoagent # Exclude jacoco classes from proguard LOCAL_PROGUARD_FLAGS += -include $(BUILD_SYSTEM)/proguard.jacoco.flags LOCAL_JACK_PROGUARD_FLAGS += -include $(BUILD_SYSTEM)/proguard.jacoco.flags -else # ! TARGET_BUILD_APPS +endif # Contains java code +else # ! LOCAL_JACK_ENABLED +LOCAL_STATIC_JAVA_LIBRARIES += emma +endif # ! LOCAL_JACK_ENABLED +else # ! TARGET_BUILD_APPS +ifdef LOCAL_JACK_ENABLED # If build against the SDK in full build, core.jar is not used # so coverage classes are not present. # Jack needs jacoco on the classpath but we do not want it to be in @@ -249,11 +264,16 @@ else # ! TARGET_BUILD_APPS # Note: we have nothing to do for proguard since jacoco will be # on the classpath only, thus not modified during the compilation. LOCAL_JAVA_LIBRARIES += jacocoagent -endif # TARGET_BUILD_APPS +else # ! LOCAL_JACK_ENABLED +# If build against the SDK in full build, core.jar is not used, +# we have to use prebiult emma.jar to make Proguard happy; +# Otherwise emma classes are included in core.jar. +LOCAL_PROGUARD_FLAGS += -libraryjars $(EMMA_JAR) +endif # ! LOCAL_JACK_ENABLED +endif # ! TARGET_BUILD_APPS endif # LOCAL_SDK_VERSION -endif # ! EMMA_INSTRUMENT_STATIC +endif # EMMA_INSTRUMENT_STATIC endif # LOCAL_EMMA_INSTRUMENT -endif # Contains java code rs_compatibility_jni_libs := @@ -374,13 +394,30 @@ endif endif # LOCAL_USE_AAPT2 -# Make sure to generate R.java before compiling. # Other modules should depend on the BUILT module if # they want to use this module's R.java file. -$(LOCAL_BUILT_MODULE) \ -$(full_classes_compiled_jar) \ -$(built_dex_intermediate) $(noshrob_classes_jack) $(full_classes_jack) $(jack_check_timestamp) \ - : $(R_file_stamp) +$(LOCAL_BUILT_MODULE): $(R_file_stamp) + +ifdef LOCAL_JACK_ENABLED +ifneq ($(built_dex_intermediate),) +$(built_dex_intermediate): $(R_file_stamp) +endif +ifneq ($(noshrob_classes_jack),) +$(noshrob_classes_jack): $(R_file_stamp) +endif +ifneq ($(full_classes_jack),) +$(full_classes_jack): $(R_file_stamp) +$(jack_check_timestamp): $(R_file_stamp) +endif +endif # LOCAL_JACK_ENABLED + +ifneq ($(full_classes_jar),) +# If full_classes_jar is non-empty, we're building sources. +# If we're building sources, the initial javac step (which +# produces full_classes_compiled_jar) needs to ensure the +# R.java and Manifest.java files have been generated first. +$(full_classes_compiled_jar): $(R_file_stamp) +endif endif # need_compile_res @@ -426,9 +463,12 @@ endif # LOCAL_NO_STANDARD_LIBRARIES ifneq ($(full_classes_jar),) $(LOCAL_BUILT_MODULE): PRIVATE_DEX_FILE := $(built_dex) +# Use the jarjar processed arhive as the initial package file. +$(LOCAL_BUILT_MODULE): PRIVATE_SOURCE_ARCHIVE := $(full_classes_jarjar_jar) $(LOCAL_BUILT_MODULE): $(built_dex) else $(LOCAL_BUILT_MODULE): PRIVATE_DEX_FILE := +$(LOCAL_BUILT_MODULE): PRIVATE_SOURCE_ARCHIVE := endif # full_classes_jar include $(BUILD_SYSTEM)/install_jni_libs.mk @@ -487,6 +527,7 @@ else $(my_res_package) $(LOCAL_BUILT_MODULE): PRIVATE_PRODUCT_AAPT_PREF_CONFIG := $(PRODUCT_AAPT_PREF_CONFIG) endif endif +$(LOCAL_BUILT_MODULE): PRIVATE_DONT_DELETE_JAR_DIRS := $(LOCAL_DONT_DELETE_JAR_DIRS) $(LOCAL_BUILT_MODULE) : $(jni_shared_libraries) ifdef LOCAL_USE_AAPT2 $(LOCAL_BUILT_MODULE): PRIVATE_RES_PACKAGE := $(my_res_package) @@ -498,7 +539,13 @@ endif ifdef LOCAL_USE_AAPT2 $(call copy-file-to-new-target) else # ! LOCAL_USE_AAPT2 +ifdef LOCAL_JACK_ENABLED $(create-empty-package) +else + $(if $(PRIVATE_SOURCE_ARCHIVE),\ + $(call initialize-package-file,$(PRIVATE_SOURCE_ARCHIVE),$@),\ + $(create-empty-package)) +endif $(add-assets-to-package) endif # LOCAL_USE_AAPT2 ifneq ($(jni_shared_libraries),) @@ -510,7 +557,9 @@ ifeq ($(full_classes_jar),) else # full_classes_jar $(add-dex-to-package) endif # full_classes_jar +ifdef LOCAL_JACK_ENABLED $(add-carried-jack-resources) +endif ifdef LOCAL_DEX_PREOPT ifneq ($(BUILD_PLATFORM_ZIP),) @# Keep a copy of apk with classes.dex unstripped diff --git a/core/static_java_library.mk b/core/static_java_library.mk index 258c5f8d13..eeef4ce641 100644 --- a/core/static_java_library.mk +++ b/core/static_java_library.mk @@ -75,10 +75,12 @@ endif LOCAL_PROGUARD_FLAGS := $(addprefix -include ,$(proguard_options_file)) $(LOCAL_PROGUARD_FLAGS) +ifdef LOCAL_JACK_ENABLED ifndef LOCAL_JACK_PROGUARD_FLAGS LOCAL_JACK_PROGUARD_FLAGS := $(LOCAL_PROGUARD_FLAGS) endif LOCAL_JACK_PROGUARD_FLAGS := $(addprefix -include ,$(proguard_options_file)) $(LOCAL_JACK_PROGUARD_FLAGS) +endif # LOCAL_JACK_ENABLED R_file_stamp := $(intermediates.COMMON)/src/R.stamp LOCAL_INTERMEDIATE_TARGETS += $(R_file_stamp) @@ -164,10 +166,13 @@ $(R_file_stamp) : $(all_resources) $(full_android_manifest) $(AAPT) $(framework_ $(hide) find $(PRIVATE_SOURCE_INTERMEDIATES_DIR) -name R.java | xargs cat > $@ endif # LOCAL_USE_AAPT2 -$(LOCAL_BUILT_MODULE) \ -$(full_classes_compiled_jar) \ -$(noshrob_classes_jack) $(full_classes_jack) $(jack_check_timestamp) \ - : $(R_file_stamp) +$(LOCAL_BUILT_MODULE): $(R_file_stamp) +ifdef LOCAL_JACK_ENABLED +$(noshrob_classes_jack): $(R_file_stamp) +$(full_classes_jack): $(R_file_stamp) +$(jack_check_timestamp): $(R_file_stamp) +endif # LOCAL_JACK_ENABLED +$(full_classes_compiled_jar): $(R_file_stamp) # Rule to build AAR, archive including classes.jar, resource, etc. built_aar := $(intermediates.COMMON)/javalib.aar diff --git a/core/version_defaults.mk b/core/version_defaults.mk index 2449ea91e1..86d77bb449 100644 --- a/core/version_defaults.mk +++ b/core/version_defaults.mk @@ -38,6 +38,44 @@ ifneq "" "$(INTERNAL_BUILD_ID_MAKEFILE)" include $(INTERNAL_BUILD_ID_MAKEFILE) endif +# Returns all words in $1 up to and including $2 +define find_and_earlier + $(strip $(if $(1), + $(firstword $(1)) + $(if $(filter $(firstword $(1)),$(2)),, + $(call find_and_earlier,$(wordlist 2,$(words $(1)),$(1)),$(2))))) +endef + +#$(warning $(call find_and_earlier,A B C,A)) +#$(warning $(call find_and_earlier,A B C,B)) +#$(warning $(call find_and_earlier,A B C,C)) +#$(warning $(call find_and_earlier,A B C,D)) + +define version-list +$(1) $(1)DR1 $(1)DR2 $(1)MR1 $(1)MR2 +endef + +ALL_VERSIONS := O P +ALL_VERSIONS := $(foreach v,$(ALL_VERSIONS),$(call version-list,$(v))) + +ifeq (,$(TARGET_PLATFORM_VERSION)) + # Default targeted platform version + # TODO: PLATFORM_VERSION, PLATFORM_SDK_VERSION, etc. should be conditional + # on this + TARGET_PLATFORM_VERSION := O +endif + +ifeq (,$(filter $(ALL_VERSIONS), $(TARGET_PLATFORM_VERSION))) +$(warning Invalid TARGET_PLATFORM_VERSION '$(TARGET_PLATFORM_VERSION)', must be one of) +$(warning $(ALL_VERSIONS)) +$(error Stopping...) +endif + +ENABLED_VERSIONS := $(call find_and_earlier,$(ALL_VERSIONS),$(TARGET_PLATFORM_VERSION)) + +$(foreach v,$(ENABLED_VERSIONS), \ + $(eval IS_AT_LEAST_$(v) := true)) + ifeq "" "$(PLATFORM_VERSION)" # This is the canonical definition of the platform version, # which is the version that we reveal to the end user. diff --git a/target/product/full_base_telephony.mk b/target/product/full_base_telephony.mk index 9a2c63a8d0..3d195a13b5 100644 --- a/target/product/full_base_telephony.mk +++ b/target/product/full_base_telephony.mk @@ -25,7 +25,7 @@ PRODUCT_PROPERTY_OVERRIDES := \ PRODUCT_COPY_FILES := \ device/generic/goldfish/data/etc/apns-conf.xml:system/etc/apns-conf.xml \ - frameworks/native/data/etc/handheld_core_hardware.xml:system/etc/permissions/handheld_core_hardware.xml + device/generic/goldfish/data/etc/handheld_core_hardware.xml:system/etc/permissions/handheld_core_hardware.xml \ $(call inherit-product, $(SRC_TARGET_DIR)/product/aosp_base.mk) $(call inherit-product, $(SRC_TARGET_DIR)/product/telephony.mk) diff --git a/tools/zipalign/ZipFile.cpp b/tools/zipalign/ZipFile.cpp index 98d02e061a..1b39902271 100644 --- a/tools/zipalign/ZipFile.cpp +++ b/tools/zipalign/ZipFile.cpp @@ -359,8 +359,7 @@ bail: * safely written. Not really a concern for us. */ status_t ZipFile::addCommon(const char* fileName, const void* data, size_t size, - const char* storageName, int sourceType, int compressionMethod, - ZipEntry** ppEntry) + const char* storageName, int compressionMethod, ZipEntry** ppEntry) { ZipEntry* pEntry = NULL; status_t result = NO_ERROR; @@ -414,81 +413,51 @@ status_t ZipFile::addCommon(const char* fileName, const void* data, size_t size, /* * Copy the data in, possibly compressing it as we go. */ - if (sourceType == ZipEntry::kCompressStored) { - if (compressionMethod == ZipEntry::kCompressDeflated) { - bool failed = false; - result = compressFpToFp(mZipFp, inputFp, data, size, &crc); - if (result != NO_ERROR) { - ALOGD("compression failed, storing\n"); + if (compressionMethod == ZipEntry::kCompressDeflated) { + bool failed = false; + result = compressFpToFp(mZipFp, inputFp, data, size, &crc); + if (result != NO_ERROR) { + ALOGD("compression failed, storing\n"); + failed = true; + } else { + /* + * Make sure it has compressed "enough". This probably ought + * to be set through an API call, but I don't expect our + * criteria to change over time. + */ + long src = inputFp ? ftell(inputFp) : size; + long dst = ftell(mZipFp) - startPosn; + if (dst + (dst / 10) > src) { + ALOGD("insufficient compression (src=%ld dst=%ld), storing\n", + src, dst); failed = true; - } else { - /* - * Make sure it has compressed "enough". This probably ought - * to be set through an API call, but I don't expect our - * criteria to change over time. - */ - long src = inputFp ? ftell(inputFp) : size; - long dst = ftell(mZipFp) - startPosn; - if (dst + (dst / 10) > src) { - ALOGD("insufficient compression (src=%ld dst=%ld), storing\n", - src, dst); - failed = true; - } - } - - if (failed) { - compressionMethod = ZipEntry::kCompressStored; - if (inputFp) rewind(inputFp); - fseek(mZipFp, startPosn, SEEK_SET); - /* fall through to kCompressStored case */ - } - } - /* handle "no compression" request, or failed compression from above */ - if (compressionMethod == ZipEntry::kCompressStored) { - if (inputFp) { - result = copyFpToFp(mZipFp, inputFp, &crc); - } else { - result = copyDataToFp(mZipFp, data, size, &crc); - } - if (result != NO_ERROR) { - // don't need to truncate; happens in CDE rewrite - ALOGD("failed copying data in\n"); - goto bail; } } - // currently seeked to end of file - uncompressedLen = inputFp ? ftell(inputFp) : size; - } else if (sourceType == ZipEntry::kCompressDeflated) { - /* we should support uncompressed-from-compressed, but it's not - * important right now */ - assert(compressionMethod == ZipEntry::kCompressDeflated); - - bool scanResult; - int method; - long compressedLen; - unsigned long longcrc; - - scanResult = ZipUtils::examineGzip(inputFp, &method, &uncompressedLen, - &compressedLen, &longcrc); - if (!scanResult || method != ZipEntry::kCompressDeflated) { - ALOGD("this isn't a deflated gzip file?"); - result = UNKNOWN_ERROR; - goto bail; + if (failed) { + compressionMethod = ZipEntry::kCompressStored; + if (inputFp) rewind(inputFp); + fseek(mZipFp, startPosn, SEEK_SET); + /* fall through to kCompressStored case */ + } + } + /* handle "no compression" request, or failed compression from above */ + if (compressionMethod == ZipEntry::kCompressStored) { + if (inputFp) { + result = copyFpToFp(mZipFp, inputFp, &crc); + } else { + result = copyDataToFp(mZipFp, data, size, &crc); } - crc = longcrc; - - result = copyPartialFpToFp(mZipFp, inputFp, compressedLen, NULL); if (result != NO_ERROR) { - ALOGD("failed copying gzip data in\n"); + // don't need to truncate; happens in CDE rewrite + ALOGD("failed copying data in\n"); goto bail; } - } else { - assert(false); - result = UNKNOWN_ERROR; - goto bail; } + // currently seeked to end of file + uncompressedLen = inputFp ? ftell(inputFp) : size; + /* * We could write the "Data Descriptor", but there doesn't seem to * be any point since we're going to go back and write the LFH. diff --git a/tools/zipalign/ZipFile.h b/tools/zipalign/ZipFile.h index b0bafe95b3..d5ace7c492 100644 --- a/tools/zipalign/ZipFile.h +++ b/tools/zipalign/ZipFile.h @@ -86,24 +86,10 @@ public: int compressionMethod, ZipEntry** ppEntry) { return addCommon(fileName, NULL, 0, storageName, - ZipEntry::kCompressStored, compressionMethod, ppEntry); } /* - * Add a file that is already compressed with gzip. - * - * If "ppEntry" is non-NULL, a pointer to the new entry will be returned. - */ - status_t addGzip(const char* fileName, const char* storageName, - ZipEntry** ppEntry) - { - return addCommon(fileName, NULL, 0, storageName, - ZipEntry::kCompressDeflated, - ZipEntry::kCompressDeflated, ppEntry); - } - - /* * Add a file from an in-memory data buffer. * * If "ppEntry" is non-NULL, a pointer to the new entry will be returned. @@ -112,7 +98,6 @@ public: int compressionMethod, ZipEntry** ppEntry) { return addCommon(NULL, data, size, storageName, - ZipEntry::kCompressStored, compressionMethod, ppEntry); } @@ -231,8 +216,7 @@ private: /* common handler for all "add" functions */ status_t addCommon(const char* fileName, const void* data, size_t size, - const char* storageName, int sourceType, int compressionMethod, - ZipEntry** ppEntry); + const char* storageName, int compressionMethod, ZipEntry** ppEntry); /* copy all of "srcFp" into "dstFp" */ status_t copyFpToFp(FILE* dstFp, FILE* srcFp, uint32_t* pCRC32); |