diff --git a/core/base_rules.mk b/core/base_rules.mk index 15d7a0ef2..e608ee7e1 100644 --- a/core/base_rules.mk +++ b/core/base_rules.mk @@ -183,11 +183,10 @@ endif # file, tag the module as "gnu". Search for "*_GPL*", "*_LGPL*" and "*_MPL*" # so that we can also find files like MODULE_LICENSE_GPL_AND_AFL # -license_files := $(call find-parent-file,$(LOCAL_PATH),MODULE_LICENSE*) gpl_license_file := $(call find-parent-file,$(LOCAL_PATH),MODULE_LICENSE*_GPL* MODULE_LICENSE*_MPL* MODULE_LICENSE*_LGPL*) ifneq ($(gpl_license_file),) my_module_tags += gnu - ALL_GPL_MODULE_LICENSE_FILES := $(sort $(ALL_GPL_MODULE_LICENSE_FILES) $(gpl_license_file)) + ALL_GPL_MODULE_LICENSE_FILES += $(gpl_license_file) endif LOCAL_MODULE_CLASS := $(strip $(LOCAL_MODULE_CLASS)) @@ -327,9 +326,19 @@ $(error $(LOCAL_PATH): $(module_id) already defined by $($(module_id))) endif $(module_id) := $(LOCAL_PATH) -intermediates := $(call local-intermediates-dir,,$(LOCAL_2ND_ARCH_VAR_PREFIX),$(my_host_cross)) -intermediates.COMMON := $(call local-intermediates-dir,COMMON) -generated_sources_dir := $(call local-generated-sources-dir) +# These are the same as local-intermediates-dir / local-generated-sources dir, but faster +intermediates.COMMON := $($(my_prefix)OUT_COMMON_INTERMEDIATES)/$(LOCAL_MODULE_CLASS)/$(LOCAL_MODULE)_intermediates +ifneq (,$(filter $(my_prefix)$(LOCAL_MODULE_CLASS),$(COMMON_MODULE_CLASSES))) + intermediates := $($(my_prefix)OUT_COMMON_INTERMEDIATES)/$(LOCAL_MODULE_CLASS)/$(LOCAL_MODULE)_intermediates + generated_sources_dir := $($(my_prefix)OUT_COMMON_GEN)/$(LOCAL_MODULE_CLASS)/$(LOCAL_MODULE)_intermediates +else + ifneq (,$(filter $(LOCAL_MODULE_CLASS),$(PER_ARCH_MODULE_CLASSES))) + intermediates := $($(LOCAL_2ND_ARCH_VAR_PREFIX)$(my_prefix)OUT_INTERMEDIATES)/$(LOCAL_MODULE_CLASS)/$(LOCAL_MODULE)_intermediates + else + intermediates := $($(my_prefix)OUT_INTERMEDIATES)/$(LOCAL_MODULE_CLASS)/$(LOCAL_MODULE)_intermediates + endif + generated_sources_dir := $($(my_prefix)OUT_GEN)/$(LOCAL_MODULE_CLASS)/$(LOCAL_MODULE)_intermediates +endif ifneq ($(LOCAL_OVERRIDES_MODULES),) ifndef LOCAL_IS_HOST_MODULE @@ -574,17 +583,35 @@ ifneq ($(strip $(filter NATIVE_TESTS,$(LOCAL_MODULE_CLASS)) $(LOCAL_IS_FUZZ_TARG ifneq ($(strip $(LOCAL_TEST_DATA)),) ifneq (true,$(LOCAL_UNINSTALLABLE_MODULE)) -my_test_data_pairs := $(strip $(foreach td,$(LOCAL_TEST_DATA), \ - $(eval _file := $(call word-colon,2,$(td))) \ - $(if $(_file), \ - $(eval _src_base := $(call word-colon,1,$(td))), \ - $(eval _src_base := $(LOCAL_PATH)) \ - $(eval _file := $(call word-colon,1,$(td)))) \ - $(if $(call streq,$(LOCAL_MODULE_MAKEFILE),$(SOONG_ANDROID_MK)),, \ - $(if $(findstring ..,$(_file)),$(error $(LOCAL_MODULE_MAKEFILE): LOCAL_TEST_DATA may not include '..': $(_file))) \ - $(if $(filter /%,$(_src_base) $(_file)),$(error $(LOCAL_MODULE_MAKEFILE): LOCAL_TEST_DATA may not include absolute paths: $(_src_base) $(_file)))) \ - $(eval my_test_data_file_pairs := $(my_test_data_file_pairs) $(call append-path,$(_src_base),$(_file)):$(_file)) \ - $(call append-path,$(_src_base),$(_file)):$(call append-path,$(my_module_path),$(_file)))) +ifeq ($(LOCAL_MODULE_MAKEFILE),$(SOONG_ANDROID_MK)) + define copy_test_data_pairs + _src_base := $$(call word-colon,1,$$(td)) + _file := $$(call word-colon,2,$$(td)) + my_test_data_pairs += $$(call append-path,$$(_src_base),$$(_file)):$$(call append-path,$$(my_module_path),$$(_file)) + my_test_data_file_pairs += $$(call append-path,$$(_src_base),$$(_file)):$$(_file) + endef +else + define copy_test_data_pairs + _src_base := $$(call word-colon,1,$$(td)) + _file := $$(call word-colon,2,$$(td)) + ifndef _file + _file := $$(_src_base) + _src_base := $$(LOCAL_PATH) + endif + ifneq (,$$(findstring ..,$$(_file))) + $$(call pretty-error,LOCAL_TEST_DATA may not include '..': $$(_file)) + endif + ifneq (,$$(filter/%,$$(_src_base) $$(_file))) + $$(call pretty-error,LOCAL_TEST_DATA may not include absolute paths: $$(_src_base) $$(_file)) + endif + my_test_data_pairs += $$(call append-path,$$(_src_base),$$(_file)):$$(call append-path,$$(my_module_path),$$(_file)) + my_test_data_file_pairs += $$(call append-path,$$(_src_base),$$(_file)):$$(_file) + endef +endif + +$(foreach td,$(LOCAL_TEST_DATA),$(eval $(copy_test_data_pairs))) + +copy_test_data_pairs := my_installed_test_data := $(call copy-many-files,$(my_test_data_pairs)) $(LOCAL_INSTALLED_MODULE): $(my_installed_test_data) @@ -912,7 +939,7 @@ INSTALLABLE_FILES.$(LOCAL_INSTALLED_MODULE).MODULE := $(my_register_name) # Track module-level dependencies. # Use $(LOCAL_MODULE) instead of $(my_register_name) to ignore module's bitness. ifneq (,$(filter deps-license,$(MAKECMDGOALS))) -ALL_DEPS.MODULES := $(ALL_DEPS.MODULES) $(LOCAL_MODULE) +ALL_DEPS.MODULES += $(LOCAL_MODULE) ALL_DEPS.$(LOCAL_MODULE).ALL_DEPS := $(sort \ $(ALL_DEPS.$(LOCAL_MODULE).ALL_DEPS) \ $(LOCAL_STATIC_LIBRARIES) \ @@ -926,6 +953,7 @@ ALL_DEPS.$(LOCAL_MODULE).ALL_DEPS := $(sort \ $(LOCAL_JAVA_LIBRARIES) \ $(LOCAL_JNI_SHARED_LIBRARIES)) +license_files := $(call find-parent-file,$(LOCAL_PATH),MODULE_LICENSE*) ALL_DEPS.$(LOCAL_MODULE).LICENSE := $(sort $(ALL_DEPS.$(LOCAL_MODULE).LICENSE) $(license_files)) endif diff --git a/core/binary.mk b/core/binary.mk index 75f487496..57508bbdc 100644 --- a/core/binary.mk +++ b/core/binary.mk @@ -1816,7 +1816,7 @@ export_include_deps += $(strip \ $(call intermediates-dir-for,HEADER_LIBRARIES,$(l),$(my_kind),,$(LOCAL_2ND_ARCH_VAR_PREFIX),$(my_host_cross)))) ifneq ($(strip $(my_export_c_include_dirs)$(export_include_deps)),) - EXPORTS_LIST := $(EXPORTS_LIST) $(intermediates) + EXPORTS_LIST += $(intermediates) EXPORTS.$(intermediates).FLAGS := $(foreach d,$(my_export_c_include_dirs),-I $(call clean-path,$(d))) EXPORTS.$(intermediates).REEXPORT := $(export_include_deps) EXPORTS.$(intermediates).DEPS := $(my_export_c_include_deps) $(my_generated_sources) $(LOCAL_EXPORT_C_INCLUDE_DEPS) diff --git a/core/cc_prebuilt_internal.mk b/core/cc_prebuilt_internal.mk index 1d959b5ca..99b7d0f6a 100644 --- a/core/cc_prebuilt_internal.mk +++ b/core/cc_prebuilt_internal.mk @@ -75,7 +75,7 @@ else # my_strip_module not true built_module := $(LOCAL_BUILT_MODULE) ifdef prebuilt_module_is_a_library -EXPORTS_LIST := $(EXPORTS_LIST) $(intermediates) +EXPORTS_LIST += $(intermediates) EXPORTS.$(intermediates).FLAGS := $(foreach d,$(LOCAL_EXPORT_C_INCLUDE_DIRS),-I $(d)) EXPORTS.$(intermediates).DEPS := $(LOCAL_EXPORT_C_INCLUDE_DEPS) diff --git a/core/definitions.mk b/core/definitions.mk index 91a873b2d..89c2e276a 100644 --- a/core/definitions.mk +++ b/core/definitions.mk @@ -111,6 +111,18 @@ ALL_DISABLED_PRESUBMIT_TESTS := # All compatibility suites mentioned in LOCAL_COMPATIBILITY_SUITES ALL_COMPATIBILITY_SUITES := +# All LINK_TYPE entries +ALL_LINK_TYPES := + +# All exported/imported include entries +EXPORTS_LIST := + +# All modules already converted to Soong +SOONG_ALREADY_CONV := + +# ALL_DEPS.*.ALL_DEPS keys +ALL_DEPS.MODULES := + ########################################################### ## Debugging; prints a variable list to stdout ########################################################### @@ -556,7 +568,7 @@ $(strip \ $(error $(LOCAL_PATH): Name not defined in call to intermediates-dir-for)) \ $(eval _idfPrefix := $(call find-idf-prefix,$(3),$(6))) \ $(eval _idf2ndArchPrefix := $(if $(strip $(5)),$(TARGET_2ND_ARCH_VAR_PREFIX))) \ - $(if $(filter $(_idfPrefix)-$(_idfClass),$(COMMON_MODULE_CLASSES))$(4), \ + $(if $(filter $(_idfPrefix)_$(_idfClass),$(COMMON_MODULE_CLASSES))$(4), \ $(eval _idfIntBase := $($(_idfPrefix)_OUT_COMMON_INTERMEDIATES)) \ ,$(if $(filter $(_idfClass),$(PER_ARCH_MODULE_CLASSES)),\ $(eval _idfIntBase := $($(_idf2ndArchPrefix)$(_idfPrefix)_OUT_INTERMEDIATES)) \ @@ -605,7 +617,7 @@ $(strip \ $(if $(_idfName),, \ $(error $(LOCAL_PATH): Name not defined in call to generated-sources-dir-for)) \ $(eval _idfPrefix := $(call find-idf-prefix,$(3),)) \ - $(if $(filter $(_idfPrefix)-$(_idfClass),$(COMMON_MODULE_CLASSES))$(4), \ + $(if $(filter $(_idfPrefix)_$(_idfClass),$(COMMON_MODULE_CLASSES))$(4), \ $(eval _idfIntBase := $($(_idfPrefix)_OUT_COMMON_GEN)) \ , \ $(eval _idfIntBase := $($(_idfPrefix)_OUT_GEN)) \ @@ -2895,12 +2907,14 @@ endef # and use my_compat_dist_$(suite) to define the others. define create-suite-dependencies $(foreach suite, $(LOCAL_COMPATIBILITY_SUITE), \ - $(if $(filter $(suite),$(ALL_COMPATIBILITY_SUITES)),,$(eval ALL_COMPATIBILITY_SUITES += $(suite))) \ - $(eval COMPATIBILITY.$(suite).FILES := \ - $$(COMPATIBILITY.$(suite).FILES) $$(foreach f,$$(my_compat_dist_$(suite)),$$(call word-colon,2,$$(f))) \ - $$(foreach f,$$(my_compat_dist_config_$(suite)),$$(call word-colon,2,$$(f)))) \ - $(eval COMPATIBILITY.$(suite).MODULES := \ - $$(COMPATIBILITY.$(suite).MODULES) $$(my_register_name))) \ + $(if $(filter $(suite),$(ALL_COMPATIBILITY_SUITES)),,\ + $(eval ALL_COMPATIBILITY_SUITES += $(suite)) \ + $(eval COMPATIBILITY.$(suite).FILES :=) \ + $(eval COMPATIBILITY.$(suite).MODULES :=)) \ + $(eval COMPATIBILITY.$(suite).FILES += \ + $$(foreach f,$$(my_compat_dist_$(suite)),$$(call word-colon,2,$$(f))) \ + $$(foreach f,$$(my_compat_dist_config_$(suite)),$$(call word-colon,2,$$(f)))) \ + $(eval COMPATIBILITY.$(suite).MODULES += $$(my_register_name))) \ $(eval $(my_all_targets) : $(call copy-many-files, \ $(sort $(foreach suite,$(LOCAL_COMPATIBILITY_SUITE),$(my_compat_dist_$(suite))))) \ $(call copy-many-xml-files-checked, \ diff --git a/core/envsetup.mk b/core/envsetup.mk index 862d87468..f4650f99f 100644 --- a/core/envsetup.mk +++ b/core/envsetup.mk @@ -856,7 +856,7 @@ TARGET_INSTALLER_SYSTEM_OUT := $(TARGET_INSTALLER_OUT)/root/system TARGET_INSTALLER_ROOT_OUT \ TARGET_INSTALLER_SYSTEM_OUT -COMMON_MODULE_CLASSES := TARGET-NOTICE_FILES HOST-NOTICE_FILES HOST-JAVA_LIBRARIES +COMMON_MODULE_CLASSES := TARGET_NOTICE_FILES HOST_NOTICE_FILES HOST_JAVA_LIBRARIES PER_ARCH_MODULE_CLASSES := SHARED_LIBRARIES STATIC_LIBRARIES EXECUTABLES GYP RENDERSCRIPT_BITCODE NATIVE_TESTS HEADER_LIBRARIES RLIB_LIBRARIES DYLIB_LIBRARIES .KATI_READONLY := COMMON_MODULE_CLASSES PER_ARCH_MODULE_CLASSES diff --git a/core/link_type.mk b/core/link_type.mk index f7604ff4a..e8cfd2e7f 100644 --- a/core/link_type.mk +++ b/core/link_type.mk @@ -12,7 +12,7 @@ my_link_prefix := LINK_TYPE:$(call find-idf-prefix,$(my_kind),$(my_host_cross))$(if $(filter AUX,$(my_kind)),-$(AUX_OS_VARIANT)):$(if $(my_common),$(my_common):_,_:$(if $(my_2nd_arch_prefix),$(my_2nd_arch_prefix),_)) link_type := $(my_link_prefix):$(LOCAL_MODULE_CLASS):$(LOCAL_MODULE) -ALL_LINK_TYPES := $(ALL_LINK_TYPES) $(link_type) +ALL_LINK_TYPES += $(link_type) $(link_type).TYPE := $(my_link_type) $(link_type).MAKEFILE := $(LOCAL_MODULE_MAKEFILE) $(link_type).WARN := $(my_warn_types) diff --git a/core/soong_android_app_set.mk b/core/soong_android_app_set.mk index 4c27e5346..5ed9b2c29 100644 --- a/core/soong_android_app_set.mk +++ b/core/soong_android_app_set.mk @@ -31,4 +31,4 @@ LOCAL_POST_INSTALL_CMD := unzip -qo -j -d $(dir $(LOCAL_INSTALLED_MODULE)) \ $(LOCAL_INSTALLED_MODULE): PRIVATE_POST_INSTALL_CMD := $(LOCAL_POST_INSTALL_CMD) PACKAGES.$(LOCAL_MODULE).OVERRIDES := $(strip $(LOCAL_OVERRIDES_PACKAGES)) -SOONG_ALREADY_CONV := $(SOONG_ALREADY_CONV) $(LOCAL_MODULE) +SOONG_ALREADY_CONV += $(LOCAL_MODULE) diff --git a/core/soong_app_prebuilt.mk b/core/soong_app_prebuilt.mk index 4197c58b3..01e980029 100644 --- a/core/soong_app_prebuilt.mk +++ b/core/soong_app_prebuilt.mk @@ -218,4 +218,4 @@ ifdef LOCAL_PREBUILT_COVERAGE_ARCHIVE $(LOCAL_INSTALLED_MODULE): $(my_coverage_files) endif -SOONG_ALREADY_CONV := $(SOONG_ALREADY_CONV) $(LOCAL_MODULE) +SOONG_ALREADY_CONV += $(LOCAL_MODULE) diff --git a/core/soong_cc_prebuilt.mk b/core/soong_cc_prebuilt.mk index 785389060..51549bd2a 100644 --- a/core/soong_cc_prebuilt.mk +++ b/core/soong_cc_prebuilt.mk @@ -51,7 +51,7 @@ include $(BUILD_SYSTEM)/base_rules.mk ifneq ($(filter STATIC_LIBRARIES SHARED_LIBRARIES HEADER_LIBRARIES,$(LOCAL_MODULE_CLASS)),) # Soong module is a static or shared library - EXPORTS_LIST := $(EXPORTS_LIST) $(intermediates) + EXPORTS_LIST += $(intermediates) EXPORTS.$(intermediates).FLAGS := $(LOCAL_EXPORT_CFLAGS) EXPORTS.$(intermediates).DEPS := $(LOCAL_EXPORT_C_INCLUDE_DEPS) @@ -61,7 +61,7 @@ ifneq ($(filter STATIC_LIBRARIES SHARED_LIBRARIES HEADER_LIBRARIES,$(LOCAL_MODUL $(my_all_targets): $(LOCAL_BUILT_MODULE).toc endif - SOONG_ALREADY_CONV := $(SOONG_ALREADY_CONV) $(LOCAL_MODULE) + SOONG_ALREADY_CONV += $(LOCAL_MODULE) my_link_type := $(LOCAL_SOONG_LINK_TYPE) my_warn_types := diff --git a/core/soong_java_prebuilt.mk b/core/soong_java_prebuilt.mk index 1496d56ec..bfde9446c 100644 --- a/core/soong_java_prebuilt.mk +++ b/core/soong_java_prebuilt.mk @@ -172,4 +172,4 @@ $(my_exported_sdk_libs_file): $(hide) echo $(PRIVATE_EXPORTED_SDK_LIBS) | tr ' ' '\n' > $@,\ $(hide) touch $@) -SOONG_ALREADY_CONV := $(SOONG_ALREADY_CONV) $(LOCAL_MODULE) +SOONG_ALREADY_CONV += $(LOCAL_MODULE) diff --git a/core/tasks/collect_gpl_sources.mk b/core/tasks/collect_gpl_sources.mk index acbe9bef8..ebc41814f 100644 --- a/core/tasks/collect_gpl_sources.mk +++ b/core/tasks/collect_gpl_sources.mk @@ -17,6 +17,8 @@ # in installclean between incremental builds on build servers. gpl_source_tgz := $(call intermediates-dir-for,PACKAGING,gpl_source)/gpl_source.tgz +ALL_GPL_MODULE_LICENSE_FILES := $(sort $(ALL_GPL_MODULE_LICENSE_FILES)) + # FORCE since we can't know whether any of the sources changed $(gpl_source_tgz): PRIVATE_PATHS := $(sort $(patsubst %/, %, $(dir $(ALL_GPL_MODULE_LICENSE_FILES)))) $(gpl_source_tgz) : $(ALL_GPL_MODULE_LICENSE_FILES)