From f37b455858af45b36f14213696d2b55802a774c1 Mon Sep 17 00:00:00 2001 From: Colin Cross Date: Thu, 16 Jul 2015 17:15:19 -0700 Subject: [PATCH] Read BUILD_NUMBER from file in rules Using $(BUILD_NUMBER) inside a rule causes odd behavior, as the rule is different every time make is run, but since make doesn't depend on the command line it only ends up being built with the new value if some other dependency has changed. To allow ninja, which does depend on the command line, to provide the same behavior, store the build number in out/build_number.txt, and use a shell expansion to cat the file in rules that use it. This will cause the rule command to stay identical between builds, while still getting the new build number if the rule is rerun for a dependency. Also use the same trick for BUILD_FINGERPRINT, and the date in droiddoc rules. Change-Id: I6c5e6b6b3ef4c613563d7f5604df0e401575ba5f --- core/Makefile | 15 +++++++++------ core/definitions.mk | 12 ++++++------ core/droiddoc.mk | 4 ++-- core/main.mk | 6 ++++++ 4 files changed, 23 insertions(+), 14 deletions(-) diff --git a/core/Makefile b/core/Makefile index d66855a5f..c35f7449c 100644 --- a/core/Makefile +++ b/core/Makefile @@ -106,7 +106,7 @@ BUILD_VERSION_TAGS += $(BUILD_KEYS) BUILD_VERSION_TAGS := $(subst $(space),$(comma),$(sort $(BUILD_VERSION_TAGS))) # A human-readable string that descibes this build in detail. -build_desc := $(TARGET_PRODUCT)-$(TARGET_BUILD_VARIANT) $(PLATFORM_VERSION) $(BUILD_ID) $(BUILD_NUMBER) $(BUILD_VERSION_TAGS) +build_desc := $(TARGET_PRODUCT)-$(TARGET_BUILD_VARIANT) $(PLATFORM_VERSION) $(BUILD_ID) $(BUILD_NUMBER_FROM_FILE) $(BUILD_VERSION_TAGS) $(INSTALLED_BUILD_PROP_TARGET): PRIVATE_BUILD_DESC := $(build_desc) # The string used to uniquely identify the combined build and product; used by the OTA server. @@ -124,6 +124,9 @@ ifneq ($(words $(BUILD_FINGERPRINT)),1) $(error BUILD_FINGERPRINT cannot contain spaces: "$(BUILD_FINGERPRINT)") endif +$(shell echo $(BUILD_FINGERPRINT) > $(PRODUCT_OUT)/build_fingerprint.txt) +BUILD_FINGERPRINT_FROM_FILE := $$(cat $(PRODUCT_OUT)/build_fingerprint.txt) + # 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))) @@ -147,7 +150,7 @@ ifeq ($(TARGET_BUILD_VARIANT),user) # Dev. branches should have DISPLAY_BUILD_NUMBER set ifeq "true" "$(DISPLAY_BUILD_NUMBER)" - BUILD_DISPLAY_ID := $(BUILD_ID).$(BUILD_NUMBER) $(BUILD_KEYS) + BUILD_DISPLAY_ID := $(BUILD_ID).$(BUILD_NUMBER_FROM_FILE) $(BUILD_KEYS) else BUILD_DISPLAY_ID := $(BUILD_ID) $(BUILD_KEYS) endif @@ -194,14 +197,14 @@ endif PRIVATE_BUILD_DESC="$(PRIVATE_BUILD_DESC)" \ BUILD_ID="$(BUILD_ID)" \ BUILD_DISPLAY_ID="$(BUILD_DISPLAY_ID)" \ - BUILD_NUMBER="$(BUILD_NUMBER)" \ + BUILD_NUMBER="$(BUILD_NUMBER_FROM_FILE)" \ 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)" \ + BUILD_FINGERPRINT="$(BUILD_FINGERPRINT_FROM_FILE)" \ $(if $(OEM_THUMBPRINT_PROPERTIES),BUILD_THUMBPRINT="$(BUILD_THUMBPRINT)") \ TARGET_BOARD_PLATFORM="$(TARGET_BOARD_PLATFORM)" \ TARGET_CPU_ABI_LIST="$(TARGET_CPU_ABI_LIST)" \ @@ -244,7 +247,7 @@ $(INSTALLED_VENDOR_BUILD_PROP_TARGET): $(INSTALLED_BUILD_PROP_TARGET) $(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)">>$@ + $(hide) echo ro.vendor.build.fingerprint="$(BUILD_FINGERPRINT_FROM_FILE)">>$@ endif # ---------------------------------------------------------------- @@ -260,7 +263,7 @@ $(INSTALLED_BOOTIMAGE_BUILD_PROP_TARGET): $(INSTALLED_BUILD_PROP_TARGET) $(hide) echo > $@ $(hide) echo ro.bootimage.build.date=`date`>>$@ $(hide) echo ro.bootimage.build.date.utc=`date +%s`>>$@ - $(hide) echo ro.bootimage.build.fingerprint="$(BUILD_FINGERPRINT)">>$@ + $(hide) echo ro.bootimage.build.fingerprint="$(BUILD_FINGERPRINT_FROM_FILE)">>$@ # ----------------------------------------------------------------- # sdk-build.prop diff --git a/core/definitions.mk b/core/definitions.mk index a9d09efd2..fad753fb3 100644 --- a/core/definitions.mk +++ b/core/definitions.mk @@ -1664,8 +1664,8 @@ $(hide) $(AAPT) package $(PRIVATE_AAPT_FLAGS) -m \ $(addprefix -G , $(PRIVATE_PROGUARD_OPTIONS_FILE)) \ $(addprefix --min-sdk-version , $(PRIVATE_DEFAULT_APP_TARGET_SDK)) \ $(addprefix --target-sdk-version , $(PRIVATE_DEFAULT_APP_TARGET_SDK)) \ - $(if $(filter --version-code,$(PRIVATE_AAPT_FLAGS)),,$(addprefix --version-code , $(PLATFORM_SDK_VERSION))) \ - $(if $(filter --version-name,$(PRIVATE_AAPT_FLAGS)),,$(addprefix --version-name , $(PLATFORM_VERSION)-$(BUILD_NUMBER))) \ + $(if $(filter --version-code,$(PRIVATE_AAPT_FLAGS)),,--version-code $(PLATFORM_SDK_VERSION)) \ + $(if $(filter --version-name,$(PRIVATE_AAPT_FLAGS)),,--version-name $(PLATFORM_VERSION)-$(BUILD_NUMBER_FROM_FILE)) \ $(addprefix --rename-manifest-package , $(PRIVATE_MANIFEST_PACKAGE_NAME)) \ $(addprefix --rename-instrumentation-target-package , $(PRIVATE_MANIFEST_INSTRUMENTATION_FOR)) endef @@ -1788,7 +1788,7 @@ $(if $(PRIVATE_JAR_EXCLUDE_PACKAGES), $(hide) rm -rf \ $(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)/' \ + $(hide) sed -e "s/%BUILD_NUMBER%/$(BUILD_NUMBER_FROM_FILE)/" \ $(PRIVATE_JAR_MANIFEST) > $(dir $@)/manifest.mf && \ jar -cfm $@ $(dir $@)/manifest.mf \ -C $(PRIVATE_CLASS_INTERMEDIATES_DIR) ., \ @@ -1990,7 +1990,7 @@ $(if $(PRIVATE_JAR_EXCLUDE_PACKAGES), $(hide) rm -rf \ $(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)/' \ + $(hide) sed -e "s/%BUILD_NUMBER%/$(BUILD_NUMBER_FROM_FILE)/" \ $(PRIVATE_JAR_MANIFEST) > $(dir $@)/manifest.mf && \ jar -cfm $@ $(dir $@)/manifest.mf \ -C $(PRIVATE_CLASS_INTERMEDIATES_DIR) ., \ @@ -2093,8 +2093,8 @@ $(hide) $(AAPT) package -u $(PRIVATE_AAPT_FLAGS) \ $(addprefix --min-sdk-version , $(PRIVATE_DEFAULT_APP_TARGET_SDK)) \ $(addprefix --target-sdk-version , $(PRIVATE_DEFAULT_APP_TARGET_SDK)) \ $(if $(filter --product,$(PRIVATE_AAPT_FLAGS)),,$(addprefix --product , $(TARGET_AAPT_CHARACTERISTICS))) \ - $(if $(filter --version-code,$(PRIVATE_AAPT_FLAGS)),,$(addprefix --version-code , $(PLATFORM_SDK_VERSION))) \ - $(if $(filter --version-name,$(PRIVATE_AAPT_FLAGS)),,$(addprefix --version-name , $(PLATFORM_VERSION)-$(BUILD_NUMBER))) \ + $(if $(filter --version-code,$(PRIVATE_AAPT_FLAGS)),,--version-code $(PLATFORM_SDK_VERSION)) \ + $(if $(filter --version-name,$(PRIVATE_AAPT_FLAGS)),,--version-name $(PLATFORM_VERSION)-$(BUILD_NUMBER_FROM_FILE)) \ $(addprefix --rename-manifest-package , $(PRIVATE_MANIFEST_PACKAGE_NAME)) \ $(addprefix --rename-instrumentation-target-package , $(PRIVATE_MANIFEST_INSTRUMENTATION_FOR)) \ -F $@ diff --git a/core/droiddoc.mk b/core/droiddoc.mk index 41f135c65..0de1837eb 100644 --- a/core/droiddoc.mk +++ b/core/droiddoc.mk @@ -131,8 +131,8 @@ droiddoc := \ $(HOST_OUT_JAVA_LIBRARIES)/doclava$(COMMON_JAVA_PACKAGE_SUFFIX) $(full_target): PRIVATE_DOCLETPATH := $(HOST_OUT_JAVA_LIBRARIES)/jsilver$(COMMON_JAVA_PACKAGE_SUFFIX):$(HOST_OUT_JAVA_LIBRARIES)/doclava$(COMMON_JAVA_PACKAGE_SUFFIX) -$(full_target): PRIVATE_CURRENT_BUILD := -hdf page.build $(BUILD_ID)-$(BUILD_NUMBER) -$(full_target): PRIVATE_CURRENT_TIME := -hdf page.now "$(shell date "+%d %b %Y %k:%M")" +$(full_target): PRIVATE_CURRENT_BUILD := -hdf page.build $(BUILD_ID)-$(BUILD_NUMBER_FROM_FILE) +$(full_target): PRIVATE_CURRENT_TIME := -hdf page.now "$$(date "+%d %b %Y %k:%M")" $(full_target): PRIVATE_CUSTOM_TEMPLATE_DIR := $(LOCAL_DROIDDOC_CUSTOM_TEMPLATE_DIR) $(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) diff --git a/core/main.mk b/core/main.mk index 7f561ab20..7f22d76aa 100644 --- a/core/main.mk +++ b/core/main.mk @@ -93,6 +93,12 @@ include $(BUILD_SYSTEM)/help.mk # and host information. include $(BUILD_SYSTEM)/config.mk +# Write the build number to a file so it can be read back in +# without changing the command line every time. Avoids rebuilds +# when using ninja. +$(shell echo -n $(BUILD_NUMBER) > $(OUT_DIR)/build_number.txt) +BUILD_NUMBER_FROM_FILE := $$(cat $(OUT_DIR)/build_number.txt) + # CTS-specific config. -include cts/build/config.mk -- 2.11.0