1# Print a list of the modules that could be built 2# Currently runtime_dependencies only include the runtime libs information for cc binaries. 3 4MODULE_INFO_JSON := $(PRODUCT_OUT)/module-info.json 5COMMA := , 6_NEWLINE := '\n' 7 8define write-optional-json-list 9$(if $(strip $(2)),'$(COMMA)$(strip $(1)): [$(KATI_foreach_sep w,$(COMMA) ,$(2),"$(w)")]') 10endef 11 12define write-optional-json-bool 13$(if $(strip $(2)),'$(COMMA)$(strip $(1)): "$(strip $(2))"') 14endef 15 16SOONG_MODULE_INFO := $(SOONG_OUT_DIR)/module-info-$(TARGET_PRODUCT).json 17 18$(MODULE_INFO_JSON): PRIVATE_SOONG_MODULE_INFO := $(SOONG_MODULE_INFO) 19$(MODULE_INFO_JSON): PRIVATE_MERGE_JSON_OBJECTS := $(HOST_OUT_EXECUTABLES)/merge_module_info_json 20$(MODULE_INFO_JSON): $(HOST_OUT_EXECUTABLES)/merge_module_info_json 21$(MODULE_INFO_JSON): $(SOONG_MODULE_INFO) 22 @echo Generating $@ 23 $(hide) echo -ne '{\n ' > $@.tmp 24 $(hide) echo -ne $(KATI_foreach_sep m,$(COMMA)$(_NEWLINE), $(sort $(ALL_MAKE_MODULE_INFO_JSON_MODULES)),\ 25 '"$(m)": {' \ 26 '"module_name": "$(ALL_MODULES.$(m).MODULE_NAME)"' \ 27 $(call write-optional-json-list, "class", $(sort $(ALL_MODULES.$(m).CLASS))) \ 28 $(call write-optional-json-list, "path", $(sort $(ALL_MODULES.$(m).PATH))) \ 29 $(call write-optional-json-list, "tags", $(sort $(ALL_MODULES.$(m).TAGS))) \ 30 $(call write-optional-json-list, "installed", $(sort $(ALL_MODULES.$(m).INSTALLED))) \ 31 $(call write-optional-json-list, "compatibility_suites", $(sort $(ALL_MODULES.$(m).COMPATIBILITY_SUITES))) \ 32 $(call write-optional-json-list, "auto_test_config", $(sort $(ALL_MODULES.$(m).auto_test_config))) \ 33 $(call write-optional-json-list, "test_config", $(strip $(ALL_MODULES.$(m).TEST_CONFIG) $(ALL_MODULES.$(m).EXTRA_TEST_CONFIGS))) \ 34 $(call write-optional-json-list, "dependencies", $(sort $(ALL_MODULES.$(m).ALL_DEPS))) \ 35 $(call write-optional-json-list, "required", $(sort $(ALL_MODULES.$(m).REQUIRED_FROM_TARGET))) \ 36 $(call write-optional-json-list, "shared_libs", $(sort $(ALL_MODULES.$(m).SHARED_LIBS))) \ 37 $(call write-optional-json-list, "static_libs", $(sort $(ALL_MODULES.$(m).STATIC_LIBS))) \ 38 $(call write-optional-json-list, "system_shared_libs", $(sort $(ALL_MODULES.$(m).SYSTEM_SHARED_LIBS))) \ 39 $(call write-optional-json-list, "srcs", $(sort $(ALL_MODULES.$(m).SRCS))) \ 40 $(call write-optional-json-list, "srcjars", $(sort $(ALL_MODULES.$(m).SRCJARS))) \ 41 $(call write-optional-json-list, "classes_jar", $(sort $(ALL_MODULES.$(m).CLASSES_JAR))) \ 42 $(call write-optional-json-list, "test_mainline_modules", $(sort $(ALL_MODULES.$(m).TEST_MAINLINE_MODULES))) \ 43 $(call write-optional-json-bool, "is_unit_test", $(ALL_MODULES.$(m).IS_UNIT_TEST)) \ 44 $(call write-optional-json-list, "test_options_tags", $(sort $(ALL_MODULES.$(m).TEST_OPTIONS_TAGS))) \ 45 $(call write-optional-json-list, "data", $(sort $(ALL_MODULES.$(m).TEST_DATA))) \ 46 $(call write-optional-json-list, "runtime_dependencies", $(sort $(ALL_MODULES.$(m).LOCAL_RUNTIME_LIBRARIES))) \ 47 $(call write-optional-json-list, "static_dependencies", $(sort $(ALL_MODULES.$(m).LOCAL_STATIC_LIBRARIES))) \ 48 $(call write-optional-json-list, "data_dependencies", $(sort $(ALL_MODULES.$(m).TEST_DATA_BINS))) \ 49 $(call write-optional-json-list, "supported_variants", $(sort $(ALL_MODULES.$(m).SUPPORTED_VARIANTS))) \ 50 $(call write-optional-json-list, "host_dependencies", $(sort $(ALL_MODULES.$(m).HOST_REQUIRED_FROM_TARGET))) \ 51 $(call write-optional-json-list, "target_dependencies", $(sort $(ALL_MODULES.$(m).TARGET_REQUIRED_FROM_HOST))) \ 52 $(call write-optional-json-bool, "test_module_config_base", $(ALL_MODULES.$(m).TEST_MODULE_CONFIG_BASE)) \ 53 '}')'\n}\n' >> $@.tmp 54 $(PRIVATE_MERGE_JSON_OBJECTS) -o $@ $(PRIVATE_SOONG_MODULE_INFO) $@.tmp 55 rm $@.tmp 56 57.PHONY: module-info 58module-info: $(MODULE_INFO_JSON) 59 60droidcore-unbundled: $(MODULE_INFO_JSON) 61 62$(call dist-for-goals, general-tests, $(MODULE_INFO_JSON)) 63$(call dist-for-goals, droidcore-unbundled, $(MODULE_INFO_JSON)) 64 65# On every build, generate an all_modules.txt file to be used for autocompleting 66# the m command. After timing this using $(shell date +"%s.%3N"), it only adds 67# 0.01 seconds to the internal master build, and will only rerun on builds that 68# rerun kati. 69$(file >$(PRODUCT_OUT)/all_modules.txt,$(subst $(space),$(newline),$(ALL_MODULES))) 70