From dfc45ec33722730ef016163e8d9dd0a4320812ff Mon Sep 17 00:00:00 2001 From: Colin Cross Date: Fri, 26 May 2017 15:22:02 -0700 Subject: [PATCH] Separate java source list generation into its own rule Move the java source list generation step into its own rule. This has a couple of advantages. It consolidates the source list generation so that it only has to run once for javac, jack, and jack-check. It also massively reduces the length of the javac command line, so that error messages are significantly shorter, and allows easily rerunning the failing build command because the file list is still on disk. The primary disadvantage is that javac error messages no longer include the list of files passed to javac, but the list is available earlier in the build long when the file list was written, and is still available on disk. Test: m -j javac-check Change-Id: I9730b352b33a060e08221b61c11c617d23320d67 --- core/definitions.mk | 99 ++++++++------------------------ core/host_dalvik_java_library.mk | 42 +++++++++----- core/host_java_library.mk | 31 ++++++---- core/java.mk | 56 ++++++++++++------ core/java_common.mk | 1 + core/package_internal.mk | 27 ++------- core/static_java_library.mk | 1 + 7 files changed, 117 insertions(+), 140 deletions(-) diff --git a/core/definitions.mk b/core/definitions.mk index c43b15699..6b1f35be6 100644 --- a/core/definitions.mk +++ b/core/definitions.mk @@ -2206,13 +2206,26 @@ define jar-args-sorted-files-in-directory @<(find $(1) -type f | sort | $(JAR_ARGS) $(1); echo "-C $(EMPTY_DIRECTORY) .") endef -# Common definition to invoke javac on the host and target. -# # Some historical notes: # - below we write the list of java files to java-source-list to avoid argument # list length problems with Cygwin # - we filter out duplicate java file names because eclipse's compiler # doesn't like them. +define write-java-source-list +@echo "$($(PRIVATE_PREFIX)DISPLAY) Java source list: $(PRIVATE_MODULE)" +$(hide) rm -f $@ +$(call dump-words-to-file,$(sort $(PRIVATE_JAVA_SOURCES)),$@.tmp) +$(hide) if [ -d "$(PRIVATE_SOURCE_INTERMEDIATES_DIR)" ]; then \ + find $(PRIVATE_SOURCE_INTERMEDIATES_DIR) -name '*.java' -and -not -name '.*' >> $@.tmp; \ +fi +$(if $(PRIVATE_HAS_PROTO_SOURCES), \ + $(hide) find $(PRIVATE_PROTO_SOURCE_INTERMEDIATES_DIR) -name '*.java' -and -not -name '.*' >> $@.tmp) +$(if $(PRIVATE_HAS_RS_SOURCES), \ + $(hide) find $(PRIVATE_RS_SOURCE_INTERMEDIATES_DIR) -name '*.java' -and -not -name '.*' >> $@.tmp) +$(hide) tr ' ' '\n' < $@.tmp | $(NORMALIZE_PATH) | sort -u > $@ +endef + +# Common definition to invoke javac on the host and target. # # $(1): javac # $(2): bootclasspath @@ -2222,17 +2235,7 @@ $(hide) rm -rf $(PRIVATE_CLASS_INTERMEDIATES_DIR) $(PRIVATE_ANNO_INTERMEDIATES_D $(hide) mkdir -p $(dir $@) $(hide) mkdir -p $(PRIVATE_CLASS_INTERMEDIATES_DIR) $(PRIVATE_ANNO_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' -and -not -name '.*' >> $(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list; \ -fi -$(if $(PRIVATE_HAS_PROTO_SOURCES), \ - $(hide) find $(PRIVATE_PROTO_SOURCE_INTERMEDIATES_DIR) -name '*.java' -and -not -name '.*' >> $(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list ) -$(if $(PRIVATE_HAS_RS_SOURCES), \ - $(hide) find $(PRIVATE_RS_SOURCE_INTERMEDIATES_DIR) -name '*.java' -and -not -name '.*' >> $(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list ) -$(hide) tr ' ' '\n' < $(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list \ - | $(NORMALIZE_PATH) | sort -u > $(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list-uniq -$(hide) if [ -s $(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list-uniq ] ; then \ +$(hide) if [ -s $(PRIVATE_JAVA_SOURCE_LIST) ] ; then \ $(SOONG_JAVAC_WRAPPER) $(1) -encoding UTF-8 \ $(if $(findstring true,$(PRIVATE_WARNINGS_ENABLE)),$(xlint_unchecked),) \ $(2) \ @@ -2241,13 +2244,11 @@ $(hide) if [ -s $(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list-uniq ] ; the $(if $(findstring true,$(PRIVATE_WARNINGS_ENABLE)),$(xlint_unchecked),) \ -d $(PRIVATE_CLASS_INTERMEDIATES_DIR) -s $(PRIVATE_ANNO_INTERMEDIATES_DIR) \ $(PRIVATE_JAVACFLAGS) \ - \@$(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list-uniq \ + \@$(PRIVATE_JAVA_SOURCE_LIST) \ || ( rm -rf $(PRIVATE_CLASS_INTERMEDIATES_DIR) ; exit 41 ) \ fi $(if $(PRIVATE_JAVA_LAYERS_FILE), $(hide) build/tools/java-layers.py \ - $(PRIVATE_JAVA_LAYERS_FILE) \@$(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list-uniq,) -$(hide) rm -f $(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list -$(hide) rm -f $(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list-uniq + $(PRIVATE_JAVA_LAYERS_FILE) @$(PRIVATE_JAVA_SOURCE_LIST),) $(if $(PRIVATE_JAR_EXCLUDE_FILES), $(hide) find $(PRIVATE_CLASS_INTERMEDIATES_DIR) \ -name $(word 1, $(PRIVATE_JAR_EXCLUDE_FILES)) \ $(addprefix -o -name , $(wordlist 2, 999, $(PRIVATE_JAR_EXCLUDE_FILES))) \ @@ -2275,11 +2276,6 @@ $(call compile-java,$(TARGET_JAVAC),$(PRIVATE_BOOTCLASSPATH)) endef # Invoke Jack to compile java from source to dex and jack files. -# -# Some historical notes: -# - below we write the list of java files to java-source-list to avoid argument -# list length problems with Cygwin -# - we filter out duplicate java file names because Jack doesn't like them. define jack-java-to-dex $(hide) rm -f $@ $(hide) rm -f $(PRIVATE_CLASSES_JACK) @@ -2288,17 +2284,6 @@ $(hide) mkdir -p $(dir $@) $(hide) mkdir -p $(dir $(PRIVATE_CLASSES_JACK)) $(hide) mkdir -p $(PRIVATE_JACK_INTERMEDIATES_DIR) $(if $(PRIVATE_JACK_INCREMENTAL_DIR),$(hide) mkdir -p $(PRIVATE_JACK_INCREMENTAL_DIR)) -$(call dump-words-to-file,$(PRIVATE_JAVA_SOURCES),$(PRIVATE_JACK_INTERMEDIATES_DIR)/java-source-list) -$(if $(PRIVATE_SOURCE_INTERMEDIATES_DIR), \ - $(hide) if [ -d "$(PRIVATE_SOURCE_INTERMEDIATES_DIR)" ]; then \ - find $(PRIVATE_SOURCE_INTERMEDIATES_DIR) -name '*.java' >> $(PRIVATE_JACK_INTERMEDIATES_DIR)/java-source-list; \ - fi) -$(if $(PRIVATE_HAS_PROTO_SOURCES), \ - $(hide) find $(PRIVATE_PROTO_SOURCE_INTERMEDIATES_DIR) -name '*.java' >> $(PRIVATE_JACK_INTERMEDIATES_DIR)/java-source-list ) -$(if $(PRIVATE_HAS_RS_SOURCES), \ - $(hide) find $(PRIVATE_RS_SOURCE_INTERMEDIATES_DIR) -name '*.java' >> $(PRIVATE_JACK_INTERMEDIATES_DIR)/java-source-list ) -$(hide) tr ' ' '\n' < $(PRIVATE_JACK_INTERMEDIATES_DIR)/java-source-list \ - | $(NORMALIZE_PATH) | sort -u > $(PRIVATE_JACK_INTERMEDIATES_DIR)/java-source-list-uniq $(if $(PRIVATE_JACK_PROGUARD_FLAGS), \ $(hide) echo -basedirectory $(CURDIR) > $@.flags; \ echo $(PRIVATE_JACK_PROGUARD_FLAGS) >> $@.flags; \ @@ -2313,8 +2298,8 @@ $(if $(PRIVATE_JACK_IMPORT_JAR), $(hide) mkdir -p $@.tmpjill.res $(hide) unzip -qo $(PRIVATE_JACK_IMPORT_JAR) -d $@.tmpjill.res $(hide) find $@.tmpjill.res -iname "*.class" -delete) -$(hide) if [ -s $(PRIVATE_JACK_INTERMEDIATES_DIR)/java-source-list-uniq ] ; then \ - export tmpEcjArg="@$(PRIVATE_JACK_INTERMEDIATES_DIR)/java-source-list-uniq"; \ +$(hide) if [ -s $(PRIVATE_JAVA_SOURCE_LIST) ] ; then \ + export tmpEcjArg="@$(PRIVATE_JAVA_SOURCE_LIST)"; \ else \ export tmpEcjArg=""; \ fi; \ @@ -2345,37 +2330,18 @@ $(call call-jack) \ $$tmpEcjArg \ || ( rm -rf $(PRIVATE_CLASSES_JACK); exit 41 ) $(hide) mv $(PRIVATE_JACK_INTERMEDIATES_DIR)/classes*.dex $(dir $@) -$(hide) rm -f $(PRIVATE_JACK_INTERMEDIATES_DIR)/java-source-list $(if $(PRIVATE_EXTRA_JAR_ARGS),$(hide) rm -rf $@.res.tmp) -$(hide) mv $(PRIVATE_JACK_INTERMEDIATES_DIR)/java-source-list-uniq $(PRIVATE_JACK_INTERMEDIATES_DIR).java-source-list $(if $(PRIVATE_JAR_PACKAGES), $(hide) echo unsupported options PRIVATE_JAR_PACKAGES in $@; exit 53) $(if $(PRIVATE_JAR_EXCLUDE_PACKAGES), $(hide) echo unsupported options JAR_EXCLUDE_PACKAGES in $@; exit 53) $(if $(PRIVATE_JAR_MANIFEST), $(hide) echo unsupported options JAR_MANIFEST in $@; exit 53) endef # Invoke Jack to compile java source just to check it compiles correctly. -# -# Some historical notes: -# - below we write the list of java files to java-source-list to avoid argument -# list length problems with Cygwin -# - we filter out duplicate java file names because Jack doesn't like them. define jack-check-java $(hide) rm -f $@ -$(hide) rm -f $@.java-source-list -$(hide) rm -f $@.java-source-list-uniq $(hide) mkdir -p $(dir $@) $(if $(PRIVATE_JACK_INCREMENTAL_DIR),$(hide) mkdir -p $(PRIVATE_JACK_INCREMENTAL_DIR)) -$(call dump-words-to-file,$(PRIVATE_JAVA_SOURCES),$@.java-source-list) -$(hide) if [ -d "$(PRIVATE_SOURCE_INTERMEDIATES_DIR)" ]; then \ - find $(PRIVATE_SOURCE_INTERMEDIATES_DIR) -name '*.java' >> $@.java-source-list; \ -fi -$(if $(PRIVATE_HAS_PROTO_SOURCES), \ - $(hide) find $(PRIVATE_PROTO_SOURCE_INTERMEDIATES_DIR) -name '*.java' >> $@.java-source-list ) -$(if $(PRIVATE_HAS_RS_SOURCES), \ - $(hide) find $(PRIVATE_RS_SOURCE_INTERMEDIATES_DIR) -name '*.java' >> $@.java-source-list ) -$(hide) tr ' ' '\n' < $@.java-source-list \ - | sort -u > $@.java-source-list-uniq -$(hide) if [ -s $@.java-source-list-uniq ] ; then \ +$(hide) if [ -s $(PRIVATE_JAVA_SOURCE_LIST) ] ; then \ $(call call-jack,$(PRIVATE_JACK_EXTRA_ARGS)) \ $(strip $(PRIVATE_JACK_FLAGS)) \ $(strip $(PRIVATE_JACK_DEBUG_FLAGS)) \ @@ -2385,7 +2351,7 @@ $(hide) if [ -s $@.java-source-list-uniq ] ; then \ -D jack.android.min-api-level=$(PRIVATE_JACK_MIN_SDK_VERSION) \ -D jack.import.type.policy=keep-first \ $(if $(PRIVATE_JACK_INCREMENTAL_DIR),--incremental-folder $(PRIVATE_JACK_INCREMENTAL_DIR)) \ - @$@.java-source-list-uniq; \ + @$(PRIVATE_JAVA_SOURCE_LIST); \ fi touch $@ endef @@ -2471,27 +2437,12 @@ endif # TARGET_BUILD_APPS # Invoke Jack to compile java from source to jack files without shrink or obfuscation. -# -# Some historical notes: -# - below we write the list of java files to java-source-list to avoid argument -# list length problems with Cygwin -# - we filter out duplicate java file names because Jack doesn't like them. define java-to-jack $(hide) rm -f $@ $(hide) rm -rf $(PRIVATE_JACK_INTERMEDIATES_DIR) $(hide) mkdir -p $(dir $@) $(hide) mkdir -p $(PRIVATE_JACK_INTERMEDIATES_DIR) $(if $(PRIVATE_JACK_INCREMENTAL_DIR),$(hide) mkdir -p $(PRIVATE_JACK_INCREMENTAL_DIR)) -$(call dump-words-to-file,$(PRIVATE_JAVA_SOURCES),$(PRIVATE_JACK_INTERMEDIATES_DIR)/java-source-list) -$(hide) if [ -d "$(PRIVATE_SOURCE_INTERMEDIATES_DIR)" ]; then \ - find $(PRIVATE_SOURCE_INTERMEDIATES_DIR) -name '*.java' >> $(PRIVATE_JACK_INTERMEDIATES_DIR)/java-source-list; \ -fi -$(if $(PRIVATE_HAS_PROTO_SOURCES), \ - $(hide) find $(PRIVATE_PROTO_SOURCE_INTERMEDIATES_DIR) -name '*.java' >> $(PRIVATE_JACK_INTERMEDIATES_DIR)/java-source-list ) -$(if $(PRIVATE_HAS_RS_SOURCES), \ - $(hide) find $(PRIVATE_RS_SOURCE_INTERMEDIATES_DIR) -name '*.java' >> $(PRIVATE_JACK_INTERMEDIATES_DIR)/java-source-list ) -$(hide) tr ' ' '\n' < $(PRIVATE_JACK_INTERMEDIATES_DIR)/java-source-list \ - | $(NORMALIZE_PATH) | sort -u > $(PRIVATE_JACK_INTERMEDIATES_DIR)/java-source-list-uniq $(if $(PRIVATE_JACK_PROGUARD_FLAGS), \ $(hide) echo -basedirectory $(CURDIR) > $@.flags; \ echo $(PRIVATE_JACK_PROGUARD_FLAGS) >> $@.flags; \ @@ -2502,8 +2453,8 @@ $(if $(PRIVATE_EXTRA_JAR_ARGS), $(hide) $(call add-java-resources-to,$@.res.tmp.zip) $(hide) unzip -qo $@.res.tmp.zip -d $@.res.tmp $(hide) rm $@.res.tmp.zip) -$(hide) if [ -s $(PRIVATE_JACK_INTERMEDIATES_DIR)/java-source-list-uniq ] ; then \ - export tmpEcjArg="@$(PRIVATE_JACK_INTERMEDIATES_DIR)/java-source-list-uniq"; \ +$(hide) if [ -s $(PRIVATE_JAVA_SOURCE_LIST) ] ; then \ + export tmpEcjArg="@$(PRIVATE_JAVA_SOURCE_LIST)"; \ else \ export tmpEcjArg=""; \ fi; \ @@ -2527,9 +2478,7 @@ $(call call-jack) \ $(if $(PRIVATE_JACK_PROGUARD_FLAGS),--config-proguard $@.flags) \ $$tmpEcjArg \ || ( rm -f $@ ; exit 41 ) -$(hide) rm -f $(PRIVATE_JACK_INTERMEDIATES_DIR)/java-source-list $(if $(PRIVATE_EXTRA_JAR_ARGS),$(hide) rm -rf $@.res.tmp) -$(hide) mv $(PRIVATE_JACK_INTERMEDIATES_DIR)/java-source-list-uniq $(PRIVATE_JACK_INTERMEDIATES_DIR).java-source-list $(if $(PRIVATE_JAR_PACKAGES), $(hide) echo unsupported options PRIVATE_JAR_PACKAGES in $@; exit 53) $(if $(PRIVATE_JAR_EXCLUDE_PACKAGES), $(hide) echo unsupported options JAR_EXCLUDE_PACKAGES in $@; exit 53) $(if $(PRIVATE_JAR_MANIFEST), $(hide) echo unsupported options JAR_MANIFEST in $@; exit 53) diff --git a/core/host_dalvik_java_library.mk b/core/host_dalvik_java_library.mk index 0aabd5108..358d0f150 100644 --- a/core/host_dalvik_java_library.mk +++ b/core/host_dalvik_java_library.mk @@ -49,6 +49,7 @@ full_classes_jar := $(intermediates.COMMON)/classes.jar full_classes_jack := $(intermediates.COMMON)/classes.jack jack_check_timestamp := $(intermediates.COMMON)/jack.check.timestamp built_dex := $(intermediates.COMMON)/classes.dex +java_source_list_file := $(intermediates.COMMON)/java-source-list LOCAL_INTERMEDIATE_TARGETS += \ $(full_classes_compiled_jar) \ @@ -57,7 +58,8 @@ LOCAL_INTERMEDIATE_TARGETS += \ $(full_classes_jack) \ $(full_classes_jar) \ $(jack_check_timestamp) \ - $(built_dex) + $(built_dex) \ + $(java_source_list_file) # See comment in java.mk ifndef LOCAL_CHECKED_MODULE @@ -83,6 +85,16 @@ include $(BUILD_SYSTEM)/java_common.mk $(cleantarget): PRIVATE_CLEAN_FILES += $(intermediates.COMMON) +# List of dependencies for anything that needs all java sources in place +java_sources_deps := \ + $(java_sources) \ + $(java_resource_sources) \ + $(proto_java_sources_file_stamp) \ + $(LOCAL_ADDITIONAL_DEPENDENCIES) + +$(java_source_list_file): $(java_sources_deps) + $(write-java-source-list) + ifndef LOCAL_JACK_ENABLED $(full_classes_compiled_jar): PRIVATE_JAVA_LAYERS_FILE := $(layers_file) @@ -91,16 +103,13 @@ $(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): \ - $(java_sources) \ - $(java_resource_sources) \ - $(full_java_lib_deps) \ - $(jar_manifest_file) \ - $(proto_java_sources_file_stamp) \ - $(annotation_processor_deps) \ - $(NORMALIZE_PATH) \ - $(JAR_ARGS) \ - $(LOCAL_ADDITIONAL_DEPENDENCIES) \ - | $(SOONG_JAVAC_WRAPPER) + $(java_source_list_file) \ + $(java_sources_deps) \ + $(full_java_lib_deps) \ + $(jar_manifest_file) \ + $(annotation_processor_deps) \ + $(NORMALIZE_PATH) \ + | $(SOONG_JAVAC_WRAPPER) $(transform-host-java-to-package) my_desugaring := @@ -173,9 +182,14 @@ $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_JACK_FLAGS := $(GLOBAL_JAVAC_DEBUG_FLAGS) $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_JACK_VERSION := $(LOCAL_JACK_VERSION) $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_JACK_MIN_SDK_VERSION := $(PLATFORM_JACK_MIN_SDK_VERSION) -jack_all_deps := $(java_sources) $(java_resource_sources) $(full_jack_deps) \ - $(jar_manifest_file) $(proto_java_sources_file_stamp) \ - $(LOCAL_ADDITIONAL_DEPENDENCIES) $(NORMALIZE_PATH) $(JACK_DEFAULT_ARGS) $(JACK) +jack_all_deps := \ + $(java_source_list_file) \ + $(java_sources_deps) \ + $(full_jack_deps) \ + $(jar_manifest_file) \ + $(NORMALIZE_PATH) \ + $(JACK_DEFAULT_ARGS) \ + $(JACK) ifneq ($(LOCAL_IS_STATIC_JAVA_LIBRARY),true) $(built_dex): PRIVATE_CLASSES_JACK := $(full_classes_jack) diff --git a/core/host_java_library.mk b/core/host_java_library.mk index 033297a31..80f2822c6 100644 --- a/core/host_java_library.mk +++ b/core/host_java_library.mk @@ -34,10 +34,12 @@ endif full_classes_compiled_jar := $(intermediates.COMMON)/classes-full-debug.jar full_classes_jarjar_jar := $(intermediates.COMMON)/classes-jarjar.jar full_classes_jar := $(intermediates.COMMON)/classes.jar +java_source_list_file := $(intermediates.COMMON)/java-source-list LOCAL_INTERMEDIATE_TARGETS += \ $(full_classes_compiled_jar) \ $(full_classes_jarjar_jar) \ + $(java_source_list_file) ####################################### include $(BUILD_SYSTEM)/base_rules.mk @@ -58,23 +60,30 @@ ifeq ($(RUN_ERROR_PRONE),true) LOCAL_JAVACFLAGS += $(LOCAL_ERROR_PRONE_FLAGS) endif +# List of dependencies for anything that needs all java sources in place +java_sources_deps := \ + $(java_sources) \ + $(java_resource_sources) \ + $(proto_java_sources_file_stamp) \ + $(LOCAL_ADDITIONAL_DEPENDENCIES) + +$(java_source_list_file): $(java_sources_deps) + $(write-java-source-list) + $(full_classes_compiled_jar): PRIVATE_JAVA_LAYERS_FILE := $(layers_file) $(full_classes_compiled_jar): PRIVATE_JAVACFLAGS := $(GLOBAL_JAVAC_DEBUG_FLAGS) $(LOCAL_JAVACFLAGS) $(annotation_processor_flags) $(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): \ - $(java_sources) \ - $(java_resource_sources) \ - $(full_java_lib_deps) \ - $(jar_manifest_file) \ - $(proto_java_sources_file_stamp) \ - $(annotation_processor_deps) \ - $(NORMALIZE_PATH) \ - $(JAR_ARGS) \ - $(ZIPTIME) \ - $(LOCAL_ADDITIONAL_DEPENDENCIES) \ - | $(SOONG_JAVAC_WRAPPER) + $(java_source_list_file) \ + $(java_sources_deps) \ + $(full_java_lib_deps) \ + $(jar_manifest_file) \ + $(annotation_processor_deps) \ + $(NORMALIZE_PATH) \ + $(ZIPTIME) \ + | $(SOONG_JAVAC_WRAPPER) $(transform-host-java-to-package) $(remove-timestamps-from-package) diff --git a/core/java.mk b/core/java.mk index 673b2b12c..85459479b 100644 --- a/core/java.mk +++ b/core/java.mk @@ -121,6 +121,8 @@ full_classes_jarjar_jar := $(intermediates.COMMON)/$(jarjar_leaf) full_classes_proguard_jar := $(intermediates.COMMON)/classes-proguard.jar built_dex_intermediate := $(intermediates.COMMON)/$(built_dex_intermediate_leaf)/classes.dex full_classes_stubs_jar := $(intermediates.COMMON)/stubs.jar +java_source_list_file := $(intermediates.COMMON)/java-source-list + ifeq ($(LOCAL_MODULE_CLASS)$(LOCAL_SRC_FILES)$(LOCAL_STATIC_JAVA_LIBRARIES)$(LOCAL_SOURCE_FILES_ALL_GENERATED),APPS) # If this is an apk without any Java code (e.g. framework-res), we should skip compiling Java. @@ -147,7 +149,8 @@ LOCAL_INTERMEDIATE_TARGETS += \ $(noshrob_classes_jack) \ $(jack_check_timestamp) \ $(built_dex) \ - $(full_classes_stubs_jar) + $(full_classes_stubs_jar) \ + $(java_source_list_file) LOCAL_INTERMEDIATE_SOURCE_DIR := $(intermediates.COMMON)/src @@ -434,24 +437,32 @@ LOCAL_JACK_FLAGS+= -D jack.dex.debug.vars=false -D jack.dex.debug.vars.synthetic endif endif +# List of dependencies for anything that needs all java sources in place +java_sources_deps := \ + $(java_sources) \ + $(java_resource_sources) \ + $(RenderScript_file_stamp) \ + $(proto_java_sources_file_stamp) \ + $(LOCAL_ADDITIONAL_DEPENDENCIES) + +$(java_source_list_file): $(java_sources_deps) + $(write-java-source-list) + $(full_classes_compiled_jar): PRIVATE_JAVACFLAGS := $(GLOBAL_JAVAC_DEBUG_FLAGS) $(LOCAL_JAVACFLAGS) $(annotation_processor_flags) $(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_DONT_DELETE_JAR_META_INF := $(LOCAL_DONT_DELETE_JAR_META_INF) +$(full_classes_compiled_jar): PRIVATE_JAVA_SOURCE_LIST := $(java_source_list_file) $(full_classes_compiled_jar): \ - $(java_sources) \ - $(java_resource_sources) \ - $(full_java_lib_deps) \ - $(jar_manifest_file) \ - $(layers_file) \ - $(RenderScript_file_stamp) \ - $(proto_java_sources_file_stamp) \ - $(annotation_processor_deps) \ - $(NORMALIZE_PATH) \ - $(JAR_ARGS) \ - $(LOCAL_ADDITIONAL_DEPENDENCIES) \ - | $(SOONG_JAVAC_WRAPPER) + $(java_source_list_file) \ + $(java_sources_deps) \ + $(full_java_lib_deps) \ + $(jar_manifest_file) \ + $(layers_file) \ + $(annotation_processor_deps) \ + $(NORMALIZE_PATH) \ + | $(SOONG_JAVAC_WRAPPER) $(transform-java-to-classes.jar) javac-check : $(full_classes_compiled_jar) @@ -758,12 +769,19 @@ endif # LOCAL_PROGUARD_ENABLED defined $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_JACK_FLAGS := $(GLOBAL_JAVAC_DEBUG_FLAGS) $(LOCAL_JACK_FLAGS) $(annotation_processor_flags) $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_JACK_VERSION := $(LOCAL_JACK_VERSION) -jack_all_deps := $(java_sources) $(java_resource_sources) $(full_jack_deps) \ - $(jar_manifest_file) $(layers_file) $(RenderScript_file_stamp) \ - $(common_proguard_flag_files) $(proguard_flag_files) \ - $(proto_java_sources_file_stamp) $(annotation_processor_deps) \ - $(LOCAL_ADDITIONAL_DEPENDENCIES) $(LOCAL_JARJAR_RULES) \ - $(NORMALIZE_PATH) $(JACK_DEFAULT_ARGS) $(JACK) +jack_all_deps := \ + $(java_source_list_file) \ + $(java_sources_deps) \ + $(full_jack_deps) \ + $(jar_manifest_file) \ + $(layers_file) \ + $(common_proguard_flag_files) \ + $(proguard_flag_files) \ + $(annotation_processor_deps) \ + $(LOCAL_JARJAR_RULES) \ + $(NORMALIZE_PATH) \ + $(JACK_DEFAULT_ARGS) \ + $(JACK) $(jack_check_timestamp): $(jack_all_deps) | setup-jack-server @echo Checking build with Jack: $@ diff --git a/core/java_common.mk b/core/java_common.mk index 4bdfdb1f6..87bd06faf 100644 --- a/core/java_common.mk +++ b/core/java_common.mk @@ -183,6 +183,7 @@ $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_HAS_PROTO_SOURCES := $(if $(proto_sources $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_PROTO_SOURCE_INTERMEDIATES_DIR := $(intermediates.COMMON)/proto $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_HAS_RS_SOURCES := $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_JAVA_SOURCES := $(all_java_sources) +$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_JAVA_SOURCE_LIST := $(java_source_list_file) $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_RMTYPEDEFS := $(LOCAL_RMTYPEDEFS) diff --git a/core/package_internal.mk b/core/package_internal.mk index 941afc6a8..a626dde1a 100644 --- a/core/package_internal.mk +++ b/core/package_internal.mk @@ -344,7 +344,9 @@ $(data_binding_stamp) : $(all_res_assets) $(full_android_manifest) \ $(hide) touch $@ # Make sure the data-binding process happens before javac and generation of R.java. -$(R_file_stamp) $(full_classes_compiled_jar) : $(data_binding_stamp) +$(R_file_stamp): $(data_binding_stamp) +$(java_source_list_file): $(data_binding_stamp) +$(full_classes_compiled_jar): $(data_binding_stamp) # The dependency path when jack is enabled $(built_dex_intermediate) : $(data_binding_stamp) endif # LOCAL_DATA_BINDING @@ -434,26 +436,9 @@ endif # LOCAL_USE_AAPT2 # they want to use this module's R.java file. $(LOCAL_BUILT_MODULE): $(R_file_stamp) -ifdef LOCAL_JACK_ENABLED -ifneq ($(built_dex_intermediate),) -$(built_dex_intermediate): $(R_file_stamp) -endif -ifneq ($(noshrob_classes_jack),) -$(noshrob_classes_jack): $(R_file_stamp) -endif -ifneq ($(full_classes_jack),) -$(full_classes_jack): $(R_file_stamp) -$(jack_check_timestamp): $(R_file_stamp) -endif -endif # LOCAL_JACK_ENABLED - -ifneq ($(full_classes_jar),) -# If full_classes_jar is non-empty, we're building sources. -# If we're building sources, the initial javac step (which -# produces full_classes_compiled_jar) needs to ensure the -# R.java and Manifest.java files have been generated first. -$(full_classes_compiled_jar): $(R_file_stamp) -endif +# The R.java file must exist by the time the java source +# list is generated +$(java_source_list_file): $(R_file_stamp) endif # need_compile_res diff --git a/core/static_java_library.mk b/core/static_java_library.mk index 9fcf19444..827aaad1f 100644 --- a/core/static_java_library.mk +++ b/core/static_java_library.mk @@ -177,6 +177,7 @@ $(R_file_stamp) : $(all_resources) $(full_android_manifest) $(AAPT) $(framework_ endif # LOCAL_USE_AAPT2 $(LOCAL_BUILT_MODULE): $(R_file_stamp) +$(java_source_list_file): $(R_file_stamp) ifdef LOCAL_JACK_ENABLED $(noshrob_classes_jack): $(R_file_stamp) $(full_classes_jack): $(R_file_stamp)