diff options
Diffstat (limited to 'core')
54 files changed, 1467 insertions, 341 deletions
diff --git a/core/Makefile b/core/Makefile index 6fcd394..43be804 100644 --- a/core/Makefile +++ b/core/Makefile @@ -22,7 +22,7 @@ endif # src:dest pair is the first one to match the same dest" #$(1): the src:dest pair define check-product-copy-files -$(if $(filter %.apk, $(1)),$(error \ +$(if $(filter %.apk, $(call word-colon, 2, $(1))),$(error \ Prebuilt apk found in PRODUCT_COPY_FILES: $(1), use BUILD_PREBUILT instead!)) endef # filter out the duplicate <source file>:<dest file> pairs. @@ -109,7 +109,7 @@ BUILD_VERSION_TAGS := $(subst $(space),$(comma),$(sort $(BUILD_VERSION_TAGS))) 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) -# The string used to uniquely identify this build; used by the OTA server. +# The string used to uniquely identify the combined build and product; used by the OTA server. ifeq (,$(strip $(BUILD_FINGERPRINT))) ifneq ($(filter eng.%,$(BUILD_NUMBER)),) # Trim down BUILD_FINGERPRINT: the default BUILD_NUMBER makes it easily exceed @@ -124,6 +124,22 @@ ifneq ($(words $(BUILD_FINGERPRINT)),1) $(error BUILD_FINGERPRINT cannot contain spaces: "$(BUILD_FINGERPRINT)") endif +# The string used to uniquely identify the system build; used by the OTA server. +# This purposefully excludes any product-specific variables. +ifeq (,$(strip $(BUILD_THUMBPRINT))) + BUILD_THUMBPRINT := $(PLATFORM_VERSION)/$(BUILD_ID)/$(BUILD_NUMBER):$(TARGET_BUILD_VARIANT)/$(BUILD_VERSION_TAGS) +endif +ifneq ($(words $(BUILD_THUMBPRINT)),1) + $(error BUILD_THUMBPRINT cannot contain spaces: "$(BUILD_THUMBPRINT)") +endif + +KNOWN_OEM_THUMBPRINT_PROPERTIES := \ + ro.product.brand \ + ro.product.name \ + ro.product.device +OEM_THUMBPRINT_PROPERTIES := $(filter $(KNOWN_OEM_THUMBPRINT_PROPERTIES),\ + $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_OEM_PROPERTIES)) + # Display parameters shown under Settings -> About Phone ifeq ($(TARGET_BUILD_VARIANT),user) # User builds should show: @@ -172,10 +188,17 @@ 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) @echo Target buildinfo: $@ @mkdir -p $(dir $@) + $(hide) echo > $@ +ifneq ($(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_OEM_PROPERTIES),) + $(hide) echo "#" >> $@; \ + echo "# PRODUCT_OEM_PROPERTIES" >> $@; \ + echo "#" >> $@; + $(hide) $(foreach prop,$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_OEM_PROPERTIES), \ + echo "import /oem/oem.prop $(prop)" >> $@;) +endif $(hide) TARGET_BUILD_TYPE="$(TARGET_BUILD_VARIANT)" \ TARGET_DEVICE="$(TARGET_DEVICE)" \ PRODUCT_NAME="$(TARGET_PRODUCT)" \ @@ -192,9 +215,11 @@ $(INSTALLED_BUILD_PROP_TARGET): $(BUILDINFO_SH) $(INTERNAL_BUILD_ID_MAKEFILE) $( PLATFORM_VERSION="$(PLATFORM_VERSION)" \ PLATFORM_SDK_VERSION="$(PLATFORM_SDK_VERSION)" \ PLATFORM_VERSION_CODENAME="$(PLATFORM_VERSION_CODENAME)" \ + PLATFORM_VERSION_ALL_CODENAMES="$(PLATFORM_VERSION_ALL_CODENAMES)" \ BUILD_VERSION_TAGS="$(BUILD_VERSION_TAGS)" \ TARGET_BOOTLOADER_BOARD_NAME="$(TARGET_BOOTLOADER_BOARD_NAME)" \ BUILD_FINGERPRINT="$(BUILD_FINGERPRINT)" \ + $(if $(OEM_THUMBPRINT_PROPERTIES),BUILD_THUMBPRINT="$(BUILD_THUMBPRINT)") \ TARGET_BOARD_PLATFORM="$(TARGET_BOARD_PLATFORM)" \ TARGET_CPU_ABI_LIST="$(TARGET_CPU_ABI_LIST)" \ TARGET_CPU_ABI_LIST_32_BIT="$(TARGET_CPU_ABI_LIST_32_BIT)" \ @@ -202,7 +227,7 @@ $(INSTALLED_BUILD_PROP_TARGET): $(BUILDINFO_SH) $(INTERNAL_BUILD_ID_MAKEFILE) $( TARGET_CPU_ABI="$(TARGET_CPU_ABI)" \ TARGET_CPU_ABI2="$(TARGET_CPU_ABI2)" \ TARGET_AAPT_CHARACTERISTICS="$(TARGET_AAPT_CHARACTERISTICS)" \ - bash $(BUILDINFO_SH) > $@ + bash $(BUILDINFO_SH) >> $@ $(hide) $(foreach file,$(system_prop_file), \ if [ -f "$(file)" ]; then \ echo "#" >> $@; \ @@ -218,11 +243,27 @@ $(INSTALLED_BUILD_PROP_TARGET): $(BUILDINFO_SH) $(INTERNAL_BUILD_ID_MAKEFILE) $( echo "#" >> $@; ) $(hide) $(foreach line,$(ADDITIONAL_BUILD_PROPERTIES), \ echo "$(line)" >> $@;) - $(hide) build/tools/post_process_props.py $@ + $(hide) build/tools/post_process_props.py $@ $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SYSTEM_PROPERTY_BLACKLIST) build_desc := # ----------------------------------------------------------------- +# vendor build.prop +# +# For verifying that the vendor build is what we thing it is +ifdef BOARD_VENDORIMAGE_FILE_SYSTEM_TYPE +INSTALLED_VENDOR_BUILD_PROP_TARGET := $(TARGET_OUT_VENDOR)/build.prop +ALL_DEFAULT_INSTALLED_MODULES += $(INSTALLED_VENDOR_BUILD_PROP_TARGET) +$(INSTALLED_VENDOR_BUILD_PROP_TARGET): $(INSTALLED_BUILD_PROP_TARGET) + @echo Target vendor buildinfo: $@ + @mkdir -p $(dir $@) + $(hide) echo > $@ + $(hide) echo ro.vendor.build.date=`date`>>$@ + $(hide) echo ro.vendor.build.date.utc=`date +%s`>>$@ + $(hide) echo ro.vendor.build.fingerprint="$(BUILD_FINGERPRINT)">>$@ +endif + +# ----------------------------------------------------------------- # sdk-build.prop # # There are certain things in build.prop that we don't want to @@ -459,18 +500,33 @@ bootimage-nodeps: $(MKEXT2IMG) @echo "make $@: ignoring dependencies" $(hide) $(MKEXT2BOOTIMG) $(INTERNAL_BOOTIMAGE_ARGS) --output $(INSTALLED_BOOTIMAGE_TARGET) -else # TARGET_BOOTIMAGE_USE_EXT2 != true +else ifeq (true,$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_VERITY)) # TARGET_BOOTIMAGE_USE_EXT2 != true + +$(INSTALLED_BOOTIMAGE_TARGET): $(MKBOOTIMG) $(INTERNAL_BOOTIMAGE_FILES) $(BOOT_SIGNER) + $(call pretty,"Target boot image: $@") + $(hide) $(MKBOOTIMG) $(INTERNAL_BOOTIMAGE_ARGS) $(BOARD_MKBOOTIMG_ARGS) --output $@ + $(BOOT_SIGNER) /boot $@ $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_VERITY_SIGNING_KEY) $@ + $(hide) $(call assert-max-image-size,$@,$(BOARD_BOOTIMAGE_PARTITION_SIZE)) + +.PHONY: bootimage-nodeps +bootimage-nodeps: $(MKBOOTIMG) $(BOOT_SIGNER) + @echo "make $@: ignoring dependencies" + $(hide) $(MKBOOTIMG) $(INTERNAL_BOOTIMAGE_ARGS) $(BOARD_MKBOOTIMG_ARGS) --output $(INSTALLED_BOOTIMAGE_TARGET) + $(BOOT_SIGNER) /boot $(INSTALLED_BOOTIMAGE_TARGET) $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_VERITY_SIGNING_KEY) $(INSTALLED_BOOTIMAGE_TARGET) + $(hide) $(call assert-max-image-size,$(INSTALLED_BOOTIMAGE_TARGET),$(BOARD_BOOTIMAGE_PARTITION_SIZE)) + +else # PRODUCT_SUPPORTS_VERITY != true $(INSTALLED_BOOTIMAGE_TARGET): $(MKBOOTIMG) $(INTERNAL_BOOTIMAGE_FILES) $(call pretty,"Target boot image: $@") $(hide) $(MKBOOTIMG) $(INTERNAL_BOOTIMAGE_ARGS) $(BOARD_MKBOOTIMG_ARGS) --output $@ - $(hide) $(call assert-max-image-size,$@,$(BOARD_BOOTIMAGE_PARTITION_SIZE),raw) + $(hide) $(call assert-max-image-size,$@,$(BOARD_BOOTIMAGE_PARTITION_SIZE)) .PHONY: bootimage-nodeps bootimage-nodeps: $(MKBOOTIMG) @echo "make $@: ignoring dependencies" $(hide) $(MKBOOTIMG) $(INTERNAL_BOOTIMAGE_ARGS) $(BOARD_MKBOOTIMG_ARGS) --output $(INSTALLED_BOOTIMAGE_TARGET) - $(hide) $(call assert-max-image-size,$(INSTALLED_BOOTIMAGE_TARGET),$(BOARD_BOOTIMAGE_PARTITION_SIZE),raw) + $(hide) $(call assert-max-image-size,$(INSTALLED_BOOTIMAGE_TARGET),$(BOARD_BOOTIMAGE_PARTITION_SIZE)) endif # TARGET_BOOTIMAGE_USE_EXT2 @@ -623,12 +679,21 @@ ifneq (true,$(TARGET_USERIMAGES_SPARSE_EXT_DISABLED)) endif ifeq ($(INTERNAL_USERIMAGES_USE_EXT),true) -INTERNAL_USERIMAGES_DEPS := $(MKEXTUSERIMG) $(MAKE_EXT4FS) $(SIMG2IMG) $(E2FSCK) +INTERNAL_USERIMAGES_DEPS := $(SIMG2IMG) +INTERNAL_USERIMAGES_DEPS += $(MKEXTUSERIMG) $(MAKE_EXT4FS) $(E2FSCK) +ifeq ($(TARGET_USERIMAGES_USE_F2FS),true) +INTERNAL_USERIMAGES_DEPS += $(MKF2FSUSERIMG) $(MAKE_F2FS) +endif else INTERNAL_USERIMAGES_DEPS := $(MKYAFFS2) endif + INTERNAL_USERIMAGES_BINARY_PATHS := $(sort $(dir $(INTERNAL_USERIMAGES_DEPS))) +ifeq (true,$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_VERITY)) +INTERNAL_USERIMAGES_DEPS += $(BUILD_VERITY_TREE) $(APPEND2SIMG) $(VERITY_SIGNER) +endif + SELINUX_FC := $(TARGET_ROOT_OUT)/file_contexts INTERNAL_USERIMAGES_DEPS += $(SELINUX_FC) @@ -637,14 +702,21 @@ INTERNAL_USERIMAGES_DEPS += $(SELINUX_FC) define generate-userimage-prop-dictionary $(if $(INTERNAL_USERIMAGES_EXT_VARIANT),$(hide) echo "fs_type=$(INTERNAL_USERIMAGES_EXT_VARIANT)" >> $(1)) $(if $(BOARD_SYSTEMIMAGE_PARTITION_SIZE),$(hide) echo "system_size=$(BOARD_SYSTEMIMAGE_PARTITION_SIZE)" >> $(1)) +$(if $(BOARD_USERDATAIMAGE_FILE_SYSTEM_TYPE),$(hide) echo "userdata_fs_type=$(BOARD_USERDATAIMAGE_FILE_SYSTEM_TYPE)" >> $(1)) $(if $(BOARD_USERDATAIMAGE_PARTITION_SIZE),$(hide) echo "userdata_size=$(BOARD_USERDATAIMAGE_PARTITION_SIZE)" >> $(1)) $(if $(BOARD_CACHEIMAGE_FILE_SYSTEM_TYPE),$(hide) echo "cache_fs_type=$(BOARD_CACHEIMAGE_FILE_SYSTEM_TYPE)" >> $(1)) $(if $(BOARD_CACHEIMAGE_PARTITION_SIZE),$(hide) echo "cache_size=$(BOARD_CACHEIMAGE_PARTITION_SIZE)" >> $(1)) $(if $(BOARD_VENDORIMAGE_FILE_SYSTEM_TYPE),$(hide) echo "vendor_fs_type=$(BOARD_VENDORIMAGE_FILE_SYSTEM_TYPE)" >> $(1)) $(if $(BOARD_VENDORIMAGE_PARTITION_SIZE),$(hide) echo "vendor_size=$(BOARD_VENDORIMAGE_PARTITION_SIZE)" >> $(1)) +$(if $(BOARD_OEMIMAGE_PARTITION_SIZE),$(hide) echo "oem_size=$(BOARD_OEMIMAGE_PARTITION_SIZE)" >> $(1)) $(if $(INTERNAL_USERIMAGES_SPARSE_EXT_FLAG),$(hide) echo "extfs_sparse_flag=$(INTERNAL_USERIMAGES_SPARSE_EXT_FLAG)" >> $(1)) $(if $(mkyaffs2_extra_flags),$(hide) echo "mkyaffs2_extra_flags=$(mkyaffs2_extra_flags)" >> $(1)) $(hide) echo "selinux_fc=$(SELINUX_FC)" >> $(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)) +$(if $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SYSTEM_VERITY_PARTITION),$(hide) echo "system_verity_block_device=$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SYSTEM_VERITY_PARTITION)" >> $(1)) +$(if $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_VENDOR_VERITY_PARTITION),$(hide) echo "vendor_verity_block_device=$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_VENDOR_VERITY_PARTITION)" >> $(1)) $(if $(2),$(hide) $(foreach kv,$(2),echo "$(kv)" >> $(1);)) endef @@ -664,11 +736,32 @@ recovery_build_prop := $(INSTALLED_BUILD_PROP_TARGET) recovery_binary := $(call intermediates-dir-for,EXECUTABLES,recovery,,,$(TARGET_PREFER_32_BIT))/recovery recovery_resources_common := $(call include-path-for, recovery)/res -# Select the 18x32 font on high-density devices; and the 12x22 font on -# other devices. Note that the font selected here can be overridden -# for a particular device by putting a font.png in its private -# recovery resources. -ifneq (,$(filter xxhdpi xhdpi,$(subst $(comma),$(space),$(PRODUCT_AAPT_CONFIG)))) +# Set recovery_density to the density bucket of the device. +recovery_density := unknown +ifneq (,$(PRODUCT_AAPT_PREF_CONFIG)) +# If PRODUCT_AAPT_PREF_CONFIG includes a dpi bucket, then use that value. +recovery_density := $(filter %dpi,$(PRODUCT_AAPT_PREF_CONFIG)) +else +# Otherwise, use the highest density that appears in PRODUCT_AAPT_CONFIG. +# Order is important here; we'll take the first one that's found. +recovery_densities := $(filter $(PRODUCT_AAPT_CONFIG_SP),xxxhdpi xxhdpi xhdpi hdpi tvdpi mdpi ldpi) +ifneq (,$(recovery_densities)) +recovery_density := $(word 1,$(recovery_densities)) +endif +endif + +ifneq (,$(wildcard $(recovery_resources_common)-$(recovery_density))) +recovery_resources_common := $(recovery_resources_common)-$(recovery_density) +else +recovery_resources_common := $(recovery_resources_common)-xhdpi +endif + +# Select the 18x32 font on high-density devices (xhdpi and up); and +# the 12x22 font on other devices. Note that the font selected here +# can be overridden for a particular device by putting a font.png in +# its private recovery resources. + +ifneq (,$(filter xxxhdpi xxhdpi xhdpi,$(recovery_density))) recovery_font := $(call include-path-for, recovery)/fonts/18x32.png else recovery_font := $(call include-path-for, recovery)/fonts/12x22.png @@ -750,7 +843,9 @@ $(INSTALLED_RECOVERYIMAGE_TARGET): $(MKBOOTFS) $(MKBOOTIMG) $(MINIGZIP) \ $(hide) cp -f $(recovery_sepolicy) $(TARGET_RECOVERY_ROOT_OUT)/sepolicy $(hide) -cp $(TARGET_ROOT_OUT)/init.recovery.*.rc $(TARGET_RECOVERY_ROOT_OUT)/ $(hide) cp -f $(recovery_binary) $(TARGET_RECOVERY_ROOT_OUT)/sbin/ - $(hide) cp -rf $(recovery_resources_common) $(TARGET_RECOVERY_ROOT_OUT)/ + $(hide) mkdir -p $(TARGET_RECOVERY_ROOT_OUT)/res + $(hide) rm -rf $(TARGET_RECOVERY_ROOT_OUT)/res/* + $(hide) cp -rf $(recovery_resources_common)/* $(TARGET_RECOVERY_ROOT_OUT)/res $(hide) cp -f $(recovery_font) $(TARGET_RECOVERY_ROOT_OUT)/res/images/font.png $(hide) $(foreach item,$(recovery_resources_private), \ cp -rf $(item) $(TARGET_RECOVERY_ROOT_OUT)/) @@ -761,7 +856,10 @@ $(INSTALLED_RECOVERYIMAGE_TARGET): $(MKBOOTFS) $(MKBOOTIMG) $(MINIGZIP) \ > $(TARGET_RECOVERY_ROOT_OUT)/default.prop $(hide) $(MKBOOTFS) $(TARGET_RECOVERY_ROOT_OUT) | $(MINIGZIP) > $(recovery_ramdisk) $(hide) $(MKBOOTIMG) $(INTERNAL_RECOVERYIMAGE_ARGS) $(BOARD_MKBOOTIMG_ARGS) --output $@ - $(hide) $(call assert-max-image-size,$@,$(BOARD_RECOVERYIMAGE_PARTITION_SIZE),raw) +ifeq (true,$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_VERITY)) + $(BOOT_SIGNER) /recovery $@ $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_VERITY_SIGNING_KEY) $@ +endif + $(hide) $(call assert-max-image-size,$@,$(BOARD_RECOVERYIMAGE_PARTITION_SIZE)) @echo ----- Made recovery image: $@ -------- $(RECOVERY_RESOURCE_ZIP): $(INSTALLED_RECOVERYIMAGE_TARGET) @@ -828,14 +926,36 @@ systemimage_intermediates := \ $(call intermediates-dir-for,PACKAGING,systemimage) BUILT_SYSTEMIMAGE := $(systemimage_intermediates)/system.img +# Create symlink /system/vendor to /vendor if necessary. +ifdef BOARD_VENDORIMAGE_FILE_SYSTEM_TYPE +define create-system-vendor-symlink +$(hide) if [ -d $(TARGET_OUT)/vendor ] && [ ! -h $(TARGET_OUT)/vendor ]; then \ + echo 'Non-symlink $(TARGET_OUT)/vendor detected!' 1>&2; \ + echo 'You cannot install files to $(TARGET_OUT)/vendor while building a separate vendor.img!' 1>&2; \ + exit 1; \ +fi +$(hide) ln -sf /vendor $(TARGET_OUT)/vendor +endef +else +define create-system-vendor-symlink +endef +endif + # $(1): output file define build-systemimage-target @echo "Target system fs image: $(1)" + $(call create-system-vendor-symlink) @mkdir -p $(dir $(1)) $(systemimage_intermediates) && rm -rf $(systemimage_intermediates)/system_image_info.txt - $(call generate-userimage-prop-dictionary, $(systemimage_intermediates)/system_image_info.txt, skip_fsck=true) + $(call generate-userimage-prop-dictionary, $(systemimage_intermediates)/system_image_info.txt, \ + skip_fsck=true) $(hide) PATH=$(foreach p,$(INTERNAL_USERIMAGES_BINARY_PATHS),$(p):)$$PATH \ ./build/tools/releasetools/build_image.py \ - $(TARGET_OUT) $(systemimage_intermediates)/system_image_info.txt $(1) + $(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 ;\ + mkdir -p $(DIST_DIR); cp $(INSTALLED_FILES_FILE) $(DIST_DIR)/installed-files-rescued.txt; \ + exit 1 ) endef $(BUILT_SYSTEMIMAGE): $(FULL_SYSTEMIMAGE_DEPS) $(INSTALLED_FILES_FILE) @@ -865,7 +985,7 @@ endif $(INSTALLED_SYSTEMIMAGE): $(BUILT_SYSTEMIMAGE) $(RECOVERY_FROM_BOOT_PATCH) | $(ACP) @echo "Install system fs image: $@" $(copy-file-to-target) - $(hide) $(call assert-max-image-size,$@ $(RECOVERY_FROM_BOOT_PATCH),$(BOARD_SYSTEMIMAGE_PARTITION_SIZE),yaffs) + $(hide) $(call assert-max-image-size,$@ $(RECOVERY_FROM_BOOT_PATCH),$(BOARD_SYSTEMIMAGE_PARTITION_SIZE)) systemimage: $(INSTALLED_SYSTEMIMAGE) @@ -874,7 +994,7 @@ systemimage-nodeps snod: $(filter-out systemimage-nodeps snod,$(MAKECMDGOALS)) \ | $(INTERNAL_USERIMAGES_DEPS) @echo "make $@: ignoring dependencies" $(call build-systemimage-target,$(INSTALLED_SYSTEMIMAGE)) - $(hide) $(call assert-max-image-size,$(INSTALLED_SYSTEMIMAGE),$(BOARD_SYSTEMIMAGE_PARTITION_SIZE),yaffs) + $(hide) $(call assert-max-image-size,$(INSTALLED_SYSTEMIMAGE),$(BOARD_SYSTEMIMAGE_PARTITION_SIZE)) ifneq (,$(filter systemimage-nodeps snod, $(MAKECMDGOALS))) ifeq (true,$(WITH_DEXPREOPT)) @@ -885,10 +1005,11 @@ endif ####### ## system tarball define build-systemtarball-target - $(call pretty,"Target system fs tarball: $(INSTALLED_SYSTEMTARBALL_TARGET)") - $(MKTARBALL) $(FS_GET_STATS) \ - $(PRODUCT_OUT) system $(PRIVATE_SYSTEM_TAR) \ - $(INSTALLED_SYSTEMTARBALL_TARGET) + $(call pretty,"Target system fs tarball: $(INSTALLED_SYSTEMTARBALL_TARGET)") + $(call create-system-vendor-symlink) + $(MKTARBALL) $(FS_GET_STATS) \ + $(PRODUCT_OUT) system $(PRIVATE_SYSTEM_TAR) \ + $(INSTALLED_SYSTEMTARBALL_TARGET) endef ifndef SYSTEM_TARBALL_FORMAT @@ -909,11 +1030,6 @@ systemtarball-nodeps: $(FS_GET_STATS) \ .PHONY: stnod stnod: systemtarball-nodeps -# For platform-java goal, add platform as well -ifneq (,$(filter platform-java, $(MAKECMDGOALS))) -PLATFORM_ZIP_ADD_JAVA := true -endif - ####### ## platform.zip: system, plus other files to be used in PDK fusion build, ## in a zip file @@ -930,7 +1046,11 @@ $(INSTALLED_PLATFORM_ZIP) : $(INTERNAL_SYSTEMIMAGE_FILES) $(TARGET_COPY_OUT_SYSTEM) \ $(patsubst $(PRODUCT_OUT)/%, %, $(TARGET_OUT_NOTICE_FILES)) \ $(addprefix symbols/,$(PDK_SYMBOL_FILES_LIST)) -ifeq (true,$(PLATFORM_ZIP_ADD_JAVA)) +ifdef BOARD_VENDORIMAGE_FILE_SYSTEM_TYPE + $(hide) cd $(dir $@) && zip -qry $(notdir $@) \ + $(TARGET_COPY_OUT_VENDOR) +endif +ifneq ($(PDK_PLATFORM_JAVA_ZIP_CONTENTS),) $(hide) cd $(OUT_DIR) && zip -qry $(patsubst $(OUT_DIR)/%,%,$@) $(PDK_PLATFORM_JAVA_ZIP_CONTENTS) endif ifneq ($(PDK_PLATFORM_ZIP_PRODUCT_BINARIES),) @@ -1002,7 +1122,7 @@ define build-userdataimage-target $(hide) PATH=$(foreach p,$(INTERNAL_USERIMAGES_BINARY_PATHS),$(p):)$$PATH \ ./build/tools/releasetools/build_image.py \ $(TARGET_OUT_DATA) $(userdataimage_intermediates)/userdata_image_info.txt $(INSTALLED_USERDATAIMAGE_TARGET) - $(hide) $(call assert-max-image-size,$(INSTALLED_USERDATAIMAGE_TARGET),$(BOARD_USERDATAIMAGE_PARTITION_SIZE),yaffs) + $(hide) $(call assert-max-image-size,$(INSTALLED_USERDATAIMAGE_TARGET),$(BOARD_USERDATAIMAGE_PARTITION_SIZE)) endef # We just build this directly to the install location. @@ -1057,7 +1177,7 @@ define build-cacheimage-target $(hide) PATH=$(foreach p,$(INTERNAL_USERIMAGES_BINARY_PATHS),$(p):)$$PATH \ ./build/tools/releasetools/build_image.py \ $(TARGET_OUT_CACHE) $(cacheimage_intermediates)/cache_image_info.txt $(INSTALLED_CACHEIMAGE_TARGET) - $(hide) $(call assert-max-image-size,$(INSTALLED_CACHEIMAGE_TARGET),$(BOARD_CACHEIMAGE_PARTITION_SIZE),yaffs) + $(hide) $(call assert-max-image-size,$(INSTALLED_CACHEIMAGE_TARGET),$(BOARD_CACHEIMAGE_PARTITION_SIZE)) endef # We just build this directly to the install location. @@ -1076,7 +1196,12 @@ endif # BOARD_CACHEIMAGE_FILE_SYSTEM_TYPE # vendor partition image ifdef BOARD_VENDORIMAGE_FILE_SYSTEM_TYPE INTERNAL_VENDORIMAGE_FILES := \ - $(filter $(TARGET_OUT_VENDOR)/%,$(ALL_DEFAULT_INSTALLED_MODULES)) + $(filter $(TARGET_OUT_VENDOR)/%,\ + $(ALL_DEFAULT_INSTALLED_MODULES)\ + $(ALL_PDK_FUSION_FILES)) + +# platform.zip depends on $(INTERNAL_VENDORIMAGE_FILES). +$(INSTALLED_PLATFORM_ZIP) : $(INTERNAL_VENDORIMAGE_FILES) vendorimage_intermediates := \ $(call intermediates-dir-for,PACKAGING,vendor) @@ -1090,7 +1215,7 @@ define build-vendorimage-target $(hide) PATH=$(foreach p,$(INTERNAL_USERIMAGES_BINARY_PATHS),$(p):)$$PATH \ ./build/tools/releasetools/build_image.py \ $(TARGET_OUT_VENDOR) $(vendorimage_intermediates)/vendor_image_info.txt $(INSTALLED_VENDORIMAGE_TARGET) - $(hide) $(call assert-max-image-size,$(INSTALLED_VENDORIMAGE_TARGET),$(BOARD_VENDORIMAGE_PARTITION_SIZE),yaffs) + $(hide) $(call assert-max-image-size,$(INSTALLED_VENDORIMAGE_TARGET),$(BOARD_VENDORIMAGE_PARTITION_SIZE)) endef # We just build this directly to the install location. @@ -1120,7 +1245,11 @@ DISTTOOLS := $(HOST_OUT_EXECUTABLES)/minigzip \ $(HOST_OUT_EXECUTABLES)/mkuserimg.sh \ $(HOST_OUT_EXECUTABLES)/make_ext4fs \ $(HOST_OUT_EXECUTABLES)/simg2img \ - $(HOST_OUT_EXECUTABLES)/e2fsck + $(HOST_OUT_EXECUTABLES)/e2fsck \ + $(HOST_OUT_EXECUTABLES)/build_verity_tree \ + $(HOST_OUT_EXECUTABLES)/verity_signer \ + $(HOST_OUT_EXECUTABLES)/append2simg \ + $(HOST_OUT_EXECUTABLES)/boot_signer OTATOOLS := $(DISTTOOLS) \ $(HOST_OUT_EXECUTABLES)/aapt @@ -1276,18 +1405,29 @@ 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 +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 +endif $(call generate-userimage-prop-dictionary, $(zip_root)/META/misc_info.txt) + $(hide) ./build/tools/releasetools/make_recovery_patch $(zip_root) $(zip_root) @# Zip everything up, preserving symlinks $(hide) (cd $(zip_root) && zip -qry ../$(notdir $@) .) - @# Run fs_config on all the system, boot ramdisk, and recovery ramdisk files in the zip, and save the output + @# Run fs_config on all the system, vendor, boot ramdisk, + @# and recovery ramdisk files in the zip, and save the output $(hide) zipinfo -1 $@ | awk 'BEGIN { FS="SYSTEM/" } /^SYSTEM\// {print "system/" $$2}' | $(HOST_OUT_EXECUTABLES)/fs_config -C -S $(SELINUX_FC) > $(zip_root)/META/filesystem_config.txt + $(hide) zipinfo -1 $@ | awk 'BEGIN { FS="VENDOR/" } /^VENDOR\// {print "vendor/" $$2}' | $(HOST_OUT_EXECUTABLES)/fs_config -C -S $(SELINUX_FC) > $(zip_root)/META/vendor_filesystem_config.txt $(hide) zipinfo -1 $@ | awk 'BEGIN { FS="BOOT/RAMDISK/" } /^BOOT\/RAMDISK\// {print $$2}' | $(HOST_OUT_EXECUTABLES)/fs_config -C -S $(SELINUX_FC) > $(zip_root)/META/boot_filesystem_config.txt $(hide) zipinfo -1 $@ | awk 'BEGIN { FS="RECOVERY/RAMDISK/" } /^RECOVERY\/RAMDISK\// {print $$2}' | $(HOST_OUT_EXECUTABLES)/fs_config -C -S $(SELINUX_FC) > $(zip_root)/META/recovery_filesystem_config.txt $(hide) (cd $(zip_root) && zip -q ../$(notdir $@) META/*filesystem_config.txt) + $(hide) ./build/tools/releasetools/add_img_to_target_files -p $(HOST_OUT) $@ .PHONY: target-files-package target-files-package: $(BUILT_TARGET_FILES_PACKAGE) +ifneq ($(filter $(MAKECMDGOALS),target-files-package),) +$(call dist-for-goals, target-files-package, $(BUILT_TARGET_FILES_PACKAGE)) +endif ifneq ($(TARGET_PRODUCT),sdk) ifeq ($(filter generic%,$(TARGET_DEVICE)),) @@ -1311,13 +1451,20 @@ $(INTERNAL_OTA_PACKAGE_TARGET): $(BUILT_TARGET_FILES_PACKAGE) $(DISTTOOLS) @echo "Package OTA: $@" $(hide) MKBOOTIMG=$(MKBOOTIMG) \ ./build/tools/releasetools/ota_from_target_files -v \ + --block \ -p $(HOST_OUT) \ -k $(KEY_CERT_PAIR) \ + $(if $(OEM_OTA_CONFIG), -o $(OEM_OTA_CONFIG)) \ $(BUILT_TARGET_FILES_PACKAGE) $@ .PHONY: otapackage otapackage: $(INTERNAL_OTA_PACKAGE_TARGET) +endif # recovery_fstab is defined +endif # TARGET_NO_KERNEL != true +endif # TARGET_DEVICE != generic* +endif # TARGET_PRODUCT != sdk + # ----------------------------------------------------------------- # The update package @@ -1329,29 +1476,16 @@ name := $(name)-img-$(FILE_NAME_TAG) INTERNAL_UPDATE_PACKAGE_TARGET := $(PRODUCT_OUT)/$(name).zip -ifeq ($(TARGET_RELEASETOOLS_EXTENSIONS),) -# default to common dir for device vendor -$(INTERNAL_UPDATE_PACKAGE_TARGET): extensions := $(TARGET_DEVICE_DIR)/../common -else -$(INTERNAL_UPDATE_PACKAGE_TARGET): extensions := $(TARGET_RELEASETOOLS_EXTENSIONS) -endif - $(INTERNAL_UPDATE_PACKAGE_TARGET): $(BUILT_TARGET_FILES_PACKAGE) $(DISTTOOLS) @echo "Package: $@" $(hide) MKBOOTIMG=$(MKBOOTIMG) \ ./build/tools/releasetools/img_from_target_files -v \ - -s $(extensions) \ -p $(HOST_OUT) \ $(BUILT_TARGET_FILES_PACKAGE) $@ .PHONY: updatepackage updatepackage: $(INTERNAL_UPDATE_PACKAGE_TARGET) -endif # recovery_fstab is defined -endif # TARGET_NO_KERNEL != true -endif # TARGET_DEVICE != generic* -endif # TARGET_PRODUCT != sdk - # ----------------------------------------------------------------- # A zip of the symbols directory. Keep the full paths to make it # more obvious where these files came from. @@ -1384,7 +1518,7 @@ $(APPS_ZIP): $(INSTALLED_SYSTEMIMAGE) @echo "Package apps: $@" $(hide) rm -rf $@ $(hide) mkdir -p $(dir $@) - $(hide) zip -qj $@ $(TARGET_OUT_APPS)/* $(TARGET_OUT_APPS_PRIVILEGED)/* + $(hide) zip -qj $@ $(TARGET_OUT_APPS)/*/*.apk $(TARGET_OUT_APPS_PRIVILEGED)/*/*.apk #------------------------------------------------------------------ @@ -1396,7 +1530,7 @@ EMMA_META_ZIP := $(PRODUCT_OUT)/emma_meta.zip # the dependency will be set up later in build/core/main.mk. $(EMMA_META_ZIP) : @echo "Collecting Emma coverage meta files." - $(hide) find $(TARGET_COMMON_OUT_ROOT) -name "coverage.em" | \ + $(hide) find $(TARGET_COMMON_OUT_ROOT) $(HOST_COMMON_OUT_ROOT) -name "coverage.em" | \ zip -@ -q $@ endif # EMMA_INSTRUMENT=true @@ -1412,7 +1546,8 @@ $(PROGUARD_DICT_ZIP) : @echo "Packaging Proguard obfuscation dictionary files." $(hide) dict_files=`find $(TARGET_OUT_COMMON_INTERMEDIATES)/APPS -name proguard_dictionary`; \ if [ -n "$$dict_files" ]; then \ - zip -q $@ $$dict_files; \ + unobfuscated_jars=$${dict_files//proguard_dictionary/classes.jar}; \ + zip -q $@ $$dict_files $$unobfuscated_jars; \ else \ touch $(dir $@)/dummy; \ (cd $(dir $@) && zip -q $(notdir $@) dummy); \ @@ -1488,7 +1623,6 @@ ifeq ($(strip $(ATREE_FILES)),) ATREE_FILES := \ $(ALL_PREBUILT) \ $(ALL_COPIED_HEADERS) \ - $(ALL_GENERATED_SOURCES) \ $(ALL_DEFAULT_INSTALLED_MODULES) \ $(INSTALLED_RAMDISK_TARGET) \ $(ALL_DOCS) \ @@ -1500,7 +1634,6 @@ atree_dir := development/build sdk_atree_files := \ $(atree_dir)/sdk.exclude.atree \ - $(atree_dir)/sdk.atree \ $(atree_dir)/sdk-$(HOST_OS)-$(SDK_HOST_ARCH).atree # development/build/sdk-android-<abi>.atree is used to differentiate @@ -1511,6 +1644,14 @@ ifneq (,$(strip $(wildcard $(atree_dir)/sdk-android-$(TARGET_CPU_ABI).atree))) sdk_atree_files += $(atree_dir)/sdk-android-$(TARGET_CPU_ABI).atree endif +ifneq ($(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SDK_ATREE_FILES),) +sdk_atree_files += $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SDK_ATREE_FILES) +else +sdk_atree_files += $(atree_dir)/sdk.atree +endif + +include $(BUILD_SYSTEM)/sdk_font.mk + deps := \ $(target_notice_file_txt) \ $(tools_notice_file_txt) \ @@ -1522,9 +1663,10 @@ deps := \ $(INSTALLED_SDK_BUILD_PROP_TARGET) \ $(INSTALLED_BUILD_PROP_TARGET) \ $(ATREE_FILES) \ - $(atree_dir)/sdk.atree \ + $(sdk_atree_files) \ $(HOST_OUT_EXECUTABLES)/atree \ - $(HOST_OUT_EXECUTABLES)/line_endings + $(HOST_OUT_EXECUTABLES)/line_endings \ + $(SDK_FONT_DEPS) INTERNAL_SDK_TARGET := $(sdk_dir)/$(sdk_name).zip $(INTERNAL_SDK_TARGET): PRIVATE_NAME := $(sdk_name) @@ -1547,6 +1689,7 @@ $(INTERNAL_SDK_TARGET): $(deps) fi; \ done; \ if [ $$FAIL ]; then exit 1; fi + $(hide) echo $(notdir $(SDK_FONT_DEPS)) | tr " " "\n" > $(SDK_FONT_TEMP)/fontsInSdk.txt $(hide) ( \ ATREE_STRIP="strip -x" \ $(HOST_OUT_EXECUTABLES)/atree \ @@ -1562,6 +1705,7 @@ $(INTERNAL_SDK_TARGET): $(deps) -v "TARGET_ARCH=$(TARGET_ARCH)" \ -v "TARGET_CPU_ABI=$(TARGET_CPU_ABI)" \ -v "DLL_EXTENSION=$(HOST_SHLIB_SUFFIX)" \ + -v "FONT_OUT=$(SDK_FONT_TEMP)" \ -o $(PRIVATE_DIR) && \ cp -f $(target_notice_file_txt) \ $(PRIVATE_DIR)/system-images/android-$(PLATFORM_VERSION)/$(TARGET_CPU_ABI)/NOTICE.txt && \ @@ -1588,11 +1732,11 @@ INTERNAL_FINDBUGS_XML_TARGET := $(PRODUCT_OUT)/findbugs.xml INTERNAL_FINDBUGS_HTML_TARGET := $(PRODUCT_OUT)/findbugs.html $(INTERNAL_FINDBUGS_XML_TARGET): $(ALL_FINDBUGS_FILES) @echo UnionBugs: $@ - $(hide) prebuilt/common/findbugs/bin/unionBugs $(ALL_FINDBUGS_FILES) \ + $(hide) $(FINDBUGS_DIR)/unionBugs $(ALL_FINDBUGS_FILES) \ > $@ $(INTERNAL_FINDBUGS_HTML_TARGET): $(INTERNAL_FINDBUGS_XML_TARGET) @echo ConvertXmlToText: $@ - $(hide) prebuilt/common/findbugs/bin/convertXmlToText -html:fancy.xsl \ + $(hide) $(FINDBUGS_DIR)/convertXmlToText -html:fancy.xsl \ $(INTERNAL_FINDBUGS_XML_TARGET) > $@ # ----------------------------------------------------------------- @@ -1604,6 +1748,9 @@ ifneq ($(dont_bother),true) include $(sort $(wildcard $(BUILD_SYSTEM)/tasks/*.mk)) -include $(sort $(wildcard vendor/*/build/tasks/*.mk)) -include $(sort $(wildcard device/*/build/tasks/*.mk)) +# Also the project-specific tasks +-include $(sort $(wildcard vendor/*/*/build/tasks/*.mk)) +-include $(sort $(wildcard device/*/*/build/tasks/*.mk)) endif # ----------------------------------------------------------------- diff --git a/core/android_manifest.mk b/core/android_manifest.mk new file mode 100644 index 0000000..21b95c2 --- /dev/null +++ b/core/android_manifest.mk @@ -0,0 +1,25 @@ +# Handle AndroidManifest.xmls +# Input: LOCAL_MANIFEST_FILE, LOCAL_FULL_MANIFEST_FILE, LOCAL_FULL_LIBS_MANIFEST_FILES +# Output: full_android_manifest + +ifeq ($(strip $(LOCAL_MANIFEST_FILE)),) + LOCAL_MANIFEST_FILE := AndroidManifest.xml +endif +ifdef LOCAL_FULL_MANIFEST_FILE + full_android_manifest := $(LOCAL_FULL_MANIFEST_FILE) +else + full_android_manifest := $(LOCAL_PATH)/$(LOCAL_MANIFEST_FILE) +endif + +# Set up rules to merge library manifest files +ifdef LOCAL_FULL_LIBS_MANIFEST_FILES +main_android_manifest := $(full_android_manifest) +full_android_manifest := $(intermediates.COMMON)/AndroidManifest.xml +$(full_android_manifest): PRIVATE_LIBS_MANIFESTS := $(LOCAL_FULL_LIBS_MANIFEST_FILES) +$(full_android_manifest) : $(main_android_manifest) $(LOCAL_FULL_LIBS_MANIFEST_FILES) + @echo "Merge android manifest files: $@ <-- $^" + @mkdir -p $(dir $@) + $(hide) $(ANDROID_MANIFEST_MERGER) --main $< --libs $(PRIVATE_LIBS_MANIFESTS) \ + --out $@ + +endif diff --git a/core/apicheck_msg_current.txt b/core/apicheck_msg_current.txt index 440e7f8..9abd381 100644 --- a/core/apicheck_msg_current.txt +++ b/core/apicheck_msg_current.txt @@ -7,7 +7,7 @@ To make these errors go away, you have two choices: errors above. 2) You can update current.txt by executing the following command: - make update-api + make %UPDATE_API% To submit the revised current.txt to the main Android repository, you will need approval. diff --git a/core/base_rules.mk b/core/base_rules.mk index 6ab59f3..a709365 100644 --- a/core/base_rules.mk +++ b/core/base_rules.mk @@ -114,6 +114,8 @@ ifeq ($(my_module_path),) else ifeq (true,$(LOCAL_PROPRIETARY_MODULE)) partition_tag := _VENDOR + else ifeq (true,$(LOCAL_OEM_MODULE)) + partition_tag := _OEM else # The definition of should-install-to-system will be different depending # on which goal (e.g., sdk or just droid) is being built. @@ -174,9 +176,15 @@ else built_module_path := $(intermediates) endif LOCAL_BUILT_MODULE := $(built_module_path)/$(my_built_module_stem) -built_module_path := ifneq (true,$(LOCAL_UNINSTALLABLE_MODULE)) + # Apk and its attachments reside in its own subdir. + ifeq ($(LOCAL_MODULE_CLASS),APPS) + # framework-res.apk doesn't like the additional layer. + ifneq ($(LOCAL_NO_STANDARD_LIBRARIES),true) + my_module_path := $(my_module_path)/$(LOCAL_MODULE) + endif + endif LOCAL_INSTALLED_MODULE := $(my_module_path)/$(my_installed_module_stem) endif @@ -198,12 +206,12 @@ aidl_sources := $(addprefix $(TOP_DIR)$(LOCAL_PATH)/, $(aidl_sources)) aidl_preprocess_import := LOCAL_SDK_VERSION:=$(strip $(LOCAL_SDK_VERSION)) ifdef LOCAL_SDK_VERSION -ifeq ($(LOCAL_SDK_VERSION)$(TARGET_BUILD_APPS),current) +ifneq ($(filter current system_current, $(LOCAL_SDK_VERSION)$(TARGET_BUILD_APPS)),) # LOCAL_SDK_VERSION is current and no TARGET_BUILD_APPS aidl_preprocess_import := $(TARGET_OUT_COMMON_INTERMEDIATES)/framework.aidl else aidl_preprocess_import := $(HISTORICAL_SDK_VERSIONS_ROOT)/$(LOCAL_SDK_VERSION)/framework.aidl -endif # !current +endif # not current or system_current else # build against the platform. LOCAL_AIDL_INCLUDES += $(FRAMEWORKS_BASE_JAVA_SRC_DIRS) @@ -230,7 +238,7 @@ event_log_tags := $(addprefix $(LOCAL_PATH)/,$(logtags_sources)) # Emit a java source file with constants for the tags, if # LOCAL_MODULE_CLASS is "APPS" or "JAVA_LIBRARIES". -ifneq ($(strip $(filter $(LOCAL_MODULE_CLASS),APPS JAVA_LIBRARIES)),) +ifneq ($(filter $(LOCAL_MODULE_CLASS),APPS JAVA_LIBRARIES),) logtags_java_sources := $(patsubst %.logtags,%.java,$(addprefix $(intermediates.COMMON)/src/, $(logtags_sources))) logtags_sources := $(addprefix $(TOP_DIR)$(LOCAL_PATH)/, $(logtags_sources)) @@ -386,13 +394,14 @@ else ifeq ($(LOCAL_SDK_VERSION)$(TARGET_BUILD_APPS),current) # LOCAL_SDK_VERSION is current and no TARGET_BUILD_APPS. $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_BOOTCLASSPATH := -bootclasspath $(call java-lib-files,android_stubs_current) +else ifeq ($(LOCAL_SDK_VERSION)$(TARGET_BUILD_APPS),system_current) +$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_BOOTCLASSPATH := -bootclasspath $(call java-lib-files,android_system_stubs_current) else $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_BOOTCLASSPATH := -bootclasspath $(call java-lib-files,sdk_v$(LOCAL_SDK_VERSION)) -endif # current +endif # current or system_current endif # LOCAL_SDK_VERSION endif # TARGET_ $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_RESOURCE_DIR := $(LOCAL_RESOURCE_DIR) -$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_EXTRA_JAR_ARGS := $(extra_jar_args) $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_ASSET_DIR := $(LOCAL_ASSET_DIR) $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_STATIC_JAVA_LIBRARIES := $(full_static_java_libs) @@ -423,10 +432,10 @@ full_java_lib_deps += $(full_static_java_libs) $(LOCAL_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. -LOCAL_APK_LIBRARIES := $(strip $(LOCAL_APK_LIBRARIES)) -ifdef LOCAL_APK_LIBRARIES +apk_libraries := $(sort $(LOCAL_APK_LIBRARIES) $(LOCAL_RES_LIBRARIES)) +ifneq ($(apk_libraries),) link_apk_libraries := \ - $(foreach lib,$(LOCAL_APK_LIBRARIES), \ + $(foreach lib,$(apk_libraries), \ $(call intermediates-dir-for, \ APPS,$(lib),,COMMON)/classes.jar) @@ -454,6 +463,10 @@ ifdef LOCAL_INSTRUMENTATION_FOR full_java_lib_deps += $(link_instr_classes_jar) endif +endif # need_compile_java + +# We may want to add jar manifest or jar resource files even if there is no java code at all. +$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_EXTRA_JAR_ARGS := $(extra_jar_args) jar_manifest_file := ifneq ($(strip $(LOCAL_JAR_MANIFEST)),) jar_manifest_file := $(LOCAL_PATH)/$(LOCAL_JAR_MANIFEST) @@ -462,9 +475,6 @@ else $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_JAR_MANIFEST := endif -endif # need_compile_java - - ########################################################### ## make clean- targets ########################################################### @@ -598,7 +608,7 @@ ifneq (true,$(LOCAL_UNINSTALLABLE_MODULE)) ALL_MODULES.$(my_register_name).INSTALLED := \ $(strip $(ALL_MODULES.$(my_register_name).INSTALLED) $(LOCAL_INSTALLED_MODULE)) ALL_MODULES.$(my_register_name).BUILT_INSTALLED := \ - $(strip $(ALL_MODULES.$(my_register_name).BUILT_INSTALLED)$(LOCAL_BUILT_MODULE):$(LOCAL_INSTALLED_MODULE)) + $(strip $(ALL_MODULES.$(my_register_name).BUILT_INSTALLED) $(LOCAL_BUILT_MODULE):$(LOCAL_INSTALLED_MODULE)) endif ifdef LOCAL_PICKUP_FILES # Files or directories ready to pick up by the build system @@ -622,6 +632,9 @@ endif ifdef LOCAL_2ND_ARCH_VAR_PREFIX ALL_MODULES.$(my_register_name).FOR_2ND_ARCH := true endif +ifdef aidl_sources +ALL_MODULES.$(my_register_name).AIDL_FILES := $(aidl_sources) +endif INSTALLABLE_FILES.$(LOCAL_INSTALLED_MODULE).MODULE := $(my_register_name) diff --git a/core/binary.mk b/core/binary.mk index 750e783..4b545e9 100644 --- a/core/binary.mk +++ b/core/binary.mk @@ -179,6 +179,8 @@ endif ifeq ($(strip $(LOCAL_ADDRESS_SANITIZER)),true) my_clang := true + # Frame pointer based unwinder in ASan requires ARM frame setup. + LOCAL_ARM_MODE := arm my_cflags += $(ADDRESS_SANITIZER_CONFIG_EXTRA_CFLAGS) my_ldflags += $(ADDRESS_SANITIZER_CONFIG_EXTRA_LDFLAGS) ifdef LOCAL_IS_HOST_MODULE @@ -210,10 +212,10 @@ endif #################################################### ## Add FDO flags if FDO is turned on and supported #################################################### -ifneq ($(strip $(LOCAL_FDO_SUPPORT)),) +ifeq ($(strip $(LOCAL_FDO_SUPPORT)), true) ifeq ($(strip $(LOCAL_IS_HOST_MODULE)),) my_cflags += $($(LOCAL_2ND_ARCH_VAR_PREFIX)TARGET_FDO_CFLAGS) - my_ldflags += $($(LOCAL_2ND_ARCH_VAR_PREFIX)TARGET_FDO_CFLAGS) + my_ldflags += $($(LOCAL_2ND_ARCH_VAR_PREFIX)TARGET_FDO_LDFLAGS) endif endif @@ -457,6 +459,8 @@ endif # This can be disabled with LOCAL_RENDERSCRIPT_FLAGS := -Wno-error renderscript_flags := -Wall -Werror renderscript_flags += $(LOCAL_RENDERSCRIPT_FLAGS) +# -m32 or -m64 +renderscript_flags += -m$(my_32_64_bit_suffix) renderscript_includes := \ $(TOPDIR)external/clang/lib/Headers \ @@ -527,6 +531,9 @@ proto_generated_obj_dir := $(intermediates)/proto 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) @@ -1006,7 +1013,8 @@ $(LOCAL_INSTALLED_MODULE): | $(installed_static_library_notice_file_targets) ########################################################### export_includes := $(intermediates)/export_includes $(export_includes): PRIVATE_EXPORT_C_INCLUDE_DIRS := $(LOCAL_EXPORT_C_INCLUDE_DIRS) -$(export_includes) : $(LOCAL_MODULE_MAKEFILE) +# 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 diff --git a/core/build_id.mk b/core/build_id.mk index f94b224..00a691f 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=LMP diff --git a/core/clang/config.mk b/core/clang/config.mk index 03b5362..0027cbf 100644 --- a/core/clang/config.mk +++ b/core/clang/config.mk @@ -14,8 +14,8 @@ CLANG_CXX := $(LLVM_PREBUILTS_PATH)/clang++$(BUILD_EXECUTABLE_SUFFIX) LLVM_AS := $(LLVM_PREBUILTS_PATH)/llvm-as$(BUILD_EXECUTABLE_SUFFIX) LLVM_LINK := $(LLVM_PREBUILTS_PATH)/llvm-link$(BUILD_EXECUTABLE_SUFFIX) -CLANG_TBLGEN := $(HOST_OUT_EXECUTABLES)/clang-tblgen$(BUILD_EXECUTABLE_SUFFIX) -LLVM_TBLGEN := $(HOST_OUT_EXECUTABLES)/llvm-tblgen$(BUILD_EXECUTABLE_SUFFIX) +CLANG_TBLGEN := $(BUILD_OUT_EXECUTABLES)/clang-tblgen$(BUILD_EXECUTABLE_SUFFIX) +LLVM_TBLGEN := $(BUILD_OUT_EXECUTABLES)/llvm-tblgen$(BUILD_EXECUTABLE_SUFFIX) # The C/C++ compiler can be wrapped by setting the CC/CXX_WRAPPER vars. ifdef CC_WRAPPER @@ -90,7 +90,8 @@ include $(BUILD_SYSTEM)/clang/TARGET_$(TARGET_2ND_ARCH).mk endif # Address sanitizer clang config -ADDRESS_SANITIZER_CONFIG_EXTRA_CFLAGS := -fsanitize=address +ADDRESS_SANITIZER_RUNTIME_LIBRARY := libclang_rt.asan_$(TARGET_ARCH)_android +ADDRESS_SANITIZER_CONFIG_EXTRA_CFLAGS := -fsanitize=address -fno-omit-frame-pointer ADDRESS_SANITIZER_CONFIG_EXTRA_LDFLAGS := -Wl,-u,__asan_preinit ADDRESS_SANITIZER_CONFIG_EXTRA_LDFLAGS_HOST := -rdynamic @@ -100,7 +101,7 @@ ADDRESS_SANITIZER_CONFIG_EXTRA_STATIC_LIBRARIES_HOST := libasan ADDRESS_SANITIZER_CONFIG_EXTRA_LDFLAGS_TARGET := ADDRESS_SANITIZER_CONFIG_EXTRA_LDLIBS_TARGET := -ADDRESS_SANITIZER_CONFIG_EXTRA_SHARED_LIBRARIES_TARGET := libdl libasan_preload +ADDRESS_SANITIZER_CONFIG_EXTRA_SHARED_LIBRARIES_TARGET := libdl $(ADDRESS_SANITIZER_RUNTIME_LIBRARY) ADDRESS_SANITIZER_CONFIG_EXTRA_STATIC_LIBRARIES_TARGET := libasan # This allows us to use the superset of functionality that compiler-rt diff --git a/core/cleanbuild.mk b/core/cleanbuild.mk index 8731457..1bada38 100644 --- a/core/cleanbuild.mk +++ b/core/cleanbuild.mk @@ -214,13 +214,16 @@ installclean_files := \ $(PRODUCT_OUT)/recovery \ $(PRODUCT_OUT)/root \ $(PRODUCT_OUT)/system \ + $(PRODUCT_OUT)/vendor \ + $(PRODUCT_OUT)/oem \ $(PRODUCT_OUT)/dex_bootjars \ $(PRODUCT_OUT)/obj/JAVA_LIBRARIES \ $(PRODUCT_OUT)/obj/FAKE \ $(PRODUCT_OUT)/obj/EXECUTABLES/adbd_intermediates \ $(PRODUCT_OUT)/obj/EXECUTABLES/init_intermediates \ $(PRODUCT_OUT)/obj/ETC/mac_permissions.xml_intermediates \ - $(PRODUCT_OUT)/obj/ETC/sepolicy_intermediates + $(PRODUCT_OUT)/obj/ETC/sepolicy_intermediates \ + $(PRODUCT_OUT)/obj/ETC/init.environ.rc_intermediates # The files/dirs to delete during a dataclean, which removes any files # in the staging and emulator data partitions. diff --git a/core/clear_vars.mk b/core/clear_vars.mk index 02b189f..8ee7734 100644 --- a/core/clear_vars.mk +++ b/core/clear_vars.mk @@ -23,6 +23,7 @@ LOCAL_PACKAGE_NAME:= LOCAL_OVERRIDES_PACKAGES:= LOCAL_EXPORT_PACKAGE_RESOURCES:= LOCAL_MANIFEST_PACKAGE_NAME:= +LOCAL_PACKAGE_SPLITS:= LOCAL_REQUIRED_MODULES:= LOCAL_ACP_UNAVAILABLE:= LOCAL_MODULE_TAGS:= @@ -96,6 +97,7 @@ LOCAL_PREBUILT_JNI_LIBS:= LOCAL_JAR_MANIFEST:= LOCAL_INSTRUMENTATION_FOR:= LOCAL_APK_LIBRARIES:= +LOCAL_RES_LIBRARIES:= LOCAL_MANIFEST_INSTRUMENTATION_FOR:= LOCAL_AIDL_INCLUDES:= LOCAL_JARJAR_RULES:= @@ -115,6 +117,7 @@ LOCAL_EMMA_COVERAGE_FILTER:= LOCAL_WARNINGS_ENABLE:= LOCAL_FULL_MANIFEST_FILE:= LOCAL_MANIFEST_FILE:= +LOCAL_FULL_LIBS_MANIFEST_FILES:= LOCAL_RENDERSCRIPT_INCLUDES:= LOCAL_RENDERSCRIPT_INCLUDES_OVERRIDE:= LOCAL_RENDERSCRIPT_CC:= @@ -130,6 +133,7 @@ LOCAL_PROTOC_FLAGS:= LOCAL_PROTO_JAVA_OUTPUT_PARAMS:= LOCAL_NO_CRT:= LOCAL_PROPRIETARY_MODULE:= +LOCAL_OEM_MODULE:= LOCAL_PRIVILEGED_MODULE:= LOCAL_MODULE_OWNER:= LOCAL_CTS_TEST_PACKAGE:= @@ -138,6 +142,7 @@ LOCAL_CLANG:= LOCAL_ADDRESS_SANITIZER:= LOCAL_JAR_EXCLUDE_FILES:= LOCAL_JAR_PACKAGES:= +LOCAL_JAR_EXCLUDE_PACKAGES:= LOCAL_LINT_FLAGS:= LOCAL_SOURCE_FILES_ALL_GENERATED:= # '',true # Don't delete the META_INF dir when merging static Java libraries. @@ -148,6 +153,7 @@ LOCAL_POST_LINK_CMD:= LOCAL_POST_INSTALL_CMD:= LOCAL_DIST_BUNDLED_BINARIES:= LOCAL_HAL_STATIC_LIBRARIES:= +LOCAL_RMTYPEDEFS:= LOCAL_NO_SYNTAX_CHECK:= LOCAL_NO_STATIC_ANALYZER:= LOCAL_32_BIT_ONLY:= # '',true diff --git a/core/combo/HOST_windows-x86.mk b/core/combo/HOST_windows-x86.mk index 766c14a..d4acfe9 100644 --- a/core/combo/HOST_windows-x86.mk +++ b/core/combo/HOST_windows-x86.mk @@ -28,9 +28,14 @@ ifdef USE_MINGW HOST_ACP_UNAVAILABLE := true TOOLS_EXE_SUFFIX := $(combo_2nd_arch_prefix)HOST_GLOBAL_CFLAGS += -DUSE_MINGW -TOOLS_PREFIX := /usr/bin/i586-mingw32msvc- -$(combo_2nd_arch_prefix)HOST_C_INCLUDES += /usr/lib/gcc/i586-mingw32msvc/3.4.4/include -$(combo_2nd_arch_prefix)HOST_GLOBAL_LD_DIRS += -L/usr/i586-mingw32msvc/lib +$(combo_2nd_arch_prefix)HOST_GLOBAL_CFLAGS += -Wno-unused-parameter +$(combo_2nd_arch_prefix)HOST_GLOBAL_CFLAGS += --sysroot=prebuilts/gcc/linux-x86/host/x86_64-w64-mingw32-4.8/x86_64-w64-mingw32 +$(combo_2nd_arch_prefix)HOST_GLOBAL_CFLAGS += -m32 +$(combo_2nd_arch_prefix)HOST_GLOBAL_LDFLAGS += -m32 +TOOLS_PREFIX := prebuilts/gcc/linux-x86/host/x86_64-w64-mingw32-4.8/bin/x86_64-w64-mingw32- +$(combo_2nd_arch_prefix)HOST_C_INCLUDES += prebuilts/gcc/linux-x86/host/x86_64-w64-mingw32-4.8/x86_64-w64-mingw32/include +$(combo_2nd_arch_prefix)HOST_C_INCLUDES += prebuilts/gcc/linux-x86/host/x86_64-w64-mingw32-4.8/lib/gcc/x86_64-w64-mingw32/4.8.3/include +$(combo_2nd_arch_prefix)HOST_GLOBAL_LD_DIRS += -Lprebuilts/gcc/linux-x86/host/x86_64-w64-mingw32-4.8/x86_64-w64-mingw32/lib32 endif # USE_MINGW endif # Linux diff --git a/core/combo/TARGET_linux-arm.mk b/core/combo/TARGET_linux-arm.mk index d159d94..9472306 100644 --- a/core/combo/TARGET_linux-arm.mk +++ b/core/combo/TARGET_linux-arm.mk @@ -115,7 +115,7 @@ $(combo_2nd_arch_prefix)TARGET_GLOBAL_CFLAGS += \ # into no-op in some builds while mesg is defined earlier. So we explicitly # disable "-Wunused-but-set-variable" here. ifneq ($(filter 4.6 4.6.% 4.7 4.7.% 4.8, $($(combo_2nd_arch_prefix)TARGET_GCC_VERSION)),) -$(combo_2nd_arch_prefix)TARGET_GLOBAL_CFLAGS += -Wno-unused-but-set-variable -fno-builtin-sin \ +$(combo_2nd_arch_prefix)TARGET_GLOBAL_CFLAGS += -fno-builtin-sin \ -fno-strict-volatile-bitfields endif @@ -164,8 +164,8 @@ $(combo_2nd_arch_prefix)TARGET_LIBGCC := $(shell $($(combo_2nd_arch_prefix)TARGE $($(combo_2nd_arch_prefix)TARGET_GLOBAL_CFLAGS) -print-libgcc-file-name) $(combo_2nd_arch_prefix)TARGET_LIBATOMIC := $(shell $($(combo_2nd_arch_prefix)TARGET_CC) \ $($(combo_2nd_arch_prefix)TARGET_GLOBAL_CFLAGS) -print-file-name=libatomic.a) -$(combo_2nd_arch_prefix)TARGET_LIBGCOV := $(shell $($(combo_2nd_arch_prefix)TARGET_CC) $($(combo_2nd_arch_prefix)TARGET_GLOBAL_CFLAGS) \ - -print-file-name=libgcov.a) +$(combo_2nd_arch_prefix)TARGET_LIBGCOV := $(shell $($(combo_2nd_arch_prefix)TARGET_CC) \ + $($(combo_2nd_arch_prefix)TARGET_GLOBAL_CFLAGS) -print-file-name=libgcov.a) endif KERNEL_HEADERS_COMMON := $(libc_root)/kernel/uapi @@ -207,7 +207,6 @@ $(hide) $(PRIVATE_CXX) \ $(call normalize-target-libraries,$(PRIVATE_ALL_STATIC_LIBRARIES)) \ $(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--end-group) \ $(if $(TARGET_BUILD_APPS),$(PRIVATE_TARGET_LIBGCC)) \ - $(PRIVATE_TARGET_FDO_LIB) \ $(call normalize-target-libraries,$(PRIVATE_ALL_SHARED_LIBRARIES)) \ -o $@ \ $(PRIVATE_TARGET_GLOBAL_LDFLAGS) \ @@ -235,7 +234,6 @@ $(hide) $(PRIVATE_CXX) -nostdlib -Bdynamic -pie \ $(call normalize-target-libraries,$(PRIVATE_ALL_STATIC_LIBRARIES)) \ $(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--end-group) \ $(if $(TARGET_BUILD_APPS),$(PRIVATE_TARGET_LIBGCC)) \ - $(PRIVATE_TARGET_FDO_LIB) \ $(call normalize-target-libraries,$(PRIVATE_ALL_SHARED_LIBRARIES)) \ -o $@ \ $(PRIVATE_TARGET_GLOBAL_LDFLAGS) \ @@ -263,7 +261,6 @@ $(hide) $(PRIVATE_CXX) -nostdlib -Bstatic \ -Wl,--start-group \ $(call normalize-target-libraries,$(filter %libc.a,$(PRIVATE_ALL_STATIC_LIBRARIES))) \ $(call normalize-target-libraries,$(filter %libc_nomalloc.a,$(PRIVATE_ALL_STATIC_LIBRARIES))) \ - $(PRIVATE_TARGET_FDO_LIB) \ $(PRIVATE_TARGET_LIBATOMIC) \ $(if $(filter true,$(NATIVE_COVERAGE)),$(PRIVATE_TARGET_LIBGCOV)) \ $(call normalize-target-libraries,$(filter %libcompiler_rt.a,$(PRIVATE_ALL_STATIC_LIBRARIES))) \ diff --git a/core/combo/TARGET_linux-arm64.mk b/core/combo/TARGET_linux-arm64.mk index 9bd0b90..7c44366 100644 --- a/core/combo/TARGET_linux-arm64.mk +++ b/core/combo/TARGET_linux-arm64.mk @@ -35,7 +35,7 @@ TARGET_ARCH_VARIANT := armv8 endif # Decouple NDK library selection with platform compiler version -TARGET_NDK_GCC_VERSION := 4.8 +TARGET_NDK_GCC_VERSION := 4.9 ifeq ($(strip $(TARGET_GCC_VERSION_EXP)),) TARGET_GCC_VERSION := 4.9 @@ -173,7 +173,6 @@ $(hide) $(PRIVATE_CXX) \ $(call normalize-target-libraries,$(PRIVATE_ALL_STATIC_LIBRARIES)) \ $(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--end-group) \ $(if $(TARGET_BUILD_APPS),$(PRIVATE_TARGET_LIBGCC)) \ - $(PRIVATE_TARGET_FDO_LIB) \ $(call normalize-target-libraries,$(PRIVATE_ALL_SHARED_LIBRARIES)) \ -o $@ \ $(PRIVATE_TARGET_GLOBAL_LDFLAGS) \ @@ -201,7 +200,6 @@ $(hide) $(PRIVATE_CXX) -nostdlib -Bdynamic -pie \ $(call normalize-target-libraries,$(PRIVATE_ALL_STATIC_LIBRARIES)) \ $(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--end-group) \ $(if $(TARGET_BUILD_APPS),$(PRIVATE_TARGET_LIBGCC)) \ - $(PRIVATE_TARGET_FDO_LIB) \ $(call normalize-target-libraries,$(PRIVATE_ALL_SHARED_LIBRARIES)) \ -o $@ \ $(PRIVATE_TARGET_GLOBAL_LDFLAGS) \ @@ -229,7 +227,6 @@ $(hide) $(PRIVATE_CXX) -nostdlib -Bstatic \ -Wl,--start-group \ $(call normalize-target-libraries,$(filter %libc.a,$(PRIVATE_ALL_STATIC_LIBRARIES))) \ $(call normalize-target-libraries,$(filter %libc_nomalloc.a,$(PRIVATE_ALL_STATIC_LIBRARIES))) \ - $(PRIVATE_TARGET_FDO_LIB) \ $(PRIVATE_TARGET_LIBATOMIC) \ $(if $(filter true,$(NATIVE_COVERAGE)),$(PRIVATE_TARGET_LIBGCOV)) \ $(call normalize-target-libraries,$(filter %libcompiler_rt.a,$(PRIVATE_ALL_STATIC_LIBRARIES))) \ diff --git a/core/combo/TARGET_linux-mips.mk b/core/combo/TARGET_linux-mips.mk index 427fa66..5963727 100644 --- a/core/combo/TARGET_linux-mips.mk +++ b/core/combo/TARGET_linux-mips.mk @@ -179,7 +179,6 @@ $(hide) $(PRIVATE_CXX) \ $(call normalize-target-libraries,$(PRIVATE_ALL_STATIC_LIBRARIES)) \ $(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--end-group) \ $(if $(TARGET_BUILD_APPS),$(PRIVATE_TARGET_LIBGCC)) \ - $(PRIVATE_TARGET_FDO_LIB) \ $(call normalize-target-libraries,$(PRIVATE_ALL_SHARED_LIBRARIES)) \ -o $@ \ $(PRIVATE_TARGET_GLOBAL_LDFLAGS) \ @@ -207,7 +206,6 @@ $(hide) $(PRIVATE_CXX) -nostdlib -Bdynamic -pie \ $(call normalize-target-libraries,$(PRIVATE_ALL_STATIC_LIBRARIES)) \ $(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--end-group) \ $(if $(TARGET_BUILD_APPS),$(PRIVATE_TARGET_LIBGCC)) \ - $(PRIVATE_TARGET_FDO_LIB) \ $(call normalize-target-libraries,$(PRIVATE_ALL_SHARED_LIBRARIES)) \ -o $@ \ $(PRIVATE_TARGET_GLOBAL_LDFLAGS) \ @@ -235,7 +233,6 @@ $(hide) $(PRIVATE_CXX) -nostdlib -Bstatic \ -Wl,--start-group \ $(call normalize-target-libraries,$(filter %libc.a,$(PRIVATE_ALL_STATIC_LIBRARIES))) \ $(call normalize-target-libraries,$(filter %libc_nomalloc.a,$(PRIVATE_ALL_STATIC_LIBRARIES))) \ - $(PRIVATE_TARGET_FDO_LIB) \ $(PRIVATE_TARGET_LIBATOMIC) \ $(if $(filter true,$(NATIVE_COVERAGE)),$(PRIVATE_TARGET_LIBGCOV)) \ $(call normalize-target-libraries,$(filter %libcompiler_rt.a,$(PRIVATE_ALL_STATIC_LIBRARIES))) \ diff --git a/core/combo/TARGET_linux-mips64.mk b/core/combo/TARGET_linux-mips64.mk index db72d0f..aef6759 100644 --- a/core/combo/TARGET_linux-mips64.mk +++ b/core/combo/TARGET_linux-mips64.mk @@ -183,7 +183,6 @@ $(hide) $(PRIVATE_CXX) \ $(call normalize-target-libraries,$(PRIVATE_ALL_STATIC_LIBRARIES)) \ $(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--end-group) \ $(if $(TARGET_BUILD_APPS),$(PRIVATE_TARGET_LIBGCC)) \ - $(PRIVATE_TARGET_FDO_LIB) \ $(call normalize-target-libraries,$(PRIVATE_ALL_SHARED_LIBRARIES)) \ -o $@ \ $(PRIVATE_TARGET_GLOBAL_LDFLAGS) \ @@ -211,7 +210,6 @@ $(hide) $(PRIVATE_CXX) -nostdlib -Bdynamic -pie \ $(call normalize-target-libraries,$(PRIVATE_ALL_STATIC_LIBRARIES)) \ $(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--end-group) \ $(if $(TARGET_BUILD_APPS),$(PRIVATE_TARGET_LIBGCC)) \ - $(PRIVATE_TARGET_FDO_LIB) \ $(call normalize-target-libraries,$(PRIVATE_ALL_SHARED_LIBRARIES)) \ -o $@ \ $(PRIVATE_TARGET_GLOBAL_LDFLAGS) \ @@ -239,7 +237,6 @@ $(hide) $(PRIVATE_CXX) -nostdlib -Bstatic \ -Wl,--start-group \ $(call normalize-target-libraries,$(filter %libc.a,$(PRIVATE_ALL_STATIC_LIBRARIES))) \ $(call normalize-target-libraries,$(filter %libc_nomalloc.a,$(PRIVATE_ALL_STATIC_LIBRARIES))) \ - $(PRIVATE_TARGET_FDO_LIB) \ $(PRIVATE_TARGET_LIBATOMIC) \ $(if $(filter true,$(NATIVE_COVERAGE)),$(PRIVATE_TARGET_LIBGCOV)) \ $(call normalize-target-libraries,$(filter %libcompiler_rt.a,$(PRIVATE_ALL_STATIC_LIBRARIES))) \ diff --git a/core/combo/TARGET_linux-x86.mk b/core/combo/TARGET_linux-x86.mk index 063f525..2c29815 100644 --- a/core/combo/TARGET_linux-x86.mk +++ b/core/combo/TARGET_linux-x86.mk @@ -160,7 +160,6 @@ $(hide) $(PRIVATE_CXX) \ $(call normalize-target-libraries,$(PRIVATE_ALL_STATIC_LIBRARIES)) \ $(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--end-group) \ $(if $(TARGET_BUILD_APPS),$(PRIVATE_TARGET_LIBGCC)) \ - $(PRIVATE_TARGET_FDO_LIB) \ $(call normalize-target-libraries,$(PRIVATE_ALL_SHARED_LIBRARIES)) \ -o $@ \ $(PRIVATE_LDFLAGS) \ @@ -188,7 +187,6 @@ $(hide) $(PRIVATE_CXX) \ $(call normalize-target-libraries,$(PRIVATE_ALL_STATIC_LIBRARIES)) \ $(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--end-group) \ $(if $(TARGET_BUILD_APPS),$(PRIVATE_TARGET_LIBGCC)) \ - $(PRIVATE_TARGET_FDO_LIB) \ $(call normalize-target-libraries,$(PRIVATE_ALL_SHARED_LIBRARIES)) \ -o $@ \ $(PRIVATE_LDFLAGS) \ @@ -213,7 +211,6 @@ $(hide) $(PRIVATE_CXX) \ -Wl,--no-whole-archive \ -Wl,--start-group \ $(call normalize-target-libraries,$(filter-out %libcompiler_rt.a,$(filter-out %libc_nomalloc.a,$(filter-out %libc.a,$(PRIVATE_ALL_STATIC_LIBRARIES))))) \ - $(PRIVATE_TARGET_FDO_LIB) \ $(PRIVATE_TARGET_LIBATOMIC) \ $(call normalize-target-libraries,$(filter %libc.a,$(PRIVATE_ALL_STATIC_LIBRARIES))) \ $(call normalize-target-libraries,$(filter %libc_nomalloc.a,$(PRIVATE_ALL_STATIC_LIBRARIES))) \ diff --git a/core/combo/TARGET_linux-x86_64.mk b/core/combo/TARGET_linux-x86_64.mk index f340598..27e802f 100644 --- a/core/combo/TARGET_linux-x86_64.mk +++ b/core/combo/TARGET_linux-x86_64.mk @@ -165,7 +165,6 @@ $(hide) $(PRIVATE_CXX) \ $(call normalize-target-libraries,$(PRIVATE_ALL_STATIC_LIBRARIES)) \ $(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--end-group) \ $(if $(TARGET_BUILD_APPS),$(PRIVATE_TARGET_LIBGCC)) \ - $(PRIVATE_TARGET_FDO_LIB) \ $(call normalize-target-libraries,$(PRIVATE_ALL_SHARED_LIBRARIES)) \ -o $@ \ $(PRIVATE_LDFLAGS) \ @@ -192,7 +191,6 @@ $(hide) $(PRIVATE_CXX) \ $(call normalize-target-libraries,$(PRIVATE_ALL_STATIC_LIBRARIES)) \ $(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--end-group) \ $(if $(TARGET_BUILD_APPS),$(PRIVATE_TARGET_LIBGCC)) \ - $(PRIVATE_TARGET_FDO_LIB) \ $(call normalize-target-libraries,$(PRIVATE_ALL_SHARED_LIBRARIES)) \ -o $@ \ $(PRIVATE_LDFLAGS) \ @@ -219,7 +217,6 @@ $(hide) $(PRIVATE_CXX) \ -Wl,--start-group \ $(call normalize-target-libraries,$(filter %libc.a,$(PRIVATE_ALL_STATIC_LIBRARIES))) \ $(call normalize-target-libraries,$(filter %libc_nomalloc.a,$(PRIVATE_ALL_STATIC_LIBRARIES))) \ - $(PRIVATE_TARGET_FDO_LIB) \ $(PRIVATE_TARGET_LIBATOMIC) \ $(if $(filter true,$(NATIVE_COVERAGE)),$(PRIVATE_TARGET_LIBGCOV)) \ $(call normalize-target-libraries,$(filter %libcompiler_rt.a,$(PRIVATE_ALL_STATIC_LIBRARIES))) \ diff --git a/core/combo/fdo.mk b/core/combo/fdo.mk index 26e842f..9e331b6 100644 --- a/core/combo/fdo.mk +++ b/core/combo/fdo.mk @@ -17,25 +17,23 @@ # Setup FDO related flags. $(combo_2nd_arch_prefix)TARGET_FDO_CFLAGS:= -$(combo_2nd_arch_prefix)TARGET_FDO_LIB:= -ifneq ($(strip $(BUILD_FDO_INSTRUMENT)),) +ifeq ($(strip $(BUILD_FDO_INSTRUMENT)), true) # Set BUILD_FDO_INSTRUMENT=true to turn on FDO instrumentation. - # The profile will be generated on /data/local/tmp/profile on the device. - $(combo_2nd_arch_prefix)TARGET_FDO_CFLAGS := -fprofile-generate=/data/local/tmp/fdo_profile -DANDROID_FDO - $(combo_2nd_arch_prefix)TARGET_FDO_LIB := $(target_libgcov) + # The profile will be generated on /sdcard/fdo_profile on the device. + $(combo_2nd_arch_prefix)TARGET_FDO_CFLAGS := -fprofile-generate=/sdcard/fdo_profile -DANDROID_FDO + $(combo_2nd_arch_prefix)TARGET_FDO_LDFLAGS := -lgcov -lgcc else - ifneq ($(strip $(BUILD_FDO_OPTIMIZE)),) + ifeq ($(strip $(BUILD_FDO_OPTIMIZE)), true) # Set TARGET_FDO_PROFILE_PATH to set a custom profile directory for your build. ifeq ($(strip $($(combo_2nd_arch_prefix)TARGET_FDO_PROFILE_PATH)),) - $(combo_2nd_arch_prefix)TARGET_FDO_PROFILE_PATH := fdo_profiles + $(combo_2nd_arch_prefix)TARGET_FDO_PROFILE_PATH := vendor/google_data/fdo_profile endif - ifneq ($(strip $(wildcard $($(combo_2nd_arch_prefix)TARGET_FDO_PROFILE_PATH))),) + ifneq ($(strip $(wildcard $($(combo_2nd_arch_prefix)TARGET_FDO_PROFILE_PATH)/$(PRODUCT_OUT))),) $(combo_2nd_arch_prefix)TARGET_FDO_CFLAGS := -fprofile-use=$($(combo_2nd_arch_prefix)TARGET_FDO_PROFILE_PATH) -DANDROID_FDO -fprofile-correction -Wcoverage-mismatch -Wno-error - $(combo_2nd_arch_prefix)TARGET_FDO_LIB := $(target_libgcov) else - $(warning Profile directory $($(combo_2nd_arch_prefix)TARGET_FDO_PROFILE_PATH) does not exist. Turn off FDO.) + $(warning Profile directory $($(combo_2nd_arch_prefix)TARGET_FDO_PROFILE_PATH)/$(PRODUCT_OUT) does not exist. Turn off FDO.) endif endif endif diff --git a/core/config.mk b/core/config.mk index 4d4fa4f..3ceb392 100644 --- a/core/config.mk +++ b/core/config.mk @@ -18,6 +18,14 @@ endif empty := space := $(empty) $(empty) comma := , +# Note that make will eat the newline just before endef. +define newline + + +endef +# Unfortunately you can't simply define backslash as \ or \\. +backslash := \a +backslash := $(patsubst %a,%,$(backslash)) # Tell python not to spam the source tree with .pyc files. This # only has an effect on python 2.6 and above. @@ -37,13 +45,13 @@ SRC_HEADERS := \ $(TOPDIR)frameworks/native/include \ $(TOPDIR)frameworks/native/opengl/include \ $(TOPDIR)frameworks/av/include \ - $(TOPDIR)frameworks/base/include \ - $(TOPDIR)external/skia/include + $(TOPDIR)frameworks/base/include SRC_HOST_HEADERS:=$(TOPDIR)tools/include SRC_LIBRARIES:= $(TOPDIR)libs SRC_SERVERS:= $(TOPDIR)servers SRC_TARGET_DIR := $(TOPDIR)build/target SRC_API_DIR := $(TOPDIR)prebuilts/sdk/api +SRC_SYSTEM_API_DIR := $(TOPDIR)prebuilts/sdk/system-api # Some specific paths to tools SRC_DROIDDOC_DIR := $(TOPDIR)build/tools/droiddoc @@ -387,6 +395,8 @@ FS_GET_STATS := $(HOST_OUT_EXECUTABLES)/fs_get_stats$(HOST_EXECUTABLE_SUFFIX) MKEXT2IMG := $(HOST_OUT_EXECUTABLES)/genext2fs$(HOST_EXECUTABLE_SUFFIX) MAKE_EXT4FS := $(HOST_OUT_EXECUTABLES)/make_ext4fs$(HOST_EXECUTABLE_SUFFIX) MKEXTUSERIMG := $(HOST_OUT_EXECUTABLES)/mkuserimg.sh +MAKE_F2FS := $(HOST_OUT_EXECUTABLES)/make_f2fs$(HOST_EXECUTABLE_SUFFIX) +MKF2FSUSERIMG := $(HOST_OUT_EXECUTABLES)/mkf2fsuserimg.sh MKEXT2BOOTIMG := external/genext2fs/mkbootimg_ext2.sh SIMG2IMG := $(HOST_OUT_EXECUTABLES)/simg2img$(HOST_EXECUTABLE_SUFFIX) E2FSCK := $(HOST_OUT_EXECUTABLES)/e2fsck$(HOST_EXECUTABLE_SUFFIX) @@ -399,6 +409,11 @@ JAVATAGS := build/tools/java-event-log-tags.py LLVM_RS_CC := $(HOST_OUT_EXECUTABLES)/llvm-rs-cc$(HOST_EXECUTABLE_SUFFIX) BCC_COMPAT := $(HOST_OUT_EXECUTABLES)/bcc_compat$(HOST_EXECUTABLE_SUFFIX) LINT := prebuilts/sdk/tools/lint +RMTYPEDEFS := $(HOST_OUT_EXECUTABLES)/rmtypedefs +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 # ACP is always for the build OS, not for the host OS ACP := $(BUILD_OUT_EXECUTABLES)/acp$(BUILD_EXECUTABLE_SUFFIX) @@ -406,9 +421,13 @@ ACP := $(BUILD_OUT_EXECUTABLES)/acp$(BUILD_EXECUTABLE_SUFFIX) # dx is java behind a shell script; no .exe necessary. DX := $(HOST_OUT_EXECUTABLES)/dx ZIPALIGN := $(HOST_OUT_EXECUTABLES)/zipalign$(HOST_EXECUTABLE_SUFFIX) -FINDBUGS := prebuilt/common/findbugs/bin/findbugs +FINDBUGS_DIR := external/owasp/sanitizer/tools/findbugs/bin +FINDBUGS := $(FINDBUGS_DIR)/findbugs EMMA_JAR := external/emma/lib/emma$(COMMON_JAVA_PACKAGE_SUFFIX) +# Tool to merge AndroidManifest.xmls +ANDROID_MANIFEST_MERGER := java -classpath prebuilts/devtools/tools/lib/manifest-merger.jar com.android.manifmerger.Main merge + YACC_HEADER_SUFFIX:= .hpp # Don't use column under Windows, cygwin or not @@ -523,7 +542,7 @@ endif # allow overriding default Java libraries on a per-target basis ifeq ($(TARGET_DEFAULT_JAVA_LIBRARIES),) - TARGET_DEFAULT_JAVA_LIBRARIES := core-libart core-junit ext framework framework2 + TARGET_DEFAULT_JAVA_LIBRARIES := core-libart core-junit ext framework endif TARGET_CPU_SMP ?= true @@ -576,7 +595,13 @@ TARGET_AVAILABLE_SDK_VERSIONS := $(call numerically_sort,\ $(patsubst $(HISTORICAL_SDK_VERSIONS_ROOT)/%/android.jar,%, \ $(wildcard $(HISTORICAL_SDK_VERSIONS_ROOT)/*/android.jar))) +# We don't have prebuilt system_current SDK yet. +TARGET_AVAILABLE_SDK_VERSIONS := $(TARGET_AVAILABLE_SDK_VERSIONS) + INTERNAL_PLATFORM_API_FILE := $(TARGET_OUT_COMMON_INTERMEDIATES)/PACKAGING/public_api.txt +INTERNAL_PLATFORM_REMOVED_API_FILE := $(TARGET_OUT_COMMON_INTERMEDIATES)/PACKAGING/removed.txt +INTERNAL_PLATFORM_SYSTEM_API_FILE := $(TARGET_OUT_COMMON_INTERMEDIATES)/PACKAGING/system-api.txt +INTERNAL_PLATFORM_SYSTEM_REMOVED_API_FILE := $(TARGET_OUT_COMMON_INTERMEDIATES)/PACKAGING/system-removed.txt # This is the standard way to name a directory containing prebuilt target # objects. E.g., prebuilt/$(TARGET_PREBUILT_TAG)/libc.so diff --git a/core/definitions.mk b/core/definitions.mk index afd033a..1007f33 100644 --- a/core/definitions.mk +++ b/core/definitions.mk @@ -1423,6 +1423,10 @@ ifdef BUILD_HOST_static HOST_FPIE_FLAGS := else HOST_FPIE_FLAGS := -pie +# Force the correct entry point to workaround a bug in binutils that manifests with -pie +ifeq ($(HOST_OS),windows) +HOST_FPIE_FLAGS += -Wl,-e_mainCRTStartup +endif endif ifneq ($(HOST_CUSTOM_LD_COMMAND),true) @@ -1576,7 +1580,7 @@ $(hide) mkdir -p $(PRIVATE_CLASS_INTERMEDIATES_DIR) $(call unzip-jar-files,$(PRIVATE_STATIC_JAVA_LIBRARIES),$(PRIVATE_CLASS_INTERMEDIATES_DIR)) $(call dump-words-to-file,$(PRIVATE_JAVA_SOURCES),$(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list) $(hide) if [ -d "$(PRIVATE_SOURCE_INTERMEDIATES_DIR)" ]; then \ - find $(PRIVATE_SOURCE_INTERMEDIATES_DIR) -name '*.java' >> $(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list; \ + find $(PRIVATE_SOURCE_INTERMEDIATES_DIR) -name '*.java' >> $(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 @@ -1601,12 +1605,21 @@ $(if $(PRIVATE_JAR_EXCLUDE_FILES), $(hide) find $(PRIVATE_CLASS_INTERMEDIATES_DI -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 d \ - $(foreach pkg, $(PRIVATE_JAR_PACKAGES), \ - -not -path $(PRIVATE_CLASS_INTERMEDIATES_DIR)/$(subst .,/,$(pkg))) \ - | xargs rm -rf) -$(hide) jar $(if $(strip $(PRIVATE_JAR_MANIFEST)),-cfm,-cf) \ - $@ $(PRIVATE_JAR_MANIFEST) -C $(PRIVATE_CLASS_INTERMEDIATES_DIR) . +$(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) .) endef define transform-java-to-classes.jar @@ -1652,12 +1665,21 @@ $(if $(PRIVATE_JAR_EXCLUDE_FILES), $(hide) find $(PRIVATE_CLASS_INTERMEDIATES_DI -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 d \ - $(foreach pkg, $(PRIVATE_JAR_PACKAGES), \ - -not -path $(PRIVATE_CLASS_INTERMEDIATES_DIR)/$(subst .,/,$(pkg))) \ - | xargs rm -rf) -$(hide) jar $(if $(strip $(PRIVATE_JAR_MANIFEST)),-cfm,-cf) \ - $@ $(PRIVATE_JAR_MANIFEST) -C $(PRIVATE_CLASS_INTERMEDIATES_DIR) . +$(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) .) $(hide) mv $(PRIVATE_CLASS_INTERMEDIATES_DIR)/newstamp $(PRIVATE_CLASS_INTERMEDIATES_DIR)/stamp endef @@ -1679,7 +1701,7 @@ endef define transform-classes.jar-to-dex @echo "target Dex: $(PRIVATE_MODULE)" @mkdir -p $(dir $@) -$(hide) rm -f $(dir $@)/classes*.dex +$(hide) rm -f $(dir $@)classes*.dex $(hide) $(DX) \ $(if $(findstring windows,$(HOST_OS)),,-JXms16M -JXmx2048M) \ --dex --output=$(dir $@) \ @@ -1717,7 +1739,7 @@ endef define add-assets-to-package $(hide) $(AAPT) package -u $(PRIVATE_AAPT_FLAGS) \ $(addprefix -c , $(PRIVATE_PRODUCT_AAPT_CONFIG)) \ - $(addprefix --preferred-configurations , $(PRIVATE_PRODUCT_AAPT_PREF_CONFIG)) \ + $(addprefix --preferred-density , $(PRIVATE_PRODUCT_AAPT_PREF_CONFIG)) \ $(addprefix -M , $(PRIVATE_ANDROID_MANIFEST)) \ $(addprefix -S , $(PRIVATE_RESOURCE_DIR)) \ $(addprefix -A , $(PRIVATE_ASSET_DIR)) \ @@ -1752,7 +1774,7 @@ endef #TODO: update the manifest to point to the dex file define add-dex-to-package -$(hide) zip -qj $@ $(dir $(PRIVATE_DEX_FILE))/classes*.dex +$(hide) zip -qj $@ $(dir $(PRIVATE_DEX_FILE))classes*.dex endef # Add java resources added by the current module. @@ -2001,8 +2023,8 @@ $(eval _isfds_value :=)) endef # $(1): The file(s) to check (often $@) -# $(2): The maximum total image size, in decimal bytes -# $(3): the type of filesystem "yaffs" or "raw" +# $(2): The maximum total image size, in decimal bytes. +# Make sure to take into account any reserved space needed for the FS. # # If $(2) is empty, evaluates to "true" # @@ -2015,15 +2037,9 @@ $(if $(2), \ total=$$(( $$( echo "$$size" ) )); \ printname=$$(echo -n "$(1)" | tr " " +); \ img_blocksize=$(call image-size-from-data-size,$(BOARD_FLASH_BLOCK_SIZE)); \ - if [ "$(3)" == "yaffs" ]; then \ - reservedblocks=8; \ - else \ - reservedblocks=0; \ - fi; \ twoblocks=$$((img_blocksize * 2)); \ onepct=$$((((($(2) / 100) - 1) / img_blocksize + 1) * img_blocksize)); \ - reserve=$$(((twoblocks > onepct ? twoblocks : onepct) + \ - reservedblocks * img_blocksize)); \ + reserve=$$((twoblocks > onepct ? twoblocks : onepct)); \ maxsize=$$(($(2) - reserve)); \ echo "$$printname maxsize=$$maxsize blocksize=$$img_blocksize total=$$total reserve=$$reserve"; \ if [ "$$total" -gt "$$maxsize" ]; then \ @@ -2045,8 +2061,7 @@ endef # $(2): The partition size. define assert-max-image-size $(if $(2), \ - $(call assert-max-file-size,$(1),$(call image-size-from-data-size,$(2))), \ - true) + $(call assert-max-file-size,$(1),$(call image-size-from-data-size,$(2)))) endef @@ -2145,17 +2160,19 @@ endef # $(1) target # $(2) stable api file # $(3) api file to be tested -# $(4) arguments for apicheck -# $(5) command to run if apicheck failed -# $(6) target dependent on this api check -# $(7) additional dependencies +# $(4) stable removed api file +# $(5) removed api file to be tested +# $(6) arguments for apicheck +# $(7) command to run if apicheck failed +# $(8) target dependent on this api check +# $(9) additional dependencies define check-api -$(TARGET_OUT_COMMON_INTERMEDIATES)/PACKAGING/$(strip $(1))-timestamp: $(2) $(3) $(APICHECK) $(7) +$(TARGET_OUT_COMMON_INTERMEDIATES)/PACKAGING/$(strip $(1))-timestamp: $(2) $(3) $(4) $(APICHECK) $(9) @echo "Checking API:" $(1) - $(hide) ( $(APICHECK_COMMAND) $(4) $(2) $(3) || ( $(5) ; exit 38 ) ) + $(hide) ( $(APICHECK_COMMAND) $(6) $(2) $(3) $(4) $(5) || ( $(7) ; exit 38 ) ) $(hide) mkdir -p $$(dir $$@) $(hide) touch $$@ -$(6): $(TARGET_OUT_COMMON_INTERMEDIATES)/PACKAGING/$(strip $(1))-timestamp +$(8): $(TARGET_OUT_COMMON_INTERMEDIATES)/PACKAGING/$(strip $(1))-timestamp endef ## Whether to build from source if prebuilt alternative exists @@ -2182,11 +2199,13 @@ define include-if-build-from-source $(if $(call if-build-from-source,$(2),$(3)),$(eval include $(1))) endef -## Return the arch for the source file of a prebuilt +# Return the arch for the source file of a prebuilt +# Return "none" if no matching arch found, so the result can be passed to +# LOCAL_MODULE_TARGET_ARCH. # $(1) the list of archs supported by the prebuilt define get-prebuilt-src-arch $(strip $(if $(filter $(TARGET_ARCH),$(1)),$(TARGET_ARCH),\ - $(if $(filter $(TARGET_2ND_ARCH),$(1)),$(TARGET_2ND_ARCH)))) + $(if $(filter $(TARGET_2ND_ARCH),$(1)),$(TARGET_2ND_ARCH),none))) endef ########################################################### diff --git a/core/dex_preopt.mk b/core/dex_preopt.mk index 02e812d..72cb9f0 100644 --- a/core/dex_preopt.mk +++ b/core/dex_preopt.mk @@ -10,6 +10,8 @@ DEXPREOPT_BOOT_JARS := $(subst $(space),:,$(PRODUCT_BOOT_JARS)) DEXPREOPT_BOOT_JARS_MODULES := $(PRODUCT_BOOT_JARS) PRODUCT_BOOTCLASSPATH := $(subst $(space),:,$(foreach m,$(DEXPREOPT_BOOT_JARS_MODULES),/system/framework/$(m).jar)) +PRODUCT_SYSTEM_SERVER_CLASSPATH := $(subst $(space),:,$(foreach m,$(PRODUCT_SYSTEM_SERVER_JARS),/system/framework/$(m).jar)) + DEXPREOPT_BUILD_DIR := $(OUT_DIR) DEXPREOPT_PRODUCT_DIR_FULL_PATH := $(PRODUCT_OUT)/dex_bootjars DEXPREOPT_PRODUCT_DIR := $(patsubst $(DEXPREOPT_BUILD_DIR)/%,%,$(DEXPREOPT_PRODUCT_DIR_FULL_PATH)) diff --git a/core/dex_preopt_odex_install.mk b/core/dex_preopt_odex_install.mk index d4484ca..90ae08f 100644 --- a/core/dex_preopt_odex_install.mk +++ b/core/dex_preopt_odex_install.mk @@ -30,7 +30,7 @@ endif ifdef LOCAL_UNINSTALLABLE_MODULE LOCAL_DEX_PREOPT := endif -ifeq (,$(strip $(all_java_sources)$(full_static_java_libs)$(my_prebuilt_src_file))) # contains no java code +ifeq (,$(strip $(built_dex)$(my_prebuilt_src_file))) # contains no java code LOCAL_DEX_PREOPT := endif # if module oat file requested in data, disable LOCAL_DEX_PREOPT, will default location to dalvik-cache diff --git a/core/droiddoc.mk b/core/droiddoc.mk index ecfe3dc..d3e61d5 100644 --- a/core/droiddoc.mk +++ b/core/droiddoc.mk @@ -64,12 +64,15 @@ ifneq ($(LOCAL_SDK_VERSION),) # Use android_stubs_current if LOCAL_SDK_VERSION is current and no TARGET_BUILD_APPS. LOCAL_JAVA_LIBRARIES := android_stubs_current $(LOCAL_JAVA_LIBRARIES) $(full_target): PRIVATE_BOOTCLASSPATH := $(call java-lib-files, android_stubs_current) + else ifeq ($(LOCAL_SDK_VERSION)$(TARGET_BUILD_APPS),system_current) + LOCAL_JAVA_LIBRARIES := android_system_stubs_current $(LOCAL_JAVA_LIBRARIES) + $(full_target): PRIVATE_BOOTCLASSPATH := $(call java-lib-files, android_system_stubs_current) else LOCAL_JAVA_LIBRARIES := sdk_v$(LOCAL_SDK_VERSION) $(LOCAL_JAVA_LIBRARIES) $(full_target): PRIVATE_BOOTCLASSPATH := $(call java-lib-files, sdk_v$(LOCAL_SDK_VERSION)) endif else - LOCAL_JAVA_LIBRARIES := core-libart ext framework framework2 $(LOCAL_JAVA_LIBRARIES) + LOCAL_JAVA_LIBRARIES := core-libart ext framework $(LOCAL_JAVA_LIBRARIES) $(full_target): PRIVATE_BOOTCLASSPATH := $(call java-lib-files, core-libart) endif # LOCAL_SDK_VERSION LOCAL_JAVA_LIBRARIES := $(sort $(LOCAL_JAVA_LIBRARIES)) @@ -134,15 +137,13 @@ $(full_target): PRIVATE_CUSTOM_TEMPLATE_DIR := $(LOCAL_DROIDDOC_CUSTOM_TEMPLATE_ $(full_target): PRIVATE_IN_CUSTOM_ASSET_DIR := $(LOCAL_DROIDDOC_CUSTOM_TEMPLATE_DIR)/$(LOCAL_DROIDDOC_CUSTOM_ASSET_DIR) $(full_target): PRIVATE_OUT_ASSET_DIR := $(out_dir)/$(LOCAL_DROIDDOC_ASSET_DIR) $(full_target): PRIVATE_OUT_CUSTOM_ASSET_DIR := $(out_dir)/$(LOCAL_DROIDDOC_CUSTOM_ASSET_DIR) + +html_dir_files := ifneq ($(strip $(LOCAL_DROIDDOC_HTML_DIR)),) $(full_target): PRIVATE_DROIDDOC_HTML_DIR := -htmldir $(LOCAL_PATH)/$(LOCAL_DROIDDOC_HTML_DIR) +html_dir_files := $(shell find $(LOCAL_PATH)/$(LOCAL_DROIDDOC_HTML_DIR) -type f) else -$(full_target): PRIVATE_DROIDDOC_HTML_DIR := -endif -ifneq ($(strip $(LOCAL_ADDITIONAL_HTML_DIR)),) -$(full_target): PRIVATE_ADDITIONAL_HTML_DIR := -htmldir2 $(LOCAL_PATH)/$(LOCAL_ADDITIONAL_HTML_DIR) -else -$(full_target): PRIVATE_ADDITIONAL_HTML_DIR := +$(full_target): PRIVATE_DROIDDOC_HTML_DIR := endif ifneq ($(strip $(LOCAL_ADDITIONAL_HTML_DIR)),) $(full_target): PRIVATE_ADDITIONAL_HTML_DIR := -htmldir2 $(LOCAL_PATH)/$(LOCAL_ADDITIONAL_HTML_DIR) @@ -153,8 +154,6 @@ endif # TODO: not clear if this is used any more $(full_target): PRIVATE_LOCAL_PATH := $(LOCAL_PATH) -html_dir_files := $(shell find $(LOCAL_PATH)/$(LOCAL_DROIDDOC_HTML_DIR) -type f) - $(full_target): $(full_src_files) $(droiddoc_templates) $(droiddoc) $(html_dir_files) $(full_java_lib_deps) $(LOCAL_ADDITIONAL_DEPENDENCIES) @echo Docs droiddoc: $(PRIVATE_OUT_DIR) $(hide) mkdir -p $(dir $@) diff --git a/core/dynamic_binary.mk b/core/dynamic_binary.mk index 396199c..3d6ad4a 100644 --- a/core/dynamic_binary.mk +++ b/core/dynamic_binary.mk @@ -110,6 +110,15 @@ $(strip_output): PRIVATE_OBJCOPY := $($(LOCAL_2ND_ARCH_VAR_PREFIX)TARGET_OBJCOPY $(strip_output): PRIVATE_READELF := $($(LOCAL_2ND_ARCH_VAR_PREFIX)TARGET_READELF) $(strip_output): $(strip_input) | $($(LOCAL_2ND_ARCH_VAR_PREFIX)TARGET_STRIP) $(transform-to-stripped-keep-symbols) + +# A product may be configured to strip everything in some build variants. +# We do the stripping as a post-install command so that LOCAL_BUILT_MODULE +# is still with the symbols and we don't need to clean it (and relink) when +# you switch build variant. +ifneq ($(filter $(STRIP_EVERYTHING_BUILD_VARIANTS),$(TARGET_BUILD_VARIANT)),) +$(LOCAL_INSTALLED_MODULE): PRIVATE_POST_INSTALL_CMD := \ + $($(LOCAL_2ND_ARCH_VAR_PREFIX)TARGET_STRIP) --strip-all $(LOCAL_INSTALLED_MODULE) +endif else # Don't strip the binary, just copy it. We can't skip this step # because a copy of the binary must appear at LOCAL_BUILT_MODULE. diff --git a/core/envsetup.mk b/core/envsetup.mk index efcad0d..cfc9650 100644 --- a/core/envsetup.mk +++ b/core/envsetup.mk @@ -106,11 +106,21 @@ endif # Define them here so they can be used in product config files. TARGET_COPY_OUT_SYSTEM := system TARGET_COPY_OUT_DATA := data -TARGET_COPY_OUT_VENDOR := system/vendor +TARGET_COPY_OUT_OEM := oem TARGET_COPY_OUT_ROOT := root TARGET_COPY_OUT_RECOVERY := recovery - -# Read the product specs so we an get TARGET_DEVICE and other +########################################### +# Define TARGET_COPY_OUT_VENDOR to a placeholder, for at this point +# we don't know if the device wants to build a separate vendor.img +# or just build vendor stuff into system.img. +# A device can set up TARGET_COPY_OUT_VENDOR to "vendor" in its +# BoardConfig.mk. +# We'll substitute with the real value after loading BoardConfig.mk. +_vendor_path_placeholder := ||VENDOR-PATH-PH|| +TARGET_COPY_OUT_VENDOR := $(_vendor_path_placeholder) +########################################### + +# Read the product specs so we can get TARGET_DEVICE and other # variables that we need in order to locate the output files. include $(BUILD_SYSTEM)/product_config.mk @@ -154,6 +164,17 @@ endif TARGET_DEVICE_DIR := $(patsubst %/,%,$(dir $(board_config_mk))) board_config_mk := +########################################### +# Now we can substitute with the real value of TARGET_COPY_OUT_VENDOR +ifeq ($(TARGET_COPY_OUT_VENDOR),$(_vendor_path_placeholder)) +TARGET_COPY_OUT_VENDOR := system/vendor +else ifeq ($(filter vendor system/vendor,$(TARGET_COPY_OUT_VENDOR)),) +$(error TARGET_COPY_OUT_VENDOR must be either 'vendor' or 'system/vendor', seeing '$(TARGET_COPY_OUT_VENDOR)'.) +endif +PRODUCT_COPY_FILES := $(subst $(_vendor_path_placeholder),$(TARGET_COPY_OUT_VENDOR),$(PRODUCT_COPY_FILES)) +########################################### + + # --------------------------------------------------------------- # Set up configuration for target machine. # The following must be set: @@ -222,6 +243,7 @@ HOST_OUT_HEADERS := $(HOST_OUT_INTERMEDIATES)/include HOST_OUT_INTERMEDIATE_LIBRARIES := $(HOST_OUT_INTERMEDIATES)/lib HOST_OUT_NOTICE_FILES := $(HOST_OUT_INTERMEDIATES)/NOTICE_FILES HOST_OUT_COMMON_INTERMEDIATES := $(HOST_COMMON_OUT_ROOT)/obj +HOST_OUT_FAKE := $(HOST_OUT)/fake_packages HOST_OUT_GEN := $(HOST_OUT)/gen HOST_OUT_COMMON_GEN := $(HOST_COMMON_OUT_ROOT)/gen @@ -317,9 +339,26 @@ $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_EXECUTABLES := $(TARGET_OUT_VENDO $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_SHARED_LIBRARIES := $(TARGET_OUT_VENDOR)/lib $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_APPS := $(TARGET_OUT_VENDOR_APPS) +TARGET_OUT_OEM := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_OEM) +TARGET_OUT_OEM_EXECUTABLES := $(TARGET_OUT_OEM)/bin +ifneq ($(filter %64,$(TARGET_ARCH)),) +TARGET_OUT_OEM_SHARED_LIBRARIES := $(TARGET_OUT_OEM)/lib64 +else +TARGET_OUT_OEM_SHARED_LIBRARIES := $(TARGET_OUT_OEM)/lib +endif +# We don't expect Java libraries in the oem.img. +# TARGET_OUT_OEM_JAVA_LIBRARIES:= $(TARGET_OUT_OEM)/framework +TARGET_OUT_OEM_APPS := $(TARGET_OUT_OEM)/app +TARGET_OUT_OEM_ETC := $(TARGET_OUT_OEM)/etc + +$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_OEM_EXECUTABLES := $(TARGET_OUT_OEM_EXECUTABLES) +$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_OEM_SHARED_LIBRARIES := $(TARGET_OUT_OEM)/lib +$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_OEM_APPS := $(TARGET_OUT_OEM_APPS) + TARGET_OUT_UNSTRIPPED := $(PRODUCT_OUT)/symbols TARGET_OUT_EXECUTABLES_UNSTRIPPED := $(TARGET_OUT_UNSTRIPPED)/system/bin TARGET_OUT_SHARED_LIBRARIES_UNSTRIPPED := $(TARGET_OUT_UNSTRIPPED)/system/lib +TARGET_OUT_VENDOR_SHARED_LIBRARIES_UNSTRIPPED := $(TARGET_OUT_UNSTRIPPED)/$(TARGET_COPY_OUT_VENDOR)/lib TARGET_ROOT_OUT_UNSTRIPPED := $(TARGET_OUT_UNSTRIPPED) TARGET_ROOT_OUT_SBIN_UNSTRIPPED := $(TARGET_OUT_UNSTRIPPED)/sbin TARGET_ROOT_OUT_BIN_UNSTRIPPED := $(TARGET_OUT_UNSTRIPPED)/bin diff --git a/core/executable_internal.mk b/core/executable_internal.mk index 2655dd1..ebb6867 100644 --- a/core/executable_internal.mk +++ b/core/executable_internal.mk @@ -35,7 +35,6 @@ endif # Define PRIVATE_ variables from global vars my_target_global_ld_dirs := $($(LOCAL_2ND_ARCH_VAR_PREFIX)TARGET_GLOBAL_LD_DIRS) -my_target_fdo_lib := $($(LOCAL_2ND_ARCH_VAR_PREFIX)TARGET_FDO_LIB) my_target_libgcov := $($(LOCAL_2ND_ARCH_VAR_PREFIX)TARGET_LIBGCOV) my_target_libgcc := $($(LOCAL_2ND_ARCH_VAR_PREFIX)TARGET_LIBGCC) my_target_libatomic := $($(LOCAL_2ND_ARCH_VAR_PREFIX)TARGET_LIBATOMIC) @@ -56,7 +55,6 @@ my_target_crtend_o := $(wildcard $(my_ndk_sysroot_lib)/crtend_android.o) endif $(linked_module): PRIVATE_TARGET_GLOBAL_LD_DIRS := $(my_target_global_ld_dirs) $(linked_module): PRIVATE_TARGET_GLOBAL_LDFLAGS := $(my_target_global_ldflags) -$(linked_module): PRIVATE_TARGET_FDO_LIB := $(my_target_fdo_lib) $(linked_module): PRIVATE_TARGET_LIBGCOV := $(my_target_libgcov) $(linked_module): PRIVATE_TARGET_LIBGCC := $(my_target_libgcc) $(linked_module): PRIVATE_TARGET_LIBATOMIC := $(my_target_libatomic) diff --git a/core/executable_prefer_symlink.mk b/core/executable_prefer_symlink.mk index f66a5f2..2326e83 100644 --- a/core/executable_prefer_symlink.mk +++ b/core/executable_prefer_symlink.mk @@ -8,17 +8,27 @@ # configuration. Note that we require the TARGET_IS_64_BIT # check because 32 bit targets may not define TARGET_PREFER_32_BIT_APPS # et al. since those variables make no sense in that context. - ifneq ($(LOCAL_IS_HOST_MODULE),true) my_symlink := $(addprefix $(TARGET_OUT)/bin/, $(LOCAL_MODULE)) ifeq ($(TARGET_IS_64_BIT),true) - ifneq ($(TARGET_PREFER_32_BIT_APPS),true) -$(my_symlink): PRIVATE_SRC_BINARY_NAME := $(LOCAL_MODULE_STEM_64) + ifeq ($(TARGET_SUPPORTS_64_BIT_APPS)|$(TARGET_SUPPORTS_32_BIT_APPS),true|true) + # We support both 32 and 64 bit apps, so we will have to + # base our decision on whether the target prefers one or the + # other. + ifeq ($(TARGET_PREFER_32_BIT_APPS),true) + $(my_symlink): PRIVATE_SRC_BINARY_NAME := $(LOCAL_MODULE_STEM_32) + else + $(my_symlink): PRIVATE_SRC_BINARY_NAME := $(LOCAL_MODULE_STEM_64) + endif + else ifeq ($(TARGET_SUPPORTS_64_BIT_APPS),true) + # We support only 64 bit apps. + $(my_symlink): PRIVATE_SRC_BINARY_NAME := $(LOCAL_MODULE_STEM_64) else -$(my_symlink): PRIVATE_SRC_BINARY_NAME := $(LOCAL_MODULE_STEM_32) + # We support only 32 bit apps. + $(my_symlink): PRIVATE_SRC_BINARY_NAME := $(LOCAL_MODULE_STEM_32) endif else -$(my_symlink): PRIVATE_SRC_BINARY_NAME := $(LOCAL_MODULE_STEM_32) + $(my_symlink): PRIVATE_SRC_BINARY_NAME := $(LOCAL_MODULE_STEM_32) endif else my_symlink := $(addprefix $(HOST_OUT)/bin/, $(LOCAL_MODULE)) diff --git a/core/host_dalvik_java_library.mk b/core/host_dalvik_java_library.mk index e15bde2..61eb3ff 100644 --- a/core/host_dalvik_java_library.mk +++ b/core/host_dalvik_java_library.mk @@ -67,6 +67,7 @@ $(full_classes_compiled_jar): PRIVATE_JAVA_LAYERS_FILE := $(layers_file) $(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) $(full_java_lib_deps) \ $(jar_manifest_file) $(proto_java_sources_file_stamp) $(LOCAL_ADDITIONAL_DEPENDENCIES) diff --git a/core/host_java_library.mk b/core/host_java_library.mk index e5ebb11..7e0e437 100644 --- a/core/host_java_library.mk +++ b/core/host_java_library.mk @@ -20,21 +20,65 @@ ####################################### include $(BUILD_SYSTEM)/host_java_library_common.mk +####################################### + +# Enable emma instrumentation only if the module asks so. +ifeq (true,$(LOCAL_EMMA_INSTRUMENT)) +ifneq (true,$(EMMA_INSTRUMENT)) +LOCAL_EMMA_INSTRUMENT := +endif +endif + +full_classes_compiled_jar := $(intermediates.COMMON)/classes-full-debug.jar +emma_intermediates_dir := $(intermediates.COMMON)/emma_out +# emma is hardcoded to use the leaf name of its input for the output file -- +# only the output directory can be changed +full_classes_emma_jar := $(emma_intermediates_dir)/lib/$(notdir $(full_classes_compiled_jar)) + +LOCAL_INTERMEDIATE_TARGETS += \ + $(full_classes_compiled_jar) \ + $(full_classes_emma_jar) + +####################################### include $(BUILD_SYSTEM)/base_rules.mk ####################################### -$(full_classes_compiled_jar): PRIVATE_JAVAC_DEBUG_FLAGS := -g +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) +ifdef LOCAL_EMMA_COVERAGE_FILTER +$(full_classes_emma_jar): PRIVATE_EMMA_COVERAGE_FILTER := $(LOCAL_EMMA_COVERAGE_FILTER) +else +# by default, avoid applying emma instrumentation onto emma classes itself, +# otherwise there will be exceptions thrown +$(full_classes_emma_jar): PRIVATE_EMMA_COVERAGE_FILTER := *,-emma,-emmarun,-com.vladium.* +endif +# this rule will generate both $(PRIVATE_EMMA_COVERAGE_FILE) and +# $(full_classes_emma_jar) +$(full_classes_emma_jar) : $(full_classes_compiled_jar) | $(EMMA_JAR) + $(transform-classes.jar-to-emma) + +$(LOCAL_BUILT_MODULE) : $(full_classes_emma_jar) + @echo Copying: $@ + $(hide) $(ACP) -fp $< $@ -java_alternative_checked_module := +else # LOCAL_EMMA_INSTRUMENT +# Directly build into LOCAL_BUILT_MODULE. +full_classes_compiled_jar := $(LOCAL_BUILT_MODULE) +endif # LOCAL_EMMA_INSTRUMENT + +$(full_classes_compiled_jar): PRIVATE_JAVAC_DEBUG_FLAGS := -g # The layers file allows you to enforce a layering between java packages. # Run build/tools/java-layers.py for more details. layers_file := $(addprefix $(LOCAL_PATH)/, $(LOCAL_JAVA_LAYERS_FILE)) -$(LOCAL_BUILT_MODULE): PRIVATE_JAVA_LAYERS_FILE := $(layers_file) -$(LOCAL_BUILT_MODULE): PRIVATE_JAVACFLAGS := $(LOCAL_JAVACFLAGS) -$(LOCAL_BUILT_MODULE): PRIVATE_JAR_EXCLUDE_FILES := -$(LOCAL_BUILT_MODULE): PRIVATE_JAVA_LAYERS_FILE := $(layers_file) -$(LOCAL_BUILT_MODULE): $(java_sources) $(java_resource_sources) $(full_java_lib_deps) \ +$(full_classes_compiled_jar): PRIVATE_JAVA_LAYERS_FILE := $(layers_file) +$(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) $(full_java_lib_deps) \ $(jar_manifest_file) $(proto_java_sources_file_stamp) $(LOCAL_ADDITIONAL_DEPENDENCIES) $(transform-host-java-to-package) diff --git a/core/install_jni_libs_internal.mk b/core/install_jni_libs_internal.mk index eb90c50..944420b 100644 --- a/core/install_jni_libs_internal.mk +++ b/core/install_jni_libs_internal.mk @@ -18,7 +18,7 @@ my_jni_shared_libraries := \ $(LOCAL_JNI_SHARED_LIBRARIES))) # App-specific lib path. -my_app_lib_path := $($(my_2nd_arch_prefix)TARGET_OUT$(partition_tag)_SHARED_LIBRARIES)/$(basename $(my_installed_module_stem)) +my_app_lib_path := $(dir $(LOCAL_INSTALLED_MODULE))lib/$(TARGET_$(my_2nd_arch_prefix)ARCH) my_extracted_jni_libs := ifdef my_embed_jni @@ -54,16 +54,20 @@ ifneq ($(my_jni_shared_libraries),) # The jni libaries will be installed to the system.img. my_jni_filenames := $(notdir $(my_jni_shared_libraries)) # Make sure the JNI libraries get installed -$(LOCAL_INSTALLED_MODULE) : | $(addprefix $($(my_2nd_arch_prefix)TARGET_OUT$(partition_tag)_SHARED_LIBRARIES)/, $(my_jni_filenames)) +my_shared_library_path := $($(my_2nd_arch_prefix)TARGET_OUT$(partition_tag)_SHARED_LIBRARIES) +$(LOCAL_INSTALLED_MODULE) : | $(addprefix $(my_shared_library_path)/, $(my_jni_filenames)) # Create symlink in the app specific lib path ifdef LOCAL_POST_INSTALL_CMD # Add a shell command separator LOCAL_POST_INSTALL_CMD += ; endif + +my_symlink_target_dir := $(patsubst $(PRODUCT_OUT)%,%,\ + $(my_shared_library_path)) LOCAL_POST_INSTALL_CMD += \ mkdir -p $(my_app_lib_path) \ - $(foreach lib, $(my_jni_filenames), ;ln -sf ../$(lib) $(my_app_lib_path)/$(lib)) + $(foreach lib, $(my_jni_filenames), ;ln -sf $(my_symlink_target_dir)/$(lib) $(my_app_lib_path)/$(lib)) $(LOCAL_INSTALLED_MODULE): PRIVATE_POST_INSTALL_CMD := $(LOCAL_POST_INSTALL_CMD) # Clear jni_shared_libraries to not embed it into the apk. diff --git a/core/java.mk b/core/java.mk index 049bc51..debdf53 100644 --- a/core/java.mk +++ b/core/java.mk @@ -26,6 +26,8 @@ ifneq ($(LOCAL_SDK_VERSION),) ifeq ($(LOCAL_SDK_VERSION)$(TARGET_BUILD_APPS),current) # Use android_stubs_current if LOCAL_SDK_VERSION is current and no TARGET_BUILD_APPS. LOCAL_JAVA_LIBRARIES := android_stubs_current $(LOCAL_JAVA_LIBRARIES) + else ifeq ($(LOCAL_SDK_VERSION)$(TARGET_BUILD_APPS),system_current) + LOCAL_JAVA_LIBRARIES := android_system_stubs_current $(LOCAL_JAVA_LIBRARIES) else LOCAL_JAVA_LIBRARIES := sdk_v$(LOCAL_SDK_VERSION) $(LOCAL_JAVA_LIBRARIES) endif @@ -142,7 +144,7 @@ renderscript_target_api := $(LOCAL_RENDERSCRIPT_TARGET_API) else ifneq (,$(LOCAL_SDK_VERSION)) # Set target-api for LOCAL_SDK_VERSIONs other than current. -ifneq (,$(filter-out current, $(LOCAL_SDK_VERSION))) +ifneq (,$(filter-out current system_current, $(LOCAL_SDK_VERSION))) renderscript_target_api := $(LOCAL_SDK_VERSION) endif endif # LOCAL_SDK_VERSION is set @@ -158,7 +160,7 @@ renderscript_flags := -Wall -Werror renderscript_flags += $(LOCAL_RENDERSCRIPT_FLAGS) # prepend the RenderScript system include path -ifneq ($(filter-out current,$(LOCAL_SDK_VERSION))$(if $(TARGET_BUILD_APPS),$(filter current,$(LOCAL_SDK_VERSION))),) +ifneq ($(filter-out current system_current,$(LOCAL_SDK_VERSION))$(if $(TARGET_BUILD_APPS),$(filter current system_current,$(LOCAL_SDK_VERSION))),) # if a numeric LOCAL_SDK_VERSION, or current LOCAL_SDK_VERSION with TARGET_BUILD_APPS LOCAL_RENDERSCRIPT_INCLUDES := \ $(HISTORICAL_SDK_VERSIONS_ROOT)/renderscript/clang-include \ @@ -321,6 +323,10 @@ layers_file := $(addprefix $(LOCAL_PATH)/, $(LOCAL_JAVA_LAYERS_FILE)) $(full_classes_compiled_jar): PRIVATE_JAVA_LAYERS_FILE := $(layers_file) $(full_classes_compiled_jar): PRIVATE_WARNINGS_ENABLE := $(LOCAL_WARNINGS_ENABLE) +ifdef LOCAL_RMTYPEDEFS +$(full_classes_compiled_jar): | $(RMTYPEDEFS) +endif + # Compile the java files to a .jar file. # This intentionally depends on java_sources, not all_java_sources. # Deps for generated source files must be handled separately, @@ -328,6 +334,8 @@ $(full_classes_compiled_jar): PRIVATE_WARNINGS_ENABLE := $(LOCAL_WARNINGS_ENABLE $(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) $(java_resource_sources) $(full_java_lib_deps) \ $(jar_manifest_file) $(layers_file) $(RenderScript_file_stamp) \ @@ -378,7 +386,7 @@ $(full_classes_jar): $(full_classes_emma_jar) | $(ACP) # Run proguard if necessary, otherwise just copy the file. ifdef LOCAL_PROGUARD_ENABLED -ifneq ($(filter-out full custom nosystem obfuscation optimization,$(LOCAL_PROGUARD_ENABLED)),) +ifneq ($(filter-out full custom nosystem obfuscation optimization shrinktests,$(LOCAL_PROGUARD_ENABLED)),) $(warning while processing: $(LOCAL_MODULE)) $(error invalid value for LOCAL_PROGUARD_ENABLED: $(LOCAL_PROGUARD_ENABLED)) endif @@ -395,6 +403,9 @@ 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 +ifeq ($(filter shrinktests,$(LOCAL_PROGUARD_ENABLED)),) +proguard_flags += -dontshrink # don't shrink tests by default +endif # shrinktests endif # test package ifeq ($(filter obfuscation,$(LOCAL_PROGUARD_ENABLED)),) # By default no obfuscation @@ -499,7 +510,7 @@ $(LOCAL_MODULE)-findbugs : $(findbugs_html) $(findbugs_html) : $(findbugs_xml) @mkdir -p $(dir $@) @echo ConvertXmlToText: $@ - $(hide) prebuilt/common/findbugs/bin/convertXmlToText -html:fancy.xsl $(PRIVATE_XML_FILE) \ + $(hide) $(FINDBUGS_DIR)/convertXmlToText -html:fancy.xsl $(PRIVATE_XML_FILE) \ > $@ $(LOCAL_MODULE)-findbugs : $(findbugs_html) diff --git a/core/main.mk b/core/main.mk index 1958a16..7ca30c7 100644 --- a/core/main.mk +++ b/core/main.mk @@ -185,12 +185,8 @@ ifeq ($(requires_openjdk), true) # java version is really openjdk ifeq ($(shell echo '$(java_version_str)' | grep -i openjdk),) $(info ************************************************************) -$(info You are attempting to build with an unsupported JDK.) -$(info $(space)) -$(info This build requires OpenJDK, but you are using:) +$(info You asked for an OpenJDK 7 build but your version is) $(info $(java_version_str).) -$(info Please follow the machine setup instructions at) -$(info $(space)$(space)$(space)$(space)https://source.android.com/source/download.html) $(info ************************************************************) $(error stop) endif # java version is not OpenJdk @@ -381,10 +377,12 @@ ifneq ($(filter ro.setupwizard.mode=ENABLED, $(call collapse-pairs, $(ADDITIONAL $(call collapse-pairs, $(ADDITIONAL_BUILD_PROPERTIES))) \ ro.setupwizard.mode=OPTIONAL endif -# Don't even verify the image on eng builds to speed startup -ADDITIONAL_BUILD_PROPERTIES += dalvik.vm.image-dex2oat-filter=verify-none -# Don't compile apps on eng builds to speed startup -ADDITIONAL_BUILD_PROPERTIES += dalvik.vm.dex2oat-filter=interpret-only +ifndef is_sdk_build + # Don't even verify the image on eng builds to speed startup + ADDITIONAL_BUILD_PROPERTIES += dalvik.vm.image-dex2oat-filter=verify-none + # Don't compile apps on eng builds to speed startup + ADDITIONAL_BUILD_PROPERTIES += dalvik.vm.dex2oat-filter=interpret-only +endif endif ## sdk ## @@ -395,7 +393,7 @@ ifdef is_sdk_build sdk_repo_goal := $(strip $(filter sdk_repo,$(MAKECMDGOALS))) MAKECMDGOALS := $(strip $(filter-out sdk_repo,$(MAKECMDGOALS))) -ifneq ($(words $(filter-out $(INTERNAL_MODIFIER_TARGETS) checkbuild,$(MAKECMDGOALS))),1) +ifneq ($(words $(filter-out $(INTERNAL_MODIFIER_TARGETS) checkbuild emulator_tests target-files-package,$(MAKECMDGOALS))),1) $(error The 'sdk' target may not be specified with any other targets) endif @@ -773,7 +771,7 @@ ifdef is_sdk_build $(if $(strip $(ALL_MODULES.$(m).INSTALLED) $(ALL_MODULES.$(m)$(TARGET_2ND_ARCH_MODULE_SUFFIX).INSTALLED)),,\ $(eval dangling_modules += $(m)))) ifneq ($(dangling_modules),) - $(warning Module names '$(dangling_modules)' in PRODUCT_PACKAGES has nothing to install!) + $(warning: Modules '$(dangling_modules)' in PRODUCT_PACKAGES have nothing to install!) endif $(foreach m, $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_PACKAGES_DEBUG), \ $(if $(strip $(ALL_MODULES.$(m).INSTALLED)),,\ @@ -965,6 +963,7 @@ else # TARGET_BUILD_APPS $(foreach f,$(INSTALLED_RADIOIMAGE_TARGET), \ $(call dist-for-goals, droidcore, $(f))) + ifneq ($(ANDROID_BUILD_EMBEDDED),true) ifneq ($(TARGET_BUILD_PDK),true) $(call dist-for-goals, droidcore, \ $(APPS_ZIP) \ @@ -972,6 +971,7 @@ else # TARGET_BUILD_APPS $(PACKAGE_STATS_FILE) \ ) endif + endif ifeq ($(EMMA_INSTRUMENT),true) $(EMMA_META_ZIP) : $(INSTALLED_SYSTEMIMAGE) @@ -1011,6 +1011,12 @@ target-java-tests : java-target-tests target-native-tests : native-target-tests tests : host-tests target-tests +# To catch more build breakage, check build tests modules in eng and userdebug builds. +ifneq ($(TARGET_BUILD_PDK),true) +ifneq ($(filter eng userdebug,$(TARGET_BUILD_VARIANT)),) +droidcore : target-tests host-tests +endif +endif .PHONY: lintall @@ -1035,7 +1041,7 @@ findbugs: $(INTERNAL_FINDBUGS_HTML_TARGET) $(INTERNAL_FINDBUGS_XML_TARGET) .PHONY: clean clean: - @rm -rf $(OUT_DIR) + @rm -rf $(OUT_DIR)/* @echo "Entire build directory removed." .PHONY: clobber diff --git a/core/multi_prebuilt.mk b/core/multi_prebuilt.mk index be60e2f..bc85cea 100644 --- a/core/multi_prebuilt.mk +++ b/core/multi_prebuilt.mk @@ -69,7 +69,11 @@ $(foreach t,$(1), \ $(if $(7), \ $(eval LOCAL_BUILT_MODULE_STEM := $(7)) \ , \ - $(eval LOCAL_BUILT_MODULE_STEM := $(notdir $(LOCAL_SRC_FILES))) \ + $(if $(word 2,$(tw)), \ + $(eval LOCAL_BUILT_MODULE_STEM := $(LOCAL_MODULE)$(suffix $(LOCAL_SRC_FILES))) \ + , \ + $(eval LOCAL_BUILT_MODULE_STEM := $(notdir $(LOCAL_SRC_FILES))) \ + ) \ ) \ $(eval LOCAL_MODULE_SUFFIX := $(suffix $(LOCAL_SRC_FILES))) \ $(if $(filter user,$(TARGET_BUILD_VARIANT)), \ diff --git a/core/package_internal.mk b/core/package_internal.mk index a951357..bb458d4 100644 --- a/core/package_internal.mk +++ b/core/package_internal.mk @@ -52,16 +52,6 @@ $(error $(LOCAL_PATH): Package modules may not define LOCAL_MODULE) endif LOCAL_MODULE := $(LOCAL_PACKAGE_NAME) -ifeq ($(strip $(LOCAL_MANIFEST_FILE)),) -LOCAL_MANIFEST_FILE := AndroidManifest.xml -endif - -# If you need to put the MANIFEST_FILE outside of LOCAL_PATH -# you can use FULL_MANIFEST_FILE -ifeq ($(strip $(LOCAL_FULL_MANIFEST_FILE)),) -LOCAL_FULL_MANIFEST_FILE := $(LOCAL_PATH)/$(LOCAL_MANIFEST_FILE) -endif - ifneq ($(strip $(LOCAL_MODULE_CLASS)),) $(error $(LOCAL_PATH): Package modules may not set LOCAL_MODULE_CLASS) endif @@ -78,6 +68,10 @@ ifeq ($(filter tests, $(LOCAL_MODULE_TAGS)),) LOCAL_AAPT_FLAGS := $(LOCAL_AAPT_FLAGS) -z endif +ifdef LOCAL_PACKAGE_SPLITS +LOCAL_AAPT_FLAGS += $(addprefix --split ,$(LOCAL_PACKAGE_SPLITS)) +endif + need_compile_asset := ifeq (,$(LOCAL_ASSET_DIR)) LOCAL_ASSET_DIR := $(LOCAL_PATH)/assets @@ -101,8 +95,14 @@ package_resource_overlays := $(strip \ LOCAL_RESOURCE_DIR := $(package_resource_overlays) $(LOCAL_RESOURCE_DIR) -all_assets := $(call find-subdir-assets,$(LOCAL_ASSET_DIR)) -all_assets := $(addprefix $(LOCAL_ASSET_DIR)/,$(patsubst assets/%,%,$(all_assets))) +all_assets := $(strip \ + $(foreach dir, $(LOCAL_ASSET_DIR), \ + $(addprefix $(dir)/, \ + $(patsubst assets/%,%, \ + $(call find-subdir-assets, $(dir)) \ + ) \ + ) \ + )) ifneq ($(all_assets),) need_compile_asset := true @@ -141,6 +141,7 @@ LOCAL_INTERMEDIATE_TARGETS += $(R_file_stamp) endif LOCAL_BUILT_MODULE_STEM := package.apk +LOCAL_INSTALLED_MODULE_STEM := $(LOCAL_MODULE).apk LOCAL_PROGUARD_ENABLED:=$(strip $(LOCAL_PROGUARD_ENABLED)) ifndef LOCAL_PROGUARD_ENABLED @@ -200,10 +201,11 @@ ifeq ($(LOCAL_SDK_RES_VERSION),) LOCAL_SDK_RES_VERSION:=$(LOCAL_SDK_VERSION) endif -full_android_manifest := $(LOCAL_FULL_MANIFEST_FILE) +include $(BUILD_SYSTEM)/android_manifest.mk + $(LOCAL_INTERMEDIATE_TARGETS): \ PRIVATE_ANDROID_MANIFEST := $(full_android_manifest) -ifneq (,$(filter-out current, $(LOCAL_SDK_VERSION))) +ifneq (,$(filter-out current system_current, $(LOCAL_SDK_VERSION))) $(LOCAL_INTERMEDIATE_TARGETS): \ PRIVATE_DEFAULT_APP_TARGET_SDK := $(LOCAL_SDK_VERSION) else @@ -251,6 +253,7 @@ $(R_file_stamp): $(all_res_assets) $(full_android_manifest) $(RenderScript_file_ $(proguard_options_file): $(R_file_stamp) +resource_export_package := ifdef LOCAL_EXPORT_PACKAGE_RESOURCES # Put this module's resources into a PRODUCT-agnositc package that # other packages can use to build their own PRODUCT-agnostic R.java (etc.) @@ -290,7 +293,7 @@ else # Most packages should link against the resources defined by framework-res. # Even if they don't have their own resources, they may use framework # resources. -ifneq ($(filter-out current,$(LOCAL_SDK_RES_VERSION))$(if $(TARGET_BUILD_APPS),$(filter current,$(LOCAL_SDK_RES_VERSION))),) +ifneq ($(filter-out current system_current,$(LOCAL_SDK_RES_VERSION))$(if $(TARGET_BUILD_APPS),$(filter current system_current,$(LOCAL_SDK_RES_VERSION))),) # for released sdk versions, the platform resources were built into android.jar. framework_res_package_export := \ $(HISTORICAL_SDK_VERSIONS_ROOT)/$(LOCAL_SDK_RES_VERSION)/android.jar @@ -304,9 +307,19 @@ framework_res_package_export := \ framework_res_package_export_deps := \ $(dir $(framework_res_package_export))src/R.stamp endif # LOCAL_SDK_RES_VERSION -$(R_file_stamp): $(framework_res_package_export_deps) +all_library_res_package_exports := \ + $(framework_res_package_export) \ + $(foreach lib,$(LOCAL_RES_LIBRARIES),\ + $(call intermediates-dir-for,APPS,$(lib),,COMMON)/package-export.apk) + +all_library_res_package_export_deps := \ + $(framework_res_package_export_deps) \ + $(foreach lib,$(LOCAL_RES_LIBRARIES),\ + $(call intermediates-dir-for,APPS,$(lib),,COMMON)/src/R.stamp) + +$(resource_export_package) $(R_file_stamp) $(LOCAL_BUILT_MODULE): $(all_library_res_package_export_deps) $(LOCAL_INTERMEDIATE_TARGETS): \ - PRIVATE_AAPT_INCLUDES := $(framework_res_package_export) + PRIVATE_AAPT_INCLUDES := $(all_library_res_package_exports) endif # LOCAL_NO_STANDARD_LIBRARIES ifneq ($(full_classes_jar),) @@ -364,8 +377,12 @@ ifeq ($(LOCAL_AAPT_INCLUDE_ALL_RESOURCES),true) $(LOCAL_BUILT_MODULE): PRIVATE_PRODUCT_AAPT_PREF_CONFIG := else $(LOCAL_BUILT_MODULE): PRIVATE_PRODUCT_AAPT_CONFIG := $(PRODUCT_AAPT_CONFIG) +ifdef LOCAL_PACKAGE_SPLITS + $(LOCAL_BUILT_MODULE): PRIVATE_PRODUCT_AAPT_PREF_CONFIG := +else $(LOCAL_BUILT_MODULE): PRIVATE_PRODUCT_AAPT_PREF_CONFIG := $(PRODUCT_AAPT_PREF_CONFIG) endif +endif $(LOCAL_BUILT_MODULE): $(all_res_assets) $(jni_shared_libraries) $(full_android_manifest) @echo "target Package: $(PRIVATE_MODULE) ($@)" $(create-empty-package) @@ -402,6 +419,44 @@ $(built_odex) : $(dir $(LOCAL_BUILT_MODULE))% : $(built_dex) $(hide) rm $@.input endif +############################### +## APK splits +ifdef LOCAL_PACKAGE_SPLITS +# LOCAL_PACKAGE_SPLITS is a list of resource labels. +# aapt will convert comma inside resource lable to underscore in the file names. +my_split_suffixes := $(subst $(comma),_,$(LOCAL_PACKAGE_SPLITS)) +built_apk_splits := $(foreach s,$(my_split_suffixes),$(built_module_path)/package_$(s).apk) +installed_apk_splits := $(foreach s,$(my_split_suffixes),$(my_module_path)/$(LOCAL_MODULE)_$(s).apk) + +# The splits should have been built in the same command building the base apk. +# This rule just runs signing and zipalign etc. +# Note that we explicily check the existence of the split apk and remove the +# built base apk if the split apk isn't there. +# That way the build system will rerun the aapt after the user changes the splitting parameters. +$(built_apk_splits): PRIVATE_PRIVATE_KEY := $(private_key) +$(built_apk_splits): PRIVATE_CERTIFICATE := $(certificate) +$(built_apk_splits) : $(built_module_path)/%.apk : $(LOCAL_BUILT_MODULE) + $(hide) if [ ! -f $@ ]; then \ + echo 'No $@ generated, check your apk splitting parameters.' 1>&2; \ + rm $<; exit 1; \ + fi + $(sign-package) + $(align-package) + +# Rules to install the splits +$(installed_apk_splits) : $(my_module_path)/$(LOCAL_MODULE)_%.apk : $(built_module_path)/package_%.apk | $(ACP) + @echo "Install: $@" + $(copy-file-to-new-target) + +# Register the additional built and installed files. +ALL_MODULES.$(my_register_name).INSTALLED += $(installed_apk_splits) +ALL_MODULES.$(my_register_name).BUILT_INSTALLED += \ + $(foreach s,$(my_split_suffixes),$(built_module_path)/package_$(s).apk:$(my_module_path)/$(LOCAL_MODULE)_$(s).apk) + +# Make sure to install the splits when you run "make <module_name>". +$(my_register_name): $(installed_apk_splits) +endif # LOCAL_PACKAGE_SPLITS + # Save information about this package PACKAGES.$(LOCAL_PACKAGE_NAME).OVERRIDES := $(strip $(LOCAL_OVERRIDES_PACKAGES)) PACKAGES.$(LOCAL_PACKAGE_NAME).RESOURCE_FILES := $(all_resources) diff --git a/core/pathmap.mk b/core/pathmap.mk index b2abc07..0820885 100644 --- a/core/pathmap.mk +++ b/core/pathmap.mk @@ -29,10 +29,8 @@ pathmap_INCL := \ bootloader:bootable/bootloader/legacy/include \ camera:system/media/camera/include \ - corecg:external/skia/include/core \ frameworks-base:frameworks/base/include \ frameworks-native:frameworks/native/include \ - graphics:external/skia/include/core \ libc:bionic/libc/include \ libhardware:hardware/libhardware/include \ libhardware_legacy:hardware/libhardware_legacy/include \ @@ -51,6 +49,7 @@ pathmap_INCL := \ audio-route:system/media/audio_route/include \ wilhelm:frameworks/wilhelm/include \ wilhelm-ut:frameworks/wilhelm/src/ut \ + mediandk:frameworks/av/media/ndk/ \ speex:external/speex/include # @@ -86,7 +85,9 @@ FRAMEWORKS_BASE_SUBDIRS := \ drm \ opengl \ sax \ + telecomm \ telephony \ + phone \ wifi \ keystore \ rs \ @@ -105,12 +106,17 @@ FRAMEWORKS_BASE_JAVA_SRC_DIRS := \ # A list of all source roots under frameworks/support. # FRAMEWORKS_SUPPORT_SUBDIRS := \ + annotations \ v4 \ v7/gridlayout \ v7/appcompat \ + v7/cardview \ v7/mediarouter \ + v7/palette \ + v7/recyclerview \ v8/renderscript \ - v13 + v13 \ + v17/leanback # # A list of all source roots under frameworks/multidex. diff --git a/core/pdk_config.mk b/core/pdk_config.mk index 9590d70..838754f 100644 --- a/core/pdk_config.mk +++ b/core/pdk_config.mk @@ -18,9 +18,14 @@ pdk fusion: $(DEFAULT_GOAL) # if PDK_FUSION_PLATFORM_ZIP is specified, do not override. ifndef PDK_FUSION_PLATFORM_ZIP +# Most PDK project paths should be using vendor/pdk/TARGET_DEVICE +# but some legacy ones (e.g. mini_armv7a_neon generic PDK) were setup +# with vendor/pdk/TARGET_PRODUCT. _pdk_fusion_default_platform_zip = $(wildcard \ vendor/pdk/$(TARGET_DEVICE)/$(TARGET_PRODUCT)-$(TARGET_BUILD_VARIANT)/platform/platform.zip \ -vendor/pdk/$(TARGET_DEVICE)/$(patsubst aosp_%,full_%,$(TARGET_PRODUCT))-$(TARGET_BUILD_VARIANT)/platform/platform.zip) +vendor/pdk/$(TARGET_DEVICE)/$(patsubst aosp_%,full_%,$(TARGET_PRODUCT))-$(TARGET_BUILD_VARIANT)/platform/platform.zip \ +vendor/pdk/$(TARGET_PRODUCT)/$(TARGET_PRODUCT)-$(TARGET_BUILD_VARIANT)/platform/platform.zip \ +vendor/pdk/$(TARGET_PRODUCT)/$(patsubst aosp_%,full_%,$(TARGET_PRODUCT))-$(TARGET_BUILD_VARIANT)/platform/platform.zip) ifneq (,$(_pdk_fusion_default_platform_zip)) PDK_FUSION_PLATFORM_ZIP := $(word 1, $(_pdk_fusion_default_platform_zip)) TARGET_BUILD_PDK := true @@ -37,29 +42,41 @@ endif endif # fusion endif # pdk or fusion +PDK_PLATFORM_JAVA_ZIP_JAVA_TARGET_LIB_DIR := +PDK_PLATFORM_JAVA_ZIP_JAVA_HOST_LIB_DIR := \ + host/common/obj/JAVA_LIBRARIES/bouncycastle-host_intermediates +PDK_PLATFORM_JAVA_ZIP_CONTENTS := + ifneq (,$(filter platform-java, $(MAKECMDGOALS))$(PDK_FUSION_PLATFORM_ZIP)) # additional items to add to platform.zip for platform-java build # 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_LIB_DIR := \ +PDK_PLATFORM_JAVA_ZIP_JAVA_TARGET_LIB_DIR += \ target/common/obj/JAVA_LIBRARIES/android_stubs_current_intermediates \ - target/common/obj/JAVA_LIBRARIES/core_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/framework2_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-ex-camera2_intermediates \ + target/common/obj/JAVA_LIBRARIES/android-common_intermediates \ + # not java libraries -PDK_PLATFORM_JAVA_ZIP_CONTENTS := \ +PDK_PLATFORM_JAVA_ZIP_CONTENTS += \ target/common/obj/APPS/framework-res_intermediates/package-export.apk \ target/common/obj/APPS/framework-res_intermediates/src/R.stamp +endif # platform-java or FUSION build + +PDK_PLATFORM_JAVA_ZIP_JAVA_LIB_DIR := \ + $(PDK_PLATFORM_JAVA_ZIP_JAVA_TARGET_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) -endif # platform-java or FUSION build # check and override java support level ifneq ($(TARGET_BUILD_PDK)$(PDK_FUSION_PLATFORM_ZIP),) @@ -117,6 +134,11 @@ $(PRODUCT_OUT)/% : $(_pdk_fusion_intermediates)/% $(_pdk_fusion_stamp) $(hide) rm -rf $@ $(hide) cp -fpPR $< $@ +# implicit rules for host java files +$(HOST_COMMON_OUT_ROOT)/% : $(_pdk_fusion_intermediates)/host/common/% $(_pdk_fusion_stamp) + @mkdir -p $(dir $@) + $(hide) cp -fpPR $< $@ + ifeq (true,$(TARGET_BUILD_PDK_JAVA_PLATFORM)) PDK_FUSION_OUT_DIR := $(OUT_DIR) @@ -137,11 +159,11 @@ target/common/obj/APPS/framework-res_intermediates/src/R.stamp,\ target/common/obj/APPS/framework-res_intermediates/package-export.apk)) # javalib.jar should pull classes.jar as classes.jar is not explicitly pulled. -$(foreach lib_dir,$(PDK_PLATFORM_JAVA_ZIP_JAVA_LIB_DIR),\ +$(foreach lib_dir,$(PDK_PLATFORM_JAVA_ZIP_JAVA_TARGET_LIB_DIR),\ $(eval $(call JAVA_dependency_template,$(lib_dir)/javalib.jar,\ $(lib_dir)/classes.jar))) -# implicit rules for all others +# implicit rules for all other target files $(TARGET_COMMON_OUT_ROOT)/% : $(_pdk_fusion_intermediates)/target/common/% $(_pdk_fusion_stamp) @mkdir -p $(dir $@) $(hide) cp -fpPR $< $@ @@ -170,12 +192,16 @@ endif # BUILD_PDK ifneq (,$(filter platform platform-java, $(MAKECMDGOALS))$(filter true,$(TARGET_BUILD_PDK))) # files under $(PRODUCT_OUT)/symbols to help debugging. # Source not included to PDK due to dependency issue, so provide symbols instead. + +# We may not be building all of them. +# The platform.zip just silently ignores the nonexistent ones. PDK_SYMBOL_FILES_LIST := \ - system/bin/app_process + system/bin/app_process32 \ + system/bin/app_process64 ifdef PDK_FUSION_PLATFORM_ZIP # symbols should be explicitly pulled for fusion build -$(foreach f,$(PDK_SYMBOL_FILES_LIST),\ +$(foreach f,$(filter $(PDK_SYMBOL_FILES_LIST), $(_pdk_fusion_file_list)),\ $(eval $(call add-dependency,$(PRODUCT_OUT)/$(f),$(PRODUCT_OUT)/symbols/$(f)))) endif # PLATFORM_ZIP endif # platform.zip build or PDK diff --git a/core/post_clean.mk b/core/post_clean.mk index 213c43c..0273ff2 100644 --- a/core/post_clean.mk +++ b/core/post_clean.mk @@ -15,6 +15,7 @@ # Clean steps that need global knowledge of individual modules. # This file must be included after all Android.mks have been loaded. +####################################################### # Checks the current build configurations against the previous build, # clean artifacts in TARGET_COMMON_OUT_ROOT if necessary. # If a package's resource overlay has been changed, its R class needs to be @@ -51,3 +52,45 @@ $(shell mv -f $(current_package_overlay_config) $(previous_package_overlay_confi previous_package_overlay_config := current_package_overlay_config := current_all_packages_config := + +####################################################### +# Check if we need to delete obsolete aidl-generated java files. +# When an aidl file gets deleted (or renamed), the generated java file is obsolete. +previous_aidl_config := $(TARGET_OUT_COMMON_INTERMEDIATES)/previous_aidl_config.mk +current_aidl_config := $(TARGET_OUT_COMMON_INTERMEDIATES)/current_aidl_config.mk + +$(shell rm -rf $(current_aidl_config) \ + && mkdir -p $(dir $(current_aidl_config))\ + && touch $(current_aidl_config)) +-include $(previous_aidl_config) + +intermediates_to_clean := +modules_with_aidl_files := +$(foreach p, $(ALL_MODULES), \ + $(if $(ALL_MODULES.$(p).AIDL_FILES),\ + $(eval modules_with_aidl_files += $(p))\ + $(shell echo 'AIDL_FILES.$(p) := $(ALL_MODULES.$(p).AIDL_FILES)' >> $(current_aidl_config)))\ + $(if $(filter-out $(ALL_MODULES.$(p).AIDL_FILES),$(AIDL_FILES.$(p))),\ + $(eval intermediates_to_clean += $(ALL_MODULES.$(p).INTERMEDIATE_SOURCE_DIR)))) +intermediates_to_clean := $(strip $(intermediates_to_clean)) +ifdef intermediates_to_clean +$(info *** Obsolete aidl-generated files detected, clean intermediate files...) +$(info *** rm -rf $(intermediates_to_clean)) +$(shell rm -rf $(intermediates_to_clean)) +intermediates_to_clean := +endif + +# For modules not loaded by the current build (e.g. you are running mm/mmm), +# we copy the info from the previous bulid. +$(foreach p, $(filter-out $(ALL_MODULES),$(MODULES_WITH_AIDL_FILES)),\ + $(shell echo 'AIDL_FILES.$(p) := $(AIDL_FILES.$(p))' >> $(current_aidl_config))) +MODULES_WITH_AIDL_FILES := $(sort $(MODULES_WITH_AIDL_FILES) $(modules_with_aidl_files)) +$(shell echo 'MODULES_WITH_AIDL_FILES := $(MODULES_WITH_AIDL_FILES)' >> $(current_aidl_config)) + +# Now current becomes previous. +$(shell mv -f $(current_aidl_config) $(previous_aidl_config)) + +MODULES_WITH_AIDL_FILES := +modules_with_aidl_files := +previous_aidl_config := +current_aidl_config := diff --git a/core/prebuilt_internal.mk b/core/prebuilt_internal.mk index d852541..7e1ea4b 100644 --- a/core/prebuilt_internal.mk +++ b/core/prebuilt_internal.mk @@ -54,6 +54,11 @@ ifeq (STATIC_LIBRARIES,$(LOCAL_MODULE_CLASS)) endif endif +ifeq ($(LOCAL_MODULE_CLASS),APPS) +LOCAL_BUILT_MODULE_STEM := package.apk +LOCAL_INSTALLED_MODULE_STEM := $(LOCAL_MODULE).apk +endif + ifeq ($(LOCAL_STRIP_MODULE),true) ifdef LOCAL_IS_HOST_MODULE $(error Cannot strip host module LOCAL_PATH=$(LOCAL_PATH)) @@ -109,6 +114,7 @@ endif endif # LOCAL_STRIP_MODULE not true +ifeq ($(LOCAL_MODULE_CLASS),APPS) PACKAGES.$(LOCAL_MODULE).OVERRIDES := $(strip $(LOCAL_OVERRIDES_PACKAGES)) rs_compatibility_jni_libs := @@ -128,11 +134,9 @@ ifeq ($(LOCAL_CERTIFICATE),EXTERNAL) $(built_module) : PRIVATE_CERTIFICATE := $(LOCAL_CERTIFICATE).x509.pem endif ifeq ($(LOCAL_CERTIFICATE),) - ifneq ($(filter APPS,$(LOCAL_MODULE_CLASS)),) - # It is now a build error to add a prebuilt .apk without - # specifying a key for it. - $(error No LOCAL_CERTIFICATE specified for prebuilt "$(my_prebuilt_src_file)") - endif + # It is now a build error to add a prebuilt .apk without + # specifying a key for it. + $(error No LOCAL_CERTIFICATE specified for prebuilt "$(my_prebuilt_src_file)") else ifeq ($(LOCAL_CERTIFICATE),PRESIGNED) # The magic string "PRESIGNED" means this package is already checked # signed with its release key. @@ -156,10 +160,10 @@ else $(built_module) : PRIVATE_CERTIFICATE := $(LOCAL_CERTIFICATE).x509.pem endif -ifneq ($(filter APPS,$(LOCAL_MODULE_CLASS)),) - -# Disable dex-preopt of prebuilts to save space +# Disable dex-preopt of prebuilts to save space, if requested. +ifeq ($(DONT_DEXPREOPT_PREBUILTS),true) LOCAL_DEX_PREOPT := false +endif ####################################### # defines built_odex along with rule to install odex @@ -188,6 +192,42 @@ $(built_odex) : $(my_prebuilt_src_file) $(call dexpreopt-one-file,$<,$@) endif +############################### +## Install split apks. +ifdef LOCAL_PACKAGE_SPLITS +# LOCAL_PACKAGE_SPLITS is a list of apks to be installed. +built_apk_splits := $(addprefix $(built_module_path)/,$(notdir $(LOCAL_PACKAGE_SPLITS))) +installed_apk_splits := $(addprefix $(my_module_path)/,$(notdir $(LOCAL_PACKAGE_SPLITS))) + +# Rules to sign and zipalign the split apks. +my_src_dir := $(sort $(dir $(LOCAL_PACKAGE_SPLITS))) +ifneq (1,$(words $(my_src_dir))) +$(error You must put all the split source apks in the same folder: $(LOCAL_PACKAGE_SPLITS)) +endif +my_src_dir := $(LOCAL_PATH)/$(my_src_dir) + +$(built_apk_splits) : PRIVATE_PRIVATE_KEY := $(LOCAL_CERTIFICATE).pk8 +$(built_apk_splits) : PRIVATE_CERTIFICATE := $(LOCAL_CERTIFICATE).x509.pem +$(built_apk_splits) : $(built_module_path)/%.apk : $(my_src_dir)/%.apk | $(ACP) + $(copy-file-to-new-target) + $(sign-package) + $(align-package) + +# Rules to install the split apks. +$(installed_apk_splits) : $(my_module_path)/%.apk : $(built_module_path)/%.apk | $(ACP) + @echo "Install: $@" + $(copy-file-to-new-target) + +# Register the additional built and installed files. +ALL_MODULES.$(my_register_name).INSTALLED += $(installed_apk_splits) +ALL_MODULES.$(my_register_name).BUILT_INSTALLED += \ + $(foreach s,$(LOCAL_PACKAGE_SPLITS),$(built_module_path)/$(notdir $(s)):$(my_module_path)/$(notdir $(s))) + +# Make sure to install the splits when you run "make <module_name>". +$(my_register_name): $(installed_apk_splits) + +endif # LOCAL_PACKAGE_SPLITS + else # LOCAL_MODULE_CLASS != APPS ifneq ($(LOCAL_PREBUILT_STRIP_COMMENTS),) $(built_module) : $(my_prebuilt_src_file) diff --git a/core/product.mk b/core/product.mk index 7146b33..ed906cb 100644 --- a/core/product.mk +++ b/core/product.mk @@ -86,10 +86,12 @@ _product_var_list := \ PRODUCT_PACKAGE_OVERLAYS \ DEVICE_PACKAGE_OVERLAYS \ PRODUCT_TAGS \ + PRODUCT_SDK_ATREE_FILES \ PRODUCT_SDK_ADDON_NAME \ PRODUCT_SDK_ADDON_COPY_FILES \ PRODUCT_SDK_ADDON_COPY_MODULES \ PRODUCT_SDK_ADDON_DOC_MODULES \ + PRODUCT_SDK_ADDON_SYS_IMG_SOURCE_PROP \ PRODUCT_DEFAULT_WIFI_CHANNELS \ PRODUCT_DEFAULT_DEV_CERTIFICATE \ PRODUCT_RESTRICT_VENDOR_FILES \ @@ -98,6 +100,13 @@ _product_var_list := \ PRODUCT_FACTORY_BUNDLE_MODULES \ PRODUCT_RUNTIMES \ PRODUCT_BOOT_JARS \ + PRODUCT_SUPPORTS_VERITY \ + PRODUCT_OEM_PROPERTIES \ + PRODUCT_SYSTEM_PROPERTY_BLACKLIST \ + PRODUCT_SYSTEM_SERVER_JARS \ + PRODUCT_VERITY_SIGNING_KEY \ + PRODUCT_SYSTEM_VERITY_PARTITION \ + PRODUCT_VENDOR_VERITY_PARTITION \ PRODUCT_DEX_PREOPT_IMAGE_IN_DATA \ PRODUCT_DEX_PREOPT_MODULE_CONFIGS \ PRODUCT_DEX_PREOPT_DEFAULT_FLAGS \ @@ -214,6 +223,7 @@ endef _product_stash_var_list := $(_product_var_list) \ PRODUCT_BOOTCLASSPATH \ + PRODUCT_SYSTEM_SERVER_CLASSPATH \ TARGET_ARCH \ TARGET_ARCH_VARIANT \ TARGET_CPU_VARIANT \ @@ -247,11 +257,13 @@ _product_stash_var_list += \ BOARD_BOOTIMAGE_PARTITION_SIZE \ BOARD_RECOVERYIMAGE_PARTITION_SIZE \ BOARD_SYSTEMIMAGE_PARTITION_SIZE \ + BOARD_USERDATAIMAGE_FILE_SYSTEM_TYPE \ BOARD_USERDATAIMAGE_PARTITION_SIZE \ BOARD_CACHEIMAGE_FILE_SYSTEM_TYPE \ BOARD_CACHEIMAGE_PARTITION_SIZE \ BOARD_FLASH_BLOCK_SIZE \ - BOARD_SYSTEMIMAGE_PARTITION_SIZE \ + BOARD_VENDORIMAGE_PARTITION_SIZE \ + BOARD_VENDORIMAGE_FILE_SYSTEM_TYPE \ BOARD_INSTALLER_CMDLINE \ diff --git a/core/product_config.mk b/core/product_config.mk index e9c6d32..d4ba364 100644 --- a/core/product_config.mk +++ b/core/product_config.mk @@ -281,6 +281,7 @@ endif # A list of module names of BOOTCLASSPATH (jar files) PRODUCT_BOOT_JARS := $(strip $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_BOOT_JARS)) +PRODUCT_SYSTEM_SERVER_JARS := $(strip $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SYSTEM_SERVER_JARS)) # Find the device that this product maps to. TARGET_DEVICE := $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_DEVICE) @@ -314,11 +315,13 @@ PRODUCT_AAPT_CONFIG := $(strip \ $(if $(filter %dpi,$(PRODUCT_AAPT_CONFIG)),,mdpi)) PRODUCT_AAPT_PREF_CONFIG := $(strip $(PRODUCT_AAPT_PREF_CONFIG)) -# Everyone gets nodpi assets which are density-independent. -PRODUCT_AAPT_CONFIG += nodpi +# Everyone gets nodpi and anydpi assets which are density-independent. +PRODUCT_AAPT_CONFIG += nodpi anydpi + +# Keep a copy of the space-separated config +PRODUCT_AAPT_CONFIG_SP := $(PRODUCT_AAPT_CONFIG) # Convert spaces to commas. -comma := , PRODUCT_AAPT_CONFIG := \ $(subst $(space),$(comma),$(strip $(PRODUCT_AAPT_CONFIG))) PRODUCT_AAPT_PREF_CONFIG := \ diff --git a/core/proguard_basic_keeps.flags b/core/proguard_basic_keeps.flags index af0e05d..4a85db0 100644 --- a/core/proguard_basic_keeps.flags +++ b/core/proguard_basic_keeps.flags @@ -49,12 +49,16 @@ # -keep class * extends android.preference.Preference # -keep class * extends android.app.BackupAgent -#-keep class * implements android.os.Parcelable { -# public static final android.os.Parcelable$Creator *; -#} +# Parcelable CREATORs must be kept for Parcelable functionality +-keep class * implements android.os.Parcelable { + public static final ** CREATOR; +} # The support library contains references to newer platform versions. # 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.** + +# Less spammy. +-dontnote diff --git a/core/proguard_tests.flags b/core/proguard_tests.flags index 4481a1b..1f840bc 100644 --- a/core/proguard_tests.flags +++ b/core/proguard_tests.flags @@ -1,5 +1,6 @@ # Keep everything for tests --dontshrink +# This flag has been moved to the makefiles and is set for tests by default. +#-dontshrink # But we may want to obfuscate if the main app gets obfuscated. # This flag has been moved to the makefiles. diff --git a/core/sdk_font.mk b/core/sdk_font.mk new file mode 100644 index 0000000..204403d --- /dev/null +++ b/core/sdk_font.mk @@ -0,0 +1,66 @@ +############################################################################### +# Fonts shipped with the SDK need to be renamed for Java to handle them +# properly. Hence, a special script is used to rename the fonts. We bundle all +# the fonts that are shipped on a newer non-space-constrained device. However, +# OpenType fonts used on these devices are not supported by Java. Their +# replacements are added separately. +############################################################################### + + +# The script that renames the font. +sdk_font_rename_script := frameworks/base/tools/layoutlib/rename_font/build_font_single.py + +# Location of the fonttools library that the above script depends on. +fonttools_lib := external/fonttools/Lib + +# A temporary location to store the renamed fonts. atree picks all files in +# this directory and bundles it with the SDK. +SDK_FONT_TEMP := $(call intermediates-dir-for,PACKAGING,sdk-fonts,HOST,COMMON) + +# The font configuration files - system_fonts.xml, fallback_fonts.xml etc. +sdk_font_config := $(wildcard frameworks/base/data/fonts/*.xml) +sdk_font_config := $(addprefix $(SDK_FONT_TEMP)/, $(notdir $(sdk_font_config))) + +$(sdk_font_config): $(SDK_FONT_TEMP)/%.xml: \ + frameworks/base/data/fonts/%.xml + $(hide) mkdir -p $(dir $@) + $(hide) cp -vf $< $@ + +# List of fonts on the device that we want to ship. This is all .ttf fonts. +sdk_fonts_device := $(filter $(TARGET_OUT)/fonts/%.ttf, $(INTERNAL_SYSTEMIMAGE_FILES)) +sdk_fonts_device := $(addprefix $(SDK_FONT_TEMP)/, $(notdir $(sdk_fonts_device))) + +# Macro to rename the font. +sdk_rename_font = PYTHONPATH=$$PYTHONPATH:$(fonttools_lib) $(sdk_font_rename_script) \ + $1 $2 + +# TODO: If the font file is a symlink, reuse the font renamed from the symlink +# target. +$(sdk_fonts_device): $(SDK_FONT_TEMP)/%.ttf: $(TARGET_OUT)/fonts/%.ttf \ + $(sdk_font_rename_script) + $(hide) mkdir -p $(dir $@) + $(hide) $(call sdk_rename_font,$<,$@) + +# List of all dependencies - all fonts and configuration files. +SDK_FONT_DEPS := $(sdk_fonts_device) $(sdk_font_config) + +# Define a macro to create rule for addititional fonts that we want to include +# in the SDK. +# $1 Output font name +# $2 Source font path +define sdk-extra-font-rule +fontfullname := $$(SDK_FONT_TEMP)/$1 +ifeq ($$(filter $$(fontfullname),$$(sdk_fonts_device)),) +SDK_FONT_DEPS += $$(fontfullname) +$$(fontfullname): $2 $$(sdk_font_rename_script) + $$(hide) mkdir -p $$(dir $$@) + $$(hide) $$(call sdk_rename_font,$$<,$$@) +endif +fontfullname := +endef + +# These extra fonts are used as a replacement for OpenType fonts. +$(eval $(call sdk-extra-font-rule,NanumGothic.ttf,external/naver-fonts/NanumGothic.ttf)) +$(eval $(call sdk-extra-font-rule,DroidSansFallback.ttf,frameworks/base/data/fonts/DroidSansFallbackFull.ttf)) + +sdk-extra-font-rule := diff --git a/core/shared_library_internal.mk b/core/shared_library_internal.mk index 29b7d44..baedb3b 100644 --- a/core/shared_library_internal.mk +++ b/core/shared_library_internal.mk @@ -40,7 +40,6 @@ include $(BUILD_SYSTEM)/dynamic_binary.mk # Define PRIVATE_ variables from global vars my_target_global_ld_dirs := $($(LOCAL_2ND_ARCH_VAR_PREFIX)TARGET_GLOBAL_LD_DIRS) -my_target_fdo_lib := $($(LOCAL_2ND_ARCH_VAR_PREFIX)TARGET_FDO_LIB) my_target_libgcov := $($(LOCAL_2ND_ARCH_VAR_PREFIX)TARGET_LIBGCOV) my_target_libgcc := $($(LOCAL_2ND_ARCH_VAR_PREFIX)TARGET_LIBGCC) my_target_libatomic := $($(LOCAL_2ND_ARCH_VAR_PREFIX)TARGET_LIBATOMIC) @@ -59,7 +58,6 @@ my_target_crtend_so_o := $(wildcard $(my_ndk_sysroot_lib)/crtend_so.o) endif $(linked_module): PRIVATE_TARGET_GLOBAL_LD_DIRS := $(my_target_global_ld_dirs) $(linked_module): PRIVATE_TARGET_GLOBAL_LDFLAGS := $(my_target_global_ldflags) -$(linked_module): PRIVATE_TARGET_FDO_LIB := $(my_target_fdo_lib) $(linked_module): PRIVATE_TARGET_LIBGCOV := $(my_target_libgcov) $(linked_module): PRIVATE_TARGET_LIBGCC := $(my_target_libgcc) $(linked_module): PRIVATE_TARGET_LIBATOMIC := $(my_target_libatomic) diff --git a/core/static_java_library.mk b/core/static_java_library.mk index 79b7292..02078e0 100644 --- a/core/static_java_library.mk +++ b/core/static_java_library.mk @@ -67,14 +67,7 @@ include $(BUILD_SYSTEM)/java_library.mk ifeq (true,$(need_compile_res)) R_file_stamp := $(LOCAL_INTERMEDIATE_SOURCE_DIR)/R.stamp -ifeq ($(strip $(LOCAL_MANIFEST_FILE)),) - LOCAL_MANIFEST_FILE := AndroidManifest.xml -endif -ifdef LOCAL_FULL_MANIFEST_FILE - full_android_manifest := $(LOCAL_FULL_MANIFEST_FILE) -else - full_android_manifest := $(LOCAL_PATH)/$(LOCAL_MANIFEST_FILE) -endif +include $(BUILD_SYSTEM)/android_manifest.mk LOCAL_SDK_RES_VERSION:=$(strip $(LOCAL_SDK_RES_VERSION)) ifeq ($(LOCAL_SDK_RES_VERSION),) @@ -85,7 +78,7 @@ framework_res_package_export := framework_res_package_export_deps := # Please refer to package.mk ifneq ($(LOCAL_NO_STANDARD_LIBRARIES),true) -ifneq ($(filter-out current,$(LOCAL_SDK_RES_VERSION))$(if $(TARGET_BUILD_APPS),$(filter current,$(LOCAL_SDK_RES_VERSION))),) +ifneq ($(filter-out current system_current,$(LOCAL_SDK_RES_VERSION))$(if $(TARGET_BUILD_APPS),$(filter current system_current,$(LOCAL_SDK_RES_VERSION))),) framework_res_package_export := \ $(HISTORICAL_SDK_VERSIONS_ROOT)/$(LOCAL_SDK_RES_VERSION)/android.jar framework_res_package_export_deps := $(framework_res_package_export) @@ -105,7 +98,7 @@ $(R_file_stamp): PRIVATE_ANDROID_MANIFEST := $(full_android_manifest) $(R_file_stamp): PRIVATE_RESOURCE_PUBLICS_OUTPUT := $(intermediates.COMMON)/public_resources.xml $(R_file_stamp): PRIVATE_RESOURCE_DIR := $(LOCAL_RESOURCE_DIR) $(R_file_stamp): PRIVATE_AAPT_INCLUDES := $(framework_res_package_export) -ifneq (,$(filter-out current, $(LOCAL_SDK_VERSION))) +ifneq (,$(filter-out current system_current, $(LOCAL_SDK_VERSION))) $(R_file_stamp): PRIVATE_DEFAULT_APP_TARGET_SDK := $(LOCAL_SDK_VERSION) else $(R_file_stamp): PRIVATE_DEFAULT_APP_TARGET_SDK := $(DEFAULT_APP_TARGET_SDK) diff --git a/core/tasks/apicheck.mk b/core/tasks/apicheck.mk index 00b78b9..fc98f5b 100644 --- a/core/tasks/apicheck.mk +++ b/core/tasks/apicheck.mk @@ -42,6 +42,8 @@ $(eval $(call check-api, \ checkapi-last, \ $(SRC_API_DIR)/$(last_released_sdk_version).txt, \ $(INTERNAL_PLATFORM_API_FILE), \ + frameworks/base/api/removed.txt, \ + $(INTERNAL_PLATFORM_REMOVED_API_FILE), \ -hide 2 -hide 3 -hide 4 -hide 5 -hide 6 -hide 24 -hide 25 -hide 26 -hide 27 \ -error 7 -error 8 -error 9 -error 10 -error 11 -error 12 -error 13 -error 14 -error 15 \ -error 16 -error 17 -error 18 , \ @@ -56,11 +58,13 @@ $(eval $(call check-api, \ checkapi-current, \ frameworks/base/api/current.txt, \ $(INTERNAL_PLATFORM_API_FILE), \ + frameworks/base/api/removed.txt, \ + $(INTERNAL_PLATFORM_REMOVED_API_FILE), \ -error 2 -error 3 -error 4 -error 5 -error 6 \ -error 7 -error 8 -error 9 -error 10 -error 11 -error 12 -error 13 -error 14 -error 15 \ -error 16 -error 17 -error 18 -error 19 -error 20 -error 21 -error 23 -error 24 \ -error 25 -error 26 -error 27, \ - cat $(BUILD_SYSTEM)/apicheck_msg_current.txt, \ + sed -e 's/%UPDATE_API%/update-api/g' $(BUILD_SYSTEM)/apicheck_msg_current.txt, \ checkapi, \ $(call doc-timestamp-for,api-stubs) \ )) @@ -69,5 +73,51 @@ $(eval $(call check-api, \ update-api: $(INTERNAL_PLATFORM_API_FILE) | $(ACP) @echo Copying current.txt $(hide) $(ACP) $(INTERNAL_PLATFORM_API_FILE) frameworks/base/api/current.txt + @echo Copying removed.txt + $(hide) $(ACP) $(INTERNAL_PLATFORM_REMOVED_API_FILE) frameworks/base/api/removed.txt + + +#####################Check System API##################### +.PHONY: checksystemapi + +# Check that the System API we're building hasn't broken the last-released +# SDK version. +$(eval $(call check-api, \ + checksystemapi-last, \ + $(SRC_SYSTEM_API_DIR)/$(last_released_sdk_version).txt, \ + $(INTERNAL_PLATFORM_SYSTEM_API_FILE), \ + frameworks/base/api/system-removed.txt, \ + $(INTERNAL_PLATFORM_SYSTEM_REMOVED_API_FILE), \ + -hide 2 -hide 3 -hide 4 -hide 5 -hide 6 -hide 24 -hide 25 -hide 26 -hide 27 \ + -error 7 -error 8 -error 9 -error 10 -error 11 -error 12 -error 13 -error 14 -error 15 \ + -error 16 -error 17 -error 18 , \ + cat $(BUILD_SYSTEM)/apicheck_msg_last.txt, \ + checksystemapi, \ + $(call doc-timestamp-for,system-api-stubs) \ + )) + +# Check that the System API we're building hasn't changed from the not-yet-released +# SDK version. +$(eval $(call check-api, \ + checksystemapi-current, \ + frameworks/base/api/system-current.txt, \ + $(INTERNAL_PLATFORM_SYSTEM_API_FILE), \ + frameworks/base/api/system-removed.txt, \ + $(INTERNAL_PLATFORM_SYSTEM_REMOVED_API_FILE), \ + -error 2 -error 3 -error 4 -error 5 -error 6 \ + -error 7 -error 8 -error 9 -error 10 -error 11 -error 12 -error 13 -error 14 -error 15 \ + -error 16 -error 17 -error 18 -error 19 -error 20 -error 21 -error 23 -error 24 \ + -error 25 -error 26 -error 27, \ + sed -e 's/%UPDATE_API%/update-system-api/g' $(BUILD_SYSTEM)/apicheck_msg_current.txt, \ + checksystemapi, \ + $(call doc-timestamp-for,system-api-stubs) \ + )) + +.PHONY: update-system-api +update-system-api: $(INTERNAL_PLATFORM_SYSTEM_API_FILE) | $(ACP) + @echo Copying system-current.txt + $(hide) $(ACP) $(INTERNAL_PLATFORM_SYSTEM_API_FILE) frameworks/base/api/system-current.txt + @echo Copying system-removed.txt + $(hide) $(ACP) $(INTERNAL_PLATFORM_SYSTEM_REMOVED_API_FILE) frameworks/base/api/system-removed.txt endif diff --git a/core/tasks/boot_jars_package_check.mk b/core/tasks/boot_jars_package_check.mk new file mode 100644 index 0000000..188c267 --- /dev/null +++ b/core/tasks/boot_jars_package_check.mk @@ -0,0 +1,46 @@ +# Copyright (C) 2014 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. + +# +# Rules to check if classes in the boot jars are from the whitelisted packages. +# + +ifneq ($(SKIP_BOOT_JARS_CHECK),true) +ifneq ($(TARGET_BUILD_PDK),true) +ifdef PRODUCT_BOOT_JARS + +intermediates := $(call intermediates-dir-for, PACKAGING, boot-jars-package-check,,COMMON) +stamp := $(intermediates)/stamp +built_boot_jars := $(foreach j, $(PRODUCT_BOOT_JARS), \ + $(call intermediates-dir-for, JAVA_LIBRARIES, $(j),,COMMON)/classes.jar) +script := build/core/tasks/check_boot_jars/check_boot_jars.py +whitelist_file := build/core/tasks/check_boot_jars/package_whitelist.txt + +$(stamp): PRIVATE_BOOT_JARS := $(built_boot_jars) +$(stamp): PRIVATE_SCRIPT := $(script) +$(stamp): PRIVATE_WHITELIST := $(whitelist_file) +$(stamp) : $(built_boot_jars) $(script) $(whitelist_file) + @echo "Check package name for $(PRIVATE_BOOT_JARS)" + $(hide) $(PRIVATE_SCRIPT) $(PRIVATE_WHITELIST) $(PRIVATE_BOOT_JARS) + $(hide) mkdir -p $(dir $@) && touch $@ + +.PHONY: check-boot-jars +check-boot-jars : $(stamp) + +# Run check-boot-jars by default +droidcore : check-boot-jars + +endif # PRODUCT_BOOT_JARS +endif # TARGET_BUILD_PDK not true +endif # SKIP_BOOT_JARS_CHECK not true diff --git a/core/tasks/check_boot_jars/check_boot_jars.py b/core/tasks/check_boot_jars/check_boot_jars.py new file mode 100755 index 0000000..89d9ee8 --- /dev/null +++ b/core/tasks/check_boot_jars/check_boot_jars.py @@ -0,0 +1,83 @@ +#!/usr/bin/env python + +""" +Check boot jars. + +Usage: check_boot_jars.py <package_whitelist_file> <jar1> <jar2> ... +""" +import logging +import os.path +import re +import subprocess +import sys + + +# The compiled whitelist RE. +whitelist_re = None + + +def LoadWhitelist(filename): + """ Load and compile whitelist regular expressions from filename. + """ + lines = [] + with open(filename, 'r') as f: + for line in f: + line = line.strip() + if not line or line.startswith('#'): + continue + lines.append(line) + combined_re = r'^(%s)$' % '|'.join(lines) + global whitelist_re + try: + whitelist_re = re.compile(combined_re) + except re.error: + logging.exception( + 'Cannot compile package whitelist regular expression: %r', + combined_re) + whitelist_re = None + return False + return True + + +def CheckJar(jar): + """Check a jar file. + """ + # Get the list of files inside the jar file. + p = subprocess.Popen(args='jar tf %s' % jar, + stdout=subprocess.PIPE, shell=True) + stdout, _ = p.communicate() + if p.returncode != 0: + return False + items = stdout.split() + for f in items: + if f.endswith('.class'): + package_name = os.path.dirname(f) + package_name = package_name.replace('/', '.') + # Skip class without a package name + if package_name and not whitelist_re.match(package_name): + print >> sys.stderr, ('Error: %s: unknown package name of class file %s' + % (jar, f)) + return False + return True + + +def main(argv): + if len(argv) < 2: + print __doc__ + sys.exit(1) + + if not LoadWhitelist(argv[0]): + sys.exit(1) + + passed = True + for jar in argv[1:]: + if not CheckJar(jar): + passed = False + if not passed: + return 1 + + return 0 + + +if __name__ == '__main__': + main(sys.argv[1:]) diff --git a/core/tasks/check_boot_jars/package_whitelist.txt b/core/tasks/check_boot_jars/package_whitelist.txt new file mode 100644 index 0000000..4d62615 --- /dev/null +++ b/core/tasks/check_boot_jars/package_whitelist.txt @@ -0,0 +1,214 @@ +# Boot jar package name whitelist. +# Each line is interpreted as a regular expression. + +################################################### +# core-libart.jar +java\.awt\.font +java\.beans +java\.io +java\.lang +java\.lang\.annotation +java\.lang\.ref +java\.lang\.reflect +java\.math +java\.net +java\.nio +java\.nio\.channels +java\.nio\.channels\.spi +java\.nio\.charset +java\.nio\.charset\.spi +java\.security +java\.security\.acl +java\.security\.cert +java\.security\.interfaces +java\.security\.spec +java\.sql +java\.text +java\.util +java\.util\.concurrent +java\.util\.concurrent\.atomic +java\.util\.concurrent\.locks +java\.util\.jar +java\.util\.logging +java\.util\.prefs +java\.util\.regex +java\.util\.zip +javax\.crypto +javax\.crypto\.interfaces +javax\.crypto\.spec +javax\.net +javax\.net\.ssl +javax\.security\.auth +javax\.security\.auth\.callback +javax\.security\.auth\.login +javax\.security\.auth\.x500 +javax\.security\.cert +javax\.sql +javax\.xml +javax\.xml\.datatype +javax\.xml\.namespace +javax\.xml\.parsers +javax\.xml\.transform +javax\.xml\.transform\.dom +javax\.xml\.transform\.sax +javax\.xml\.transform\.stream +javax\.xml\.validation +javax\.xml\.xpath +sun\.misc +org\.w3c\.dom +org\.w3c\.dom\.ls +org\.w3c\.dom\.traversal + +# TODO: Move these internal org.apache.harmony classes to libcore.* +org\.apache\.harmony\.crypto\.internal +org\.apache\.harmony\.dalvik +org\.apache\.harmony\.dalvik\.ddmc +org\.apache\.harmony\.luni\.internal\.util +org\.apache\.harmony\.security +org\.apache\.harmony\.security\.asn1 +org\.apache\.harmony\.security\.fortress +org\.apache\.harmony\.security\.pkcs10 +org\.apache\.harmony\.security\.pkcs7 +org\.apache\.harmony\.security\.pkcs8 +org\.apache\.harmony\.security\.provider\.crypto +org\.apache\.harmony\.security\.utils +org\.apache\.harmony\.security\.x501 +org\.apache\.harmony\.security\.x509 +org\.apache\.harmony\.security\.x509\.tsp +org\.apache\.harmony\.xml +org\.apache\.harmony\.xml\.dom +org\.apache\.harmony\.xml\.parsers + +org\.json +org\.xmlpull\.v1 +org\.xmlpull\.v1\.sax2 + +# TODO: jarjar org.kxml2.io to com.android org\.kxml2\.io +org\.kxml2\.io +org\.xml +org\.xml\.sax +org\.xml\.sax\.ext +org\.xml\.sax\.helpers + +dalvik\..* +libcore\..* +android\..* +com\.android\..* + + +################################################### +# core-junit.jar +junit\.extensions +junit\.framework + + +################################################### +# ext.jar +# TODO: jarjar javax.sip to com.android +javax\.sip +javax\.sip\.address +javax\.sip\.header +javax\.sip\.message + +# TODO: jarjar org.apache.commons to com.android +org\.apache\.commons\.codec +org\.apache\.commons\.codec\.binary +org\.apache\.commons\.codec\.language +org\.apache\.commons\.codec\.net +org\.apache\.commons\.logging +org\.apache\.commons\.logging\.impl +org\.apache\.http +org\.apache\.http\.auth +org\.apache\.http\.auth\.params +org\.apache\.http\.client +org\.apache\.http\.client\.entity +org\.apache\.http\.client\.methods +org\.apache\.http\.client\.params +org\.apache\.http\.client\.protocol +org\.apache\.http\.client\.utils +org\.apache\.http\.conn +org\.apache\.http\.conn\.params +org\.apache\.http\.conn\.routing +org\.apache\.http\.conn\.scheme +org\.apache\.http\.conn\.ssl +org\.apache\.http\.conn\.util +org\.apache\.http\.cookie +org\.apache\.http\.cookie\.params +org\.apache\.http\.entity +org\.apache\.http\.impl +org\.apache\.http\.impl\.auth +org\.apache\.http\.impl\.client +org\.apache\.http\.impl\.client +org\.apache\.http\.impl\.conn +org\.apache\.http\.impl\.conn\.tsccm +org\.apache\.http\.impl\.cookie +org\.apache\.http\.impl\.entity +org\.apache\.http\.impl\.io +org\.apache\.http\.impl\.io +org\.apache\.http\.io +org\.apache\.http\.message +org\.apache\.http\.params +org\.apache\.http\.protocol +org\.apache\.http\.util + +# TODO: jarjar gov.nist to com.android +gov\.nist\.core +gov\.nist\.core\.net +gov\.nist\.javax\.sip +gov\.nist\.javax\.sip\.address +gov\.nist\.javax\.sip\.clientauthutils +gov\.nist\.javax\.sip\.header +gov\.nist\.javax\.sip\.header\.extensions +gov\.nist\.javax\.sip\.header\.ims +gov\.nist\.javax\.sip\.message +gov\.nist\.javax\.sip\.parser +gov\.nist\.javax\.sip\.parser\.extensions +gov\.nist\.javax\.sip\.parser\.ims +gov\.nist\.javax\.sip\.stack + +org\.ccil\.cowan\.tagsoup +org\.ccil\.cowan\.tagsoup\.jaxp + +################################################### +# framework.jar +javax\.microedition\.khronos\.opengles +javax\.microedition\.khronos\.egl + +android + + +################################################### +# telephony-common.jar +com\.google\..* + + +################################################### +# apache-xml.jar +org\.apache\.xml\.res +org\.apache\.xml\.utils +org\.apache\.xml\.utils\.res +org\.apache\.xml\.dtm +org\.apache\.xml\.dtm\.ref +org\.apache\.xml\.dtm\.ref\.dom2dtm +org\.apache\.xml\.dtm\.ref\.sax2dtm +org\.apache\.xml\.serializer +org\.apache\.xml\.serializer\.utils +org\.apache\.xml\.serializer\.dom3 +org\.apache\.xpath +org\.apache\.xpath\.operations +org\.apache\.xpath\.domapi +org\.apache\.xpath\.functions +org\.apache\.xpath\.res +org\.apache\.xpath\.axes +org\.apache\.xpath\.objects +org\.apache\.xpath\.patterns +org\.apache\.xpath\.jaxp +org\.apache\.xpath\.compiler +org\.apache\.xalan +org\.apache\.xalan\.res +org\.apache\.xalan\.templates +org\.apache\.xalan\.serialize +org\.apache\.xalan\.extensions +org\.apache\.xalan\.processor +org\.apache\.xalan\.transformer +org\.apache\.xalan\.xslt diff --git a/core/tasks/cts.mk b/core/tasks/cts.mk index c521fa3..2ce5dbc 100644 --- a/core/tasks/cts.mk +++ b/core/tasks/cts.mk @@ -17,8 +17,7 @@ cts_tools_src_dir := cts/tools cts_name := android-cts -DDMLIB_JAR := $(HOST_OUT_JAVA_LIBRARIES)/ddmlib-prebuilt.jar -junit_host_jar := $(HOST_OUT_JAVA_LIBRARIES)/junit.jar +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 @@ -48,6 +47,7 @@ CTS_CORE_CASE_LIST := \ android.core.tests.libcore.package.harmony_java_text \ android.core.tests.libcore.package.harmony_java_util \ android.core.tests.libcore.package.harmony_javax_security \ + android.core.tests.libcore.package.okhttp \ android.core.tests.runner # The list of test packages that apache-harmony-tests (external/apache-harmony/Android.mk) @@ -58,19 +58,33 @@ CTS_CORE_CASE_LIST += \ android.core.tests.libcore.package.harmony_prefs \ android.core.tests.libcore.package.harmony_sql + +CTS_TEST_JAR_LIST := \ + cts-junit \ + CtsJdwp + # Depend on the full package paths rather than the phony targets to avoid # rebuilding the packages every time. CTS_CORE_CASES := $(foreach pkg,$(CTS_CORE_CASE_LIST),$(call intermediates-dir-for,APPS,$(pkg))/package.apk) +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 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 $(call copy-one-file, $(built), $(installed)))\ + $(eval CTS_CASE_LIST_APKS += $(installed)))) + DEFAULT_TEST_PLAN := $(cts_dir)/$(cts_name)/resource/plans -CTS_TEST_CASE_LIST_FILES := $(foreach c, $(CTS_TEST_CASE_LIST), $(call intermediates-dir-for,APPS,$(c))/package.apk) -$(cts_dir)/all_cts_files_stamp: PRIVATE_JUNIT_HOST_JAR := $(junit_host_jar) -$(cts_dir)/all_cts_files_stamp: $(CTS_CORE_CASES) $(CTS_TEST_CASES) $(CTS_TEST_CASE_LIST_FILES) $(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_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) # Make necessary directory for CTS - $(hide) rm -rf $(PRIVATE_CTS_DIR) $(hide) mkdir -p $(TMP_DIR) $(hide) mkdir -p $(PRIVATE_DIR)/docs $(hide) mkdir -p $(PRIVATE_DIR)/tools @@ -78,9 +92,9 @@ $(cts_dir)/all_cts_files_stamp: $(CTS_CORE_CASES) $(CTS_TEST_CASES) $(CTS_TEST_C $(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 $(DDMLIB_JAR) $(PRIVATE_JUNIT_HOST_JAR) $(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 $(HOSTTESTLIB_JAR) $(CTS_HOST_LIBRARY_JARS) $(TF_JAR) $(CTS_TF_JAR) $(CTS_TF_EXEC_PATH) $(CTS_TF_README_PATH) $(PRIVATE_DIR)/tools # Change mode of the executables - $(foreach apk,$(CTS_CASE_LIST),$(call copy-testcase-apk,$(apk))) + $(foreach jar,$(CTS_TEST_JAR_LIST),$(call copy-testcase-jar,$(jar))) $(foreach testcase,$(CTS_TEST_CASES),$(call copy-testcase,$(testcase))) $(hide) touch $@ @@ -90,29 +104,32 @@ $(cts_dir)/all_cts_files_stamp: $(CTS_CORE_CASES) $(CTS_TEST_CASES) $(CTS_TEST_C # $2 : The AndroidManifest.xml corresponding to the test package # $3 : The jar file name on PRIVATE_CLASSPATH containing junit tests to search for # $4 : The package prefix of classes to include, possible empty -# $5 : The directory containing vogar expectations files -# $6 : The Android.mk corresponding to the test package (required for host-side tests only) +# $5 : The architecture of the current build +# $6 : The directory containing vogar expectations files +# $7 : The Android.mk corresponding to the test package (required for host-side tests only) define generate-core-test-description @echo "Generate core-test description ("$(notdir $(1))")" $(hide) java -Xmx256M \ - -Xbootclasspath/a:$(PRIVATE_CLASSPATH) \ - -classpath $(PRIVATE_CLASSPATH):$(HOST_OUT_JAVA_LIBRARIES)/descGen.jar:$(HOST_OUT_JAVA_LIBRARIES)/junit.jar:$(HOST_JDK_TOOLS_JAR) \ - $(PRIVATE_PARAMS) CollectAllTests $(1) $(2) $(3) "$(4)" $(5) $(6) + -Xbootclasspath/a:$(PRIVATE_CLASSPATH):$(JUNIT_HOST_JAR) \ + -classpath $(HOST_OUT_JAVA_LIBRARIES)/descGen.jar:$(HOST_JDK_TOOLS_JAR) \ + $(PRIVATE_PARAMS) CollectAllTests $(1) $(2) $(3) "$(4)" $(5) $(6) $(7) endef CORE_INTERMEDIATES :=$(call intermediates-dir-for,JAVA_LIBRARIES,core-libart,,COMMON) CONSCRYPT_INTERMEDIATES :=$(call intermediates-dir-for,JAVA_LIBRARIES,conscrypt,,COMMON) BOUNCYCASTLE_INTERMEDIATES :=$(call intermediates-dir-for,JAVA_LIBRARIES,bouncycastle,,COMMON) APACHEXML_INTERMEDIATES :=$(call intermediates-dir-for,JAVA_LIBRARIES,apache-xml,,COMMON) -OKHTTP_INTERMEDIATES :=$(call intermediates-dir-for,JAVA_LIBRARIES,okhttp,,COMMON) -APACHEHARMONY_INTERMEDIATES :=$(call intermediates-dir-for,JAVA_LIBRARIES,apache-harmony-tests,,COMMON) +OKHTTP_INTERMEDIATES :=$(call intermediates-dir-for,JAVA_LIBRARIES,okhttp-nojarjar,,COMMON) +OKHTTPTESTS_INTERMEDIATES :=$(call intermediates-dir-for,JAVA_LIBRARIES,okhttp-tests-nojarjar,,COMMON) +OKHTTP_REPACKAGED_INTERMEDIATES :=$(call intermediates-dir-for,JAVA_LIBRARIES,okhttp,,COMMON) +APACHEHARMONYTESTS_INTERMEDIATES :=$(call intermediates-dir-for,JAVA_LIBRARIES,apache-harmony-tests,,COMMON) SQLITEJDBC_INTERMEDIATES :=$(call intermediates-dir-for,JAVA_LIBRARIES,sqlite-jdbc,,COMMON) JUNIT_INTERMEDIATES :=$(call intermediates-dir-for,JAVA_LIBRARIES,core-junit,,COMMON) CORETESTS_INTERMEDIATES :=$(call intermediates-dir-for,JAVA_LIBRARIES,core-tests,,COMMON) JSR166TESTS_INTERMEDIATES :=$(call intermediates-dir-for,JAVA_LIBRARIES,jsr166-tests,,COMMON) CONSCRYPTTESTS_INTERMEDIATES :=$(call intermediates-dir-for,JAVA_LIBRARIES,conscrypt-tests,,COMMON) -GEN_CLASSPATH := $(CORE_INTERMEDIATES)/classes.jar:$(CONSCRYPT_INTERMEDIATES)/classes.jar:$(BOUNCYCASTLE_INTERMEDIATES)/classes.jar:$(APACHEXML_INTERMEDIATES)/classes.jar:$(APACHEHARMONY_INTERMEDIATES)/classes.jar:$(OKHTTP_INTERMEDIATES)/classes.jar:$(JUNIT_INTERMEDIATES)/classes.jar:$(SQLITEJDBC_INTERMEDIATES)/javalib.jar:$(CORETESTS_INTERMEDIATES)/javalib.jar:$(JSR166TESTS_INTERMEDIATES)/javalib.jar:$(CONSCRYPTTESTS_INTERMEDIATES)/javalib.jar +GEN_CLASSPATH := $(CORE_INTERMEDIATES)/classes.jar:$(CONSCRYPT_INTERMEDIATES)/classes.jar:$(BOUNCYCASTLE_INTERMEDIATES)/classes.jar:$(APACHEXML_INTERMEDIATES)/classes.jar:$(APACHEHARMONYTESTS_INTERMEDIATES)/classes.jar:$(OKHTTP_INTERMEDIATES)/classes.jar:$(OKHTTPTESTS_INTERMEDIATES)/classes.jar:$(OKHTTP_REPACKAGED_INTERMEDIATES)/classes.jar:$(JUNIT_INTERMEDIATES)/classes.jar:$(SQLITEJDBC_INTERMEDIATES)/javalib.jar:$(CORETESTS_INTERMEDIATES)/javalib.jar:$(JSR166TESTS_INTERMEDIATES)/javalib.jar:$(CONSCRYPTTESTS_INTERMEDIATES)/javalib.jar CTS_CORE_XMLS := \ $(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.dalvik.xml \ @@ -136,6 +153,7 @@ CTS_CORE_XMLS := \ $(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.harmony_logging.xml \ $(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.harmony_prefs.xml \ $(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.harmony_sql.xml \ + $(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.okhttp.xml \ $(CTS_CORE_XMLS): PRIVATE_CLASSPATH:=$(GEN_CLASSPATH) # Why does this depend on javalib.jar instead of classes.jar? Because @@ -143,155 +161,161 @@ $(CTS_CORE_XMLS): PRIVATE_CLASSPATH:=$(GEN_CLASSPATH) # build system requires that dependencies use javalib.jar. If # javalib.jar is up-to-date, then classes.jar is as well. Depending # on classes.jar will build the files incorrectly. -CTS_CORE_XMLS_DEPS := $(CTS_CORE_CASES) $(HOST_OUT_JAVA_LIBRARIES)/descGen.jar $(HOST_OUT_JAVA_LIBRARIES)/junit.jar $(CORE_INTERMEDIATES)/javalib.jar $(BOUNCYCASTLE_INTERMEDIATES)/javalib.jar $(APACHEXML_INTERMEDIATES)/javalib.jar $(APACHEHARMONY_INTERMEDIATES)/javalib.jar $(OKHTTP_INTERMEDIATES)/javalib.jar $(SQLITEJDBC_INTERMEDIATES)/javalib.jar $(JUNIT_INTERMEDIATES)/javalib.jar $(CORETESTS_INTERMEDIATES)/javalib.jar $(JSR166TESTS_INTERMEDIATES)/javalib.jar $(CONSCRYPTTESTS_INTERMEDIATES)/javalib.jar build/core/tasks/cts.mk | $(ACP) +CTS_CORE_XMLS_DEPS := $(CTS_CORE_CASES) $(HOST_OUT_JAVA_LIBRARIES)/descGen.jar $(JUNIT_HOST_JAR) $(CORE_INTERMEDIATES)/javalib.jar $(BOUNCYCASTLE_INTERMEDIATES)/javalib.jar $(APACHEXML_INTERMEDIATES)/javalib.jar $(APACHEHARMONYTESTS_INTERMEDIATES)/javalib.jar $(OKHTTP_INTERMEDIATES)/javalib.jar $(OKHTTPTESTS_INTERMEDIATES)/javalib.jar $(OKHTTP_REPACKAGED_INTERMEDIATES)/javalib.jar $(SQLITEJDBC_INTERMEDIATES)/javalib.jar $(JUNIT_INTERMEDIATES)/javalib.jar $(CORETESTS_INTERMEDIATES)/javalib.jar $(JSR166TESTS_INTERMEDIATES)/javalib.jar $(CONSCRYPTTESTS_INTERMEDIATES)/javalib.jar build/core/tasks/cts.mk | $(ACP) $(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.dalvik.xml: $(CTS_CORE_XMLS_DEPS) $(hide) mkdir -p $(CTS_TESTCASES_OUT) $(call generate-core-test-description,$(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.dalvik,\ cts/tests/core/libcore/dalvik/AndroidManifest.xml,\ $(CORETESTS_INTERMEDIATES)/javalib.jar,dalvik,\ - libcore/expectations) + $(TARGET_ARCH),libcore/expectations) $(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.com.xml: $(CTS_CORE_XMLS_DEPS) $(hide) mkdir -p $(CTS_TESTCASES_OUT) $(call generate-core-test-description,$(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.com,\ cts/tests/core/libcore/com/AndroidManifest.xml,\ $(CORETESTS_INTERMEDIATES)/javalib.jar,com,\ - libcore/expectations) + $(TARGET_ARCH),libcore/expectations) $(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.conscrypt.xml: $(CTS_CORE_XMLS_DEPS) $(hide) mkdir -p $(CTS_TESTCASES_OUT) $(call generate-core-test-description,$(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.conscrypt,\ cts/tests/core/libcore/conscrypt/AndroidManifest.xml,\ $(CONSCRYPTTESTS_INTERMEDIATES)/javalib.jar,,\ - libcore/expectations) + $(TARGET_ARCH),libcore/expectations) $(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.sun.xml: $(CTS_CORE_XMLS_DEPS) $(hide) mkdir -p $(CTS_TESTCASES_OUT) $(call generate-core-test-description,$(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.sun,\ cts/tests/core/libcore/sun/AndroidManifest.xml,\ $(CORETESTS_INTERMEDIATES)/javalib.jar,sun,\ - libcore/expectations) + $(TARGET_ARCH),libcore/expectations) $(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.tests.xml: $(CTS_CORE_XMLS_DEPS) $(hide) mkdir -p $(CTS_TESTCASES_OUT) $(call generate-core-test-description,$(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.tests,\ cts/tests/core/libcore/tests/AndroidManifest.xml,\ $(CORETESTS_INTERMEDIATES)/javalib.jar,tests,\ - libcore/expectations) + $(TARGET_ARCH),libcore/expectations) $(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.org.xml: $(CTS_CORE_XMLS_DEPS) $(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,\ - libcore/expectations) + $(TARGET_ARCH),libcore/expectations) $(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.libcore.xml: $(CTS_CORE_XMLS_DEPS) $(hide) mkdir -p $(CTS_TESTCASES_OUT) $(call generate-core-test-description,$(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.libcore,\ cts/tests/core/libcore/libcore/AndroidManifest.xml,\ $(CORETESTS_INTERMEDIATES)/javalib.jar,libcore,\ - libcore/expectations) + $(TARGET_ARCH),libcore/expectations) $(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.jsr166.xml: $(CTS_CORE_XMLS_DEPS) $(hide) mkdir -p $(CTS_TESTCASES_OUT) $(call generate-core-test-description,$(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.jsr166,\ cts/tests/core/libcore/jsr166/AndroidManifest.xml,\ $(JSR166TESTS_INTERMEDIATES)/javalib.jar,jsr166,\ - libcore/expectations) + $(TARGET_ARCH),libcore/expectations) $(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.harmony_annotation.xml: $(CTS_CORE_XMLS_DEPS) $(hide) mkdir -p $(CTS_TESTCASES_OUT) $(call generate-core-test-description,$(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.harmony_annotation,\ cts/tests/core/libcore/harmony_annotation/AndroidManifest.xml,\ $(CORETESTS_INTERMEDIATES)/javalib.jar,org.apache.harmony.annotation.tests,\ - libcore/expectations) + $(TARGET_ARCH),libcore/expectations) $(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.harmony_java_io.xml: $(CTS_CORE_XMLS_DEPS) $(hide) mkdir -p $(CTS_TESTCASES_OUT) $(call generate-core-test-description,$(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.harmony_java_io,\ cts/tests/core/libcore/harmony_java_io/AndroidManifest.xml,\ $(CORETESTS_INTERMEDIATES)/javalib.jar,org.apache.harmony.tests.java.io,\ - libcore/expectations) + $(TARGET_ARCH),libcore/expectations) $(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.harmony_java_lang.xml: $(CTS_CORE_XMLS_DEPS) $(hide) mkdir -p $(CTS_TESTCASES_OUT) $(call generate-core-test-description,$(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.harmony_java_lang,\ cts/tests/core/libcore/harmony_java_lang/AndroidManifest.xml,\ $(CORETESTS_INTERMEDIATES)/javalib.jar,org.apache.harmony.tests.java.lang,\ - libcore/expectations) + $(TARGET_ARCH),libcore/expectations) $(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.harmony_java_math.xml: $(CTS_CORE_XMLS_DEPS) $(hide) mkdir -p $(CTS_TESTCASES_OUT) $(call generate-core-test-description,$(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.harmony_java_math,\ cts/tests/core/libcore/harmony_java_math/AndroidManifest.xml,\ $(CORETESTS_INTERMEDIATES)/javalib.jar,org.apache.harmony.tests.java.math,\ - libcore/expectations) + $(TARGET_ARCH),libcore/expectations) $(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.harmony_java_net.xml: $(CTS_CORE_XMLS_DEPS) $(hide) mkdir -p $(CTS_TESTCASES_OUT) $(call generate-core-test-description,$(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.harmony_java_net,\ cts/tests/core/libcore/harmony_java_net/AndroidManifest.xml,\ $(CORETESTS_INTERMEDIATES)/javalib.jar,org.apache.harmony.tests.java.net,\ - libcore/expectations) + $(TARGET_ARCH),libcore/expectations) $(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.harmony_java_nio.xml: $(CTS_CORE_XMLS_DEPS) $(hide) mkdir -p $(CTS_TESTCASES_OUT) $(call generate-core-test-description,$(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.harmony_java_nio,\ cts/tests/core/libcore/harmony_java_nio/AndroidManifest.xml,\ $(CORETESTS_INTERMEDIATES)/javalib.jar,org.apache.harmony.tests.java.nio,\ - libcore/expectations) + $(TARGET_ARCH),libcore/expectations) $(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.harmony_java_text.xml: $(CTS_CORE_XMLS_DEPS) $(hide) mkdir -p $(CTS_TESTCASES_OUT) $(call generate-core-test-description,$(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.harmony_java_text,\ cts/tests/core/libcore/harmony_java_text/AndroidManifest.xml,\ $(CORETESTS_INTERMEDIATES)/javalib.jar,org.apache.harmony.tests.java.text,\ - libcore/expectations) + $(TARGET_ARCH),libcore/expectations) $(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.harmony_java_util.xml: $(CTS_CORE_XMLS_DEPS) $(hide) mkdir -p $(CTS_TESTCASES_OUT) $(call generate-core-test-description,$(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.harmony_java_util,\ cts/tests/core/libcore/harmony_java_util/AndroidManifest.xml,\ $(CORETESTS_INTERMEDIATES)/javalib.jar,org.apache.harmony.tests.java.util,\ - libcore/expectations) + $(TARGET_ARCH),libcore/expectations) $(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.harmony_javax_security.xml: $(CTS_CORE_XMLS_DEPS) $(hide) mkdir -p $(CTS_TESTCASES_OUT) $(call generate-core-test-description,$(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.harmony_javax_security,\ cts/tests/core/libcore/harmony_javax_security/AndroidManifest.xml,\ $(CORETESTS_INTERMEDIATES)/javalib.jar,org.apache.harmony.tests.javax.security,\ - libcore/expectations) + $(TARGET_ARCH),libcore/expectations) $(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.harmony_beans.xml: $(CTS_CORE_XMLS_DEPS) $(hide) mkdir -p $(CTS_TESTCASES_OUT) $(call generate-core-test-description,$(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.harmony_beans,\ cts/tests/core/libcore/harmony_beans/AndroidManifest.xml,\ - $(APACHEHARMONY_INTERMEDIATES)/javalib.jar,com.android.org.apache.harmony.beans,\ - libcore/expectations external/apache-harmony/Android.mk) + $(APACHEHARMONYTESTS_INTERMEDIATES)/javalib.jar,com.android.org.apache.harmony.beans,\ + $(TARGET_ARCH),libcore/expectations external/apache-harmony/Android.mk) $(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.harmony_logging.xml: $(CTS_CORE_XMLS_DEPS) $(hide) mkdir -p $(CTS_TESTCASES_OUT) $(call generate-core-test-description,$(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.harmony_logging,\ cts/tests/core/libcore/harmony_logging/AndroidManifest.xml,\ - $(APACHEHARMONY_INTERMEDIATES)/javalib.jar,com.android.org.apache.harmony.logging,\ - libcore/expectations external/apache-harmony/Android.mk) - + $(APACHEHARMONYTESTS_INTERMEDIATES)/javalib.jar,com.android.org.apache.harmony.logging,\ + $(TARGET_ARCH),libcore/expectations external/apache-harmony/Android.mk) $(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.harmony_prefs.xml: $(CTS_CORE_XMLS_DEPS) $(hide) mkdir -p $(CTS_TESTCASES_OUT) $(call generate-core-test-description,$(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.harmony_prefs,\ cts/tests/core/libcore/harmony_prefs/AndroidManifest.xml,\ - $(APACHEHARMONY_INTERMEDIATES)/javalib.jar,com.android.org.apache.harmony.prefs,\ - libcore/expectations external/apache-harmony/Android.mk) + $(APACHEHARMONYTESTS_INTERMEDIATES)/javalib.jar,com.android.org.apache.harmony.prefs,\ + $(TARGET_ARCH),libcore/expectations external/apache-harmony/Android.mk) $(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.harmony_sql.xml: $(CTS_CORE_XMLS_DEPS) $(hide) mkdir -p $(CTS_TESTCASES_OUT) $(call generate-core-test-description,$(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.harmony_sql,\ cts/tests/core/libcore/harmony_sql/AndroidManifest.xml,\ - $(APACHEHARMONY_INTERMEDIATES)/javalib.jar,com.android.org.apache.harmony.sql,\ - libcore/expectations external/apache-harmony/Android.mk) + $(APACHEHARMONYTESTS_INTERMEDIATES)/javalib.jar,com.android.org.apache.harmony.sql,\ + $(TARGET_ARCH),libcore/expectations external/apache-harmony/Android.mk) + +$(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.okhttp.xml: $(CTS_CORE_XMLS_DEPS) + $(hide) mkdir -p $(CTS_TESTCASES_OUT) + $(call generate-core-test-description,$(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.okhttp,\ + cts/tests/core/libcore/okhttp/AndroidManifest.xml,\ + $(OKHTTPTESTS_INTERMEDIATES)/javalib.jar,,\ + $(TARGET_ARCH),libcore/expectations) # ----- Generate the test descriptions for the vm-tests-tf ----- # @@ -301,15 +325,16 @@ CORE_VM_TEST_TF_DESC := $(CTS_TESTCASES_OUT)/android.core.vm-tests-tf.xml CORE_INTERMEDIATES :=$(call intermediates-dir-for,JAVA_LIBRARIES,core-libart,,COMMON) JUNIT_INTERMEDIATES :=$(call intermediates-dir-for,JAVA_LIBRARIES,core-junit,,COMMON) -GEN_CLASSPATH := $(CORE_INTERMEDIATES)/classes.jar:$(JUNIT_INTERMEDIATES)/classes.jar:$(VMTESTSTF_JAR):$(DDMLIB_JAR):$(TF_JAR) +GEN_CLASSPATH := $(CORE_INTERMEDIATES)/classes.jar:$(JUNIT_INTERMEDIATES)/classes.jar:$(VMTESTSTF_JAR):$(TF_JAR) $(CORE_VM_TEST_TF_DESC): PRIVATE_CLASSPATH:=$(GEN_CLASSPATH) # Please see big comment above on why this line depends on javalib.jar instead of classes.jar -$(CORE_VM_TEST_TF_DESC): $(HOST_OUT_JAVA_LIBRARIES)/descGen.jar $(HOST_OUT_JAVA_LIBRARIES)/junit.jar $(CORE_INTERMEDIATES)/javalib.jar $(JUNIT_INTERMEDIATES)/javalib.jar $(VMTESTSTF_JAR) $(DDMLIB_JAR) | $(ACP) +$(CORE_VM_TEST_TF_DESC): $(HOST_OUT_JAVA_LIBRARIES)/descGen.jar $(JUNIT_HOST_JAR) $(CORE_INTERMEDIATES)/javalib.jar $(JUNIT_INTERMEDIATES)/javalib.jar $(VMTESTSTF_JAR) | $(ACP) $(hide) mkdir -p $(CTS_TESTCASES_OUT) $(call generate-core-test-description,$(CTS_TESTCASES_OUT)/android.core.vm-tests-tf,\ cts/tests/vm-tests-tf/AndroidManifest.xml,\ $(VMTESTSTF_JAR),"",\ + $(TARGET_ARCH),\ libcore/expectations,\ cts/tools/vm-tests-tf/Android.mk) @@ -339,15 +364,16 @@ $(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-apk -$(hide) $(ACP) -fp $(call intermediates-dir-for,APPS,$(1))/package.apk \ - $(PRIVATE_DIR)/repository/testcases/$(1).apk +define copy-testcase + +$(hide) $(ACP) -fp $(1) $(PRIVATE_DIR)/repository/testcases/$(notdir $1) endef -define copy-testcase +define copy-testcase-jar -$(hide) $(ACP) -fp $(1) $(PRIVATE_DIR)/repository/testcases/$(notdir $1) +$(hide) $(ACP) -fp $(call intermediates-dir-for,JAVA_LIBRARIES,$(1))/javalib.jar \ + $(PRIVATE_DIR)/repository/testcases/$(1).jar endef diff --git a/core/tasks/oem_image.mk b/core/tasks/oem_image.mk new file mode 100644 index 0000000..26b9aba --- /dev/null +++ b/core/tasks/oem_image.mk @@ -0,0 +1,46 @@ +# +# Copyright (C) 2014 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. +# + +# We build oem.img only if it's asked for. +ifneq ($(filter $(MAKECMDGOALS),oem_image),) +ifndef BOARD_OEMIMAGE_PARTITION_SIZE +$(error BOARD_OEMIMAGE_PARTITION_SIZE is not set.) +endif + +INTERNAL_OEMIMAGE_FILES := \ + $(filter $(TARGET_OUT_OEM)/%,$(ALL_DEFAULT_INSTALLED_MODULES)) + +oemimage_intermediates := \ + $(call intermediates-dir-for,PACKAGING,oem) +BUILT_OEMIMAGE_TARGET := $(PRODUCT_OUT)/oem.img +# We just build this directly to the install location. +INSTALLED_OEMIMAGE_TARGET := $(BUILT_OEMIMAGE_TARGET) + +$(INSTALLED_OEMIMAGE_TARGET) : $(INTERNAL_USERIMAGES_DEPS) $(INTERNAL_OEMIMAGE_FILES) + $(call pretty,"Target oem fs image: $@") + @mkdir -p $(TARGET_OUT_OEM) + @mkdir -p $(oemimage_intermediates) && rm -rf $(oemimage_intermediates)/oem_image_info.txt + $(call generate-userimage-prop-dictionary, $(oemimage_intermediates)/oem_image_info.txt, skip_fsck=true) + $(hide) PATH=$(foreach p,$(INTERNAL_USERIMAGES_BINARY_PATHS),$(p):)$$PATH \ + ./build/tools/releasetools/build_image.py \ + $(TARGET_OUT_OEM) $(oemimage_intermediates)/oem_image_info.txt $@ + $(hide) $(call assert-max-image-size,$@,$(BOARD_OEMIMAGE_PARTITION_SIZE)) + +.PHONY: oem_image +oem_image : $(INSTALLED_OEMIMAGE_TARGET) +$(call dist-for-goals, oem_image, $(INSTALLED_OEMIMAGE_TARGET)) + +endif # oem_image in $(MAKECMDGOALS) diff --git a/core/tasks/sdk-addon.mk b/core/tasks/sdk-addon.mk index 5a24a00..5ac9b7d 100644 --- a/core/tasks/sdk-addon.mk +++ b/core/tasks/sdk-addon.mk @@ -18,11 +18,12 @@ addon_name := $(strip $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SDK_ADDON_NAME)) ifneq ($(addon_name),) -addon_dir_leaf := $(addon_name)-$(FILE_NAME_TAG)-$(INTERNAL_SDK_HOST_OS_NAME) - -intermediates := $(HOST_OUT_INTERMEDIATES)/SDK_ADDON/$(addon_name)_intermediates -full_target := $(HOST_OUT_SDK_ADDON)/$(addon_dir_leaf).zip -staging := $(intermediates)/$(addon_dir_leaf) +addon_dir_leaf := $(addon_name)-$(FILE_NAME_TAG)-$(INTERNAL_SDK_HOST_OS_NAME) +addon_dir_img := $(addon_dir_leaf)-img +intermediates := $(HOST_OUT_INTERMEDIATES)/SDK_ADDON/$(addon_name)_intermediates +full_target := $(HOST_OUT_SDK_ADDON)/$(addon_dir_leaf).zip +full_target_img := $(HOST_OUT_SDK_ADDON)/$(addon_dir_img).zip +staging := $(intermediates) sdk_addon_deps := files_to_copy := @@ -46,29 +47,54 @@ $(foreach cf,$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SDK_ADDON_COPY_MODULES), \ $(eval _src := $(call stub-addon-jar-file,$(_src))) \ $(if $(_src),,$(eval $(error Unknown or unlinkable module: $(call word-colon,1,$(cf)). Requested by $(INTERNAL_PRODUCT)))) \ $(eval _dest := $(call word-colon,2,$(cf))) \ - $(eval files_to_copy += $(_src):$(_dest)) \ + $(eval files_to_copy += $(addon_dir_leaf):$(_src):$(_dest)) \ ) endif # Files that are copied directly into the sdk-addon -files_to_copy += $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SDK_ADDON_COPY_FILES) +ifneq ($(strip $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SDK_ADDON_COPY_FILES)),) +$(foreach cf,$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SDK_ADDON_COPY_FILES), \ + $(eval _src := $(call word-colon,1,$(cf))) \ + $(eval _dest := $(call word-colon,2,$(cf))) \ + $(if $(findstring images/,$(_dest)), $(eval _root := $(addon_dir_img)), $(eval _root := $(addon_dir_leaf))) \ + $(eval files_to_copy += $(_root):$(_src):$(_dest)) \ + ) +endif -# All SDK add-ons have these files +# Files copied in the system-image directory files_to_copy += \ - $(BUILT_SYSTEMIMAGE):images/$(TARGET_CPU_ABI)/system.img \ - $(BUILT_USERDATAIMAGE_TARGET):images/$(TARGET_CPU_ABI)/userdata.img \ - $(BUILT_RAMDISK_TARGET):images/$(TARGET_CPU_ABI)/ramdisk.img \ - $(PRODUCT_OUT)/system/build.prop:images/$(TARGET_CPU_ABI)/build.prop \ - $(target_notice_file_txt):images/$(TARGET_CPU_ABI)/NOTICE.txt + $(addon_dir_img):$(BUILT_SYSTEMIMAGE):images/$(TARGET_CPU_ABI)/system.img \ + $(addon_dir_img):$(BUILT_USERDATAIMAGE_TARGET):images/$(TARGET_CPU_ABI)/userdata.img \ + $(addon_dir_img):$(BUILT_RAMDISK_TARGET):images/$(TARGET_CPU_ABI)/ramdisk.img \ + $(addon_dir_img):$(PRODUCT_OUT)/system/build.prop:images/$(TARGET_CPU_ABI)/build.prop \ + $(addon_dir_img):$(target_notice_file_txt):images/$(TARGET_CPU_ABI)/NOTICE.txt \ + $(addon_dir_img):$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SDK_ADDON_SYS_IMG_SOURCE_PROP):images/source.properties # Generate rules to copy the requested files $(foreach cf,$(files_to_copy), \ - $(eval _src := $(call word-colon,1,$(cf))) \ - $(eval _dest := $(call append-path,$(staging),$(call word-colon,2,$(cf)))) \ + $(eval _root := $(call word-colon,1,$(cf))) \ + $(eval _src := $(call word-colon,2,$(cf))) \ + $(eval _dest := $(call append-path,$(call append-path,$(staging),$(_root)),$(call word-colon,3,$(cf)))) \ $(eval $(call copy-one-file,$(_src),$(_dest))) \ $(eval sdk_addon_deps += $(_dest)) \ ) +# The system-image source.properties is a template that we directly expand in-place +addon_img_source_prop := $(call append-path,$(staging),$(addon_dir_img))/images/$(TARGET_CPU_ABI)/source.properties +sdk_addon_deps += $(addon_img_source_prop) + +$(addon_img_source_prop): $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SDK_ADDON_SYS_IMG_SOURCE_PROP) + @echo Generate $@ + $(hide) mkdir -p $(dir $@) + $(hide) sed \ + -e 's/$${PLATFORM_VERSION}/$(PLATFORM_VERSION)/' \ + -e 's/$${PLATFORM_SDK_VERSION}/$(PLATFORM_SDK_VERSION)/' \ + -e 's/$${PLATFORM_VERSION_CODENAME}/$(subst REL,,$(PLATFORM_VERSION_CODENAME))/' \ + -e 's/$${TARGET_ARCH}/$(TARGET_ARCH)/' \ + -e 's/$${TARGET_CPU_ABI}/$(TARGET_CPU_ABI)/' \ + $< > $@ && sed -i -e '/^AndroidVersion.CodeName=\s*$$/d' $@ + + # We don't know about all of the docs files, so depend on the timestamps for # them, and record the directories, and the packaging rule will just copy the # whole thing. @@ -76,7 +102,7 @@ doc_modules := $(strip $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SDK_ADDON_DOC_MODU sdk_addon_deps += $(foreach dm, $(doc_modules), $(call doc-timestamp-for, $(dm))) $(full_target): PRIVATE_DOCS_DIRS := $(addprefix $(OUT_DOCS)/, $(doc_modules)) -$(full_target): PRIVATE_STAGING_DIR := $(staging) +$(full_target): PRIVATE_STAGING_DIR := $(call append-path,$(staging),$(addon_dir_leaf)) $(full_target): $(sdk_addon_deps) | $(ACP) @echo Packaging SDK Addon: $@ @@ -85,16 +111,24 @@ $(full_target): $(sdk_addon_deps) | $(ACP) $(ACP) -r $$d $(PRIVATE_STAGING_DIR)/docs ;\ done $(hide) mkdir -p $(dir $@) - $(hide) ( F=$$(pwd)/$@ ; cd $(PRIVATE_STAGING_DIR)/.. && zip -rq $$F * ) + $(hide) ( F=$$(pwd)/$@ ; cd $(PRIVATE_STAGING_DIR)/.. && zip -rq $$F $(notdir $(PRIVATE_STAGING_DIR)) ) + +$(full_target_img): PRIVATE_STAGING_DIR := $(call append-path,$(staging),$(addon_dir_img))/images/$(TARGET_CPU_ABI) +$(full_target_img): $(full_target) $(addon_img_source_prop) + @echo Packaging SDK Addon System-Image: $@ + $(hide) mkdir -p $(dir $@) + $(hide) ( F=$$(pwd)/$@ ; cd $(PRIVATE_STAGING_DIR)/.. && zip -rq $$F $(notdir $(PRIVATE_STAGING_DIR)) ) + .PHONY: sdk_addon -sdk_addon: $(full_target) +sdk_addon: $(full_target) $(full_target_img) ifneq ($(sdk_repo_goal),) # If we're building the sdk_repo, keep the name of the addon zip # around so that development/build/tools/sdk_repo.mk can dist it # at the appropriate location. -ADDON_SDK_ZIP := $(full_target) +ADDON_SDK_ZIP := $(full_target) +ADDON_SDK_IMG_ZIP := $(full_target_img) else # When not building an sdk_repo, just dist the addon zip file # as-is. diff --git a/core/tasks/tools/package-modules.mk b/core/tasks/tools/package-modules.mk index f7e04ed..bd9cf57 100644 --- a/core/tasks/tools/package-modules.mk +++ b/core/tasks/tools/package-modules.mk @@ -37,16 +37,26 @@ $(foreach m,$(my_modules),\ $(eval my_copy_pairs += $(bui):$(my_staging_dir)/$(my_copy_dest)))\ )) +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));) +endef + my_package_zip := $(my_staging_dir)/$(my_package_name).zip $(my_package_zip): PRIVATE_COPY_PAIRS := $(my_copy_pairs) $(my_package_zip): PRIVATE_PICKUP_FILES := $(my_pickup_files) $(my_package_zip) : $(my_built_modules) @echo "Package $@" @rm -rf $(dir $@) && mkdir -p $(dir $@) - $(hide) $(foreach p, $(PRIVATE_COPY_PAIRS), \ - $(eval pair := $(subst :,$(space),$(p)))\ - mkdir -p $(dir $(word 2,$(pair))); \ - cp -rf $(word 1,$(pair)) $(word 2,$(pair));) - $(hide) $(foreach f, $(PRIVATE_PICKUP_FILES), \ + $(call copy-tests-in-batch,$(wordlist 1,200,$(PRIVATE_COPY_PAIRS))) + $(call copy-tests-in-batch,$(wordlist 201,400,$(PRIVATE_COPY_PAIRS))) + $(call copy-tests-in-batch,$(wordlist 401,600,$(PRIVATE_COPY_PAIRS))) + $(call copy-tests-in-batch,$(wordlist 601,800,$(PRIVATE_COPY_PAIRS))) + $(call copy-tests-in-batch,$(wordlist 801,1000,$(PRIVATE_COPY_PAIRS))) + $(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 $@);) $(hide) cd $(dir $@) && zip -rq $(notdir $@) * diff --git a/core/tasks/vendor_module_check.mk b/core/tasks/vendor_module_check.mk index 87d723c..d8e8ec7 100644 --- a/core/tasks/vendor_module_check.mk +++ b/core/tasks/vendor_module_check.mk @@ -18,19 +18,27 @@ _vendor_owner_whitelist := \ asus \ audience \ + atmel \ broadcom \ csr \ elan \ google \ + htc \ imgtec \ invensense \ intel \ lge \ + moto \ + mtk \ nvidia \ nxp \ + nxpsw \ qcom \ + qti \ samsung \ samsung_arm \ + sony \ + synaptics \ ti \ trusted_logic \ widevine diff --git a/core/version_defaults.mk b/core/version_defaults.mk index 1e172ed..8cb8d26 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 := 4.4.3 + PLATFORM_VERSION := 5.0 endif ifeq "" "$(PLATFORM_SDK_VERSION)" @@ -53,13 +53,18 @@ 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 := 19 + PLATFORM_SDK_VERSION := 21 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 + + # 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 + # codenames after PLATFORM_VERSION_CODENAME. + PLATFORM_VERSION_ALL_CODENAMES := $(PLATFORM_VERSION_CODENAME) endif ifeq "" "$(DEFAULT_APP_TARGET_SDK)" |