From ba9b0fbc05917d8f35b4684c1e5940f0319270af Mon Sep 17 00:00:00 2001 From: Dan Willemsen Date: Fri, 29 Sep 2017 19:18:21 -0700 Subject: [PATCH 1/2] Fix multiple output file generation for AAPT2 Make R.stamp actually part of the same rule that creates R.java. Otherwise if the generated sources directory is removed, we don't regenerate R.java / Manifest.java. Also move the package-export.apk and proguard options file into the same rule. Test: m telephony-common; rm out/target/common/obj/*/*_intermediates/src; m telephony-common Change-Id: I71f6fcaf20593ca23271d52d15537aaa9ef4cc77 --- core/aapt2.mk | 47 ++++++++++++++++++++++------------------ core/definitions.mk | 6 ++--- core/package_internal.mk | 2 +- 3 files changed, 30 insertions(+), 25 deletions(-) diff --git a/core/aapt2.mk b/core/aapt2.mk index 287f93392..c7cae4459 100644 --- a/core/aapt2.mk +++ b/core/aapt2.mk @@ -69,23 +69,11 @@ $(my_res_package): PRIVATE_OVERLAY_FLAT := $(my_static_library_resources) $(my_g $(my_res_package): PRIVATE_SHARED_ANDROID_LIBRARIES := $(my_shared_library_resources) $(my_res_package): PRIVATE_PROGUARD_OPTIONS_FILE := $(proguard_options_file) $(my_res_package): PRIVATE_ASSET_DIRS := $(my_asset_dirs) -$(my_res_package): $(full_android_manifest) $(my_static_library_resources) $(my_shared_library_resources) -$(my_res_package): $(my_full_asset_paths) -$(my_res_package): $(my_res_resources_flat) $(my_overlay_resources_flat) \ - $(my_generated_resources_flata) $(my_static_library_resources) \ - $(AAPT2) - @echo "AAPT2 link $@" - $(call aapt2-link) +$(my_res_package): .KATI_IMPLICIT_OUTPUTS := ifdef R_file_stamp -$(R_file_stamp) : $(my_res_package) | $(ACP) - @echo "target R.java/Manifest.java: $(PRIVATE_MODULE) ($@)" - @rm -rf $@ && mkdir -p $(dir $@) - $(call find-generated-R.java) -endif - -ifdef proguard_options_file -$(proguard_options_file) : $(my_res_package) +$(my_res_package): PRIVATE_R_FILE_STAMP := $(R_file_stamp) +$(my_res_package): .KATI_IMPLICIT_OUTPUTS += $(R_file_stamp) endif resource_export_package := @@ -94,10 +82,27 @@ ifdef LOCAL_EXPORT_PACKAGE_RESOURCES # other packages can use to build their own PRODUCT-agnostic R.java (etc.) # files. resource_export_package := $(intermediates.COMMON)/package-export.apk -$(R_file_stamp) : $(resource_export_package) - -$(resource_export_package) : $(my_res_package) | $(ACP) - @echo "target Export Resources: $(PRIVATE_MODULE) $(@)" - $(copy-file-to-new-target) - +$(my_res_package): PRIVATE_RESOURCE_EXPORT_PACKAGE := $(resource_export_package) +$(my_res_package): .KATI_IMPLICIT_OUTPUTS += $(resource_export_package) +endif + +ifdef proguard_options_file +$(my_res_package): .KATI_IMPLICIT_OUTPUTS += $(proguard_options_file) +endif + +$(my_res_package): $(full_android_manifest) $(my_static_library_resources) $(my_shared_library_resources) +$(my_res_package): $(my_full_asset_paths) +$(my_res_package): $(my_res_resources_flat) $(my_overlay_resources_flat) \ + $(my_generated_resources_flata) $(my_static_library_resources) \ + $(AAPT2) + @echo "AAPT2 link $@" + $(call aapt2-link) +ifdef R_file_stamp + @rm -f $(PRIVATE_R_FILE_STAMP) + $(call find-generated-R.java,$(PRIVATE_R_FILE_STAMP)) +endif +ifdef LOCAL_EXPORT_PACKAGE_RESOURCES + @rm -f $(PRIVATE_RESOURCE_EXPORT_PACKAGE) + + cp $@ $(PRIVATE_RESOURCE_EXPORT_PACKAGE) endif diff --git a/core/definitions.mk b/core/definitions.mk index ae6293100..68d1fa2cb 100644 --- a/core/definitions.mk +++ b/core/definitions.mk @@ -2060,7 +2060,7 @@ $(hide) $(AAPT_ASAN_OPTIONS) $(AAPT) package $(PRIVATE_AAPT_FLAGS) -m \ --skip-symbols-without-default-localization endef -# Search for generated R.java/Manifest.java, copy the found R.java as $@. +# Search for generated R.java/Manifest.java, copy the found R.java as $1. # Also copy them to a central 'R' directory to make it easier to add the files to an IDE. define find-generated-R.java $(hide) for GENERATED_MANIFEST_FILE in `find $(PRIVATE_SOURCE_INTERMEDIATES_DIR) \ @@ -2075,11 +2075,11 @@ $(hide) for GENERATED_R_FILE in `find $(PRIVATE_SOURCE_INTERMEDIATES_DIR) \ mkdir -p $(TARGET_COMMON_OUT_ROOT)/R/$$dir; \ $(ACP) -fp $$GENERATED_R_FILE $(TARGET_COMMON_OUT_ROOT)/R/$$dir \ || exit 31; \ - $(ACP) -fp $$GENERATED_R_FILE $@ || exit 32; \ + $(ACP) -fp $$GENERATED_R_FILE $1 || exit 32; \ done; @# Ensure that the target file is always created, i.e. also in case we did not @# enter the GENERATED_R_FILE-loop above. This avoids unnecessary rebuilding. -$(hide) touch $@ +$(hide) touch $1 endef ########################################################### diff --git a/core/package_internal.mk b/core/package_internal.mk index 7d9c7d4d3..fe648c213 100644 --- a/core/package_internal.mk +++ b/core/package_internal.mk @@ -419,7 +419,7 @@ $(R_file_stamp): $(all_res_assets) $(full_android_manifest) $(RenderScript_file_ @echo "target R.java/Manifest.java: $(PRIVATE_MODULE) ($@)" @rm -rf $@ && mkdir -p $(dir $@) $(create-resource-java-files) - $(call find-generated-R.java) + $(call find-generated-R.java,$@) $(proguard_options_file): $(R_file_stamp) From 4d99527dcd0dc1fa13f13127a77ae6116d1b97f3 Mon Sep 17 00:00:00 2001 From: Dan Willemsen Date: Fri, 29 Sep 2017 17:37:31 -0700 Subject: [PATCH 2/2] Move generated aidl/logtags java classes to a subfolder So that they can't be generated into src/, which would be added to the source list automatically. Bug: 36698184 Test: m telephony-common without this change, pass Test: m telephony-common without the cleanspec, fail with dup class Test: m telephony-common with the cleanspec, pass Change-Id: I7b2fc1847d52ff4a9ba8c69e76123fe152629ef8 --- CleanSpec.mk | 6 ++++++ core/java.mk | 6 +++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/CleanSpec.mk b/CleanSpec.mk index 76711f2bb..23eba4f25 100644 --- a/CleanSpec.mk +++ b/CleanSpec.mk @@ -436,6 +436,12 @@ $(call add-clean-step, rm -rf $(PRODUCT_OUT)/symbols/sbin/adbd) $(call add-clean-step, find $(SOONG_OUT_DIR)/.intermediates -name 'linux_x86*' | xargs rm -rf) $(call add-clean-step, find $(SOONG_OUT_DIR)/.intermediates -name 'linux_common*' | xargs rm -rf) +# Remove old aidl/logtags files that may be in the generated source directory +$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/*/*_intermediates/src) +$(call add-clean-step, rm -f $(OUT_DIR)/target/common/obj/*/*_intermediates/java-source-list) +$(call add-clean-step, rm -rf $(OUT_DIR)/host/common/obj/*/*_intermediates/src) +$(call add-clean-step, rm -f $(OUT_DIR)/host/common/obj/*/*_intermediates/java-source-list) + # ************************************************ # NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST # ************************************************ diff --git a/core/java.mk b/core/java.mk index 90a826378..efbc4bb13 100644 --- a/core/java.mk +++ b/core/java.mk @@ -363,7 +363,7 @@ LOCAL_AIDL_INCLUDES += $(FRAMEWORKS_BASE_JAVA_SRC_DIRS) endif # LOCAL_SDK_VERSION $(foreach s,$(aidl_sources),\ - $(eval $(call define-aidl-java-rule,$(s),$(intermediates.COMMON),aidl_java_sources))) + $(eval $(call define-aidl-java-rule,$(s),$(intermediates.COMMON)/aidl,aidl_java_sources))) $(foreach java,$(aidl_java_sources), \ $(call include-depfile,$(java:%.java=%.P),$(java))) @@ -403,11 +403,11 @@ include $(BUILD_SYSTEM)/base_rules.mk ########################################################### ifneq ($(strip $(logtags_sources)),) -logtags_java_sources := $(patsubst %.logtags,%.java,$(addprefix $(intermediates.COMMON)/src/, $(logtags_sources))) +logtags_java_sources := $(patsubst %.logtags,%.java,$(addprefix $(intermediates.COMMON)/logtags/, $(logtags_sources))) logtags_sources := $(addprefix $(LOCAL_PATH)/, $(logtags_sources)) $(logtags_java_sources): PRIVATE_MERGED_TAG := $(TARGET_OUT_COMMON_INTERMEDIATES)/all-event-log-tags.txt -$(logtags_java_sources): $(intermediates.COMMON)/src/%.java: $(LOCAL_PATH)/%.logtags $(TARGET_OUT_COMMON_INTERMEDIATES)/all-event-log-tags.txt $(JAVATAGS) build/tools/event_log_tags.py +$(logtags_java_sources): $(intermediates.COMMON)/logtags/%.java: $(LOCAL_PATH)/%.logtags $(TARGET_OUT_COMMON_INTERMEDIATES)/all-event-log-tags.txt $(JAVATAGS) build/tools/event_log_tags.py $(transform-logtags-to-java) else