diff options
Diffstat (limited to 'core')
48 files changed, 1131 insertions, 357 deletions
diff --git a/core/Makefile b/core/Makefile index 4222fb8..598b620 100644 --- a/core/Makefile +++ b/core/Makefile @@ -67,7 +67,9 @@ ADDITIONAL_DEFAULT_PROPERTIES += \ ADDITIONAL_DEFAULT_PROPERTIES := $(call uniq-pairs-by-first-component, \ $(ADDITIONAL_DEFAULT_PROPERTIES),=) -$(INSTALLED_DEFAULT_PROP_TARGET): +intermediate_system_build_prop := $(call intermediates-dir-for,ETC,system_build_prop)/build.prop + +$(INSTALLED_DEFAULT_PROP_TARGET): $(intermediate_system_build_prop) @echo Target buildinfo: $@ @mkdir -p $(dir $@) $(hide) echo "#" > $@; \ @@ -75,7 +77,13 @@ $(INSTALLED_DEFAULT_PROP_TARGET): echo "#" >> $@; $(hide) $(foreach line,$(ADDITIONAL_DEFAULT_PROPERTIES), \ echo "$(line)" >> $@;) - build/tools/post_process_props.py $@ + $(hide) echo "#" >> $@; \ + echo "# BOOTIMAGE_BUILD_PROPERTIES" >> $@; \ + echo "#" >> $@; + $(hide) echo ro.bootimage.build.date=`date`>>$@ + $(hide) echo ro.bootimage.build.date.utc=`date +%s`>>$@ + $(hide) echo ro.bootimage.build.fingerprint="$(BUILD_FINGERPRINT)">>$@ + $(hide) build/tools/post_process_props.py $@ # ----------------------------------------------------------------- # build.prop @@ -107,7 +115,7 @@ BUILD_VERSION_TAGS := $(subst $(space),$(comma),$(sort $(BUILD_VERSION_TAGS))) # A human-readable string that descibes this build in detail. build_desc := $(TARGET_PRODUCT)-$(TARGET_BUILD_VARIANT) $(PLATFORM_VERSION) $(BUILD_ID) $(BUILD_NUMBER) $(BUILD_VERSION_TAGS) -$(INSTALLED_BUILD_PROP_TARGET): PRIVATE_BUILD_DESC := $(build_desc) +$(intermediate_system_build_prop): PRIVATE_BUILD_DESC := $(build_desc) # The string used to uniquely identify the combined build and product; used by the OTA server. ifeq (,$(strip $(BUILD_FINGERPRINT))) @@ -171,7 +179,7 @@ system_prop_file := $(TARGET_SYSTEM_PROP) else system_prop_file := $(wildcard $(TARGET_DEVICE_DIR)/system.prop) endif -$(INSTALLED_BUILD_PROP_TARGET): $(BUILDINFO_SH) $(INTERNAL_BUILD_ID_MAKEFILE) $(BUILD_SYSTEM)/version_defaults.mk $(system_prop_file) $(INSTALLED_ANDROID_INFO_TXT_TARGET) +$(intermediate_system_build_prop): $(BUILDINFO_SH) $(INTERNAL_BUILD_ID_MAKEFILE) $(BUILD_SYSTEM)/version_defaults.mk $(system_prop_file) $(INSTALLED_ANDROID_INFO_TXT_TARGET) @echo Target buildinfo: $@ @mkdir -p $(dir $@) $(hide) echo > $@ @@ -197,6 +205,7 @@ endif BUILD_NUMBER="$(BUILD_NUMBER)" \ PLATFORM_VERSION="$(PLATFORM_VERSION)" \ PLATFORM_SDK_VERSION="$(PLATFORM_SDK_VERSION)" \ + PLATFORM_PREVIEW_SDK_VERSION="$(PLATFORM_PREVIEW_SDK_VERSION)" \ PLATFORM_VERSION_CODENAME="$(PLATFORM_VERSION_CODENAME)" \ PLATFORM_VERSION_ALL_CODENAMES="$(PLATFORM_VERSION_ALL_CODENAMES)" \ BUILD_VERSION_TAGS="$(BUILD_VERSION_TAGS)" \ @@ -231,6 +240,19 @@ endif build_desc := +ifeq (,$(filter true, $(TARGET_NO_KERNEL) $(TARGET_NO_RECOVERY))) +INSTALLED_RECOVERYIMAGE_TARGET := $(PRODUCT_OUT)/recovery.img +else +INSTALLED_RECOVERYIMAGE_TARGET := +endif + +$(INSTALLED_BUILD_PROP_TARGET): $(intermediate_system_build_prop) $(INSTALLED_RECOVERYIMAGE_TARGET) + @echo "Target build info: $@" + $(hide) cat $(intermediate_system_build_prop) > $@ +ifdef INSTALLED_RECOVERYIMAGE_TARGET + $(hide) echo ro.expect.recovery_id=`cat $(RECOVERYIMAGE_ID_FILE)` >> $@ +endif + # ----------------------------------------------------------------- # vendor build.prop # @@ -248,19 +270,6 @@ $(INSTALLED_VENDOR_BUILD_PROP_TARGET): $(INSTALLED_BUILD_PROP_TARGET) endif # ---------------------------------------------------------------- -# boot.img build.prop -# as with vendor build.prop above, for verifying that the bootimage -# build is what we think it is - -INSTALLED_BOOTIMAGE_BUILD_PROP_TARGET := $(TARGET_ROOT_OUT)/build.prop -ALL_DEFAULT_INSTALLED_MODULES += $(INSTALLED_BOOTIMAGE_BUILD_PROP_TARGET) -$(INSTALLED_BOOTIMAGE_BUILD_PROP_TARGET): $(INSTALLED_BUILD_PROP_TARGET) - @echo Target bootimage buildinfo: $@ - @mkdir -p $(dir $@) - $(hide) echo > $@ - $(hide) echo ro.bootimage.build.date=`date`>>$@ - $(hide) echo ro.bootimage.build.date.utc=`date +%s`>>$@ - $(hide) echo ro.bootimage.build.fingerprint="$(BUILD_FINGERPRINT)">>$@ # ----------------------------------------------------------------- # sdk-build.prop @@ -464,8 +473,12 @@ ifneq ($(strip $(TARGET_NO_KERNEL)),true) # the boot image, which is a collection of other images. INTERNAL_BOOTIMAGE_ARGS := \ $(addprefix --second ,$(INSTALLED_2NDBOOTLOADER_TARGET)) \ - --kernel $(INSTALLED_KERNEL_TARGET) \ - --ramdisk $(INSTALLED_RAMDISK_TARGET) + --kernel $(INSTALLED_KERNEL_TARGET) + +ifneq ($(BOARD_BUILD_SYSTEM_ROOT_IMAGE),true) +INTERNAL_BOOTIMAGE_ARGS += --ramdisk $(INSTALLED_RAMDISK_TARGET) +endif + INTERNAL_BOOTIMAGE_FILES := $(filter-out --%,$(INTERNAL_BOOTIMAGE_ARGS)) @@ -488,7 +501,7 @@ INSTALLED_BOOTIMAGE_TARGET := $(PRODUCT_OUT)/boot.img ifeq ($(TARGET_BOOTIMAGE_USE_EXT2),true) $(error TARGET_BOOTIMAGE_USE_EXT2 is not supported anymore) -else ifeq (true,$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_VERITY)) # TARGET_BOOTIMAGE_USE_EXT2 != true +else ifeq (true,$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_BOOT_SIGNER)) # TARGET_BOOTIMAGE_USE_EXT2 != true $(INSTALLED_BOOTIMAGE_TARGET): $(MKBOOTIMG) $(INTERNAL_BOOTIMAGE_FILES) $(BOOT_SIGNER) $(call pretty,"Target boot image: $@") @@ -503,7 +516,22 @@ bootimage-nodeps: $(MKBOOTIMG) $(BOOT_SIGNER) $(BOOT_SIGNER) /boot $(INSTALLED_BOOTIMAGE_TARGET) $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_VERITY_SIGNING_KEY).pk8 $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_VERITY_SIGNING_KEY).x509.pem $(INSTALLED_BOOTIMAGE_TARGET) $(hide) $(call assert-max-image-size,$(INSTALLED_BOOTIMAGE_TARGET),$(BOARD_BOOTIMAGE_PARTITION_SIZE)) -else # PRODUCT_SUPPORTS_VERITY != true +else ifeq (true,$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_VBOOT)) # PRODUCT_SUPPORTS_BOOT_SIGNER != true + +$(INSTALLED_BOOTIMAGE_TARGET): $(MKBOOTIMG) $(INTERNAL_BOOTIMAGE_FILES) $(VBOOT_SIGNER) + $(call pretty,"Target boot image: $@") + $(hide) $(MKBOOTIMG) $(INTERNAL_BOOTIMAGE_ARGS) $(BOARD_MKBOOTIMG_ARGS) --output $@.unsigned + $(VBOOT_SIGNER) $(FUTILITY) $@.unsigned $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_VBOOT_SIGNING_KEY).vbpubk $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_VBOOT_SIGNING_KEY).vbprivk $@.keyblock $@ + $(hide) $(call assert-max-image-size,$@,$(BOARD_BOOTIMAGE_PARTITION_SIZE)) + +.PHONY: bootimage-nodeps +bootimage-nodeps: $(MKBOOTIMG) $(VBOOT_SIGNER) + @echo "make $@: ignoring dependencies" + $(hide) $(MKBOOTIMG) $(INTERNAL_BOOTIMAGE_ARGS) $(BOARD_MKBOOTIMG_ARGS) --output $(INSTALLED_BOOTIMAGE_TARGET).unsigned + $(VBOOT_SIGNER) $(FUTILITY) $(INSTALLED_BOOTIMAGE_TARGET).unsigned $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_VBOOT_SIGNING_KEY).vbpubk $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_VBOOT_SIGNING_KEY).vbprivk $(INSTALLED_BOOTIMAGE_TARGET).keyblock $(INSTALLED_BOOTIMAGE_TARGET) + $(hide) $(call assert-max-image-size,$(INSTALLED_BOOTIMAGE_TARGET),$(BOARD_BOOTIMAGE_PARTITION_SIZE)) + +else # PRODUCT_SUPPORTS_VBOOT != true $(INSTALLED_BOOTIMAGE_TARGET): $(MKBOOTIMG) $(INTERNAL_BOOTIMAGE_FILES) $(call pretty,"Target boot image: $@") @@ -682,7 +710,7 @@ endif endif ifeq ($(BOARD_SYSTEMIMAGE_FILE_SYSTEM_TYPE),squashfs) -INTERNAL_USERIMAGES_DEPS += $(MAKE_SQUASHFS) $(MKSQUASHFSUSERIMG) +INTERNAL_USERIMAGES_DEPS += $(MAKE_SQUASHFS) $(MKSQUASHFSUSERIMG) $(IMG2SIMG) endif ifeq ($(BOARD_SYSTEMIMAGE_FILE_SYSTEM_TYPE),squashfs) @@ -705,6 +733,7 @@ $(if $(INTERNAL_USERIMAGES_EXT_VARIANT),$(hide) echo "fs_type=$(INTERNAL_USERIMA $(if $(BOARD_SYSTEMIMAGE_PARTITION_SIZE),$(hide) echo "system_size=$(BOARD_SYSTEMIMAGE_PARTITION_SIZE)" >> $(1)) $(if $(BOARD_SYSTEMIMAGE_FILE_SYSTEM_TYPE),$(hide) echo "system_fs_type=$(BOARD_SYSTEMIMAGE_FILE_SYSTEM_TYPE)" >> $(1)) $(if $(BOARD_SYSTEMIMAGE_JOURNAL_SIZE),$(hide) echo "system_journal_size=$(BOARD_SYSTEMIMAGE_JOURNAL_SIZE)" >> $(1)) +$(if $(BOARD_HAS_EXT4_RESERVED_BLOCKS),$(hide) echo "has_ext4_reserved_blocks=$(BOARD_HAS_EXT4_RESERVED_BLOCKS)" >> $(1)) $(if $(BOARD_SYSTEMIMAGE_SQUASHFS_COMPRESSOR),$(hide) echo "system_squashfs_compressor=$(BOARD_SYSTEMIMAGE_SQUASHFS_COMPRESSOR)" >> $(1)) $(if $(BOARD_SYSTEMIMAGE_SQUASHFS_COMPRESSOR_OPT),$(hide) echo "system_squashfs_compressor_opt=$(BOARD_SYSTEMIMAGE_SQUASHFS_COMPRESSOR_OPT)" >> $(1)) $(if $(BOARD_USERDATAIMAGE_FILE_SYSTEM_TYPE),$(hide) echo "userdata_fs_type=$(BOARD_USERDATAIMAGE_FILE_SYSTEM_TYPE)" >> $(1)) @@ -718,6 +747,7 @@ $(if $(BOARD_OEMIMAGE_PARTITION_SIZE),$(hide) echo "oem_size=$(BOARD_OEMIMAGE_PA $(if $(BOARD_OEMIMAGE_JOURNAL_SIZE),$(hide) echo "oem_journal_size=$(BOARD_OEMIMAGE_JOURNAL_SIZE)" >> $(1)) $(if $(INTERNAL_USERIMAGES_SPARSE_EXT_FLAG),$(hide) echo "extfs_sparse_flag=$(INTERNAL_USERIMAGES_SPARSE_EXT_FLAG)" >> $(1)) $(hide) echo "selinux_fc=$(SELINUX_FC)" >> $(1) +$(if $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_BOOT_SIGNER),$(hide) echo "boot_signer=$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_BOOT_SIGNER)" >> $(1)) $(if $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_VERITY),$(hide) echo "verity=$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_VERITY)" >> $(1)) $(if $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_VERITY),$(hide) echo "verity_key=$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_VERITY_SIGNING_KEY)" >> $(1)) $(if $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_VERITY),$(hide) echo "verity_signer_cmd=$(VERITY_SIGNER)" >> $(1)) @@ -736,10 +766,7 @@ endef # ----------------------------------------------------------------- # Recovery image -# If neither TARGET_NO_KERNEL nor TARGET_NO_RECOVERY are true -ifeq (,$(filter true, $(TARGET_NO_KERNEL) $(TARGET_NO_RECOVERY))) - -INSTALLED_RECOVERYIMAGE_TARGET := $(PRODUCT_OUT)/recovery.img +ifdef INSTALLED_RECOVERYIMAGE_TARGET INTERNAL_RECOVERYIMAGE_FILES := $(filter $(TARGET_RECOVERY_OUT)/%, \ $(ALL_DEFAULT_INSTALLED_MODULES)) @@ -748,7 +775,7 @@ recovery_initrc := $(call include-path-for, recovery)/etc/init.rc recovery_sepolicy := $(call intermediates-dir-for,ETC,sepolicy.recovery)/sepolicy.recovery recovery_kernel := $(INSTALLED_KERNEL_TARGET) # same as a non-recovery system recovery_ramdisk := $(PRODUCT_OUT)/ramdisk-recovery.img -recovery_build_prop := $(INSTALLED_BUILD_PROP_TARGET) +recovery_build_prop := $(intermediate_system_build_prop) recovery_resources_common := $(call include-path-for, recovery)/res # Set recovery_density to the density bucket of the device. @@ -832,6 +859,7 @@ $(RECOVERY_INSTALL_OTA_KEYS): $(OTA_PUBLIC_KEYS) $(DUMPKEY_JAR) $(extra_keys) @mkdir -p $(dir $@) java -jar $(DUMPKEY_JAR) $(PRIVATE_OTA_PUBLIC_KEYS) $(extra_keys) > $@ +RECOVERYIMAGE_ID_FILE := $(PRODUCT_OUT)/recovery.id # $(1): output file define build-recoveryimage-target @echo ----- Making recovery image ------ @@ -859,8 +887,8 @@ define build-recoveryimage-target $(hide) $(MKBOOTFS) $(TARGET_RECOVERY_ROOT_OUT) | $(MINIGZIP) > $(recovery_ramdisk) $(if $(filter true,$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_VBOOT)), \ $(hide) $(MKBOOTIMG) $(INTERNAL_RECOVERYIMAGE_ARGS) $(BOARD_MKBOOTIMG_ARGS) --output $(1).unsigned, \ - $(hide) $(MKBOOTIMG) $(INTERNAL_RECOVERYIMAGE_ARGS) $(BOARD_MKBOOTIMG_ARGS) --output $(1)) - $(if $(filter true,$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_VERITY)),\ + $(hide) $(MKBOOTIMG) $(INTERNAL_RECOVERYIMAGE_ARGS) $(BOARD_MKBOOTIMG_ARGS) --output $(1) --id > $(RECOVERYIMAGE_ID_FILE)) + $(if $(filter true,$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_BOOT_SIGNER)),\ $(BOOT_SIGNER) /recovery $(1) $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_VERITY_SIGNING_KEY).pk8 $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_VERITY_SIGNING_KEY).x509.pem $(1)) $(if $(filter true,$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_VBOOT)), \ $(VBOOT_SIGNER) $(FUTILITY) $(1).unsigned $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_VBOOT_SIGNING_KEY).vbpubk $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_VBOOT_SIGNING_KEY).vbprivk $(1).keyblock $(1)) @@ -889,7 +917,6 @@ recoveryimage-nodeps: $(call build-recoveryimage-target, $(INSTALLED_RECOVERYIMAGE_TARGET)) else -INSTALLED_RECOVERYIMAGE_TARGET := RECOVERY_RESOURCE_ZIP := endif @@ -971,7 +998,15 @@ define build-systemimage-target $(TARGET_OUT) $(systemimage_intermediates)/system_image_info.txt $(1) \ || ( echo "Out of space? the tree size of $(TARGET_OUT) is (MB): " 1>&2 ;\ du -sm $(TARGET_OUT) 1>&2;\ - echo "The max is $$(( $(BOARD_SYSTEMIMAGE_PARTITION_SIZE) / 1048576 )) MB." 1>&2 ;\ + if [ "$(INTERNAL_USERIMAGES_EXT_VARIANT)" == "ext4" ]; then \ + maxsize=$(BOARD_SYSTEMIMAGE_PARTITION_SIZE); \ + if [ "$(BOARD_HAS_EXT4_RESERVED_BLOCKS)" == "true" ]; then \ + maxsize=$$((maxsize - 4096 * 4096)); \ + fi; \ + echo "The max is $$(( maxsize / 1048576 )) MB." 1>&2 ;\ + else \ + echo "The max is $$(( $(BOARD_SYSTEMIMAGE_PARTITION_SIZE) / 1048576 )) MB." 1>&2 ;\ + fi; \ mkdir -p $(DIST_DIR); cp $(INSTALLED_FILES_FILE) $(DIST_DIR)/installed-files-rescued.txt; \ exit 1 ) endef @@ -1273,6 +1308,7 @@ DISTTOOLS := $(HOST_OUT_EXECUTABLES)/minigzip \ $(HOST_OUT_EXECUTABLES)/build_verity_tree \ $(HOST_OUT_EXECUTABLES)/verity_signer \ $(HOST_OUT_EXECUTABLES)/append2simg \ + $(HOST_OUT_EXECUTABLES)/img2simg \ $(HOST_OUT_EXECUTABLES)/boot_signer # Shared libraries. @@ -1280,7 +1316,15 @@ DISTTOOLS += \ $(HOST_LIBRARY_PATH)/libc++$(HOST_SHLIB_SUFFIX) \ $(HOST_LIBRARY_PATH)/liblog$(HOST_SHLIB_SUFFIX) \ $(HOST_LIBRARY_PATH)/libcutils$(HOST_SHLIB_SUFFIX) \ - $(HOST_LIBRARY_PATH)/libselinux$(HOST_SHLIB_SUFFIX) + $(HOST_LIBRARY_PATH)/libselinux$(HOST_SHLIB_SUFFIX) \ + $(HOST_LIBRARY_PATH)/libcrypto-host$(HOST_SHLIB_SUFFIX) \ + $(HOST_LIBRARY_PATH)/libext2fs_host$(HOST_SHLIB_SUFFIX) \ + $(HOST_LIBRARY_PATH)/libext2_blkid_host$(HOST_SHLIB_SUFFIX) \ + $(HOST_LIBRARY_PATH)/libext2_com_err_host$(HOST_SHLIB_SUFFIX) \ + $(HOST_LIBRARY_PATH)/libext2_e2p_host$(HOST_SHLIB_SUFFIX) \ + $(HOST_LIBRARY_PATH)/libext2_profile_host$(HOST_SHLIB_SUFFIX) \ + $(HOST_LIBRARY_PATH)/libext2_quota_host$(HOST_SHLIB_SUFFIX) \ + $(HOST_LIBRARY_PATH)/libext2_uuid_host$(HOST_SHLIB_SUFFIX) OTATOOLS := $(DISTTOOLS) \ $(HOST_OUT_EXECUTABLES)/aapt @@ -1445,6 +1489,9 @@ endif ifdef BOARD_RECOVERYIMAGE_PARTITION_SIZE $(hide) echo "recovery_size=$(BOARD_RECOVERYIMAGE_PARTITION_SIZE)" >> $(zip_root)/META/misc_info.txt endif +ifdef BOARD_HAS_EXT4_RESERVED_BLOCKS + $(hide) echo "has_ext4_reserved_blocks=$(BOARD_HAS_EXT4_RESERVED_BLOCKS)" >> $(zip_root)/META/misc_info.txt +endif ifdef TARGET_RECOVERY_FSTYPE_MOUNT_OPTIONS @# TARGET_RECOVERY_FSTYPE_MOUNT_OPTIONS can be empty to indicate that nothing but defaults should be used. $(hide) echo "recovery_mount_options=$(TARGET_RECOVERY_FSTYPE_MOUNT_OPTIONS)" >> $(zip_root)/META/misc_info.txt @@ -1460,7 +1507,7 @@ endif $(hide) echo "use_set_metadata=1" >> $(zip_root)/META/misc_info.txt $(hide) echo "multistage_support=1" >> $(zip_root)/META/misc_info.txt $(hide) echo "update_rename_support=1" >> $(zip_root)/META/misc_info.txt - $(hide) echo "blockimgdiff_versions=1,2" >> $(zip_root)/META/misc_info.txt + $(hide) echo "blockimgdiff_versions=1,2,3" >> $(zip_root)/META/misc_info.txt ifneq ($(OEM_THUMBPRINT_PROPERTIES),) # OTA scripts are only interested in fingerprint related properties $(hide) echo "oem_fingerprint_properties=$(OEM_THUMBPRINT_PROPERTIES)" >> $(zip_root)/META/misc_info.txt diff --git a/core/base_rules.mk b/core/base_rules.mk index d4c9a06..ea64cc6 100644 --- a/core/base_rules.mk +++ b/core/base_rules.mk @@ -382,7 +382,7 @@ endif # java_resource_file_groups # LOCAL_SOURCE_FILES_ALL_GENERATED is set only if the module does not have static source files, # but generated source files in its LOCAL_INTERMEDIATE_SOURCE_DIR. # You have to set up the dependency in some other way. -need_compile_java := $(strip $(all_java_sources)$(all_res_assets))$(LOCAL_STATIC_JAVA_LIBRARIES)$(filter true,$(LOCAL_SOURCE_FILES_ALL_GENERATED)) +need_compile_java := $(strip $(all_java_sources)$(all_res_assets)$(java_resource_sources))$(LOCAL_STATIC_JAVA_LIBRARIES)$(filter true,$(LOCAL_SOURCE_FILES_ALL_GENERATED)) ifdef need_compile_java full_static_java_libs := \ @@ -420,10 +420,11 @@ $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_STATIC_JAVA_LIBRARIES := $(full_static_ja # be up-to-date. ifdef LOCAL_IS_HOST_MODULE ifeq ($(USE_CORE_LIB_BOOTCLASSPATH),true) -$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_BOOTCLASSPATH := -bootclasspath $(call java-lib-deps,core-libart-hostdex,$(LOCAL_IS_HOST_MODULE)) +$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_BOOTCLASSPATH := -bootclasspath $(call java-lib-files,core-libart-hostdex,$(LOCAL_IS_HOST_MODULE)) full_shared_java_libs := $(call java-lib-files,$(LOCAL_JAVA_LIBRARIES),$(LOCAL_IS_HOST_MODULE)) -full_java_lib_deps := $(call java-lib-deps,$(LOCAL_JAVA_LIBRARIES),$(LOCAL_IS_HOST_MODULE)) +full_java_lib_deps := $(call java-lib-deps,$(LOCAL_JAVA_LIBRARIES),$(LOCAL_IS_HOST_MODULE)) \ + $(full_shared_java_libs) else $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_BOOTCLASSPATH := @@ -697,6 +698,86 @@ endif endif ########################################################### +# JACK +########################################################### +ifdef LOCAL_JACK_ENABLED +ifdef need_compile_java + +full_static_jack_libs := \ + $(foreach lib,$(LOCAL_STATIC_JAVA_LIBRARIES), \ + $(call intermediates-dir-for, \ + JAVA_LIBRARIES,$(lib),$(LOCAL_IS_HOST_MODULE),COMMON)/classes.jack) + +ifeq ($(my_prefix),TARGET_) +ifeq ($(LOCAL_SDK_VERSION),) +$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_BOOTCLASSPATH_JAVA_LIBRARIES := $(call jack-lib-files,core-libart) +else +ifeq ($(LOCAL_SDK_VERSION)$(TARGET_BUILD_APPS),current) +# LOCAL_SDK_VERSION is current and no TARGET_BUILD_APPS. +$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_BOOTCLASSPATH_JAVA_LIBRARIES := $(call jack-lib-files,android_stubs_current) +else ifeq ($(LOCAL_SDK_VERSION)$(TARGET_BUILD_APPS),system_current) +$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_BOOTCLASSPATH_JAVA_LIBRARIES := $(call jack-lib-files,android_system_stubs_current) +else +$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_BOOTCLASSPATH_JAVA_LIBRARIES := $(call jack-lib-files,sdk_v$(LOCAL_SDK_VERSION)) +endif # current or system_current +endif # LOCAL_SDK_VERSION +endif # TARGET_ + +$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_STATIC_JACK_LIBRARIES := $(full_static_jack_libs) +$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_JACK_VM_ARGS := $(LOCAL_JACK_VM_ARGS) +$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_JACK_EXTRA_ARGS := $(LOCAL_JACK_EXTRA_ARGS) + +ifdef LOCAL_IS_HOST_MODULE +ifeq ($(USE_CORE_LIB_BOOTCLASSPATH),true) +$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_BOOTCLASSPATH_JAVA_LIBRARIES := $(call jack-lib-files,core-libart-hostdex,$(LOCAL_IS_HOST_MODULE)) +full_shared_jack_libs := $(call jack-lib-files,$(LOCAL_JAVA_LIBRARIES),$(LOCAL_IS_HOST_MODULE)) +full_jack_lib_deps := $(call jack-lib-deps,$(LOCAL_JAVA_LIBRARIES),$(LOCAL_IS_HOST_MODULE)) +else +$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_BOOTCLASSPATH_JAVA_LIBRARIES := +full_shared_jack_libs := $(call jack-lib-deps,$(LOCAL_JAVA_LIBRARIES),$(LOCAL_IS_HOST_MODULE)) +full_jack_lib_deps := $(full_shared_jack_libs) +endif # USE_CORE_LIB_BOOTCLASSPATH +else # !LOCAL_IS_HOST_MODULE +full_shared_jack_libs := $(call jack-lib-files,$(LOCAL_JAVA_LIBRARIES),$(LOCAL_IS_HOST_MODULE)) +full_jack_lib_deps := $(call jack-lib-deps,$(LOCAL_JAVA_LIBRARIES),$(LOCAL_IS_HOST_MODULE)) +endif # !LOCAL_IS_HOST_MODULE +full_jack_libs := $(full_shared_jack_libs) $(full_static_jack_libs) $(LOCAL_JACK_CLASSPATH) +full_jack_lib_deps += $(full_static_jack_libs) $(LOCAL_JACK_CLASSPATH) + +# This is set by packages that are linking to other packages that export +# shared libraries, allowing them to make use of the code in the linked apk. +ifneq ($(apk_libraries),) + link_apk_jack_libraries := \ + $(foreach lib,$(apk_libraries), \ + $(call intermediates-dir-for, \ + APPS,$(lib),,COMMON)/classes.jack) + + # link against the jar with full original names (before proguard processing). + full_shared_jack_libs += $(link_apk_jack_libraries) + full_jack_libs += $(link_apk_jack_libraries) + full_jack_lib_deps += $(link_apk_jack_libraries) +endif + +# This is set by packages that contain instrumentation, allowing them to +# link against the package they are instrumenting. Currently only one such +# package is allowed. +ifdef LOCAL_INSTRUMENTATION_FOR + + # link against the jar with full original names (before proguard processing). + link_instr_classes_jack := $(link_instr_intermediates_dir.COMMON)/classes.noshrob.jack + full_jack_libs += $(link_instr_classes_jack) + full_jack_lib_deps += $(link_instr_classes_jack) +endif + +endif # need_compile_java + +# Propagate local configuration options to this target. +$(LOCAL_INTERMEDIATE_TARGETS) : PRIVATE_ALL_JACK_LIBRARIES:= $(full_jack_libs) +$(LOCAL_INTERMEDIATE_TARGETS) : PRIVATE_JARJAR_RULES := $(LOCAL_JARJAR_RULES) + +endif # LOCAL_JACK_ENABLED + +########################################################### ## NOTICE files ########################################################### diff --git a/core/binary.mk b/core/binary.mk index d3d050e..d7b2c6e 100644 --- a/core/binary.mk +++ b/core/binary.mk @@ -49,6 +49,7 @@ my_c_includes := $(LOCAL_C_INCLUDES) my_generated_sources := $(LOCAL_GENERATED_SOURCES) my_native_coverage := $(LOCAL_NATIVE_COVERAGE) my_additional_dependencies := $(LOCAL_MODULE_MAKEFILE) $(LOCAL_ADDITIONAL_DEPENDENCIES) +my_export_c_include_dirs := $(LOCAL_EXPORT_C_INCLUDE_DIRS) ifdef LOCAL_IS_HOST_MODULE my_allow_undefined_symbols := true @@ -387,7 +388,7 @@ endif ## Define arm-vs-thumb-mode flags. ########################################################### LOCAL_ARM_MODE := $(strip $(LOCAL_ARM_MODE)) -ifeq ($(TARGET_$(LOCAL_2ND_ARCH_VAR_PREFIX)ARCH),arm) +ifeq ($($(my_prefix)$(LOCAL_2ND_ARCH_VAR_PREFIX)ARCH),arm) arm_objects_mode := $(if $(LOCAL_ARM_MODE),$(LOCAL_ARM_MODE),arm) normal_objects_mode := $(if $(LOCAL_ARM_MODE),$(LOCAL_ARM_MODE),thumb) @@ -477,6 +478,7 @@ rs_generated_cpps := $(addprefix \ # This is just a dummy rule to make sure gmake doesn't skip updating the dependents. $(rs_generated_cpps) : $(RenderScript_file_stamp) @echo "Updated RS generated cpp file $@." + $(hide) touch $@ my_c_includes += $(renderscript_intermediate) my_generated_sources += $(rs_generated_cpps) @@ -500,48 +502,69 @@ my_generated_sources := $(patsubst $(generated_sources_dir)/%,$(intermediates)/% ALL_GENERATED_SOURCES += $(my_generated_sources) ########################################################### -## Compile the .proto files to .cc and then to .o +## Compile the .proto files to .cc (or .c) and then to .o ########################################################### proto_sources := $(filter %.proto,$(my_src_files)) proto_generated_objects := proto_generated_headers := ifneq ($(proto_sources),) -proto_sources_fullpath := $(addprefix $(LOCAL_PATH)/, $(proto_sources)) -proto_generated_cc_sources_dir := $(generated_sources_dir)/proto -proto_generated_cc_sources := $(addprefix $(proto_generated_cc_sources_dir)/, \ - $(patsubst %.proto,%.pb.cc,$(proto_sources_fullpath))) -proto_generated_headers := $(patsubst %.pb.cc,%.pb.h, $(proto_generated_cc_sources)) +proto_generated_sources_dir := $(generated_sources_dir)/proto proto_generated_obj_dir := $(intermediates)/proto + +ifneq (,$(filter nanopb-c nanopb-c-enable_malloc, $(LOCAL_PROTOC_OPTIMIZE_TYPE))) +my_proto_source_suffix := .c +my_proto_c_includes := external/nanopb-c +my_protoc_flags := --nanopb_out=$(proto_generated_sources_dir) \ + --plugin=external/nanopb-c/generator/protoc-gen-nanopb +else +my_proto_source_suffix := .cc +my_proto_c_includes := external/protobuf/src +my_cflags += -DGOOGLE_PROTOBUF_NO_RTTI +my_protoc_flags := --cpp_out=$(proto_generated_sources_dir) +endif +my_proto_c_includes += $(proto_generated_sources_dir) + +proto_sources_fullpath := $(addprefix $(LOCAL_PATH)/, $(proto_sources)) +proto_generated_sources := $(addprefix $(proto_generated_sources_dir)/, \ + $(patsubst %.proto,%.pb$(my_proto_source_suffix),$(proto_sources_fullpath))) +proto_generated_headers := $(patsubst %.pb$(my_proto_source_suffix),%.pb.h, $(proto_generated_sources)) proto_generated_objects := $(addprefix $(proto_generated_obj_dir)/, \ $(patsubst %.proto,%.pb.o,$(proto_sources_fullpath))) -# Auto-export the generated proto source dir. -LOCAL_EXPORT_C_INCLUDE_DIRS += $(proto_generated_cc_sources_dir) - # Ensure the transform-proto-to-cc rule is only defined once in multilib build. ifndef $(my_prefix)_$(LOCAL_MODULE_CLASS)_$(LOCAL_MODULE)_proto_defined -$(proto_generated_cc_sources): PRIVATE_PROTO_INCLUDES := $(TOP) -$(proto_generated_cc_sources): PRIVATE_PROTO_CC_OUTPUT_DIR := $(proto_generated_cc_sources_dir) -$(proto_generated_cc_sources): PRIVATE_PROTOC_FLAGS := $(LOCAL_PROTOC_FLAGS) -$(proto_generated_cc_sources): $(proto_generated_cc_sources_dir)/%.pb.cc: %.proto $(PROTOC) +$(proto_generated_sources): PRIVATE_PROTO_INCLUDES := $(TOP) +$(proto_generated_sources): PRIVATE_PROTOC_FLAGS := $(LOCAL_PROTOC_FLAGS) $(my_protoc_flags) +$(proto_generated_sources): $(proto_generated_sources_dir)/%.pb$(my_proto_source_suffix): %.proto $(PROTOC) $(transform-proto-to-cc) # This is just a dummy rule to make sure gmake doesn't skip updating the dependents. -$(proto_generated_headers): $(proto_generated_cc_sources_dir)/%.pb.h: $(proto_generated_cc_sources_dir)/%.pb.cc +$(proto_generated_headers): $(proto_generated_sources_dir)/%.pb.h: $(proto_generated_sources_dir)/%.pb$(my_proto_source_suffix) @echo "Updated header file $@." + $(hide) touch $@ $(my_prefix)_$(LOCAL_MODULE_CLASS)_$(LOCAL_MODULE)_proto_defined := true endif # transform-proto-to-cc rule included only once $(proto_generated_objects): PRIVATE_ARM_MODE := $(normal_objects_mode) $(proto_generated_objects): PRIVATE_ARM_CFLAGS := $(normal_objects_cflags) -$(proto_generated_objects): $(proto_generated_obj_dir)/%.o: $(proto_generated_cc_sources_dir)/%.cc $(proto_generated_headers) +$(proto_generated_objects): $(proto_generated_obj_dir)/%.o: $(proto_generated_sources_dir)/%$(my_proto_source_suffix) $(proto_generated_headers) +ifeq ($(my_proto_source_suffix),.c) + $(transform-$(PRIVATE_HOST)c-to-o) +else $(transform-$(PRIVATE_HOST)cpp-to-o) +endif -include $(proto_generated_objects:%.o=%.P) -my_c_includes += external/protobuf/src $(proto_generated_cc_sources_dir) -my_cflags += -DGOOGLE_PROTOBUF_NO_RTTI -ifeq ($(LOCAL_PROTOC_OPTIMIZE_TYPE),full) +my_c_includes += $(my_proto_c_includes) +# Auto-export the generated proto source dir. +my_export_c_include_dirs += $(my_proto_c_includes) + +ifeq ($(LOCAL_PROTOC_OPTIMIZE_TYPE),nanopb-c-enable_malloc) + my_static_libraries += libprotobuf-c-nano-enable_malloc +else ifeq ($(LOCAL_PROTOC_OPTIMIZE_TYPE),nanopb-c) + my_static_libraries += libprotobuf-c-nano +else ifeq ($(LOCAL_PROTOC_OPTIMIZE_TYPE),full) ifdef LOCAL_SDK_VERSION my_static_libraries += libprotobuf-cpp-full else @@ -556,7 +579,6 @@ else endif endif # $(proto_sources) non-empty - ########################################################### ## YACC: Compile .y and .yy files to .cpp and the to .o. ########################################################### @@ -1088,12 +1110,12 @@ $(LOCAL_INSTALLED_MODULE): | $(installed_static_library_notice_file_targets) # Export includes ########################################################### export_includes := $(intermediates)/export_includes -$(export_includes): PRIVATE_EXPORT_C_INCLUDE_DIRS := $(LOCAL_EXPORT_C_INCLUDE_DIRS) +$(export_includes): PRIVATE_EXPORT_C_INCLUDE_DIRS := $(my_export_c_include_dirs) # Make sure .pb.h are already generated before any dependent source files get compiled. $(export_includes) : $(LOCAL_MODULE_MAKEFILE) $(proto_generated_headers) @echo Export includes file: $< -- $@ $(hide) mkdir -p $(dir $@) && rm -f $@ -ifdef LOCAL_EXPORT_C_INCLUDE_DIRS +ifdef my_export_c_include_dirs $(hide) for d in $(PRIVATE_EXPORT_C_INCLUDE_DIRS); do \ echo "-I $$d" >> $@; \ done diff --git a/core/build_id.mk b/core/build_id.mk index f94b224..0e8e2cf 100644 --- a/core/build_id.mk +++ b/core/build_id.mk @@ -18,6 +18,4 @@ # (like "CRB01"). It must be a single word, and is # capitalized by convention. -BUILD_ID := AOSP - -DISPLAY_BUILD_NUMBER := true +export BUILD_ID=MASTER diff --git a/core/clang/TARGET_arm.mk b/core/clang/TARGET_arm.mk index 6f6d624..62ce242 100644 --- a/core/clang/TARGET_arm.mk +++ b/core/clang/TARGET_arm.mk @@ -66,3 +66,7 @@ $(clang_2nd_arch_prefix)RS_TRIPLE_CFLAGS := $(clang_2nd_arch_prefix)RS_COMPAT_TRIPLE := armv7-none-linux-gnueabi $(clang_2nd_arch_prefix)TARGET_LIBPROFILE_RT := $(LLVM_RTLIB_PATH)/libclang_rt.profile-arm-android.a + +# Address sanitizer clang config +$(clang_2nd_arch_prefix)ADDRESS_SANITIZER_RUNTIME_LIBRARY := libclang_rt.asan-arm-android +$(clang_2nd_arch_prefix)ADDRESS_SANITIZER_RPATH := /system/lib/asan diff --git a/core/clang/TARGET_arm64.mk b/core/clang/TARGET_arm64.mk index b67d458..ea4d937 100644 --- a/core/clang/TARGET_arm64.mk +++ b/core/clang/TARGET_arm64.mk @@ -64,3 +64,7 @@ RS_TRIPLE_CFLAGS := RS_COMPAT_TRIPLE := aarch64-linux-android TARGET_LIBPROFILE_RT := $(LLVM_RTLIB_PATH)/libclang_rt.profile-aarch64-android.a + +# Address sanitizer clang config +ADDRESS_SANITIZER_RUNTIME_LIBRARY := libclang_rt.asan-arm64-android +ADDRESS_SANITIZER_RPATH := /system/lib64/asan diff --git a/core/clang/config.mk b/core/clang/config.mk index 24c06b6..dfad7ec 100644 --- a/core/clang/config.mk +++ b/core/clang/config.mk @@ -68,10 +68,15 @@ CLANG_CONFIG_UNKNOWN_CFLAGS := \ -finline-functions \ -finline-limit=64 \ -fno-canonical-system-headers \ + -Wno-clobbered \ + -fno-devirtualize \ -fno-tree-sra \ -fprefetch-loop-arrays \ -funswitch-loops \ + -Werror=unused-but-set-parameter \ + -Werror=unused-but-set-variable \ -Wmaybe-uninitialized \ + -Wno-error=clobbered \ -Wno-error=maybe-uninitialized \ -Wno-error=unused-but-set-parameter \ -Wno-error=unused-but-set-variable \ @@ -144,12 +149,10 @@ clang_2nd_arch_prefix := $(TARGET_2ND_ARCH_VAR_PREFIX) include $(BUILD_SYSTEM)/clang/TARGET_$(TARGET_2ND_ARCH).mk endif -# Address sanitizer clang config -ADDRESS_SANITIZER_RUNTIME_LIBRARY := libclang_rt.asan_$(TARGET_ARCH)_android ADDRESS_SANITIZER_CONFIG_EXTRA_CFLAGS := -fno-omit-frame-pointer ADDRESS_SANITIZER_CONFIG_EXTRA_LDFLAGS := -Wl,-u,__asan_preinit -ADDRESS_SANITIZER_CONFIG_EXTRA_SHARED_LIBRARIES := libdl $(ADDRESS_SANITIZER_RUNTIME_LIBRARY) +ADDRESS_SANITIZER_CONFIG_EXTRA_SHARED_LIBRARIES := libdl ADDRESS_SANITIZER_CONFIG_EXTRA_STATIC_LIBRARIES := libasan # This allows us to use the superset of functionality that compiler-rt diff --git a/core/cleanbuild.mk b/core/cleanbuild.mk index cf980d8..801a292 100644 --- a/core/cleanbuild.mk +++ b/core/cleanbuild.mk @@ -247,3 +247,63 @@ ifeq "$(force_installclean)" "true" $(info *** Done with the cleaning, now starting the real build.) endif force_installclean := + +########################################################### +# Clean build tools when swithcing between prebuilt host tools (such as in +# apps_only build) and tools built from source (platform build). +previous_prebuilt_tools_config_file := $(HOST_OUT)/previous_prebuilt_tools_config.mk +ifneq (,$(TARGET_BUILD_APPS)$(filter true,$(TARGET_BUILD_PDK))) +current_prebuilt_tools := true +else +current_prebuilt_tools := false +endif +PREVIOUS_PREBUILT_TOOLS := +-include $(previous_prebuilt_tools_config_file) +force_tools_clean := +ifdef PREVIOUS_PREBUILT_TOOLS +ifneq ($(PREVIOUS_PREBUILT_TOOLS),$(current_prebuilt_tools)) +force_tools_clean := true +endif +endif # else, this is the first build, so no need to clean. + +# Write the new state to the file. +$(shell \ + mkdir -p $(dir $(previous_prebuilt_tools_config_file)) && \ + echo "PREVIOUS_PREBUILT_TOOLS:=$(current_prebuilt_tools)" > \ + $(previous_prebuilt_tools_config_file)) + +ifeq ($(force_tools_clean),true) +# For this list of prebuilt tools, see prebuilts/sdk/tools/Android.mk. +tools_clean_files := \ + $(HOST_OUT_COMMON_INTERMEDIATES)/JAVA_LIBRARIES/signapk_intermediates \ + $(HOST_OUT_COMMON_INTERMEDIATES)/JAVA_LIBRARIES/dx_intermediates \ + $(HOST_OUT_COMMON_INTERMEDIATES)/JAVA_LIBRARIES/shrinkedAndroid_intermediates \ + $(HOST_OUT)/obj*/EXECUTABLES/aapt_intermediates \ + $(HOST_OUT)/obj*/EXECUTABLES/aidl_intermediates \ + $(HOST_OUT)/obj*/EXECUTABLES/zipalign_intermediates \ + $(HOST_OUT)/obj*/lib/libc++$(HOST_SHLIB_SUFFIX) \ + +$(info *** build type changed, clean host tools...) +$(info *** rm -rf $(tools_clean_files)) +$(shell rm -rf $(tools_clean_files)) +endif + +########################################################### + +.PHONY: clean-jack-files +clean-jack-files: clean-dex-files + $(hide) find $(OUT_DIR) -name "*.jack" | xargs rm -f + $(hide) find $(OUT_DIR) -type d -name "jack" | xargs rm -rf + @echo "All jack files have been removed." + +.PHONY: clean-dex-files +clean-dex-files: + $(hide) find $(OUT_DIR) -name "*.dex" ! -path "*/jack-incremental/*" | xargs rm -f + $(hide) for i in `find $(OUT_DIR) -name "*.jar" -o -name "*.apk"` ; do ((unzip -l $$i 2> /dev/null | \ + grep -q "\.dex$$" && rm -f $$i) || continue ) ; done + @echo "All dex files and archives containing dex files have been removed." + +.PHONY: clean-jack-incremental +clean-jack-incremental: + $(hide) find $(OUT_DIR) -name "jack-incremental" -type d | xargs rm -rf + @echo "All jack incremental dirs have been removed." diff --git a/core/clear_vars.mk b/core/clear_vars.mk index 4f5ac28..7b3f1c5 100644 --- a/core/clear_vars.mk +++ b/core/clear_vars.mk @@ -20,7 +20,6 @@ LOCAL_UNSTRIPPED_PATH:= LOCAL_MODULE_CLASS:= LOCAL_MODULE_SUFFIX:= LOCAL_PACKAGE_NAME:= -LOCAL_PAGE_ALIGN_JNI_SHARED_LIBRARIES:= LOCAL_OVERRIDES_PACKAGES:= LOCAL_EXPORT_PACKAGE_RESOURCES:= LOCAL_MANIFEST_PACKAGE_NAME:= @@ -74,6 +73,7 @@ LOCAL_JAVA_LIBRARIES:= LOCAL_JAVA_LAYERS_FILE:= LOCAL_NO_STANDARD_LIBRARIES:= LOCAL_CLASSPATH:= +LOCAL_JACK_CLASSPATH:= LOCAL_DROIDDOC_USE_STANDARD_DOCLET:= LOCAL_DROIDDOC_SOURCE_PATH:= LOCAL_DROIDDOC_TEMPLATE_DIR:= @@ -107,6 +107,11 @@ LOCAL_JARJAR_RULES:= LOCAL_ADDITIONAL_JAVA_DIR:= LOCAL_ALLOW_UNDEFINED_SYMBOLS:= LOCAL_DX_FLAGS:= +LOCAL_JACK_ENABLED:=$(DEFAULT_JACK_ENABLED) # '' (ie disabled), disabled, full, incremental +LOCAL_JACK_VM_ARGS := $(DEFAULT_JACK_VM_ARGS) +LOCAL_JACK_EXTRA_ARGS := $(DEFAULT_JACK_EXTRA_ARGS) +LOCAL_JACK_FLAGS:= +LOCAL_JILL_FLAGS:= LOCAL_CERTIFICATE:= LOCAL_SDK_VERSION:= LOCAL_SDK_RES_VERSION:= @@ -114,6 +119,7 @@ LOCAL_NDK_STL_VARIANT:= LOCAL_EMMA_INSTRUMENT:= LOCAL_PROGUARD_ENABLED:= # '',full,custom,nosystem,disabled,obfuscation,optimization LOCAL_PROGUARD_FLAGS:= +LOCAL_JACK_PROGUARD_FLAGS:= LOCAL_PROGUARD_FLAG_FILES:= LOCAL_TEST_MODULE_TO_PROGUARD_WITH:= LOCAL_EMMA_COVERAGE_FILTER:= @@ -131,7 +137,7 @@ LOCAL_RENDERSCRIPT_TARGET_API:= LOCAL_DEX_PREOPT:= # '',true,false,nostripping LOCAL_DEX_PREOPT_IMAGE_LOCATION:= LOCAL_DEX_PREOPT_FLAGS:= -LOCAL_PROTOC_OPTIMIZE_TYPE:= # lite(default),micro,nano,full +LOCAL_PROTOC_OPTIMIZE_TYPE:= # lite(default),micro,nano,full,nanopb-c,nanopb-c-enable_malloc LOCAL_PROTOC_FLAGS:= LOCAL_PROTO_JAVA_OUTPUT_PARAMS:= LOCAL_NO_CRT:= diff --git a/core/combo/HOST_darwin-x86.mk b/core/combo/HOST_darwin-x86.mk index 8389bb8..e77fd21 100644 --- a/core/combo/HOST_darwin-x86.mk +++ b/core/combo/HOST_darwin-x86.mk @@ -78,12 +78,14 @@ $(hide) $(PRIVATE_CXX) \ -o $@ \ -install_name @rpath/$(notdir $@) \ -Wl,-rpath,@loader_path/../$(notdir $($(PRIVATE_2ND_ARCH_VAR_PREFIX)HOST_OUT_SHARED_LIBRARIES)) \ + -Wl,-rpath,@loader_path/$(notdir $($(PRIVATE_2ND_ARCH_VAR_PREFIX)HOST_OUT_SHARED_LIBRARIES)) \ $(PRIVATE_LDFLAGS) endef define transform-host-o-to-executable-inner $(hide) $(PRIVATE_CXX) \ -Wl,-rpath,@loader_path/../$(notdir $($(PRIVATE_2ND_ARCH_VAR_PREFIX)HOST_OUT_SHARED_LIBRARIES)) \ + -Wl,-rpath,@loader_path/$(notdir $($(PRIVATE_2ND_ARCH_VAR_PREFIX)HOST_OUT_SHARED_LIBRARIES)) \ -o $@ \ -Wl,-headerpad_max_install_names \ $($(PRIVATE_2ND_ARCH_VAR_PREFIX)HOST_GLOBAL_LD_DIRS) \ diff --git a/core/combo/TARGET_linux-arm64.mk b/core/combo/TARGET_linux-arm64.mk index 0819d13..3acddc5 100644 --- a/core/combo/TARGET_linux-arm64.mk +++ b/core/combo/TARGET_linux-arm64.mk @@ -114,6 +114,7 @@ TARGET_GLOBAL_LDFLAGS += \ -Wl,--fatal-warnings \ -Wl,-maarch64linux \ -Wl,--hash-style=gnu \ + -Wl,--fix-cortex-a53-843419 \ $(arch_variant_ldflags) # Disable transitive dependency library symbol resolving. diff --git a/core/combo/TARGET_linux-x86.mk b/core/combo/TARGET_linux-x86.mk index ed78372..340f306 100644 --- a/core/combo/TARGET_linux-x86.mk +++ b/core/combo/TARGET_linux-x86.mk @@ -23,10 +23,10 @@ TARGET_$(combo_2nd_arch_prefix)ARCH_VARIANT := x86 endif # Decouple NDK library selection with platform compiler version -$(combo_2nd_arch_prefix)TARGET_NDK_GCC_VERSION := 4.8 +$(combo_2nd_arch_prefix)TARGET_NDK_GCC_VERSION := 4.9 ifeq ($(strip $(TARGET_GCC_VERSION_EXP)),) -$(combo_2nd_arch_prefix)TARGET_GCC_VERSION := 4.8 +$(combo_2nd_arch_prefix)TARGET_GCC_VERSION := 4.9 else $(combo_2nd_arch_prefix)TARGET_GCC_VERSION := $(TARGET_GCC_VERSION_EXP) endif diff --git a/core/combo/TARGET_linux-x86_64.mk b/core/combo/TARGET_linux-x86_64.mk index 0b2905c..53b0572 100644 --- a/core/combo/TARGET_linux-x86_64.mk +++ b/core/combo/TARGET_linux-x86_64.mk @@ -26,7 +26,7 @@ endif TARGET_NDK_GCC_VERSION := 4.9 ifeq ($(strip $(TARGET_GCC_VERSION_EXP)),) -TARGET_GCC_VERSION := 4.8 +TARGET_GCC_VERSION := 4.9 else TARGET_GCC_VERSION := $(TARGET_GCC_VERSION_EXP) endif diff --git a/core/combo/arch/arm64/armv8-a.mk b/core/combo/arch/arm64/armv8-a.mk index edc0497..5e27e5a 100644 --- a/core/combo/arch/arm64/armv8-a.mk +++ b/core/combo/arch/arm64/armv8-a.mk @@ -1 +1,5 @@ -arch_variant_cflags := +ifneq (,$(filter cortex-a53,$(TARGET_$(combo_2nd_arch_prefix)CPU_VARIANT))) + arch_variant_cflags := -mcpu=cortex-a53 +else + arch_variant_cflags := +endif diff --git a/core/combo/javac.mk b/core/combo/javac.mk index fb43ea4..82cbb43 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 := -source 1.7 -target 1.7 -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 aa7e318..ba8f310 100644 --- a/core/config.mk +++ b/core/config.mk @@ -38,6 +38,7 @@ SRC_DOCS:= $(TOPDIR)docs # TODO: See if we can remove most of these from the global list. SRC_HEADERS := \ $(TOPDIR)system/core/include \ + $(TOPDIR)system/media/audio/include \ $(TOPDIR)hardware/libhardware/include \ $(TOPDIR)hardware/libhardware_legacy/include \ $(TOPDIR)hardware/ril/include \ @@ -131,6 +132,12 @@ COMMON_ANDROID_PACKAGE_SUFFIX := .apk # list of flags to turn specific warnings in to errors TARGET_ERROR_FLAGS := -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point +ifdef TMPDIR +JAVA_TMPDIR_ARG := -Djava.io.tmpdir=$(TMPDIR) +else +JAVA_TMPDIR_ARG := +endif + # ############################################################### # Include sub-configuration files # ############################################################### @@ -369,6 +376,11 @@ endif # --------------------------------------------------------------- # Generic tools. +JACK := $(HOST_OUT_EXECUTABLES)/jack +JACK_JAR := $(HOST_OUT_JAVA_LIBRARIES)/jack.jar +JACK_LAUNCHER_JAR := $(HOST_OUT_JAVA_LIBRARIES)/jack-launcher.jar +JILL_JAR := $(HOST_OUT_JAVA_LIBRARIES)/jill.jar +JACK_MULTIDEX_DEFAULT_PREPROCESSOR := frameworks/multidex/library/resources/JACK-INF/legacyMultidexInstallation.jpp LEX := prebuilts/misc/$(BUILD_OS)-$(HOST_PREBUILT_ARCH)/flex/flex-2.5.39 # The default PKGDATADIR built in the prebuilt bison is a relative path @@ -413,6 +425,42 @@ MKTARBALL := build/tools/mktarball.sh TUNE2FS := $(HOST_OUT_EXECUTABLES)/tune2fs$(HOST_EXECUTABLE_SUFFIX) E2FSCK := $(HOST_OUT_EXECUTABLES)/e2fsck$(HOST_EXECUTABLE_SUFFIX) JARJAR := $(HOST_OUT_JAVA_LIBRARIES)/jarjar.jar + +ifeq ($(ANDROID_COMPILE_WITH_JACK),true) +DEFAULT_JACK_ENABLED:=full +else +DEFAULT_JACK_ENABLED:= +endif +ifneq ($(strip $(ANDROID_JACK_VM)),) +JACK_VM := $(ANDROID_JACK_VM) +else +JACK_VM := java +endif +# call jack +# +# $(1): vm arguments +# $(2): jack perf arguments +ifneq (,$(strip $(filter dist,$(MAKECMDGOALS)))) +JACK_SERVER_LOG_COMMAND := mkdir -p $(DIST_DIR)/logs/; SERVER_LOG=$(DIST_DIR)/logs/jack-server.log +endif +define call-jack +$(JACK_SERVER_LOG_COMMAND) JACK_VM_COMMAND="$(JACK_VM) $(1) $(JAVA_TMPDIR_ARG) -jar $(JACK_LAUNCHER_JAR) " JACK_JAR="$(JACK_JAR)" $(JACK) $(2) +endef +$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_JACK_VM_ARGS := $(DEFAULT_JACK_VM_ARGS) +ifneq ($(ANDROID_JACK_VM_ARGS),) +DEFAULT_JACK_VM_ARGS := $(ANDROID_JACK_VM_ARGS) +else +DEFAULT_JACK_VM_ARGS := -Dfile.encoding=UTF-8 -Xms2560m -XX:+TieredCompilation +endif +ifneq ($(ANDROID_JACK_EXTRA_ARGS),) +DEFAULT_JACK_EXTRA_ARGS := $(ANDROID_JACK_EXTRA_ARGS) +else +DEFAULT_JACK_EXTRA_ARGS := @$(BUILD_SYSTEM)/jack-default.args +endif +# Turn off jack warnings by default. +DEFAULT_JACK_EXTRA_ARGS += --verbose error + +JILL := java -Xmx3500m -jar $(JILL_JAR) PROGUARD := external/proguard/bin/proguard.sh JAVATAGS := build/tools/java-event-log-tags.py LLVM_RS_CC := $(HOST_OUT_EXECUTABLES)/llvm-rs-cc$(HOST_EXECUTABLE_SUFFIX) @@ -423,6 +471,8 @@ 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 +VBOOT_SIGNER := prebuilts/misc/scripts/vboot_signer/vboot_signer.sh # ACP is always for the build OS, not for the host OS ACP := $(BUILD_OUT_EXECUTABLES)/acp$(BUILD_EXECUTABLE_SUFFIX) @@ -578,6 +628,13 @@ include $(BUILD_SYSTEM)/clang/config.mk HISTORICAL_SDK_VERSIONS_ROOT := $(TOPDIR)prebuilts/sdk HISTORICAL_NDK_VERSIONS_ROOT := $(TOPDIR)prebuilts/ndk +# The path where app can reference the support library resources. +ifdef TARGET_BUILD_APPS +SUPPORT_LIBRARY_ROOT := $(HISTORICAL_SDK_VERSIONS_ROOT)/current/support +else +SUPPORT_LIBRARY_ROOT := frameworks/support +endif + # Historical SDK version N is stored in $(HISTORICAL_SDK_VERSIONS_ROOT)/N. # The 'current' version is whatever this source tree is. # diff --git a/core/config_sanitizers.mk b/core/config_sanitizers.mk index 210d442..7eb1c89 100644 --- a/core/config_sanitizers.mk +++ b/core/config_sanitizers.mk @@ -78,10 +78,15 @@ ifneq ($(filter address,$(my_sanitize)),) ifdef LOCAL_IS_HOST_MODULE # -nodefaultlibs (provided with libc++) prevents the driver from linking # libraries needed with -fsanitize=address. http://b/18650275 (WAI) - my_ldlibs += -ldl -lpthread + my_ldlibs += -lm -ldl -lpthread + my_ldflags += -Wl,--no-as-needed else - my_shared_libraries += $(ADDRESS_SANITIZER_CONFIG_EXTRA_SHARED_LIBRARIES) + # ASan runtime library must be the first in the link order. + my_shared_libraries := $($(LOCAL_2ND_ARCH_VAR_PREFIX)ADDRESS_SANITIZER_RUNTIME_LIBRARY) \ + $(my_shared_libraries) \ + $(ADDRESS_SANITIZER_CONFIG_EXTRA_SHARED_LIBRARIES) my_static_libraries += $(ADDRESS_SANITIZER_CONFIG_EXTRA_STATIC_LIBRARIES) + my_ldflags += -Wl,-rpath,$($(LOCAL_2ND_ARCH_VAR_PREFIX)ADDRESS_SANITIZER_RPATH) endif endif diff --git a/core/configure_local_jack.mk b/core/configure_local_jack.mk new file mode 100644 index 0000000..98b13d2 --- /dev/null +++ b/core/configure_local_jack.mk @@ -0,0 +1,30 @@ +# +# Copyright (C) 2008 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +ifdef ANDROID_FORCE_JACK_ENABLED +LOCAL_JACK_ENABLED := $(ANDROID_FORCE_JACK_ENABLED) +endif +LOCAL_JACK_ENABLED := $(strip $(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 diff --git a/core/cxx_stl_setup.mk b/core/cxx_stl_setup.mk index da84bdd..ce56610 100644 --- a/core/cxx_stl_setup.mk +++ b/core/cxx_stl_setup.mk @@ -76,18 +76,8 @@ ifneq ($(filter $(my_cxx_stl),libc++ libc++_static),) my_shared_libraries += libdl endif endif -else ifneq ($(filter $(my_cxx_stl),stlport stlport_static),) - ifndef LOCAL_IS_HOST_MODULE - my_c_includes += external/stlport/stlport bionic/libstdc++/include \ - bionic - ifeq ($(my_cxx_stl),stlport) - my_shared_libraries += libstdc++ libstlport - else - my_static_libraries += libstdc++ libstlport_static - endif - endif else ifeq ($(my_cxx_stl),ndk) - # Using an NDK STL. Handled farther up in this file. + # Using an NDK STL. Handled in binary.mk. ifndef LOCAL_IS_HOST_MODULE my_system_shared_libraries += libstdc++ endif @@ -106,5 +96,5 @@ else ifeq ($(my_cxx_stl),none) my_ldlibs += $($(my_prefix)$(HOST_OS)_$(my_link_type)_gcclibs) endif else - $(error $(my_cxx_stl) is not a supported STL.) + $(error $(LOCAL_PATH): $(LOCAL_MODULE): $(my_cxx_stl) is not a supported STL.) endif 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 diff --git a/core/dex_preopt_libart.mk b/core/dex_preopt_libart.mk index 6f598be..1de72b7 100644 --- a/core/dex_preopt_libart.mk +++ b/core/dex_preopt_libart.mk @@ -105,7 +105,7 @@ $(hide) $(DEX2OAT) \ --instruction-set=$($(PRIVATE_2ND_ARCH_VAR_PREFIX)DEX2OAT_TARGET_ARCH) \ --instruction-set-variant=$($(PRIVATE_2ND_ARCH_VAR_PREFIX)DEX2OAT_TARGET_CPU_VARIANT) \ --instruction-set-features=$($(PRIVATE_2ND_ARCH_VAR_PREFIX)DEX2OAT_TARGET_INSTRUCTION_SET_FEATURES) \ - --include-patch-information --runtime-arg -Xnorelocate --no-include-debug-symbols --no-include-cfi \ + --include-patch-information --runtime-arg -Xnorelocate --no-generate-debug-info \ --abort-on-hard-verifier-error \ $(PRIVATE_DEX_PREOPT_FLAGS) endef diff --git a/core/dex_preopt_libart_boot.mk b/core/dex_preopt_libart_boot.mk index cfc7653..afd61eb 100644 --- a/core/dex_preopt_libart_boot.mk +++ b/core/dex_preopt_libart_boot.mk @@ -62,5 +62,5 @@ $($(my_2nd_arch_prefix)DEFAULT_DEX_PREOPT_BUILT_IMAGE_FILENAME) : $(LIBART_TARGE --instruction-set=$($(PRIVATE_2ND_ARCH_VAR_PREFIX)DEX2OAT_TARGET_ARCH) \ --instruction-set-variant=$($(PRIVATE_2ND_ARCH_VAR_PREFIX)DEX2OAT_TARGET_CPU_VARIANT) \ --instruction-set-features=$($(PRIVATE_2ND_ARCH_VAR_PREFIX)DEX2OAT_TARGET_INSTRUCTION_SET_FEATURES) \ - --android-root=$(PRODUCT_OUT)/system --include-patch-information --runtime-arg -Xnorelocate --no-include-debug-symbols --no-include-cfi \ + --android-root=$(PRODUCT_OUT)/system --include-patch-information --runtime-arg -Xnorelocate --no-generate-debug-info \ $(PRODUCT_DEX_PREOPT_BOOT_FLAGS) $(COMPILED_CLASSES_FLAGS) diff --git a/core/dpi_specific_apk.mk b/core/dpi_specific_apk.mk index 06e498d..5d0b5bf 100644 --- a/core/dpi_specific_apk.mk +++ b/core/dpi_specific_apk.mk @@ -25,24 +25,35 @@ $(built_dpi_apk): PRIVATE_MANIFEST_PACKAGE_NAME := $(LOCAL_MANIFEST_PACKAGE_NAME $(built_dpi_apk): PRIVATE_MANIFEST_INSTRUMENTATION_FOR := $(LOCAL_INSTRUMENTATION_FOR) $(built_dpi_apk): PRIVATE_JNI_SHARED_LIBRARIES := $(jni_shared_libraries_with_abis) $(built_dpi_apk): PRIVATE_JNI_SHARED_LIBRARIES_ABI := $(jni_shared_libraries_abis) -$(built_dpi_apk): PRIVATE_DEX_FILE := $(built_dex) -# Note that PRIVATE_CLASS_INTERMEDIATES_DIR points to the base apk's intermediate dir. -$(built_dpi_apk): PRIVATE_CLASS_INTERMEDIATES_DIR := $(intermediates)/classes -$(built_dpi_apk): PRIVATE_EXTRA_JAR_ARGS := $(extra_jar_args) $(built_dpi_apk): PRIVATE_PRIVATE_KEY := $(private_key) $(built_dpi_apk): PRIVATE_CERTIFICATE := $(certificate) $(built_dpi_apk): PRIVATE_ADDITIONAL_CERTIFICATES := $(foreach c,\ $(LOCAL_ADDITIONAL_CERTIFICATES), $(c).x509.pem $(c).pk8) +$(built_dpi_apk): PRIVATE_SOURCE_ARCHIVE := +ifneq ($(full_classes_jar),) +$(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 := +endif # full_classes_jar + # Set up dependenncies and the build recipe. $(built_dpi_apk) : $(R_file_stamp) $(built_dpi_apk) : $(all_library_res_package_export_deps) -$(built_dpi_apk) : $(built_dex) $(built_dpi_apk) : $(private_key) $(certificate) $(SIGNAPK_JAR) $(built_dpi_apk) : $(AAPT) | $(ZIPALIGN) $(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) @@ -52,10 +63,9 @@ 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 - $(add-carried-java-resources) -ifneq ($(extra_jar_args),) - $(add-java-resources-to-package) endif $(sign-package) $(align-package) diff --git a/core/dynamic_binary.mk b/core/dynamic_binary.mk index fe498ed..38c0cbe 100644 --- a/core/dynamic_binary.mk +++ b/core/dynamic_binary.mk @@ -39,6 +39,40 @@ include $(BUILD_SYSTEM)/binary.mk ################################### ########################################################### +## Pack relocation tables +########################################################### +relocation_packer_input := $(linked_module) +relocation_packer_output := $(intermediates)/PACKED/$(my_built_module_stem) + +my_pack_module_relocations := $(LOCAL_PACK_MODULE_RELOCATIONS) + +ifeq ($(my_pack_module_relocations),) + my_pack_module_relocations := $($(LOCAL_2ND_ARCH_VAR_PREFIX)TARGET_PACK_MODULE_RELOCATIONS) +endif + +# Do not pack relocations for executables. Because packing results in +# non-zero p_vaddr which causes kernel to load executables to lower +# address (starting at 0x8000) http://b/20665974 +ifeq ($(LOCAL_MODULE_CLASS),EXECUTABLES) + my_pack_module_relocations := false +endif + +# TODO (dimitry): Relocation packer is not yet available for darwin +ifneq ($(HOST_OS),linux) + my_pack_module_relocations := false +endif + +ifeq (true,$(my_pack_module_relocations)) +# Pack relocations +$(relocation_packer_output): $(relocation_packer_input) | $(ACP) + $(pack-elf-relocations) +else +$(relocation_packer_output): $(relocation_packer_input) | $(ACP) + @echo "target Unpacked: $(PRIVATE_MODULE) ($@)" + $(copy-file-to-target) +endif + +########################################################### ## Store a copy with symbols for symbolic debugging ########################################################### ifeq ($(LOCAL_UNSTRIPPED_PATH),) @@ -46,7 +80,7 @@ my_unstripped_path := $(TARGET_OUT_UNSTRIPPED)/$(patsubst $(PRODUCT_OUT)/%,%,$(m else my_unstripped_path := $(LOCAL_UNSTRIPPED_PATH) endif -symbolic_input := $(linked_module) +symbolic_input := $(relocation_packer_output) symbolic_output := $(my_unstripped_path)/$(my_installed_module_stem) $(symbolic_output) : $(symbolic_input) | $(ACP) @echo "target Symbolic: $(PRIVATE_MODULE) ($@)" @@ -57,7 +91,7 @@ $(symbolic_output) : $(symbolic_input) | $(ACP) ## Strip ########################################################### strip_input := $(symbolic_output) -strip_output := $(intermediates)/STRIPPED/$(my_built_module_stem) +strip_output := $(LOCAL_BUILT_MODULE) my_strip_module := $(LOCAL_STRIP_MODULE) ifeq ($(my_strip_module),) @@ -107,38 +141,6 @@ $(strip_output): $(strip_input) endif endif # my_strip_module -########################################################### -## Pack relocation tables -########################################################### -relocation_packer_input := $(strip_output) -relocation_packer_output := $(LOCAL_BUILT_MODULE) - -my_pack_module_relocations := $(LOCAL_PACK_MODULE_RELOCATIONS) - -ifeq ($(my_pack_module_relocations),) - my_pack_module_relocations := $($(LOCAL_2ND_ARCH_VAR_PREFIX)TARGET_PACK_MODULE_RELOCATIONS) -endif - -# Do not pack relocations for static executables. -ifeq ($(LOCAL_FORCE_STATIC_EXECUTABLE),true) - my_pack_module_relocations := false -endif - -# TODO (dimitry): Relocation packer is not yet available for darwin -ifneq ($(HOST_OS),linux) - my_pack_module_relocations := false -endif - -ifeq (true,$(my_pack_module_relocations)) -# Pack relocations -$(relocation_packer_output): $(relocation_packer_input) | $(ACP) - $(pack-elf-relocations) -else -$(relocation_packer_output): $(relocation_packer_input) | $(ACP) - @echo "target Unpacked: $(PRIVATE_MODULE) ($@)" - $(copy-file-to-target) -endif - $(cleantarget): PRIVATE_CLEAN_FILES += \ $(linked_module) \ $(symbolic_output) \ diff --git a/core/executable_prefer_symlink.mk b/core/executable_prefer_symlink.mk index 2326e83..fc97ad3 100644 --- a/core/executable_prefer_symlink.mk +++ b/core/executable_prefer_symlink.mk @@ -39,7 +39,10 @@ $(my_symlink): PRIVATE_SRC_BINARY_NAME := $(LOCAL_MODULE_STEM_32) endif endif -$(my_symlink): $(LOCAL_INSTALLED_MODULE) $(LOCAL_MODULE_MAKEFILE) +# $(my_symlink) doesn't need to depend on $(PRIVATE_SRC_BINARY_NAME): we can generate symlink to nonexistent file. +# If you add the dependency, make would compare the timestamp of a file against that of its symlink: +# they are always equal, because make follows symlink. +$(my_symlink): $(LOCAL_MODULE_MAKEFILE) @echo "Symlink: $@ -> $(PRIVATE_SRC_BINARY_NAME)" @mkdir -p $(dir $@) @rm -rf $@ diff --git a/core/host_dalvik_java_library.mk b/core/host_dalvik_java_library.mk index f8264ee..4814d70 100644 --- a/core/host_dalvik_java_library.mk +++ b/core/host_dalvik_java_library.mk @@ -34,11 +34,13 @@ 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 built_dex := $(intermediates.COMMON)/classes.dex LOCAL_INTERMEDIATE_TARGETS += \ $(full_classes_compiled_jar) \ $(full_classes_jarjar_jar) \ + $(full_classes_jack) \ $(full_classes_jar) \ $(built_dex) @@ -61,6 +63,7 @@ $(LOCAL_INTERMEDIATE_TARGETS): \ PRIVATE_CLASS_INTERMEDIATES_DIR := $(intermediates.COMMON)/classes $(LOCAL_INTERMEDIATE_TARGETS): \ PRIVATE_SOURCE_INTERMEDIATES_DIR := $(LOCAL_INTERMEDIATE_SOURCE_DIR) +$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_RMTYPEDEFS := $(cleantarget): PRIVATE_CLEAN_FILES += $(intermediates.COMMON) @@ -69,7 +72,6 @@ $(full_classes_compiled_jar): PRIVATE_JAVACFLAGS := $(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): PRIVATE_RMTYPEDEFS := $(full_classes_compiled_jar): \ $(java_sources) \ $(java_resource_sources) \ @@ -96,6 +98,7 @@ $(full_classes_jar): $(full_classes_jarjar_jar) | $(ACP) @echo Copying: $@ $(hide) $(ACP) -fp $< $@ +ifndef LOCAL_JACK_ENABLED $(built_dex): PRIVATE_INTERMEDIATES_DIR := $(intermediates.COMMON) $(built_dex): PRIVATE_DX_FLAGS := $(LOCAL_DX_FLAGS) $(built_dex): $(full_classes_jar) $(DX) @@ -109,6 +112,42 @@ $(LOCAL_BUILT_MODULE): $(built_dex) $(java_resource_sources) $(call initialize-package-file,$(PRIVATE_SOURCE_ARCHIVE),$@) $(add-dex-to-package) +else # LOCAL_JACK_ENABLED +$(LOCAL_INTERMEDIATE_TARGETS): \ + PRIVATE_JACK_INTERMEDIATES_DIR := $(intermediates.COMMON)/jack-rsc + +ifeq ($(LOCAL_JACK_ENABLED),incremental) +$(LOCAL_INTERMEDIATE_TARGETS): \ + PRIVATE_JACK_INCREMENTAL_DIR := $(intermediates.COMMON)/jack-incremental +else +$(LOCAL_INTERMEDIATE_TARGETS): \ + PRIVATE_JACK_INCREMENTAL_DIR := +endif +$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_JACK_DEBUG_FLAGS := -g + +$(built_dex): PRIVATE_CLASSES_JACK := $(full_classes_jack) +$(built_dex): PRIVATE_JACK_FLAGS := $(LOCAL_JACK_FLAGS) +$(built_dex): $(java_sources) $(java_resource_sources) $(full_jack_lib_deps) \ + $(jar_manifest_file) $(proto_java_sources_file_stamp) $(LOCAL_MODULE_MAKEFILE) \ + $(LOCAL_MODULE_MAKEFILE) $(LOCAL_ADDITIONAL_DEPENDENCIES) $(JACK_JAR) $(JACK_LAUNCHER_JAR) + @echo Building with Jack: $@ + $(jack-java-to-dex) + +# $(full_classes_jack) is just by-product of $(built_dex). +# The dummy command was added because, without it, make misses the fact the $(built_dex) also +# change $(full_classes_jack). +$(full_classes_jack): $(built_dex) + $(hide) touch $@ + +$(LOCAL_BUILT_MODULE): PRIVATE_DEX_FILE := $(built_dex) +$(LOCAL_BUILT_MODULE): $(built_dex) $(java_resource_sources) + @echo "Host Jar: $(PRIVATE_MODULE) ($@)" + $(create-empty-package) + $(add-dex-to-package) + $(add-carried-jack-resources) + +endif # LOCAL_JACK_ENABLED + USE_CORE_LIB_BOOTCLASSPATH := endif diff --git a/core/host_dalvik_static_java_library.mk b/core/host_dalvik_static_java_library.mk index 9e5aaa3..90bcc12 100644 --- a/core/host_dalvik_static_java_library.mk +++ b/core/host_dalvik_static_java_library.mk @@ -21,11 +21,37 @@ # ifeq ($(HOST_OS),linux) +LOCAL_UNINSTALLABLE_MODULE := true +LOCAL_IS_STATIC_JAVA_LIBRARY := true USE_CORE_LIB_BOOTCLASSPATH := true LOCAL_JAVA_LIBRARIES += core-libart-hostdex +intermediates.COMMON := $(call intermediates-dir-for,JAVA_LIBRARIES,$(LOCAL_MODULE),true,COMMON,) +full_classes_jack := $(intermediates.COMMON)/classes.jack +LOCAL_INTERMEDIATE_TARGETS += \ + $(full_classes_jack) + include $(BUILD_SYSTEM)/host_java_library.mk +# proguard is not supported +# *.proto files are not supported +$(full_classes_jack): PRIVATE_JACK_FLAGS := $(LOCAL_JACK_FLAGS) +$(full_classes_jack): PRIVATE_JARJAR_RULES := $(LOCAL_JARJAR_RULES) +$(full_classes_jack): \ + PRIVATE_JACK_INTERMEDIATES_DIR := $(intermediates.COMMON)/jack-rsc +ifeq ($(LOCAL_JACK_ENABLED),incremental) +$(full_classes_jack): \ + PRIVATE_JACK_INCREMENTAL_DIR := $(intermediates.COMMON)/jack-incremental +else +$(full_classes_jack): \ + PRIVATE_JACK_INCREMENTAL_DIR := +endif +$(full_classes_jack): $(java_sources) $(java_resource_sources) $(full_jack_lib_deps) \ + $(jar_manifest_file) $(layers_file) $(LOCAL_MODULE_MAKEFILE) \ + $(LOCAL_ADDITIONAL_DEPENDENCIES) $(LOCAL_JARJAR_RULES) \ + $(JACK_JAR) $(JACK_LAUNCHER_JAR) + @echo Building with Jack: $@ + $(java-to-jack) USE_CORE_LIB_BOOTCLASSPATH := - +LOCAL_IS_STATIC_JAVA_LIBRARY := endif diff --git a/core/host_java_library.mk b/core/host_java_library.mk index b751c5f..47189d7 100644 --- a/core/host_java_library.mk +++ b/core/host_java_library.mk @@ -43,6 +43,8 @@ LOCAL_INTERMEDIATE_TARGETS += \ include $(BUILD_SYSTEM)/base_rules.mk ####################################### +$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_RMTYPEDEFS := + ifeq (true,$(LOCAL_EMMA_INSTRUMENT)) $(full_classes_emma_jar): PRIVATE_EMMA_COVERAGE_FILE := $(intermediates.COMMON)/coverage.em $(full_classes_emma_jar): PRIVATE_EMMA_INTERMEDIATES_DIR := $(emma_intermediates_dir) @@ -58,13 +60,13 @@ endif $(full_classes_emma_jar) : $(full_classes_compiled_jar) | $(EMMA_JAR) $(transform-classes.jar-to-emma) -$(LOCAL_BUILT_MODULE) : $(full_classes_emma_jar) +$(built_javalib_jar) : $(full_classes_emma_jar) @echo Copying: $@ $(hide) $(ACP) -fp $< $@ else # LOCAL_EMMA_INSTRUMENT -# Directly build into LOCAL_BUILT_MODULE. -full_classes_compiled_jar := $(LOCAL_BUILT_MODULE) +# Directly build into $(built_javalib_jar). +full_classes_compiled_jar := $(built_javalib_jar) endif # LOCAL_EMMA_INSTRUMENT $(full_classes_compiled_jar): PRIVATE_JAVAC_DEBUG_FLAGS := -g @@ -78,7 +80,6 @@ $(full_classes_compiled_jar): PRIVATE_JAVACFLAGS := $(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): PRIVATE_RMTYPEDEFS := $(full_classes_compiled_jar): \ $(java_sources) \ $(java_resource_sources) \ diff --git a/core/host_java_library_common.mk b/core/host_java_library_common.mk index cd9e679..35a6e28 100644 --- a/core/host_java_library_common.mk +++ b/core/host_java_library_common.mk @@ -23,6 +23,22 @@ LOCAL_MODULE_SUFFIX := $(COMMON_JAVA_PACKAGE_SUFFIX) LOCAL_IS_HOST_MODULE := true LOCAL_BUILT_MODULE_STEM := javalib.jar +intermediates := $(call local-intermediates-dir) +intermediates.COMMON := $(call local-intermediates-dir,COMMON) + +built_javalib_jar := $(intermediates)/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 +LOCAL_INTERMEDIATE_TARGETS += $(built_javalib_jar) +endif +endif + # base_rules.mk looks at this all_res_assets := @@ -34,14 +50,15 @@ else ifeq ($(LOCAL_PROTOC_OPTIMIZE_TYPE),nano) LOCAL_JAVA_LIBRARIES += host-libprotobuf-java-nano else - LOCAL_JAVA_LIBRARIES += host-libprotobuf-java-lite + ifeq ($(LOCAL_PROTOC_OPTIMIZE_TYPE),full) + LOCAL_JAVA_LIBRARIES += host-libprotobuf-java-full + else + LOCAL_JAVA_LIBRARIES += host-libprotobuf-java-lite + endif endif endif endif -intermediates := $(call local-intermediates-dir) -intermediates.COMMON := $(call local-intermediates-dir,COMMON) - LOCAL_INTERMEDIATE_SOURCE_DIR := $(intermediates.COMMON)/src LOCAL_JAVA_LIBRARIES := $(sort $(LOCAL_JAVA_LIBRARIES)) diff --git a/core/install_jni_libs.mk b/core/install_jni_libs.mk index da3032d..625a8a2 100644 --- a/core/install_jni_libs.mk +++ b/core/install_jni_libs.mk @@ -8,7 +8,7 @@ # # Output variables: # jni_shared_libraries, jni_shared_libraries_abi, jni_shared_libraries_with_abis if we are going to embed the libraries into the apk; -# extracted_jni_libs, if we extract jni libs from prebuilt apk. +# embedded_prebuilt_jni_libs, prebuilt jni libs embedded in prebuilt apk. # my_embed_jni := @@ -27,7 +27,7 @@ jni_shared_libraries := jni_shared_libraries_abis := # jni_shared_libraries_with_abis is a list of <abi>:<path-to-the-built-jni-lib> jni_shared_libraries_with_abis := -extracted_jni_libs := +embedded_prebuilt_jni_libs := ####################################### # For TARGET_ARCH @@ -51,7 +51,7 @@ jni_shared_libraries += $(my_jni_shared_libraries) jni_shared_libraries_abis += $(my_jni_shared_libraries_abi) jni_shared_libraries_with_abis += $(addprefix $(my_jni_shared_libraries_abi):,\ $(my_jni_shared_libraries)) -extracted_jni_libs += $(my_extracted_jni_libs) +embedded_prebuilt_jni_libs += $(my_embedded_prebuilt_jni_libs) # Include RS dynamically-generated libraries as well # TODO: Add multilib support once RS supports generating multilib libraries. @@ -83,11 +83,11 @@ jni_shared_libraries += $(my_jni_shared_libraries) jni_shared_libraries_abis += $(my_jni_shared_libraries_abi) jni_shared_libraries_with_abis += $(addprefix $(my_jni_shared_libraries_abi):,\ $(my_jni_shared_libraries)) -extracted_jni_libs += $(my_extracted_jni_libs) +embedded_prebuilt_jni_libs += $(my_embedded_prebuilt_jni_libs) endif # my_add_jni endif # TARGET_2ND_ARCH jni_shared_libraries := $(strip $(jni_shared_libraries)) jni_shared_libraries_abis := $(sort $(jni_shared_libraries_abis)) jni_shared_libraries_with_abis := $(strip $(jni_shared_libraries_with_abis)) -extracted_jni_libs := $(strip $(extracted_jni_libs)) +embedded_prebuilt_jni_libs := $(strip $(embedded_prebuilt_jni_libs)) diff --git a/core/install_jni_libs_internal.mk b/core/install_jni_libs_internal.mk index c28bb15..16d0962 100644 --- a/core/install_jni_libs_internal.mk +++ b/core/install_jni_libs_internal.mk @@ -9,7 +9,7 @@ # # Output variables: # my_jni_shared_libraries, my_jni_shared_libraries_abi, if we are going to embed the libraries into the apk; -# my_extracted_jni_libs, if we extract jni libs from prebuilt apk. +# my_embedded_prebuilt_jni_libs, prebuilt jni libs embedded in prebuilt apk. # my_jni_shared_libraries := \ @@ -19,7 +19,7 @@ my_jni_shared_libraries := \ # App-specific lib path. my_app_lib_path := $(dir $(LOCAL_INSTALLED_MODULE))lib/$(TARGET_$(my_2nd_arch_prefix)ARCH) -my_extracted_jni_libs := +my_embedded_prebuilt_jni_libs := ifdef my_embed_jni # App explicitly requires the prebuilt NDK stl shared libraies. @@ -76,25 +76,10 @@ endif # $(my_jni_shared_libraries) not empty endif # my_embed_jni ifdef my_prebuilt_jni_libs -# Install prebuilt JNI libs to the app specific lib path. -# Files like @path/to/libfoo.so (path inside the apk) are JNI libs extracted from the prebuilt apk; +# Files like @lib/<abi>/libfoo.so (path inside the apk) are JNI libs embedded prebuilt apk; # Files like path/to/libfoo.so (path relative to LOCAL_PATH) are prebuilts in the source tree. -my_extracted_jni_libs := $(patsubst @%,%, \ +my_embedded_prebuilt_jni_libs := $(patsubst @%,%, \ $(filter @%, $(my_prebuilt_jni_libs))) -ifdef my_extracted_jni_libs -ifndef my_prebuilt_src_file -$(error No prebuilt apk to extract prebuilt jni libraries $(my_extracted_jni_libs)) -endif -# We use the first jni lib file as dependency. -my_installed_prebuilt_jni := $(my_app_lib_path)/$(notdir $(firstword $(my_extracted_jni_libs))) -$(my_installed_prebuilt_jni): PRIVATE_JNI_LIBS := $(my_extracted_jni_libs) -$(my_installed_prebuilt_jni): $(my_prebuilt_src_file) - @echo "Extract JNI libs ($@ <- $<)" - @mkdir -p $(dir $@) - $(hide) unzip -j -o -d $(dir $@) $< $(PRIVATE_JNI_LIBS) && touch $@ - -$(LOCAL_INSTALLED_MODULE) : | $(my_installed_prebuilt_jni) -endif # prebuilt JNI exsiting as separate source files. my_prebuilt_jni_libs := $(addprefix $(LOCAL_PATH)/, \ diff --git a/core/jack-default.args b/core/jack-default.args new file mode 100644 index 0000000..8d70a82 --- /dev/null +++ b/core/jack-default.args @@ -0,0 +1,5 @@ +-D sched.runner=multi-threaded +-D sched.runner.thread.kind=fixed +-D sched.runner.thread.fixed.count=4 +--sanity-checks off +-D jack.reporter.level.file=error=--,warning=-
\ No newline at end of file diff --git a/core/java.mk b/core/java.mk index fc4703c..b371289 100644 --- a/core/java.mk +++ b/core/java.mk @@ -7,7 +7,9 @@ ifeq ($(TARGET_BUILD_PDK),true) ifeq ($(TARGET_BUILD_PDK_JAVA_PLATFORM),) # LOCAL_SDK not defined or set to current ifeq ($(filter-out current,$(LOCAL_SDK_VERSION)),) +ifneq ($(LOCAL_NO_STANDARD_LIBRARIES),true) LOCAL_SDK_VERSION := $(PDK_BUILD_SDK_VERSION) +endif #!LOCAL_NO_STANDARD_LIBRARIES endif endif # !PDK_JAVA endif #PDK @@ -112,6 +114,10 @@ else full_classes_jar := $(intermediates.COMMON)/classes.jar built_dex := $(intermediates.COMMON)/classes.dex endif +# final Jack library, shrinked and obfuscated if it must be +full_classes_jack := $(intermediates.COMMON)/classes.jack +# intermediate Jack library without shrink and obfuscation +noshrob_classes_jack := $(intermediates.COMMON)/classes.noshrob.jack LOCAL_INTERMEDIATE_TARGETS += \ $(full_classes_compiled_jar) \ @@ -120,6 +126,8 @@ LOCAL_INTERMEDIATE_TARGETS += \ $(full_classes_jar) \ $(full_classes_proguard_jar) \ $(built_dex_intermediate) \ + $(full_classes_jack) \ + $(noshrob_classes_jack) \ $(built_dex) \ $(full_classes_stubs_jar) @@ -322,6 +330,7 @@ $(LOCAL_INTERMEDIATE_TARGETS): \ PRIVATE_CLASS_INTERMEDIATES_DIR := $(intermediates.COMMON)/classes $(LOCAL_INTERMEDIATE_TARGETS): \ PRIVATE_SOURCE_INTERMEDIATES_DIR := $(LOCAL_INTERMEDIATE_SOURCE_DIR) +$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_RMTYPEDEFS := $(LOCAL_RMTYPEDEFS) # Since we're using intermediates.COMMON, make sure that it gets cleaned # properly. @@ -338,7 +347,7 @@ ifdef full_classes_jar # - This extra copy, with the dependency on LOCAL_BUILT_MODULE allows the # PRIVATE_ vars to be preserved. $(full_classes_stubs_jar): PRIVATE_SOURCE_FILE := $(full_classes_jar) -$(full_classes_stubs_jar) : $(LOCAL_BUILT_MODULE) | $(ACP) +$(full_classes_stubs_jar) : $(full_classes_jar) | $(ACP) @echo Copying $(PRIVATE_SOURCE_FILE) $(hide) $(ACP) -fp $(PRIVATE_SOURCE_FILE) $@ ALL_MODULES.$(LOCAL_MODULE).STUBS := $(full_classes_stubs_jar) @@ -361,7 +370,6 @@ $(full_classes_compiled_jar): PRIVATE_JAVACFLAGS := $(LOCAL_JAVACFLAGS) $(full_classes_compiled_jar): PRIVATE_JAR_EXCLUDE_FILES := $(LOCAL_JAR_EXCLUDE_FILES) $(full_classes_compiled_jar): PRIVATE_JAR_PACKAGES := $(LOCAL_JAR_PACKAGES) $(full_classes_compiled_jar): PRIVATE_JAR_EXCLUDE_PACKAGES := $(LOCAL_JAR_EXCLUDE_PACKAGES) -$(full_classes_compiled_jar): PRIVATE_RMTYPEDEFS := $(LOCAL_RMTYPEDEFS) $(full_classes_compiled_jar): PRIVATE_DONT_DELETE_JAR_META_INF := $(LOCAL_DONT_DELETE_JAR_META_INF) $(full_classes_compiled_jar): \ $(java_sources) \ @@ -424,50 +432,78 @@ ifneq ($(filter-out full custom nosystem obfuscation optimization shrinktests,$( $(error invalid value for LOCAL_PROGUARD_ENABLED: $(LOCAL_PROGUARD_ENABLED)) endif proguard_dictionary := $(intermediates.COMMON)/proguard_dictionary -proguard_flags := $(addprefix -libraryjars ,$(full_shared_java_libs)) \ + +# Hack: see b/20667396 +# When an app's LOCAL_SDK_VERSION is lower than the support library's LOCAL_SDK_VERSION, +# we artifically raises the "SDK version" "linked" by ProGuard, to +# - suppress ProGuard warnings of referencing symbols unknown to the lower SDK version. +# - prevent ProGuard stripping subclass in the support library that extends class added in the higher SDK version. +my_support_library_sdk_raise := +ifneq (,$(filter android-support-%,$(LOCAL_STATIC_JAVA_LIBRARIES))) +ifdef LOCAL_SDK_VERSION +ifdef TARGET_BUILD_APPS +ifeq (,$(filter current system_current, $(LOCAL_SDK_VERSION))) + my_support_library_sdk_raise := $(call java-lib-files, sdk_vcurrent) +endif +else + # For platform build, we can't just raise to the "current" SDK, + # that would break apps that use APIs removed from the current SDK. + my_support_library_sdk_raise := $(call java-lib-files,$(TARGET_DEFAULT_JAVA_LIBRARIES)) +endif +endif +endif + +# jack already has the libraries in its classpath and doesn't support jars +legacy_proguard_flags := $(addprefix -libraryjars ,$(my_support_library_sdk_raise) $(full_shared_java_libs)) +common_proguard_flags := \ -forceprocessing \ -printmapping $(proguard_dictionary) ifeq ($(filter nosystem,$(LOCAL_PROGUARD_ENABLED)),) -proguard_flags += -include $(BUILD_SYSTEM)/proguard.flags +common_proguard_flags += -include $(BUILD_SYSTEM)/proguard.flags ifeq ($(LOCAL_EMMA_INSTRUMENT),true) -proguard_flags += -include $(BUILD_SYSTEM)/proguard.emma.flags +common_proguard_flags += -include $(BUILD_SYSTEM)/proguard.emma.flags endif # If this is a test package, add proguard keep flags for tests. ifneq ($(LOCAL_INSTRUMENTATION_FOR)$(filter tests,$(LOCAL_MODULE_TAGS)),) -proguard_flags += -include $(BUILD_SYSTEM)/proguard_tests.flags +common_proguard_flags += -include $(BUILD_SYSTEM)/proguard_tests.flags ifeq ($(filter shrinktests,$(LOCAL_PROGUARD_ENABLED)),) -proguard_flags += -dontshrink # don't shrink tests by default +common_proguard_flags += -dontshrink # don't shrink tests by default endif # shrinktests endif # test package ifeq ($(filter obfuscation,$(LOCAL_PROGUARD_ENABLED)),) # By default no obfuscation -proguard_flags += -dontobfuscate +common_proguard_flags += -dontobfuscate endif # No obfuscation ifeq ($(filter optimization,$(LOCAL_PROGUARD_ENABLED)),) # By default no optimization -proguard_flags += -dontoptimize +common_proguard_flags += -dontoptimize endif # No optimization ifdef LOCAL_INSTRUMENTATION_FOR ifeq ($(filter obfuscation,$(LOCAL_PROGUARD_ENABLED)),) # If no obfuscation, link in the instrmented package's classes.jar as a library. # link_instr_classes_jar is defined in base_rule.mk -proguard_flags += -libraryjars $(link_instr_classes_jar) +# jack already has this library in its classpath and doesn't support jars +legacy_proguard_flags += -libraryjars $(link_instr_classes_jar) else # obfuscation # If obfuscation is enabled, the main app must be obfuscated too. # We need to run obfuscation using the main app's dictionary, # and treat the main app's class.jar as injars instead of libraryjars. -proguard_flags := -injars $(link_instr_classes_jar) \ +legacy_proguard_flags := -injars $(link_instr_classes_jar) \ -outjars $(intermediates.COMMON)/proguard.$(LOCAL_INSTRUMENTATION_FOR).jar \ -include $(link_instr_intermediates_dir.COMMON)/proguard_options \ -applymapping $(link_instr_intermediates_dir.COMMON)/proguard_dictionary \ -verbose \ - $(proguard_flags) + $(legacy_proguard_flags) +# not supported with jack +ifdef LOCAL_JACK_ENABLED + $(error $(LOCAL_MODULE): Build with jack of instrumentation when obfuscating is not yet supported) +endif # Sometimes (test + main app) uses different keep rules from the main app - # apply the main app's dictionary anyway. -proguard_flags += -ignorewarnings +legacy_proguard_flags += -ignorewarnings # Make sure we run Proguard on the main app first $(full_classes_proguard_jar) : $(link_instr_intermediates_dir.COMMON)/proguard.classes.jar @@ -485,8 +521,8 @@ else extra_input_jar := endif $(full_classes_proguard_jar): PRIVATE_EXTRA_INPUT_JAR := $(extra_input_jar) -$(full_classes_proguard_jar): PRIVATE_PROGUARD_FLAGS := $(proguard_flags) $(LOCAL_PROGUARD_FLAGS) -$(full_classes_proguard_jar) : $(full_classes_jar) $(extra_input_jar) $(proguard_flag_files) | $(ACP) $(PROGUARD) +$(full_classes_proguard_jar): PRIVATE_PROGUARD_FLAGS := $(legacy_proguard_flags) $(common_proguard_flags) $(LOCAL_PROGUARD_FLAGS) +$(full_classes_proguard_jar) : $(full_classes_jar) $(extra_input_jar) $(my_support_library_sdk_raise) $(proguard_flag_files) | $(ACP) $(PROGUARD) $(call transform-jar-to-proguard) else # LOCAL_PROGUARD_ENABLED not defined @@ -496,7 +532,7 @@ $(full_classes_proguard_jar) : $(full_classes_jar) endif # LOCAL_PROGUARD_ENABLED defined - +ifndef LOCAL_JACK_ENABLED # Override PRIVATE_INTERMEDIATES_DIR so that install-dex-debug # will work even when intermediates != intermediates.COMMON. $(built_dex_intermediate): PRIVATE_INTERMEDIATES_DIR := $(intermediates.COMMON) @@ -512,6 +548,8 @@ $(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 $@) @@ -522,17 +560,14 @@ ifneq ($(GENERATE_DEX_DEBUG),) endif findbugs_xml := $(intermediates.COMMON)/findbugs.xml -$(findbugs_xml) : PRIVATE_JAR_FILE := $(full_classes_jar) $(findbugs_xml) : PRIVATE_AUXCLASSPATH := $(addprefix -auxclasspath ,$(strip \ $(call normalize-path-list,$(filter %.jar,\ $(full_java_libs))))) -# We can't depend directly on full_classes_jar because the PRIVATE_ -# vars won't be set up correctly. -$(findbugs_xml) : $(LOCAL_BUILT_MODULE) +$(findbugs_xml) : $(full_classes_jar) @echo Findbugs: $@ $(hide) $(FINDBUGS) -textui -effort:min -xml:withMessages \ $(PRIVATE_AUXCLASSPATH) \ - $(PRIVATE_JAR_FILE) \ + $< \ > $@ ALL_FINDBUGS_FILES += $(findbugs_xml) @@ -549,3 +584,72 @@ $(findbugs_html) : $(findbugs_xml) $(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) +$(LOCAL_INTERMEDIATE_TARGETS): \ + PRIVATE_JACK_INCREMENTAL_DIR := $(intermediates.COMMON)/jack-incremental +else +$(LOCAL_INTERMEDIATE_TARGETS): \ + PRIVATE_JACK_INCREMENTAL_DIR := +endif + +ifdef full_classes_jar +$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_JACK_DEBUG_FLAGS := -g + +ifdef LOCAL_PROGUARD_ENABLED + +ifndef LOCAL_JACK_PROGUARD_FLAGS + LOCAL_JACK_PROGUARD_FLAGS := $(LOCAL_PROGUARD_FLAGS) +endif +LOCAL_JACK_PROGUARD_FLAGS += $(addprefix -include , $(proguard_flag_files)) +ifdef LOCAL_TEST_MODULE_TO_PROGUARD_WITH + $(error $(LOCAL_MODULE): Build with jack when LOCAL_TEST_MODULE_TO_PROGUARD_WITH is defined is not yet implemented) +endif + +$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_JACK_PROGUARD_FLAGS := $(common_proguard_flags) $(LOCAL_JACK_PROGUARD_FLAGS) +else # LOCAL_PROGUARD_ENABLED not defined +$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_JACK_PROGUARD_FLAGS := +endif # LOCAL_PROGUARD_ENABLED defined + +$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_JACK_FLAGS := $(LOCAL_JACK_FLAGS) + +jack_all_deps := $(java_sources) $(java_resource_sources) $(full_jack_lib_deps) \ + $(jar_manifest_file) $(layers_file) $(RenderScript_file_stamp) $(proguard_flag_files) \ + $(proto_java_sources_file_stamp) $(LOCAL_ADDITIONAL_DEPENDENCIES) $(LOCAL_JARJAR_RULES) \ + $(LOCAL_MODULE_MAKEFILE) $(JACK_JAR) $(JACK_LAUNCHER_JAR) + +ifeq ($(LOCAL_IS_STATIC_JAVA_LIBRARY),true) +$(full_classes_jack): $(jack_all_deps) + @echo Building with Jack: $@ + $(java-to-jack) + +else #LOCAL_IS_STATIC_JAVA_LIBRARY +$(built_dex_intermediate): PRIVATE_CLASSES_JACK := $(full_classes_jack) + +$(built_dex_intermediate): $(jack_all_deps) + @echo Building with Jack: $@ + $(jack-java-to-dex) + +# $(full_classes_jack) is just by-product of $(built_dex_intermediate). +# The dummy command was added because, without it, make misses the fact the $(built_dex) also +# change $(full_classes_jack). +$(full_classes_jack): $(built_dex_intermediate) + $(hide) touch $@ + +endif #LOCAL_IS_STATIC_JAVA_LIBRARY + +$(noshrob_classes_jack): PRIVATE_JACK_INTERMEDIATES_DIR := $(intermediates.COMMON)/jack-noshrob-rsc +ifeq ($(LOCAL_JACK_ENABLED),incremental) +$(noshrob_classes_jack): PRIVATE_JACK_INCREMENTAL_DIR := $(intermediates.COMMON)/jack-noshrob-incremental +else +$(noshrob_classes_jack): PRIVATE_JACK_INCREMENTAL_DIR := +endif +$(noshrob_classes_jack): PRIVATE_JACK_PROGUARD_FLAGS := +$(noshrob_classes_jack): $(jack_all_deps) + @echo Building with Jack: $@ + $(java-to-jack) +endif # full_classes_jar is defined +endif # LOCAL_JACK_ENABLED diff --git a/core/java_library.mk b/core/java_library.mk index b4e3eaa..5a2d19b 100644 --- a/core/java_library.mk +++ b/core/java_library.mk @@ -24,10 +24,20 @@ endif 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) # This file will be the one that other modules should depend on. -common_javalib.jar := $(intermediates.COMMON)/$(LOCAL_BUILT_MODULE_STEM) +common_javalib.jar := $(intermediates.COMMON)/javalib.jar LOCAL_INTERMEDIATE_TARGETS += $(common_javalib.jar) ifeq ($(LOCAL_PROGUARD_ENABLED),disabled) @@ -59,7 +69,11 @@ endif @echo "target Static Jar: $(PRIVATE_MODULE) ($@)" $(copy-file-to-target) -$(LOCAL_BUILT_MODULE): $(common_javalib.jar) +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 @@ -69,8 +83,15 @@ $(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) @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 ifdef LOCAL_DEX_PREOPT ifneq ($(dexpreopt_boot_jar_module),) # boot jar diff --git a/core/main.mk b/core/main.mk index e9a5306..4f22b93 100644 --- a/core/main.mk +++ b/core/main.mk @@ -234,23 +234,7 @@ endif # These are the modifier targets that don't do anything themselves, but # change the behavior of the build. # (must be defined before including definitions.make) -INTERNAL_MODIFIER_TARGETS := showcommands all incrementaljavac - -.PHONY: incrementaljavac -incrementaljavac: ; - -# WARNING: -# ENABLE_INCREMENTALJAVAC should NOT be enabled by default, because change of -# a Java source file won't trigger rebuild of its dependent Java files. -# You can only enable it by adding "incrementaljavac" to your make command line. -# You are responsible for the correctness of the incremental build. -# This may decrease incremental build time dramatically for large Java libraries, -# such as core.jar, framework.jar, etc. -ENABLE_INCREMENTALJAVAC := -ifneq (,$(filter incrementaljavac, $(MAKECMDGOALS))) -ENABLE_INCREMENTALJAVAC := true -MAKECMDGOALS := $(filter-out incrementaljavac, $(MAKECMDGOALS)) -endif +INTERNAL_MODIFIER_TARGETS := showcommands all # EMMA_INSTRUMENT_STATIC merges the static emma library to each emma-enabled module. ifeq (true,$(EMMA_INSTRUMENT_STATIC)) @@ -751,9 +735,14 @@ endif #$(error filtered out # $(filter-out $(modules_to_install),$(old_modules_to_install))) -# Don't include any GNU targets in the SDK. It's ok (and necessary) -# to build the host tools, but nothing that's going to be installed -# on the target (including static libraries). +# Don't include any GNU General Public License shared objects or static +# libraries in SDK images. GPL executables (not static/dynamic libraries) +# are okay if they don't link against any closed source libraries (directly +# or indirectly) + +# It's ok (and necessary) to build the host tools, but nothing that's +# going to be installed on the target (including static libraries). + ifdef is_sdk_build target_gnu_MODULES := \ $(filter \ @@ -761,6 +750,7 @@ ifdef is_sdk_build $(TARGET_OUT)/% \ $(TARGET_OUT_DATA)/%, \ $(sort $(call get-tagged-modules,gnu))) + target_gnu_MODULES := $(filter-out $(TARGET_OUT_EXECUTABLES)/%,$(target_gnu_MODULES)) $(info Removing from sdk:)$(foreach d,$(target_gnu_MODULES),$(info : $(d))) modules_to_install := \ $(filter-out $(target_gnu_MODULES),$(modules_to_install)) @@ -914,7 +904,9 @@ ifneq ($(TARGET_BUILD_APPS),) # For uninstallable modules such as static Java library, we have to dist the built file, # as <module_name>.<suffix> apps_only_dist_built_files := $(foreach m,$(unbundled_build_modules),$(if $(ALL_MODULES.$(m).INSTALLED),,\ - $(if $(ALL_MODULES.$(m).BUILT),$(ALL_MODULES.$(m).BUILT):$(m)$(suffix $(ALL_MODULES.$(m).BUILT))))) + $(if $(ALL_MODULES.$(m).BUILT),$(ALL_MODULES.$(m).BUILT):$(m)$(suffix $(ALL_MODULES.$(m).BUILT)))\ + $(if $(ALL_MODULES.$(m).AAR),$(ALL_MODULES.$(m).AAR):$(m).aar)\ + )) $(call dist-for-goals,apps_only, $(apps_only_dist_built_files)) ifeq ($(EMMA_INSTRUMENT),true) diff --git a/core/notice_files.mk b/core/notice_files.mk index e63cd84..43a5435 100644 --- a/core/notice_files.mk +++ b/core/notice_files.mk @@ -43,7 +43,7 @@ else # javalib.jar is the default name for the build module (and isn't meaningful) # If that's what we have, substitute the module name instead. These files # aren't included on the device, so this name is synthetic anyway. - ifeq ($(module_leaf),javalib.jar) + ifneq ($(filter javalib.jar classes.jack,$(module_leaf)),) module_leaf := $(LOCAL_MODULE).jar endif module_installed_filename := \ diff --git a/core/package_internal.mk b/core/package_internal.mk index d52997b..23648c1 100644 --- a/core/package_internal.mk +++ b/core/package_internal.mk @@ -57,6 +57,10 @@ $(error $(LOCAL_PATH): Package modules may not set LOCAL_MODULE_CLASS) endif LOCAL_MODULE_CLASS := APPS +################################# +include $(BUILD_SYSTEM)/configure_local_jack.mk +################################# + # Package LOCAL_MODULE_TAGS default to optional LOCAL_MODULE_TAGS := $(strip $(LOCAL_MODULE_TAGS)) ifeq ($(LOCAL_MODULE_TAGS),) @@ -162,6 +166,13 @@ 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 # No emma for test apks. @@ -271,6 +282,18 @@ endif # they want to use this module's R.java file. $(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) +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 @@ -369,7 +392,6 @@ $(LOCAL_BUILT_MODULE): $(AAPT) | $(ZIPALIGN) $(LOCAL_BUILT_MODULE): PRIVATE_JNI_SHARED_LIBRARIES := $(jni_shared_libraries_with_abis) # PRIVATE_JNI_SHARED_LIBRARIES_ABI is a list of ABI names. $(LOCAL_BUILT_MODULE): PRIVATE_JNI_SHARED_LIBRARIES_ABI := $(jni_shared_libraries_abis) -$(LOCAL_BUILT_MODULE): PRIVATE_PAGE_ALIGN_JNI_SHARED_LIBRARIES := $(LOCAL_PAGE_ALIGN_JNI_SHARED_LIBRARIES) ifneq ($(TARGET_BUILD_APPS),) # Include all resources for unbundled apps. LOCAL_AAPT_INCLUDE_ALL_RESOURCES := true @@ -388,9 +410,13 @@ endif $(LOCAL_BUILT_MODULE): PRIVATE_DONT_DELETE_JAR_DIRS := $(LOCAL_DONT_DELETE_JAR_DIRS) $(LOCAL_BUILT_MODULE): $(all_res_assets) $(jni_shared_libraries) $(full_android_manifest) @echo "target Package: $(PRIVATE_MODULE) ($@)" +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) ifneq ($(jni_shared_libraries),) $(add-jni-shared-libs-to-package) @@ -401,6 +427,9 @@ ifeq ($(full_classes_jar),) else $(add-dex-to-package) endif +ifdef LOCAL_JACK_ENABLED + $(add-carried-jack-resources) +endif ifdef LOCAL_DEX_PREOPT ifneq (nostripping,$(LOCAL_DEX_PREOPT)) $(call dexpreopt-remove-classes.dex,$@) diff --git a/core/pathmap.mk b/core/pathmap.mk index 2914576..87d3729 100644 --- a/core/pathmap.mk +++ b/core/pathmap.mk @@ -43,6 +43,7 @@ pathmap_INCL := \ opengl-tests-includes:frameworks/native/opengl/tests/include \ recovery:bootable/recovery \ system-core:system/core/include \ + audio:system/media/audio/include \ audio-effects:system/media/audio_effects/include \ audio-utils:system/media/audio_utils/include \ audio-route:system/media/audio_route/include \ @@ -115,7 +116,8 @@ FRAMEWORKS_SUPPORT_SUBDIRS := \ v13 \ v17/leanback \ design \ - percent + percent \ + recommendation # # A list of all source roots under frameworks/multidex. diff --git a/core/pdk_config.mk b/core/pdk_config.mk index 838754f..262b50e 100644 --- a/core/pdk_config.mk +++ b/core/pdk_config.mk @@ -52,18 +52,20 @@ ifneq (,$(filter platform-java, $(MAKECMDGOALS))$(PDK_FUSION_PLATFORM_ZIP)) # For these dirs, add classes.jar and javalib.jar from the dir to platform.zip # all paths under out dir PDK_PLATFORM_JAVA_ZIP_JAVA_TARGET_LIB_DIR += \ - target/common/obj/JAVA_LIBRARIES/android_stubs_current_intermediates \ - target/common/obj/JAVA_LIBRARIES/core-libart_intermediates \ - target/common/obj/JAVA_LIBRARIES/core-junit_intermediates \ - target/common/obj/JAVA_LIBRARIES/ext_intermediates \ - target/common/obj/JAVA_LIBRARIES/framework_intermediates \ - target/common/obj/JAVA_LIBRARIES/android.test.runner_intermediates \ - target/common/obj/JAVA_LIBRARIES/telephony-common_intermediates \ - target/common/obj/JAVA_LIBRARIES/voip-common_intermediates \ - target/common/obj/JAVA_LIBRARIES/ims-common_intermediates \ - target/common/obj/JAVA_LIBRARIES/mms-common_intermediates \ - target/common/obj/JAVA_LIBRARIES/android-ex-camera2_intermediates \ - target/common/obj/JAVA_LIBRARIES/android-common_intermediates \ + target/common/obj/JAVA_LIBRARIES/android.test.runner_intermediates \ + target/common/obj/JAVA_LIBRARIES/android-common_intermediates \ + target/common/obj/JAVA_LIBRARIES/android-ex-camera2_intermediates \ + target/common/obj/JAVA_LIBRARIES/android_stubs_current_intermediates \ + target/common/obj/JAVA_LIBRARIES/bouncycastle_intermediates \ + target/common/obj/JAVA_LIBRARIES/conscrypt_intermediates \ + target/common/obj/JAVA_LIBRARIES/core-libart_intermediates \ + target/common/obj/JAVA_LIBRARIES/core-junit_intermediates \ + target/common/obj/JAVA_LIBRARIES/ext_intermediates \ + target/common/obj/JAVA_LIBRARIES/framework_intermediates \ + target/common/obj/JAVA_LIBRARIES/ims-common_intermediates \ + target/common/obj/JAVA_LIBRARIES/okhttp_intermediates \ + target/common/obj/JAVA_LIBRARIES/telephony-common_intermediates \ + target/common/obj/JAVA_LIBRARIES/voip-common_intermediates \ # not java libraries PDK_PLATFORM_JAVA_ZIP_CONTENTS += \ @@ -76,7 +78,7 @@ PDK_PLATFORM_JAVA_ZIP_JAVA_LIB_DIR := \ $(PDK_PLATFORM_JAVA_ZIP_JAVA_HOST_LIB_DIR) PDK_PLATFORM_JAVA_ZIP_CONTENTS += $(foreach lib_dir,$(PDK_PLATFORM_JAVA_ZIP_JAVA_LIB_DIR),\ - $(lib_dir)/classes.jar $(lib_dir)/javalib.jar) + $(lib_dir)/classes.jack $(lib_dir)/classes.jar $(lib_dir)/javalib.jar) # check and override java support level ifneq ($(TARGET_BUILD_PDK)$(PDK_FUSION_PLATFORM_ZIP),) diff --git a/core/prebuilt_internal.mk b/core/prebuilt_internal.mk index f85b0b8..0406353 100644 --- a/core/prebuilt_internal.mk +++ b/core/prebuilt_internal.mk @@ -122,7 +122,7 @@ $(LOCAL_BUILT_MODULE) : $(my_built_shared_libraries) endif endif -# We need to enclose the above export_includes and built_shared_libraries in +# We need to enclose the above export_includes and my_built_shared_libraries in # "LOCAL_STRIP_MODULE not true" because otherwise the rules are defined in dynamic_binary.mk. endif # LOCAL_STRIP_MODULE not true @@ -195,14 +195,25 @@ endif include $(BUILD_SYSTEM)/dex_preopt_odex_install.mk ####################################### # Sign and align non-presigned .apks. -$(built_module) : PRIVATE_PAGE_ALIGN_JNI_SHARED_LIBRARIES := $(LOCAL_PAGE_ALIGN_JNI_SHARED_LIBRARIES) + +# The embedded prebuilt jni to uncompress. +ifeq ($(LOCAL_CERTIFICATE),PRESIGNED) +# For PRESIGNED apks we must uncompress every .so file: +# even if the .so file isn't for the current TARGET_ARCH, +# we can't strip the file. +embedded_prebuilt_jni_libs := 'lib/*.so' +endif +ifndef embedded_prebuilt_jni_libs +# No LOCAL_PREBUILT_JNI_LIBS, uncompress all. +embedded_prebuilt_jni_libs := 'lib/*.so' +endif +$(built_module): PRIVATE_EMBEDDED_JNI_LIBS := $(embedded_prebuilt_jni_libs) + $(built_module) : $(my_prebuilt_src_file) | $(ACP) $(ZIPALIGN) $(SIGNAPK_JAR) $(transform-prebuilt-to-target) + $(uncompress-shared-libs) ifneq ($(LOCAL_CERTIFICATE),PRESIGNED) @# Only strip out files if we can re-sign the package. -ifdef extracted_jni_libs - $(hide) zip -d $@ 'lib/*.so' # strip embedded JNI libraries. -endif ifdef LOCAL_DEX_PREOPT ifneq (nostripping,$(LOCAL_DEX_PREOPT)) $(call dexpreopt-remove-classes.dex,$@) @@ -210,9 +221,6 @@ endif endif $(sign-package) endif -ifeq ($(LOCAL_PAGE_ALIGN_JNI_SHARED_LIBRARIES),true) - $(uncompress-shared-libs) -endif $(align-package) ############################### @@ -302,6 +310,14 @@ $(common_javalib_jar) : $(common_classes_jar) | $(ACP) $(built_module) : $(common_javalib_jar) endif # TARGET JAVA_LIBRARIES +ifeq ($(LOCAL_MODULE_CLASS),JAVA_LIBRARIES) +$(intermediates.COMMON)/classes.jack : PRIVATE_JILL_FLAGS:=$(LOCAL_JILL_FLAGS) +$(intermediates.COMMON)/classes.jack : $(my_src_jar) $(LOCAL_MODULE_MAKEFILE) \ + $(LOCAL_ADDITIONAL_DEPENDENCIES) $(JILL_JAR) $(JACK_JAR) $(JACK_LAUNCHER_JAR) + $(transform-jar-to-jack) + +endif # JAVA_LIBRARIES + $(built_module) : $(LOCAL_MODULE_MAKEFILE) $(LOCAL_ADDITIONAL_DEPENDENCIES) my_prebuilt_src_file := diff --git a/core/product.mk b/core/product.mk index 46fad89..4e8bff1 100644 --- a/core/product.mk +++ b/core/product.mk @@ -97,10 +97,13 @@ _product_var_list := \ PRODUCT_RESTRICT_VENDOR_FILES \ PRODUCT_VENDOR_KERNEL_HEADERS \ PRODUCT_BOOT_JARS \ + PRODUCT_SUPPORTS_BOOT_SIGNER \ + PRODUCT_SUPPORTS_VBOOT \ PRODUCT_SUPPORTS_VERITY \ PRODUCT_OEM_PROPERTIES \ PRODUCT_SYSTEM_PROPERTY_BLACKLIST \ PRODUCT_SYSTEM_SERVER_JARS \ + PRODUCT_VBOOT_SIGNING_KEY \ PRODUCT_VERITY_SIGNING_KEY \ PRODUCT_SYSTEM_VERITY_PARTITION \ PRODUCT_VENDOR_VERITY_PARTITION \ diff --git a/core/proguard_basic_keeps.flags b/core/proguard_basic_keeps.flags index 4a85db0..4de5221 100644 --- a/core/proguard_basic_keeps.flags +++ b/core/proguard_basic_keeps.flags @@ -40,6 +40,11 @@ java.lang.Object readResolve(); } +# Keep Throwable's constructor that takes a String argument. +-keepclassmembers class * extends java.lang.Throwable { + <init>(java.lang.String); +} + # Please specify classes to be kept explicitly in your package's configuration. # -keep class * extends android.app.Activity # -keep class * extends android.view.View @@ -58,7 +63,12 @@ # Don't warn about those in case this app is linking against an older # platform version. We know about them, and they are safe. # See proguard-android.txt in the SDK package. --dontwarn android.support.** +# +# DO NOT USE THIS: We figured it's dangerous to blindly ignore all support library warnings. +# ProGuard may strip members of subclass of unknown super classes, in case an app is linking against +# LOCAL_SDK_VERSION lower than the support library's LOCAL_SDK_VERSION. +# See bug/20658265. +# -dontwarn android.support.** # Less spammy. -dontnote diff --git a/core/static_java_library.mk b/core/static_java_library.mk index 02078e0..9b7b46a 100644 --- a/core/static_java_library.mk +++ b/core/static_java_library.mk @@ -56,8 +56,20 @@ intermediates.COMMON := $(call local-intermediates-dir,COMMON) ifneq ($(LOCAL_PROGUARD_ENABLED),custom) proguard_options_file := $(intermediates.COMMON)/proguard_options endif + LOCAL_PROGUARD_FLAGS := $(addprefix -include ,$(proguard_options_file)) $(LOCAL_PROGUARD_FLAGS) +################################# +include $(BUILD_SYSTEM)/configure_local_jack.mk +################################# + +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 + endif # LOCAL_RESOURCE_DIR all_res_assets := $(all_resources) @@ -92,7 +104,8 @@ endif $(R_file_stamp): PRIVATE_MODULE := $(LOCAL_MODULE) # add --non-constant-id to prevent inlining constants. -$(R_file_stamp): PRIVATE_AAPT_FLAGS := $(LOCAL_AAPT_FLAGS) --non-constant-id +# AAR needs text symbol file R.txt. +$(R_file_stamp): PRIVATE_AAPT_FLAGS := $(LOCAL_AAPT_FLAGS) --non-constant-id --output-text-symbols $(LOCAL_INTERMEDIATE_SOURCE_DIR) $(R_file_stamp): PRIVATE_SOURCE_INTERMEDIATES_DIR := $(LOCAL_INTERMEDIATE_SOURCE_DIR) $(R_file_stamp): PRIVATE_ANDROID_MANIFEST := $(full_android_manifest) $(R_file_stamp): PRIVATE_RESOURCE_PUBLICS_OUTPUT := $(intermediates.COMMON)/public_resources.xml @@ -114,9 +127,32 @@ $(R_file_stamp) : $(all_resources) $(full_android_manifest) $(AAPT) $(framework_ $(hide) find $(PRIVATE_SOURCE_INTERMEDIATES_DIR) -name R.java | xargs cat > $@ $(LOCAL_BUILT_MODULE): $(R_file_stamp) -ifneq ($(full_classes_jar),) +ifdef LOCAL_JACK_ENABLED +$(noshrob_classes_jack): $(R_file_stamp) +$(full_classes_jack): $(R_file_stamp) +endif # LOCAL_JACK_ENABLED $(full_classes_compiled_jar): $(R_file_stamp) -endif + +# Rule to build AAR, archive including classes.jar, resource, etc. +built_aar := $(intermediates.COMMON)/javalib.aar +$(built_aar): PRIVATE_MODULE := $(LOCAL_MODULE) +$(built_aar): PRIVATE_ANDROID_MANIFEST := $(full_android_manifest) +$(built_aar): PRIVATE_CLASSES_JAR := $(LOCAL_BUILT_MODULE) +$(built_aar): PRIVATE_RESOURCE_DIR := $(LOCAL_RESOURCE_DIR) +$(built_aar): PRIVATE_R_TXT := $(LOCAL_INTERMEDIATE_SOURCE_DIR)/R.txt +$(built_aar) : $(LOCAL_BUILT_MODULE) + @echo "target AAR: $(PRIVATE_MODULE) ($@)" + $(hide) rm -rf $(dir $@)aar && mkdir -p $(dir $@)aar/res + $(hide) cp $(PRIVATE_ANDROID_MANIFEST) $(dir $@)aar/AndroidManifest.xml + $(hide) cp $(PRIVATE_CLASSES_JAR) $(dir $@)aar/classes.jar + # Note: Use "cp -n" to honor the resource overlay rules, if multiple res dirs exist. + $(hide) $(foreach res,$(PRIVATE_RESOURCE_DIR),cp -Rfn $(res)/* $(dir $@)aar/res;) + $(hide) cp $(PRIVATE_R_TXT) $(dir $@)aar/R.txt + $(hide) jar -cMf $@ \ + -C $(dir $@)aar . + +# Register the aar file. +ALL_MODULES.$(LOCAL_MODULE).AAR := $(built_aar) endif # need_compile_res diff --git a/core/tasks/cts.mk b/core/tasks/cts.mk index 23648f8..56a7f6f 100644 --- a/core/tasks/cts.mk +++ b/core/tasks/cts.mk @@ -21,7 +21,7 @@ JUNIT_HOST_JAR := $(HOST_OUT_JAVA_LIBRARIES)/junit.jar HOSTTESTLIB_JAR := $(HOST_OUT_JAVA_LIBRARIES)/hosttestlib.jar TF_JAR := $(HOST_OUT_JAVA_LIBRARIES)/tradefed-prebuilt.jar CTS_TF_JAR := $(HOST_OUT_JAVA_LIBRARIES)/cts-tradefed.jar -CTS_TF_EXEC_PATH := $(HOST_OUT_EXECUTABLES)/cts-tradefed +CTS_TF_EXEC_PATH ?= $(HOST_OUT_EXECUTABLES)/cts-tradefed CTS_TF_README_PATH := $(cts_tools_src_dir)/tradefed-host/README VMTESTSTF_INTERMEDIATES :=$(call intermediates-dir-for,JAVA_LIBRARIES,vm-tests-tf,HOST) @@ -64,8 +64,8 @@ CTS_CORE_CASE_LIST += \ CTS_TEST_JAR_LIST := \ - cts-junit \ - CtsJdwp + cts-junit \ + CtsJdwp # Depend on the full package paths rather than the phony targets to avoid # rebuilding the packages every time. @@ -73,24 +73,30 @@ CTS_CORE_CASES := $(foreach pkg,$(CTS_CORE_CASE_LIST),$(call intermediates-dir-f CTS_TEST_JAR_FILES := $(foreach c,$(CTS_TEST_JAR_LIST),$(call intermediates-dir-for,JAVA_LIBRARIES,$(c))/javalib.jar) -include cts/CtsTestCaseList.mk -CTS_CASE_LIST := $(CTS_CORE_CASE_LIST) $(CTS_TEST_CASE_LIST) # A module may have mutliple installed files (e.g. split apks) CTS_CASE_LIST_APKS := -CTS_CASE_LIST_APKS_DIR := $(cts_dir)/$(cts_name)/repository/testcases/ -$(foreach m, $(CTS_CASE_LIST),\ +$(foreach m, $(CTS_TEST_CASE_LIST),\ + $(foreach fp, $(ALL_MODULES.$(m).BUILT_INSTALLED),\ + $(eval pair := $(subst :,$(space),$(fp)))\ + $(eval CTS_CASE_LIST_APKS += $(CTS_TESTCASES_OUT)/$(notdir $(word 2,$(pair))))))\ +$(foreach m, $(CTS_CORE_CASE_LIST),\ $(foreach fp, $(ALL_MODULES.$(m).BUILT_INSTALLED),\ $(eval pair := $(subst :,$(space),$(fp)))\ $(eval built := $(word 1,$(pair)))\ - $(eval installed := $(CTS_CASE_LIST_APKS_DIR)/$(notdir $(word 2,$(pair))))\ + $(eval installed := $(CTS_TESTCASES_OUT)/$(notdir $(word 2,$(pair))))\ $(eval $(call copy-one-file, $(built), $(installed)))\ $(eval CTS_CASE_LIST_APKS += $(installed)))) -CTS_SHARED_LIBS := \ - $(HOST_LIBRARY_PATH)/libc++$(HOST_SHLIB_SUFFIX) +CTS_CASE_LIST_JARS := +$(foreach m, $(CTS_TEST_JAR_LIST),\ + $(eval CTS_CASE_LIST_JARS += $(CTS_TESTCASES_OUT)/$(m).jar)) + +CTS_SHARED_LIBS := DEFAULT_TEST_PLAN := $(cts_dir)/$(cts_name)/resource/plans -$(cts_dir)/all_cts_files_stamp: $(CTS_CORE_CASES) $(CTS_TEST_CASES) $(CTS_CASE_LIST_APKS) $(JUNIT_HOST_JAR) $(HOSTTESTLIB_JAR) $(CTS_HOST_LIBRARY_JARS) $(TF_JAR) $(VMTESTSTF_JAR) $(CTS_TF_JAR) $(CTS_TF_EXEC_PATH) $(CTS_TF_README_PATH) $(ACP) $(CTS_TEST_JAR_FILES) $(CTS_SHARED_LIBS) +$(cts_dir)/all_cts_files_stamp: $(CTS_CORE_CASES) $(CTS_TEST_JAR_FILES) $(CTS_TEST_CASES) $(CTS_CASE_LIST_APKS) $(CTS_CASE_LIST_JARS) $(JUNIT_HOST_JAR) $(HOSTTESTLIB_JAR) $(CTS_HOST_LIBRARY_JARS) $(TF_JAR) $(VMTESTSTF_JAR) $(CTS_TF_JAR) $(CTS_TF_EXEC_PATH) $(CTS_TF_README_PATH) $(ADDITIONAL_TF_JARS) $(ACP) $(CTS_SHARED_LIBS) + # Make necessary directory for CTS $(hide) mkdir -p $(TMP_DIR) $(hide) mkdir -p $(PRIVATE_DIR)/docs @@ -98,12 +104,9 @@ $(cts_dir)/all_cts_files_stamp: $(CTS_CORE_CASES) $(CTS_TEST_CASES) $(CTS_CASE_L $(hide) mkdir -p $(PRIVATE_DIR)/repository/testcases $(hide) mkdir -p $(PRIVATE_DIR)/repository/plans # Copy executable and JARs to CTS directory - $(hide) $(ACP) -fp $(VMTESTSTF_JAR) $(PRIVATE_DIR)/repository/testcases - $(hide) $(ACP) -fp $(HOSTTESTLIB_JAR) $(CTS_HOST_LIBRARY_JARS) $(TF_JAR) $(CTS_TF_JAR) $(CTS_TF_EXEC_PATH) $(CTS_TF_README_PATH) $(PRIVATE_DIR)/tools + $(hide) $(ACP) -fp $(VMTESTSTF_JAR) $(CTS_TESTCASES_OUT) + $(hide) $(ACP) -fp $(HOSTTESTLIB_JAR) $(CTS_HOST_LIBRARY_JARS) $(TF_JAR) $(CTS_TF_JAR) $(CTS_TF_EXEC_PATH) $(ADDITIONAL_TF_JARS) $(CTS_TF_README_PATH) $(PRIVATE_DIR)/tools $(hide) $(call copy-files-with-structure, $(CTS_SHARED_LIBS),$(HOST_OUT)/,$(PRIVATE_DIR)) -# Change mode of the executables - $(foreach jar,$(CTS_TEST_JAR_LIST),$(call copy-testcase-jar,$(jar))) - $(foreach testcase,$(CTS_TEST_CASES),$(call copy-testcase,$(testcase))) $(hide) touch $@ # Generate the test descriptions for the core-tests @@ -213,7 +216,16 @@ $(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.org.xml: $(CTS_CORE_XMLS $(hide) mkdir -p $(CTS_TESTCASES_OUT) $(call generate-core-test-description,$(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.org,\ cts/tests/core/libcore/org/AndroidManifest.xml,\ - $(CORETESTS_INTERMEDIATES)/javalib.jar,org,\ + $(CORETESTS_INTERMEDIATES)/javalib.jar,\ + org.w3c.domts:\ + org.apache.harmony.security.tests:\ + org.apache.harmony.nio.tests:\ + org.apache.harmony.crypto.tests:\ + org.apache.harmony.regex.tests:\ + org.apache.harmony.luni.tests:\ + org.apache.harmony.tests.internal.net.www.protocol:\ + org.apache.harmony.tests.javax.net:\ + org.json,\ $(TARGET_ARCH),libcore/expectations) $(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.libcore.xml: $(CTS_CORE_XMLS_DEPS) @@ -359,8 +371,7 @@ $(CORE_VM_TEST_TF_DESC): $(HOST_OUT_JAVA_LIBRARIES)/descGen.jar $(JUNIT_HOST_JAR # Generate the default test plan for User. # Usage: buildCts.py <testRoot> <ctsOutputDir> <tempDir> <androidRootDir> <docletPath> -$(DEFAULT_TEST_PLAN): $(cts_dir)/all_cts_files_stamp $(cts_tools_src_dir)/utils/buildCts.py $(HOST_OUT_JAVA_LIBRARIES)/descGen.jar $(CTS_CORE_XMLS) $(CTS_TEST_XMLS) $(CORE_VM_TEST_TF_DESC) | $(ACP) - $(hide) $(ACP) -fp $(CTS_CORE_XMLS) $(CTS_TEST_XMLS) $(CORE_VM_TEST_TF_DESC) $(PRIVATE_DIR)/repository/testcases +$(DEFAULT_TEST_PLAN): $(cts_dir)/all_cts_files_stamp $(cts_tools_src_dir)/utils/buildCts.py $(HOST_OUT_JAVA_LIBRARIES)/descGen.jar $(CTS_CORE_XMLS) $(CTS_TEST_XMLS) $(CORE_VM_TEST_TF_DESC) $(hide) $(cts_tools_src_dir)/utils/buildCts.py cts/tests/tests/ $(PRIVATE_DIR) $(TMP_DIR) \ $(TOP) $(HOST_OUT_JAVA_LIBRARIES)/descGen.jar $(hide) mkdir -p $(dir $@) && touch $@ @@ -382,16 +393,3 @@ $(INTERNAL_CTS_TARGET): $(cts_dir)/all_cts_files_stamp $(DEFAULT_TEST_PLAN) cts: $(INTERNAL_CTS_TARGET) adb $(call dist-for-goals,cts,$(INTERNAL_CTS_TARGET)) - -define copy-testcase - -$(hide) $(ACP) -fp $(1) $(PRIVATE_DIR)/repository/testcases/$(notdir $1) - -endef - -define copy-testcase-jar - -$(hide) $(ACP) -fp $(call intermediates-dir-for,JAVA_LIBRARIES,$(1))/javalib.jar \ - $(PRIVATE_DIR)/repository/testcases/$(1).jar - -endef diff --git a/core/tasks/tools/build_custom_image.mk b/core/tasks/tools/build_custom_image.mk index e59ed42..4dc86aa 100644 --- a/core/tasks/tools/build_custom_image.mk +++ b/core/tasks/tools/build_custom_image.mk @@ -100,6 +100,8 @@ $(my_built_custom_image): $(INTERNAL_USERIMAGES_DEPS) $(my_built_modules) $(my_i $(hide) echo "# Properties from $(PRIVATE_DICT_FILE)" >> $(PRIVATE_INTERMEDIATES)/image_info.txt;\ cat $(PRIVATE_DICT_FILE) >> $(PRIVATE_INTERMEDIATES)/image_info.txt) # Generate the image. + $(if $(filter oem,$(PRIVATE_MOUNT_POINT)), \ + $(hide) echo "oem.buildnumber=$(BUILD_NUMBER)" >> $(PRIVATE_STAGING_DIR)/oem.prop) $(hide) PATH=$(foreach p,$(INTERNAL_USERIMAGES_BINARY_PATHS),$(p):)$$PATH \ ./build/tools/releasetools/build_image.py \ $(PRIVATE_STAGING_DIR) $(PRIVATE_INTERMEDIATES)/image_info.txt $@ diff --git a/core/tasks/tools/package-modules.mk b/core/tasks/tools/package-modules.mk index bd9cf57..a70e644 100644 --- a/core/tasks/tools/package-modules.mk +++ b/core/tasks/tools/package-modules.mk @@ -41,7 +41,7 @@ define copy-tests-in-batch $(hide) $(foreach p, $(1),\ $(eval pair := $(subst :,$(space),$(p)))\ mkdir -p $(dir $(word 2,$(pair)));\ - cp -rf $(word 1,$(pair)) $(word 2,$(pair));) + cp -Rf $(word 1,$(pair)) $(word 2,$(pair));) endef my_package_zip := $(my_staging_dir)/$(my_package_name).zip @@ -58,5 +58,5 @@ $(my_package_zip) : $(my_built_modules) $(call copy-tests-in-batch,$(wordlist 1001,1200,$(PRIVATE_COPY_PAIRS))) $(call copy-tests-in-batch,$(wordlist 1201,9999,$(PRIVATE_COPY_PAIRS))) $(hide) $(foreach f, $(PRIVATE_PICKUP_FILES),\ - cp -rf $(f) $(dir $@);) + cp -RfL $(f) $(dir $@);) $(hide) cd $(dir $@) && zip -rq $(notdir $@) * diff --git a/core/tasks/vendor_module_check.mk b/core/tasks/vendor_module_check.mk index d8e8ec7..910c8b7 100644 --- a/core/tasks/vendor_module_check.mk +++ b/core/tasks/vendor_module_check.mk @@ -22,8 +22,10 @@ _vendor_owner_whitelist := \ broadcom \ csr \ elan \ + fpc \ google \ htc \ + huawei \ imgtec \ invensense \ intel \ diff --git a/core/version_defaults.mk b/core/version_defaults.mk index cc63286..e384526 100644 --- a/core/version_defaults.mk +++ b/core/version_defaults.mk @@ -41,7 +41,7 @@ ifeq "" "$(PLATFORM_VERSION)" # which is the version that we reveal to the end user. # Update this value when the platform version changes (rather # than overriding it somewhere else). Can be an arbitrary string. - PLATFORM_VERSION := 5.1.1 + PLATFORM_VERSION := M endif ifeq "" "$(PLATFORM_SDK_VERSION)" @@ -53,13 +53,13 @@ ifeq "" "$(PLATFORM_SDK_VERSION)" # intermediate builds). During development, this number remains at the # SDK version the branch is based on and PLATFORM_VERSION_CODENAME holds # the code-name of the new development work. - PLATFORM_SDK_VERSION := 22 + PLATFORM_SDK_VERSION := 23 endif ifeq "" "$(PLATFORM_VERSION_CODENAME)" # This is the current development code-name, if the build is not a final # release build. If this is a final release build, it is simply "REL". - PLATFORM_VERSION_CODENAME := REL + PLATFORM_VERSION_CODENAME := MNC # This is all of the development codenames that are active. Should be either # the same as PLATFORM_VERSION_CODENAME or a comma-separated list of additional @@ -67,6 +67,23 @@ ifeq "" "$(PLATFORM_VERSION_CODENAME)" PLATFORM_VERSION_ALL_CODENAMES := $(PLATFORM_VERSION_CODENAME) endif +ifeq "REL" "$(PLATFORM_VERSION_CODENAME)" + PLATFORM_PREVIEW_SDK_VERSION := 0 +else + ifeq "" "$(PLATFORM_PREVIEW_SDK_VERSION)" + # This is the definition of a preview SDK version over and above the current + # platform SDK version. Unlike the platform SDK version, a higher value + # for preview SDK version does NOT mean that all prior preview APIs are + # included. Packages reading this value to determine compatibility with + # known APIs should check that this value is precisely equal to the preview + # SDK version the package was built for, otherwise it should fall back to + # assuming the device can only support APIs as of the previous official + # public release. + # This value will always be 0 for release builds. + PLATFORM_PREVIEW_SDK_VERSION := 2 + endif +endif + ifeq "" "$(DEFAULT_APP_TARGET_SDK)" # This is the default minSdkVersion and targetSdkVersion to use for # all .apks created by the build system. It can be overridden by explicitly |