diff --git a/cleanspec.mk b/cleanspec.mk index 22d9fe19d8..4cf3f59869 100644 --- a/cleanspec.mk +++ b/cleanspec.mk @@ -75,6 +75,14 @@ $(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/com.an $(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/APPS/PinyinIMEGoogleService_intermediates) $(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/com.android.inputmethod.pinyin.lib_intermediates) $(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/APPS/PinyinIMEGoogleService_intermediates) +$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/framework_intermediates/src/telephony) +$(call add-clean-step, rm -rf $(OUT_DIR)/target/product/*/obj) +$(call add-clean-step, rm -f $(PRODUCT_OUT)/system/bin/tcpdump) +$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/framework_intermediates/src/location) + +$(call add-clean-step, rm -rf $(OUT_DIR)/product/*/obj/SHARED_LIBRARIES/lib?camera_intermediates) +$(call add-clean-step, rm -rf $(OUT_DIR)/product/*/obj/STATIC_LIBRARIES/lib?camera_intermediates) +$(call add-clean-step, rm -rf $(OUT_DIR)/target/product/*/obj/SHARED_LIBRARIES/libwebcore_intermediates) # ************************************************ # NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST diff --git a/core/Makefile b/core/Makefile index 58a9695978..107d0c1354 100644 --- a/core/Makefile +++ b/core/Makefile @@ -62,9 +62,6 @@ endif # Apps are always signed with test keys, and may be re-signed in a post-build # step. If that happens, the "test-keys" tag will be removed by that step. BUILD_VERSION_TAGS += test-keys -ifndef INCLUDE_TEST_OTA_KEYS - BUILD_VERSION_TAGS += ota-rel-keys -endif BUILD_VERSION_TAGS := $(subst $(space),$(comma),$(sort $(BUILD_VERSION_TAGS))) # A human-readable string that descibes this build in detail. @@ -129,10 +126,12 @@ $(INSTALLED_BUILD_PROP_TARGET): $(BUILDINFO_SH) $(INTERNAL_BUILD_ID_MAKEFILE) BUILD_NUMBER="$(BUILD_NUMBER)" \ PLATFORM_VERSION="$(PLATFORM_VERSION)" \ PLATFORM_SDK_VERSION="$(PLATFORM_SDK_VERSION)" \ + PLATFORM_VERSION_CODENAME="$(PLATFORM_VERSION_CODENAME)" \ BUILD_VERSION_TAGS="$(BUILD_VERSION_TAGS)" \ TARGET_BOOTLOADER_BOARD_NAME="$(TARGET_BOOTLOADER_BOARD_NAME)" \ BUILD_FINGERPRINT="$(BUILD_FINGERPRINT)" \ TARGET_BOARD_PLATFORM="$(TARGET_BOARD_PLATFORM)" \ + TARGET_CPU_ABI="$(TARGET_CPU_ABI)" \ bash $(BUILDINFO_SH) > $@ $(hide) if [ -f $(TARGET_DEVICE_DIR)/system.prop ]; then \ cat $(TARGET_DEVICE_DIR)/system.prop >> $@; \ @@ -227,6 +226,15 @@ ifdef CREATE_MODULE_INFO_FILE "INSTALLED=\"$(strip $(ALL_MODULES.$(m).INSTALLED))\"" >> $(MODULE_INFO_FILE))) endif +# ----------------------------------------------------------------- + +# The test key is used to sign this package, and as the key required +# for future OTA packages installed by this system. Actual product +# deliverables will be re-signed by hand. We expect this file to +# exist with the suffixes ".x509.pem" and ".pk8". +DEFAULT_KEY_CERT_PAIR := $(SRC_TARGET_DIR)/product/security/testkey + + # Rules that need to be present for the simulator, even # if they don't do anything. .PHONY: systemimage @@ -250,9 +258,9 @@ BUILT_RAMDISK_TARGET := $(PRODUCT_OUT)/ramdisk.img # We just build this directly to the install location. INSTALLED_RAMDISK_TARGET := $(BUILT_RAMDISK_TARGET) -$(INSTALLED_RAMDISK_TARGET): $(MKBOOTFS) $(INTERNAL_RAMDISK_FILES) +$(INSTALLED_RAMDISK_TARGET): $(MKBOOTFS) $(INTERNAL_RAMDISK_FILES) | $(MINIGZIP) $(call pretty,"Target ram disk: $@") - $(hide) $(MKBOOTFS) $(TARGET_ROOT_OUT) | gzip > $@ + $(hide) $(MKBOOTFS) $(TARGET_ROOT_OUT) | $(MINIGZIP) > $@ ifneq ($(strip $(TARGET_NO_KERNEL)),true) @@ -271,6 +279,11 @@ ifdef BOARD_KERNEL_CMDLINE INTERNAL_BOOTIMAGE_ARGS += --cmdline "$(BOARD_KERNEL_CMDLINE)" endif +BOARD_KERNEL_BASE := $(strip $(BOARD_KERNEL_BASE)) +ifdef BOARD_KERNEL_BASE + INTERNAL_BOOTIMAGE_ARGS += --base $(BOARD_KERNEL_BASE) +endif + INSTALLED_BOOTIMAGE_TARGET := $(PRODUCT_OUT)/boot.img ifeq ($(TARGET_BOOTIMAGE_USE_EXT2),true) @@ -434,12 +447,16 @@ $(eval $(call combine-notice-files, \ # the module processing has already been done -- in fact, we used the # fact that all that has been done to get the list of modules that we # need notice files for. -$(target_notice_file_html_gz): $(target_notice_file_html) - gzip -c $< > $@ +$(target_notice_file_html_gz): $(target_notice_file_html) | $(MINIGZIP) + $(hide) $(MINIGZIP) -9 < $< > $@ installed_notice_html_gz := $(TARGET_OUT)/etc/NOTICE.html.gz $(installed_notice_html_gz): $(target_notice_file_html_gz) | $(ACP) $(copy-file-to-target) + +# if we've been run my mm, mmm, etc, don't reinstall this every time +ifeq ($(ONE_SHOT_MAKEFILE),) ALL_DEFAULT_INSTALLED_MODULES += $(installed_notice_html_gz) +endif # The kernel isn't really a module, so to get its module file in there, we # make the target NOTICE files depend on this particular file too, which will @@ -452,6 +469,23 @@ $(kernel_notice_file): \ $(hide) $(ACP) $< $@ +# ----------------------------------------------------------------- +# Build a keystore with the authorized keys in it, used to verify the +# authenticity of downloaded OTA packages. +# +# This rule adds to ALL_DEFAULT_INSTALLED_MODULES, so it needs to come +# before the rules that use that variable to build the image. +ALL_DEFAULT_INSTALLED_MODULES += $(TARGET_OUT_ETC)/security/otacerts.zip +$(TARGET_OUT_ETC)/security/otacerts.zip: KEY_CERT_PAIR := $(DEFAULT_KEY_CERT_PAIR) +$(TARGET_OUT_ETC)/security/otacerts.zip: $(addsuffix .x509.pem,$(DEFAULT_KEY_CERT_PAIR)) + $(hide) rm -f $@ + $(hide) mkdir -p $(dir $@) + $(hide) zip -qj $@ $< + +.PHONY: otacerts +otacerts: $(TARGET_OUT_ETC)/security/otacerts.zip + + # ################################################################# # Targets for user images # ################################################################# @@ -463,6 +497,95 @@ else INTERNAL_MKUSERFS := $(MKYAFFS2) endif +# ----------------------------------------------------------------- +# Recovery image + +# If neither TARGET_NO_KERNEL nor TARGET_NO_RECOVERY are true +ifeq (,$(filter true, $(TARGET_NO_KERNEL) $(TARGET_NO_RECOVERY))) + +INSTALLED_RECOVERYIMAGE_TARGET := $(PRODUCT_OUT)/recovery.img + +recovery_initrc := $(call include-path-for, recovery)/etc/init.rc +recovery_kernel := $(INSTALLED_KERNEL_TARGET) # same as a non-recovery system +recovery_ramdisk := $(PRODUCT_OUT)/ramdisk-recovery.img +recovery_build_prop := $(INSTALLED_BUILD_PROP_TARGET) +recovery_binary := $(call intermediates-dir-for,EXECUTABLES,recovery)/recovery +recovery_resources_common := $(call include-path-for, recovery)/res +recovery_resources_private := $(strip $(wildcard $(TARGET_DEVICE_DIR)/recovery/res)) +recovery_resource_deps := $(shell find $(recovery_resources_common) \ + $(recovery_resources_private) -type f) + +ifeq ($(recovery_resources_private),) + $(info No private recovery resources for TARGET_DEVICE $(TARGET_DEVICE)) +endif + +INTERNAL_RECOVERYIMAGE_ARGS := \ + $(addprefix --second ,$(INSTALLED_2NDBOOTLOADER_TARGET)) \ + --kernel $(recovery_kernel) \ + --ramdisk $(recovery_ramdisk) + +# Assumes this has already been stripped +ifdef BOARD_KERNEL_CMDLINE + INTERNAL_RECOVERYIMAGE_ARGS += --cmdline "$(BOARD_KERNEL_CMDLINE)" +endif +ifdef BOARD_KERNEL_BASE + INTERNAL_RECOVERYIMAGE_ARGS += --base $(BOARD_KERNEL_BASE) +endif + +# Keys authorized to sign OTA packages this build will accept. The +# build always uses test-keys for this; release packaging tools will +# substitute other keys for this one. +OTA_PUBLIC_KEYS := $(SRC_TARGET_DIR)/product/security/testkey.x509.pem + +# Generate a file containing the keys that will be read by the +# recovery binary. +RECOVERY_INSTALL_OTA_KEYS := \ + $(call intermediates-dir-for,PACKAGING,ota_keys)/keys +DUMPKEY_JAR := $(HOST_OUT_JAVA_LIBRARIES)/dumpkey.jar +$(RECOVERY_INSTALL_OTA_KEYS): PRIVATE_OTA_PUBLIC_KEYS := $(OTA_PUBLIC_KEYS) +$(RECOVERY_INSTALL_OTA_KEYS): $(OTA_PUBLIC_KEYS) $(DUMPKEY_JAR) + @echo "DumpPublicKey: $@ <= $(PRIVATE_OTA_PUBLIC_KEYS)" + @rm -rf $@ + @mkdir -p $(dir $@) + java -jar $(DUMPKEY_JAR) $(PRIVATE_OTA_PUBLIC_KEYS) > $@ + +$(INSTALLED_RECOVERYIMAGE_TARGET): $(MKBOOTFS) $(MKBOOTIMG) $(MINIGZIP) \ + $(INSTALLED_RAMDISK_TARGET) \ + $(INSTALLED_BOOTIMAGE_TARGET) \ + $(recovery_binary) \ + $(recovery_initrc) $(recovery_kernel) \ + $(INSTALLED_2NDBOOTLOADER_TARGET) \ + $(recovery_build_prop) $(recovery_resource_deps) \ + $(RECOVERY_INSTALL_OTA_KEYS) + @echo ----- Making recovery image ------ + rm -rf $(TARGET_RECOVERY_OUT) + mkdir -p $(TARGET_RECOVERY_OUT) + mkdir -p $(TARGET_RECOVERY_ROOT_OUT) + mkdir -p $(TARGET_RECOVERY_ROOT_OUT)/etc + mkdir -p $(TARGET_RECOVERY_ROOT_OUT)/tmp + echo Copying baseline ramdisk... + cp -R $(TARGET_ROOT_OUT) $(TARGET_RECOVERY_OUT) + echo Modifying ramdisk contents... + cp -f $(recovery_initrc) $(TARGET_RECOVERY_ROOT_OUT)/ + cp -f $(recovery_binary) $(TARGET_RECOVERY_ROOT_OUT)/sbin/ + cp -rf $(recovery_resources_common) $(TARGET_RECOVERY_ROOT_OUT)/ + $(foreach item,$(recovery_resources_private), \ + cp -rf $(item) $(TARGET_RECOVERY_ROOT_OUT)/) + cp $(RECOVERY_INSTALL_OTA_KEYS) $(TARGET_RECOVERY_ROOT_OUT)/res/keys + cat $(INSTALLED_DEFAULT_PROP_TARGET) $(recovery_build_prop) \ + > $(TARGET_RECOVERY_ROOT_OUT)/default.prop + $(MKBOOTFS) $(TARGET_RECOVERY_ROOT_OUT) | $(MINIGZIP) > $(recovery_ramdisk) + $(MKBOOTIMG) $(INTERNAL_RECOVERYIMAGE_ARGS) --output $@ + @echo ----- Made recovery image -------- $@ + $(hide) $(call assert-max-file-size,$@,$(BOARD_RECOVERYIMAGE_MAX_SIZE)) + +else +INSTALLED_RECOVERYIMAGE_TARGET := +endif + +.PHONY: recoveryimage +recoveryimage: $(INSTALLED_RECOVERYIMAGE_TARGET) + # ----------------------------------------------------------------- # system yaffs image # @@ -518,10 +641,10 @@ else SYSTEMIMAGE_SOURCE_DIR := $(TARGET_OUT) endif -$(INSTALLED_SYSTEMIMAGE): $(BUILT_SYSTEMIMAGE) | $(ACP) +$(INSTALLED_SYSTEMIMAGE): $(BUILT_SYSTEMIMAGE) $(INSTALLED_RECOVERYIMAGE_TARGET) | $(ACP) @echo "Install system fs image: $@" $(copy-file-to-target) - $(hide) $(call assert-max-file-size,$@,$(BOARD_SYSTEMIMAGE_MAX_SIZE)) + $(hide) $(call assert-max-file-size,$@ $(INSTALLED_RECOVERYIMAGE_TARGET),$(BOARD_SYSTEMIMAGE_MAX_SIZE)) systemimage: $(INSTALLED_SYSTEMIMAGE) @@ -614,72 +737,6 @@ userdatatarball-nodeps: $(FS_GET_STATS) $(build-userdatatarball-target) -# If neither TARGET_NO_KERNEL nor TARGET_NO_RECOVERY are true -ifeq (,$(filter true, $(TARGET_NO_KERNEL) $(TARGET_NO_RECOVERY))) - -# ----------------------------------------------------------------- -# Recovery image -INSTALLED_RECOVERYIMAGE_TARGET := $(PRODUCT_OUT)/recovery.img - -recovery_initrc := $(call include-path-for, recovery)/etc/init.rc -recovery_kernel := $(INSTALLED_KERNEL_TARGET) # same as a non-recovery system -recovery_ramdisk := $(PRODUCT_OUT)/ramdisk-recovery.img -recovery_build_prop := $(INSTALLED_BUILD_PROP_TARGET) -recovery_binary := $(call intermediates-dir-for,EXECUTABLES,recovery)/recovery -recovery_resources_common := $(call include-path-for, recovery)/res -recovery_resources_private := $(strip $(wildcard $(TARGET_DEVICE_DIR)/recovery/res)) -recovery_resource_deps := $(shell find $(recovery_resources_common) \ - $(recovery_resources_private) -type f) - -ifeq ($(recovery_resources_private),) - $(info No private recovery resources for TARGET_DEVICE $(TARGET_DEVICE)) -endif - -INTERNAL_RECOVERYIMAGE_ARGS := \ - $(addprefix --second ,$(INSTALLED_2NDBOOTLOADER_TARGET)) \ - --kernel $(recovery_kernel) \ - --ramdisk $(recovery_ramdisk) - -# Assumes this has already been stripped -ifdef BOARD_KERNEL_CMDLINE - INTERNAL_RECOVERYIMAGE_ARGS += --cmdline "$(BOARD_KERNEL_CMDLINE)" -endif - -$(INSTALLED_RECOVERYIMAGE_TARGET): $(MKBOOTFS) $(MKBOOTIMG) \ - $(INSTALLED_RAMDISK_TARGET) \ - $(INSTALLED_BOOTIMAGE_TARGET) \ - $(recovery_binary) \ - $(recovery_initrc) $(recovery_kernel) \ - $(INSTALLED_2NDBOOTLOADER_TARGET) \ - $(recovery_build_prop) $(recovery_resource_deps) - @echo ----- Making recovery image ------ - rm -rf $(TARGET_RECOVERY_OUT) - mkdir -p $(TARGET_RECOVERY_OUT) - mkdir -p $(TARGET_RECOVERY_ROOT_OUT) - mkdir -p $(TARGET_RECOVERY_ROOT_OUT)/etc - mkdir -p $(TARGET_RECOVERY_ROOT_OUT)/tmp - echo Copying baseline ramdisk... - cp -R $(TARGET_ROOT_OUT) $(TARGET_RECOVERY_OUT) - echo Modifying ramdisk contents... - cp -f $(recovery_initrc) $(TARGET_RECOVERY_ROOT_OUT)/ - cp -f $(recovery_binary) $(TARGET_RECOVERY_ROOT_OUT)/sbin/ - cp -rf $(recovery_resources_common) $(TARGET_RECOVERY_ROOT_OUT)/ - $(foreach item,$(recovery_resources_private), \ - cp -rf $(item) $(TARGET_RECOVERY_ROOT_OUT)/) - cat $(INSTALLED_DEFAULT_PROP_TARGET) $(recovery_build_prop) \ - > $(TARGET_RECOVERY_ROOT_OUT)/default.prop - $(MKBOOTFS) $(TARGET_RECOVERY_ROOT_OUT) | gzip > $(recovery_ramdisk) - $(MKBOOTIMG) $(INTERNAL_RECOVERYIMAGE_ARGS) --output $@ - @echo ----- Made recovery image -------- $@ - $(hide) $(call assert-max-file-size,$@,$(BOARD_RECOVERYIMAGE_MAX_SIZE)) - -else -INSTALLED_RECOVERYIMAGE_TARGET := -endif - -.PHONY: recoveryimage -recoveryimage: $(INSTALLED_RECOVERYIMAGE_TARGET) - # ----------------------------------------------------------------- # bring in the installer image generation defines if necessary ifeq ($(TARGET_USE_DISKINSTALLER),true) @@ -687,123 +744,20 @@ include bootable/diskinstaller/config.mk endif # ----------------------------------------------------------------- -# OTA update package -name := $(TARGET_PRODUCT) -ifeq ($(TARGET_BUILD_TYPE),debug) - name := $(name)_debug -endif -name := $(name)-ota-$(FILE_NAME_TAG) +# host tools needed to build OTA packages -INTERNAL_OTA_PACKAGE_TARGET := $(PRODUCT_OUT)/$(name).zip -INTERNAL_OTA_INTERMEDIATES_DIR := $(call intermediates-dir-for,PACKAGING,ota) - -# If neither TARGET_NO_KERNEL nor TARGET_NO_RECOVERY are true -ifeq (,$(filter true, $(TARGET_NO_KERNEL) $(TARGET_NO_RECOVERY))) -INTERNAL_OTA_RECOVERYIMAGE_TARGET := $(INTERNAL_OTA_INTERMEDIATES_DIR)/system/recovery.img -else -INTERNAL_OTA_RECOVERYIMAGE_TARGET := -endif -INTERNAL_OTA_SCRIPT_TARGET := $(INTERNAL_OTA_INTERMEDIATES_DIR)/META-INF/com/google/android/update-script - -# Sign OTA packages with the test key by default. -# Actual product deliverables will be re-signed by hand. -private_key := $(SRC_TARGET_DIR)/product/security/testkey.pk8 -certificate := $(SRC_TARGET_DIR)/product/security/testkey.x509.pem -$(INTERNAL_OTA_PACKAGE_TARGET): $(private_key) $(certificate) $(SIGNAPK_JAR) -$(INTERNAL_OTA_PACKAGE_TARGET): PRIVATE_PRIVATE_KEY := $(private_key) -$(INTERNAL_OTA_PACKAGE_TARGET): PRIVATE_CERTIFICATE := $(certificate) - -# Depending on INSTALLED_SYSTEMIMAGE guarantees that SYSTEMIMAGE_SOURCE_DIR -# is up-to-date. We use jar instead of zip so that we can use the -C -# switch to avoid cd-ing all over the place. -# TODO: Make our own jar-creation tool to avoid all these shenanigans. -$(INTERNAL_OTA_PACKAGE_TARGET): \ - $(INTERNAL_OTA_SCRIPT_TARGET) \ - $(INTERNAL_OTA_RECOVERYIMAGE_TARGET) \ - $(INSTALLED_BOOTIMAGE_TARGET) \ - $(INSTALLED_RADIOIMAGE_TARGET) \ - $(INSTALLED_ANDROID_INFO_TXT_TARGET) \ - $(INSTALLED_SYSTEMIMAGE) - @echo "Package OTA: $@" - $(hide) rm -rf $@ - $(hide) jar cf $@ \ - $(foreach item, \ - $(INSTALLED_BOOTIMAGE_TARGET) \ - $(INSTALLED_RADIOIMAGE_TARGET) \ - $(INSTALLED_ANDROID_INFO_TXT_TARGET), \ - -C $(dir $(item)) $(notdir $(item))) \ - -C $(INTERNAL_OTA_INTERMEDIATES_DIR) . - $(hide) find $(SYSTEMIMAGE_SOURCE_DIR) -type f -print | \ - sed 's|^$(dir $(SYSTEMIMAGE_SOURCE_DIR))|-C & |' | \ - xargs jar uf $@ - $(hide) if jar tf $@ | egrep '.{65}' >&2; then \ - echo "Path too long (>64 chars) for OTA update" >&2; \ - exit 1; \ - fi - $(sign-package) - -$(INTERNAL_OTA_SCRIPT_TARGET): \ - $(HOST_OUT_EXECUTABLES)/make-update-script \ - $(INSTALLED_ANDROID_INFO_TXT_TARGET) \ - $(INSTALLED_SYSTEMIMAGE) - @mkdir -p $(dir $@) - @rm -rf $@ - @echo "Update script: $@" - $(hide) TARGET_DEVICE=$(TARGET_DEVICE) \ - $< $(SYSTEMIMAGE_SOURCE_DIR) \ - $(INSTALLED_ANDROID_INFO_TXT_TARGET) \ - > $@ - -ifneq (,$(INTERNAL_OTA_RECOVERYIMAGE_TARGET)) -# This copy is so recovery.img can be in /system within the OTA package. -# That way it gets installed into the system image, which in turn installs it. -$(INTERNAL_OTA_RECOVERYIMAGE_TARGET): $(INSTALLED_RECOVERYIMAGE_TARGET) | $(ACP) - @mkdir -p $(dir $@) - $(hide) $(ACP) $< $@ -endif - -.PHONY: otapackage -otapackage: $(INTERNAL_OTA_PACKAGE_TARGET) - -# Keys authorized to sign OTA packages this build will accept. -ifeq ($(INCLUDE_TEST_OTA_KEYS),true) - OTA_PUBLIC_KEYS := \ - $(sort $(SRC_TARGET_DIR)/product/security/testkey.x509.pem $(OTA_PUBLIC_KEYS)) -endif - -ifeq ($(OTA_PUBLIC_KEYS),) - $(error No OTA_PUBLIC_KEYS defined) -endif - -# Build a keystore with the authorized keys in it. -# java/android/android/server/checkin/UpdateVerifier.java uses this. -ALL_DEFAULT_INSTALLED_MODULES += $(TARGET_OUT_ETC)/security/otacerts.zip -$(TARGET_OUT_ETC)/security/otacerts.zip: $(OTA_PUBLIC_KEYS) - $(hide) rm -f $@ - $(hide) mkdir -p $(dir $@) - zip -qj $@ $(OTA_PUBLIC_KEYS) - -# The device does not support JKS. -# $(hide) for f in $(OTA_PUBLIC_KEYS); do \ -# echo "keytool: $@ <= $$f" && \ -# keytool -keystore $@ -storepass $(notdir $@) -noprompt \ -# -import -file $$f -alias $(notdir $$f) || exit 1; \ -# done - -ifdef RECOVERY_INSTALL_OTA_KEYS_INC -# Generate a C-includable file containing the keys. -# RECOVERY_INSTALL_OTA_KEYS_INC is defined by recovery/Android.mk. -# *** THIS IS A TOTAL HACK; EXECUTABLES MUST NOT CHANGE BETWEEN DIFFERENT -# PRODUCTS/BUILD TYPES. *** -# TODO: make recovery read the keys from an external file. -DUMPKEY_JAR := $(HOST_OUT_JAVA_LIBRARIES)/dumpkey.jar -$(RECOVERY_INSTALL_OTA_KEYS_INC): PRIVATE_OTA_PUBLIC_KEYS := $(OTA_PUBLIC_KEYS) -$(RECOVERY_INSTALL_OTA_KEYS_INC): $(OTA_PUBLIC_KEYS) $(DUMPKEY_JAR) - @echo "DumpPublicKey: $@ <= $(PRIVATE_OTA_PUBLIC_KEYS)" - @rm -rf $@ - @mkdir -p $(dir $@) - $(hide) java -jar $(DUMPKEY_JAR) $(PRIVATE_OTA_PUBLIC_KEYS) > $@ -endif +.PHONY: otatools +otatools: $(HOST_OUT_EXECUTABLES)/minigzip \ + $(HOST_OUT_EXECUTABLES)/mkbootfs \ + $(HOST_OUT_EXECUTABLES)/mkbootimg \ + $(HOST_OUT_EXECUTABLES)/fs_config \ + $(HOST_OUT_EXECUTABLES)/mkyaffs2image \ + $(HOST_OUT_EXECUTABLES)/zipalign \ + $(HOST_OUT_EXECUTABLES)/aapt \ + $(HOST_OUT_EXECUTABLES)/bsdiff \ + $(HOST_OUT_EXECUTABLES)/imgdiff \ + $(HOST_OUT_JAVA_LIBRARIES)/dumpkey.jar \ + $(HOST_OUT_JAVA_LIBRARIES)/signapk.jar # ----------------------------------------------------------------- # A zip of the directories that map to the target filesystem. @@ -833,21 +787,22 @@ define package_files-copy-root endef built_ota_tools := \ - $(call intermediates-dir-for,EXECUTABLES,applypatch)/applypatch \ - $(call intermediates-dir-for,EXECUTABLES,check_prereq)/check_prereq + $(call intermediates-dir-for,EXECUTABLES,applypatch)/applypatch \ + $(call intermediates-dir-for,EXECUTABLES,check_prereq)/check_prereq \ + $(call intermediates-dir-for,EXECUTABLES,updater)/updater $(BUILT_TARGET_FILES_PACKAGE): PRIVATE_OTA_TOOLS := $(built_ota_tools) +$(BUILT_TARGET_FILES_PACKAGE): PRIVATE_RECOVERY_API_VERSION := $(RECOVERY_API_VERSION) + # Depending on the various images guarantees that the underlying # directories are up-to-date. $(BUILT_TARGET_FILES_PACKAGE): \ - $(INTERNAL_OTA_SCRIPT_TARGET) \ $(INSTALLED_BOOTIMAGE_TARGET) \ $(INSTALLED_RADIOIMAGE_TARGET) \ $(INSTALLED_RECOVERYIMAGE_TARGET) \ - $(BUILT_SYSTEMIMAGE) \ + $(INSTALLED_SYSTEMIMAGE) \ $(INSTALLED_USERDATAIMAGE_TARGET) \ $(INSTALLED_ANDROID_INFO_TXT_TARGET) \ - $(INTERNAL_OTA_SCRIPT_TARGET) \ $(built_ota_tools) \ $(APKCERTS_FILE) \ | $(ACP) @@ -895,19 +850,53 @@ endif $(TARGET_OUT_DATA),$(zip_root)/DATA) @# Extra contents of the OTA package $(hide) mkdir -p $(zip_root)/OTA/bin - $(hide) $(call package_files-copy-root, \ - $(INTERNAL_OTA_INTERMEDIATES_DIR),$(zip_root)/OTA) $(hide) $(ACP) $(INSTALLED_ANDROID_INFO_TXT_TARGET) $(zip_root)/OTA/ $(hide) $(ACP) $(PRIVATE_OTA_TOOLS) $(zip_root)/OTA/bin/ - @# Files that don't end up in any images, but are necessary to + @# Files that do not end up in any images, but are necessary to @# build them. $(hide) mkdir -p $(zip_root)/META $(hide) $(ACP) $(APKCERTS_FILE) $(zip_root)/META/apkcerts.txt + $(hide) echo "$(PRODUCT_OTA_PUBLIC_KEYS)" > $(zip_root)/META/otakeys.txt + $(hide) echo "$(PRIVATE_RECOVERY_API_VERSION)" > $(zip_root)/META/recovery-api-version.txt + $(hide) echo "blocksize $(BOARD_FLASH_BLOCK_SIZE)" > $(zip_root)/META/imagesizes.txt + $(hide) echo "boot $(BOARD_BOOTIMAGE_MAX_SIZE)" >> $(zip_root)/META/imagesizes.txt + $(hide) echo "recovery $(BOARD_RECOVERYIMAGE_MAX_SIZE)" >> $(zip_root)/META/imagesizes.txt + $(hide) echo "system $(BOARD_SYSTEMIMAGE_MAX_SIZE)" >> $(zip_root)/META/imagesizes.txt + $(hide) echo "userdata $(BOARD_USERDATAIMAGE_MAX_SIZE)" >> $(zip_root)/META/imagesizes.txt @# Zip everything up, preserving symlinks $(hide) (cd $(zip_root) && zip -qry ../$(notdir $@) .) target-files-package: $(BUILT_TARGET_FILES_PACKAGE) +# ----------------------------------------------------------------- +# OTA update package + +ifneq ($(TARGET_SIMULATOR),true) +ifneq ($(TARGET_PRODUCT),sdk) + +name := $(TARGET_PRODUCT) +ifeq ($(TARGET_BUILD_TYPE),debug) + name := $(name)_debug +endif +name := $(name)-ota-$(FILE_NAME_TAG) + +INTERNAL_OTA_PACKAGE_TARGET := $(PRODUCT_OUT)/$(name).zip + +$(INTERNAL_OTA_PACKAGE_TARGET): KEY_CERT_PAIR := $(DEFAULT_KEY_CERT_PAIR) + +$(INTERNAL_OTA_PACKAGE_TARGET): $(BUILT_TARGET_FILES_PACKAGE) otatools + @echo "Package OTA: $@" + $(hide) ./build/tools/releasetools/ota_from_target_files \ + -p $(HOST_OUT) \ + -k $(KEY_CERT_PAIR) \ + $(BUILT_TARGET_FILES_PACKAGE) $@ + +.PHONY: otapackage +otapackage: $(INTERNAL_OTA_PACKAGE_TARGET) + +endif # TARGET_PRODUCT != sdk +endif # TARGET_SIMULATOR != true + # ----------------------------------------------------------------- # installed file list # Depending on $(INSTALLED_SYSTEMIMAGE) ensures that it @@ -1009,14 +998,8 @@ dalvikfiles: $(INTERNAL_DALVIK_MODULES) # ----------------------------------------------------------------- # The update package -INTERNAL_UPDATE_PACKAGE_FILES += \ - $(INSTALLED_BOOTIMAGE_TARGET) \ - $(INSTALLED_RECOVERYIMAGE_TARGET) \ - $(INSTALLED_SYSTEMIMAGE) \ - $(INSTALLED_USERDATAIMAGE_TARGET) \ - $(INSTALLED_ANDROID_INFO_TXT_TARGET) - -ifneq ($(strip $(INTERNAL_UPDATE_PACKAGE_FILES)),) +ifneq ($(TARGET_SIMULATOR),true) +ifneq ($(TARGET_PRODUCT),sdk) name := $(TARGET_PRODUCT) ifeq ($(TARGET_BUILD_TYPE),debug) @@ -1026,13 +1009,17 @@ name := $(name)-img-$(FILE_NAME_TAG) INTERNAL_UPDATE_PACKAGE_TARGET := $(PRODUCT_OUT)/$(name).zip -$(INTERNAL_UPDATE_PACKAGE_TARGET): $(INTERNAL_UPDATE_PACKAGE_FILES) +$(INTERNAL_UPDATE_PACKAGE_TARGET): $(BUILT_TARGET_FILES_PACKAGE) otatools @echo "Package: $@" - $(hide) zip -qj $@ $(INTERNAL_UPDATE_PACKAGE_FILES) + $(hide) ./build/tools/releasetools/img_from_target_files \ + -p $(HOST_OUT) \ + $(BUILT_TARGET_FILES_PACKAGE) $@ -else -INTERNAL_UPDATE_PACKAGE_TARGET := -endif +.PHONY: updatepackage +updatepackage: $(INTERNAL_UPDATE_PACKAGE_TARGET) + +endif # TARGET_PRODUCT != sdk +endif # TARGET_SIMULATOR != true # ----------------------------------------------------------------- # The emulator package @@ -1116,7 +1103,9 @@ deps := \ $(target_notice_file_txt) \ $(tools_notice_file_txt) \ $(OUT_DOCS)/offline-sdk-timestamp \ - $(INTERNAL_UPDATE_PACKAGE_TARGET) \ + $(INSTALLED_SYSTEMIMAGE) \ + $(INSTALLED_USERDATAIMAGE_TARGET) \ + $(INSTALLED_RAMDISK_TARGET) \ $(INSTALLED_SDK_BUILD_PROP_TARGET) \ $(ATREE_FILES) \ $(atree_dir)/sdk.atree \ diff --git a/core/base_rules.mk b/core/base_rules.mk index 4ee2985ec1..c182a779e6 100644 --- a/core/base_rules.mk +++ b/core/base_rules.mk @@ -267,7 +267,6 @@ full_static_java_libs := \ JAVA_LIBRARIES,$(lib),$(LOCAL_IS_HOST_MODULE))/javalib.jar) $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_INSTALL_DIR := $(dir $(LOCAL_INSTALLED_MODULE)) -$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_INTERMEDIATES_DIR := $(intermediates) $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_CLASS_INTERMEDIATES_DIR := $(intermediates)/classes $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_SOURCE_INTERMEDIATES_DIR := $(intermediates)/src $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_JAVA_SOURCES := $(all_java_sources) @@ -357,6 +356,8 @@ $(LOCAL_INTERMEDIATE_TARGETS) : PRIVATE_ALL_JAVA_LIBRARIES:= $(full_java_libs) $(LOCAL_INTERMEDIATE_TARGETS) : PRIVATE_IS_HOST_MODULE := $(LOCAL_IS_HOST_MODULE) $(LOCAL_INTERMEDIATE_TARGETS) : PRIVATE_HOST:= $(my_host) +$(LOCAL_INTERMEDIATE_TARGETS) : PRIVATE_INTERMEDIATES_DIR:= $(intermediates) + # Tell the module and all of its sub-modules who it is. $(LOCAL_INTERMEDIATE_TARGETS) : PRIVATE_MODULE:= $(LOCAL_MODULE) diff --git a/core/binary.mk b/core/binary.mk index 0f35d3f0cf..ddcdc6f598 100644 --- a/core/binary.mk +++ b/core/binary.mk @@ -47,11 +47,11 @@ LOCAL_ARM_MODE := $(strip $(LOCAL_ARM_MODE)) arm_objects_mode := $(if $(LOCAL_ARM_MODE),$(LOCAL_ARM_MODE),arm) normal_objects_mode := $(if $(LOCAL_ARM_MODE),$(LOCAL_ARM_MODE),thumb) -# Read the values from something like TARGET_arm_release_CFLAGS or -# TARGET_thumb_debug_CFLAGS. HOST_(arm|thumb)_(release|debug)_CFLAGS -# values aren't actually used (although they are usually empty). -arm_objects_cflags := $($(my_prefix)$(arm_objects_mode)_$($(my_prefix)BUILD_TYPE)_CFLAGS) -normal_objects_cflags := $($(my_prefix)$(normal_objects_mode)_$($(my_prefix)BUILD_TYPE)_CFLAGS) +# Read the values from something like TARGET_arm_CFLAGS or +# TARGET_thumb_CFLAGS. HOST_(arm|thumb)_CFLAGS values aren't +# actually used (although they are usually empty). +arm_objects_cflags := $($(my_prefix)$(arm_objects_mode)_CFLAGS) +normal_objects_cflags := $($(my_prefix)$(normal_objects_mode)_CFLAGS) ########################################################### ## Define per-module debugging flags. Users can turn on @@ -211,6 +211,19 @@ $(c_objects): $(intermediates)/%.o: $(TOPDIR)$(LOCAL_PATH)/%.c $(yacc_cpps) $(PR -include $(c_objects:%.o=%.P) endif +########################################################### +## ObjC: Compile .m files to .o +########################################################### + +objc_sources := $(filter %.m,$(LOCAL_SRC_FILES)) +objc_objects := $(addprefix $(intermediates)/,$(objc_sources:.m=.o)) + +ifneq ($(strip $(objc_objects)),) +$(objc_objects): $(intermediates)/%.o: $(TOPDIR)$(LOCAL_PATH)/%.m $(yacc_cpps) $(PRIVATE_ADDITIONAL_DEPENDENCIES) + $(transform-$(PRIVATE_HOST)m-to-o) +-include $(objc_objects:%.o=%.P) +endif + ########################################################### ## AS: Compile .S files to .o. ########################################################### diff --git a/core/build_id.mk b/core/build_id.mk index cb18bc4924..060c9b5e88 100644 --- a/core/build_id.mk +++ b/core/build_id.mk @@ -23,7 +23,7 @@ # (like "TC1-RC5"). It must be a single word, and is # capitalized by convention. # -BUILD_ID := CUPCAKE +BUILD_ID := Donut # DISPLAY_BUILD_NUMBER should only be set for development branches, # If set, the BUILD_NUMBER (cl) is appended to the BUILD_ID for diff --git a/core/combo/linux-arm.mk b/core/combo/linux-arm.mk index d2e0672c5f..11a8ac7c85 100644 --- a/core/combo/linux-arm.mk +++ b/core/combo/linux-arm.mk @@ -73,40 +73,39 @@ $(combo_target)LD := $($(combo_target)TOOLS_PREFIX)ld$(HOST_EXECUTABLE_SUFFIX) $(combo_target)NO_UNDEFINED_LDFLAGS := -Wl,--no-undefined -TARGET_arm_release_CFLAGS := -O2 \ - -fomit-frame-pointer \ - -fstrict-aliasing \ - -funswitch-loops \ - -finline-limit=300 +TARGET_arm_CFLAGS := -O2 \ + -fomit-frame-pointer \ + -fstrict-aliasing \ + -funswitch-loops \ + -finline-limit=300 # Modules can choose to compile some source as thumb. As # non-thumb enabled targets are supported, this is treated # as a 'hint'. If thumb is not enabled, these files are just # compiled as ARM. ifeq ($(ARCH_ARM_HAVE_THUMB_SUPPORT),true) -TARGET_thumb_release_CFLAGS := -mthumb \ - -Os \ - -fomit-frame-pointer \ - -fno-strict-aliasing \ - -finline-limit=64 +TARGET_thumb_CFLAGS := -mthumb \ + -Os \ + -fomit-frame-pointer \ + -fno-strict-aliasing \ + -finline-limit=64 else -TARGET_thumb_release_CFLAGS := $(TARGET_arm_release_CFLAGS) +TARGET_thumb_CFLAGS := $(TARGET_arm_CFLAGS) endif -# When building for debug, compile everything as arm. -TARGET_arm_debug_CFLAGS := $(TARGET_arm_release_CFLAGS) -fno-omit-frame-pointer -fno-strict-aliasing -TARGET_thumb_debug_CFLAGS := $(TARGET_thumb_release_CFLAGS) -marm -fno-omit-frame-pointer - -# NOTE: if you try to build a debug build with thumb, several +# Set FORCE_ARM_DEBUGGING to "true" in your buildspec.mk +# or in your environment to force a full arm build, even for +# files that are normally built as thumb; this can make +# gdb debugging easier. Don't forget to do a clean build. +# +# NOTE: if you try to build a -O0 build with thumb, several # of the libraries (libpv, libwebcore, libkjs) need to be built # with -mlong-calls. When built at -O0, those libraries are # too big for a thumb "BL