Loading core/Makefile +1 −42 Original line number Diff line number Diff line Loading @@ -1522,48 +1522,7 @@ $(1): $(call corresponding-license-metadata,$(4)) $(HTMLNOTICE) $(BUILD_SYSTEM)/ notice_files: $(1) endef # Create the rule to combine the files into text and html/xml forms # $(1) - xml_excluded_system_product_odm_vendor_dlkm_odm_dlkm| # xml_excluded_vendor_product_odm_vendor_dlkm_odm_dlkm| # xml_product|xml_odm|xml_system_ext|xml_system|xml_vendor_dlkm| # xml_odm_dlkm|html # $(2) - Plain text output file # $(3) - HTML/XML output file # $(4) - File title # $(5) - Directory to use. Notice files are all $(5)/src. Other # directories in there will be used for scratch # $(6) - Dependencies for the output files # $(7) - Directories to exclude # # The algorithm here is that we go collect a hash for each of the notice # files and write the names of the files that match that hash. Then # to generate the real files, we go print out all of the files and their # hashes. # # These rules are fairly complex, so they depend on this makefile so if # it changes, they'll run again. # # TODO: We could clean this up so that we just record the locations of the # original notice files instead of making rules to copy them somwehere. # Then we could traverse that without quite as much bash drama. define combine-notice-files $(2): PRIVATE_MESSAGE := $(4) $(2): PRIVATE_DIR := $(5) $(2): .KATI_IMPLICIT_OUTPUTS := $(3) $(2): $(6) $(BUILD_SYSTEM)/Makefile build/make/tools/generate-notice-files.py build/make/tools/generate-notice-files.py --text-output $(2) $(foreach xdir, $(7), -e $(xdir) )\ $(if $(filter $(1),xml_excluded_vendor_product_odm_vendor_dlkm_odm_dlkm),-e vendor -e product -e system_ext -e odm -e vendor_dlkm -e odm_dlkm --xml-output, \ $(if $(filter $(1),xml_excluded_system_product_odm_vendor_dlkm_odm_dlkm),-e system -e product -e system_ext -e odm -e vendor_dlkm -e odm_dlkm --xml-output, \ $(if $(filter $(1),xml_product),-i product --xml-output, \ $(if $(filter $(1),xml_system_ext),-i system_ext --xml-output, \ $(if $(filter $(1),xml_system),-i system --xml-output, \ $(if $(filter $(1),xml_odm),-i odm --xml-output, \ $(if $(filter $(1),xml_vendor_dlkm),-i vendor_dlkm --xml-output, \ $(if $(filter $(1),xml_odm_dlkm),-i odm_dlkm --xml-output, \ --html-output)))))))) $(3) \ -t $$(PRIVATE_MESSAGE) $$(foreach dir,$$(sort $$(PRIVATE_DIR)), -s $$(dir)/src) notice_files: $(2) $(3) endef $(KATI_obsolete_var combine-notice-files, To create notice files use xml-notice-rule, html-notice-rule, or text-notice-rule.) # Notice file logic isn't relevant for TARGET_BUILD_APPS ifndef TARGET_BUILD_APPS Loading core/definitions.mk +3 −22 Original line number Diff line number Diff line Loading @@ -586,10 +586,11 @@ endef ## License metadata build rule for my_register_name $(1) ########################################################### define license-metadata-rule $(foreach meta_lic, $(subst //,/,$(ALL_MODULES.$(1).DELAYED_META_LIC)),$(call _license-metadata-rule,$(1),$(meta_lic))) $(call notice-rule,$(1)) $(foreach meta_lic, $(ALL_MODULES.$(1).DELAYED_META_LIC),$(call _license-metadata-rule,$(1),$(meta_lic))) endef $(KATI_obsolete_var notice-rule, This function has been removed) define _license-metadata-rule $(strip $(eval _srcs := $(strip $(foreach d,$(ALL_MODULES.$(1).NOTICE_DEPS),$(if $(strip $(ALL_MODULES.$(call word-colon,1,$(d)).INSTALLED)), $(ALL_MODULES.$(call word-colon,1,$(d)).INSTALLED),$(if $(strip $(ALL_MODULES.$(call word-colon,1,$(d)).BUILT)), $(ALL_MODULES.$(call word-colon,1,$(d)).BUILT), $(call word-colon,1,$d))))))) $(strip $(eval _deps := $(sort $(filter-out $(2)%,\ Loading Loading @@ -648,26 +649,6 @@ $(2) : $(foreach d,$(_deps),$(call word-colon,1,$(d))) $(foreach n,$(_notices),$ -o $$@ endef define notice-rule $(strip $(eval _mifs := $(sort $(ALL_MODULES.$(1).MODULE_INSTALLED_FILENAMES)))) $(strip $(eval _infs := $(sort $(ALL_MODULES.$(1).INSTALLED_NOTICE_FILE)))) # Emit each installed notice file rule if it references the current module $(if $(_infs),$(foreach inf,$(_infs), $(if $(strip $(filter $(1),$(INSTALLED_NOTICE_FILES.$(inf).MODULE))), $(strip $(eval _mif := $(firstword $(foreach m,$(_mifs),$(if $(filter %/src/$(m).txt,$(inf)),$(m)))))) $(inf): PRIVATE_INSTALLED_MODULE := $(_mif) $(inf) : PRIVATE_NOTICES := $(sort $(foreach n,$(_notices),$(call word-colon,1,$(n) ))) $(inf): $(foreach n,$(_notices),$(call word-colon,1,$(n)) ) @echo Notice file: $$< -- $$@ mkdir -p $$(dir $$@) awk 'FNR==1 && NR > 1 {print "\n"} {print}' $$(PRIVATE_NOTICES) > $$@ ))) endef ########################################################### ## License metadata build rule for non-module target $(1) Loading core/notice_files.mk +0 −98 Original line number Diff line number Diff line Loading @@ -157,102 +157,4 @@ ifdef my_register_name ALL_MODULES.$(my_register_name).NOTICES := $(ALL_MODULES.$(my_register_name).NOTICES) $(notice_file) endif # This relies on the name of the directory in PRODUCT_OUT matching where # it's installed on the target - i.e. system, data, etc. This does # not work for root and isn't exact, but it's probably good enough for # compliance. # Includes the leading slash ifdef LOCAL_INSTALLED_MODULE module_installed_filename := $(patsubst $(PRODUCT_OUT)/%,%,$(LOCAL_INSTALLED_MODULE)) else # This module isn't installable ifneq ($(filter STATIC_LIBRARIES RLIB_LIBRARIES PROC_MACRO_LIBRARIES HEADER_LIBRARIES,$(LOCAL_MODULE_CLASS)),) # Stick the static libraries with the dynamic libraries. # We can't use xxx_OUT_STATIC_LIBRARIES because it points into # device-obj or host-obj. module_installed_filename := \ $(patsubst $(PRODUCT_OUT)/%,%,$($(LOCAL_2ND_ARCH_VAR_PREFIX)$(my_prefix)OUT_SHARED_LIBRARIES))/$(notdir $(LOCAL_BUILT_MODULE)) else ifeq ($(LOCAL_MODULE_CLASS),SHARED_LIBRARIES) # Shared modules may be uninstallable(e.g. TARGET_SKIP_CURRENT_VNDK=true) module_installed_filename := else ifeq ($(LOCAL_MODULE_CLASS),JAVA_LIBRARIES) # Stick the static java libraries with the regular java libraries. module_leaf := $(notdir $(LOCAL_BUILT_MODULE)) # javalib.jar is the default name for the build module (and isn't meaningful) # If that's what we have, substitute the module name instead. These files # aren't included on the device, so this name is synthetic anyway. # Extra path "static" is added to try to avoid name conflict between the notice file of # this 'uninstallable' Java module and the notice file for another 'installable' Java module # whose stem is the same as this module's name. ifneq ($(filter javalib.jar,$(module_leaf)),) module_leaf := static/$(LOCAL_MODULE).jar endif module_installed_filename := \ $(patsubst $(PRODUCT_OUT)/%,%,$($(my_prefix)OUT_JAVA_LIBRARIES))/$(module_leaf) else ifneq ($(filter ETC DATA,$(LOCAL_MODULE_CLASS)),) # ETC and DATA modules may be uninstallable, yet still have a NOTICE file. # e.g. apex components module_installed_filename := else ifneq (,$(and $(filter %.sdk,$(LOCAL_MODULE)),$(filter $(patsubst %.sdk,%,$(LOCAL_MODULE)),$(SOONG_SDK_VARIANT_MODULES)))) # Soong produces uninstallable *.sdk shared libraries for embedding in APKs. module_installed_filename := \ $(patsubst $(PRODUCT_OUT)/%,%,$($(LOCAL_2ND_ARCH_VAR_PREFIX)$(my_prefix)OUT_SHARED_LIBRARIES))/$(notdir $(LOCAL_BUILT_MODULE)) endif # JAVA_LIBRARIES endif # STATIC_LIBRARIES endif ifdef module_installed_filename # In case it's actually a host file module_installed_filename := $(patsubst $(HOST_OUT)/%,%,$(module_installed_filename)) module_installed_filename := $(patsubst $(HOST_CROSS_OUT)/%,%,$(module_installed_filename)) installed_notice_file := $($(my_prefix)OUT_NOTICE_FILES)/src/$(module_installed_filename).txt $(installed_notice_file): $(module_license_metadata) ifdef my_register_name ALL_MODULES.$(my_register_name).INSTALLED_NOTICE_FILE := $(ALL_MODULES.$(my_register_name).INSTALLED_NOTICE_FILE) $(installed_notice_file) ALL_MODULES.$(my_register_name).MODULE_INSTALLED_FILENAMES := $(ALL_MODULES.$(my_register_name).MODULE_INSTALLED_FILENAMES) $(module_installed_filename) INSTALLED_NOTICE_FILES.$(installed_notice_file).MODULE := $(my_register_name) else $(installed_notice_file): PRIVATE_INSTALLED_MODULE := $(module_installed_filename) $(installed_notice_file) : PRIVATE_NOTICES := $(sort $(foreach n,$(notice_file),$(if $(filter %:%,$(n)), $(call word-colon,1,$(n)), $(n)))) $(installed_notice_file): $(foreach n,$(notice_file),$(if $(filter %:%,$(n)), $(call word-colon,1,$(n)), $(n))) @echo Notice file: $< -- $@ $(hide) mkdir -p $(dir $@) $(hide) awk 'FNR==1 && NR > 1 {print "\n"} {print}' $(PRIVATE_NOTICES) > $@ endif ifdef LOCAL_INSTALLED_MODULE # Make LOCAL_INSTALLED_MODULE depend on NOTICE files if they exist # libraries so they get installed along with it. Make it an order-only # dependency so we don't re-install a module when the NOTICE changes. $(LOCAL_INSTALLED_MODULE): | $(installed_notice_file) endif # To facilitate collecting NOTICE files for apps_only build, # we install the NOTICE file even if a module gets built but not installed, # because shared jni libraries won't be installed to the system image. ifdef TARGET_BUILD_APPS # for static Java libraries, we don't need to even build LOCAL_BUILT_MODULE, # but just javalib.jar in the common intermediate dir. ifeq ($(LOCAL_MODULE_CLASS),JAVA_LIBRARIES) $(intermediates.COMMON)/javalib.jar : | $(installed_notice_file) else $(LOCAL_BUILT_MODULE): | $(installed_notice_file) endif # JAVA_LIBRARIES endif # TARGET_BUILD_APPS endif # module_installed_filename endif # notice_file # Create a predictable, phony target to build this notice file. # Define it even if the notice file doesn't exist so that other # modules can depend on it. notice_target := NOTICE-$(if \ $(LOCAL_IS_HOST_MODULE),HOST$(if $(my_host_cross),_CROSS,),TARGET)-$(LOCAL_MODULE_CLASS)-$(LOCAL_MODULE) .PHONY: $(notice_target) $(notice_target): $(installed_notice_file) Loading
core/Makefile +1 −42 Original line number Diff line number Diff line Loading @@ -1522,48 +1522,7 @@ $(1): $(call corresponding-license-metadata,$(4)) $(HTMLNOTICE) $(BUILD_SYSTEM)/ notice_files: $(1) endef # Create the rule to combine the files into text and html/xml forms # $(1) - xml_excluded_system_product_odm_vendor_dlkm_odm_dlkm| # xml_excluded_vendor_product_odm_vendor_dlkm_odm_dlkm| # xml_product|xml_odm|xml_system_ext|xml_system|xml_vendor_dlkm| # xml_odm_dlkm|html # $(2) - Plain text output file # $(3) - HTML/XML output file # $(4) - File title # $(5) - Directory to use. Notice files are all $(5)/src. Other # directories in there will be used for scratch # $(6) - Dependencies for the output files # $(7) - Directories to exclude # # The algorithm here is that we go collect a hash for each of the notice # files and write the names of the files that match that hash. Then # to generate the real files, we go print out all of the files and their # hashes. # # These rules are fairly complex, so they depend on this makefile so if # it changes, they'll run again. # # TODO: We could clean this up so that we just record the locations of the # original notice files instead of making rules to copy them somwehere. # Then we could traverse that without quite as much bash drama. define combine-notice-files $(2): PRIVATE_MESSAGE := $(4) $(2): PRIVATE_DIR := $(5) $(2): .KATI_IMPLICIT_OUTPUTS := $(3) $(2): $(6) $(BUILD_SYSTEM)/Makefile build/make/tools/generate-notice-files.py build/make/tools/generate-notice-files.py --text-output $(2) $(foreach xdir, $(7), -e $(xdir) )\ $(if $(filter $(1),xml_excluded_vendor_product_odm_vendor_dlkm_odm_dlkm),-e vendor -e product -e system_ext -e odm -e vendor_dlkm -e odm_dlkm --xml-output, \ $(if $(filter $(1),xml_excluded_system_product_odm_vendor_dlkm_odm_dlkm),-e system -e product -e system_ext -e odm -e vendor_dlkm -e odm_dlkm --xml-output, \ $(if $(filter $(1),xml_product),-i product --xml-output, \ $(if $(filter $(1),xml_system_ext),-i system_ext --xml-output, \ $(if $(filter $(1),xml_system),-i system --xml-output, \ $(if $(filter $(1),xml_odm),-i odm --xml-output, \ $(if $(filter $(1),xml_vendor_dlkm),-i vendor_dlkm --xml-output, \ $(if $(filter $(1),xml_odm_dlkm),-i odm_dlkm --xml-output, \ --html-output)))))))) $(3) \ -t $$(PRIVATE_MESSAGE) $$(foreach dir,$$(sort $$(PRIVATE_DIR)), -s $$(dir)/src) notice_files: $(2) $(3) endef $(KATI_obsolete_var combine-notice-files, To create notice files use xml-notice-rule, html-notice-rule, or text-notice-rule.) # Notice file logic isn't relevant for TARGET_BUILD_APPS ifndef TARGET_BUILD_APPS Loading
core/definitions.mk +3 −22 Original line number Diff line number Diff line Loading @@ -586,10 +586,11 @@ endef ## License metadata build rule for my_register_name $(1) ########################################################### define license-metadata-rule $(foreach meta_lic, $(subst //,/,$(ALL_MODULES.$(1).DELAYED_META_LIC)),$(call _license-metadata-rule,$(1),$(meta_lic))) $(call notice-rule,$(1)) $(foreach meta_lic, $(ALL_MODULES.$(1).DELAYED_META_LIC),$(call _license-metadata-rule,$(1),$(meta_lic))) endef $(KATI_obsolete_var notice-rule, This function has been removed) define _license-metadata-rule $(strip $(eval _srcs := $(strip $(foreach d,$(ALL_MODULES.$(1).NOTICE_DEPS),$(if $(strip $(ALL_MODULES.$(call word-colon,1,$(d)).INSTALLED)), $(ALL_MODULES.$(call word-colon,1,$(d)).INSTALLED),$(if $(strip $(ALL_MODULES.$(call word-colon,1,$(d)).BUILT)), $(ALL_MODULES.$(call word-colon,1,$(d)).BUILT), $(call word-colon,1,$d))))))) $(strip $(eval _deps := $(sort $(filter-out $(2)%,\ Loading Loading @@ -648,26 +649,6 @@ $(2) : $(foreach d,$(_deps),$(call word-colon,1,$(d))) $(foreach n,$(_notices),$ -o $$@ endef define notice-rule $(strip $(eval _mifs := $(sort $(ALL_MODULES.$(1).MODULE_INSTALLED_FILENAMES)))) $(strip $(eval _infs := $(sort $(ALL_MODULES.$(1).INSTALLED_NOTICE_FILE)))) # Emit each installed notice file rule if it references the current module $(if $(_infs),$(foreach inf,$(_infs), $(if $(strip $(filter $(1),$(INSTALLED_NOTICE_FILES.$(inf).MODULE))), $(strip $(eval _mif := $(firstword $(foreach m,$(_mifs),$(if $(filter %/src/$(m).txt,$(inf)),$(m)))))) $(inf): PRIVATE_INSTALLED_MODULE := $(_mif) $(inf) : PRIVATE_NOTICES := $(sort $(foreach n,$(_notices),$(call word-colon,1,$(n) ))) $(inf): $(foreach n,$(_notices),$(call word-colon,1,$(n)) ) @echo Notice file: $$< -- $$@ mkdir -p $$(dir $$@) awk 'FNR==1 && NR > 1 {print "\n"} {print}' $$(PRIVATE_NOTICES) > $$@ ))) endef ########################################################### ## License metadata build rule for non-module target $(1) Loading
core/notice_files.mk +0 −98 Original line number Diff line number Diff line Loading @@ -157,102 +157,4 @@ ifdef my_register_name ALL_MODULES.$(my_register_name).NOTICES := $(ALL_MODULES.$(my_register_name).NOTICES) $(notice_file) endif # This relies on the name of the directory in PRODUCT_OUT matching where # it's installed on the target - i.e. system, data, etc. This does # not work for root and isn't exact, but it's probably good enough for # compliance. # Includes the leading slash ifdef LOCAL_INSTALLED_MODULE module_installed_filename := $(patsubst $(PRODUCT_OUT)/%,%,$(LOCAL_INSTALLED_MODULE)) else # This module isn't installable ifneq ($(filter STATIC_LIBRARIES RLIB_LIBRARIES PROC_MACRO_LIBRARIES HEADER_LIBRARIES,$(LOCAL_MODULE_CLASS)),) # Stick the static libraries with the dynamic libraries. # We can't use xxx_OUT_STATIC_LIBRARIES because it points into # device-obj or host-obj. module_installed_filename := \ $(patsubst $(PRODUCT_OUT)/%,%,$($(LOCAL_2ND_ARCH_VAR_PREFIX)$(my_prefix)OUT_SHARED_LIBRARIES))/$(notdir $(LOCAL_BUILT_MODULE)) else ifeq ($(LOCAL_MODULE_CLASS),SHARED_LIBRARIES) # Shared modules may be uninstallable(e.g. TARGET_SKIP_CURRENT_VNDK=true) module_installed_filename := else ifeq ($(LOCAL_MODULE_CLASS),JAVA_LIBRARIES) # Stick the static java libraries with the regular java libraries. module_leaf := $(notdir $(LOCAL_BUILT_MODULE)) # javalib.jar is the default name for the build module (and isn't meaningful) # If that's what we have, substitute the module name instead. These files # aren't included on the device, so this name is synthetic anyway. # Extra path "static" is added to try to avoid name conflict between the notice file of # this 'uninstallable' Java module and the notice file for another 'installable' Java module # whose stem is the same as this module's name. ifneq ($(filter javalib.jar,$(module_leaf)),) module_leaf := static/$(LOCAL_MODULE).jar endif module_installed_filename := \ $(patsubst $(PRODUCT_OUT)/%,%,$($(my_prefix)OUT_JAVA_LIBRARIES))/$(module_leaf) else ifneq ($(filter ETC DATA,$(LOCAL_MODULE_CLASS)),) # ETC and DATA modules may be uninstallable, yet still have a NOTICE file. # e.g. apex components module_installed_filename := else ifneq (,$(and $(filter %.sdk,$(LOCAL_MODULE)),$(filter $(patsubst %.sdk,%,$(LOCAL_MODULE)),$(SOONG_SDK_VARIANT_MODULES)))) # Soong produces uninstallable *.sdk shared libraries for embedding in APKs. module_installed_filename := \ $(patsubst $(PRODUCT_OUT)/%,%,$($(LOCAL_2ND_ARCH_VAR_PREFIX)$(my_prefix)OUT_SHARED_LIBRARIES))/$(notdir $(LOCAL_BUILT_MODULE)) endif # JAVA_LIBRARIES endif # STATIC_LIBRARIES endif ifdef module_installed_filename # In case it's actually a host file module_installed_filename := $(patsubst $(HOST_OUT)/%,%,$(module_installed_filename)) module_installed_filename := $(patsubst $(HOST_CROSS_OUT)/%,%,$(module_installed_filename)) installed_notice_file := $($(my_prefix)OUT_NOTICE_FILES)/src/$(module_installed_filename).txt $(installed_notice_file): $(module_license_metadata) ifdef my_register_name ALL_MODULES.$(my_register_name).INSTALLED_NOTICE_FILE := $(ALL_MODULES.$(my_register_name).INSTALLED_NOTICE_FILE) $(installed_notice_file) ALL_MODULES.$(my_register_name).MODULE_INSTALLED_FILENAMES := $(ALL_MODULES.$(my_register_name).MODULE_INSTALLED_FILENAMES) $(module_installed_filename) INSTALLED_NOTICE_FILES.$(installed_notice_file).MODULE := $(my_register_name) else $(installed_notice_file): PRIVATE_INSTALLED_MODULE := $(module_installed_filename) $(installed_notice_file) : PRIVATE_NOTICES := $(sort $(foreach n,$(notice_file),$(if $(filter %:%,$(n)), $(call word-colon,1,$(n)), $(n)))) $(installed_notice_file): $(foreach n,$(notice_file),$(if $(filter %:%,$(n)), $(call word-colon,1,$(n)), $(n))) @echo Notice file: $< -- $@ $(hide) mkdir -p $(dir $@) $(hide) awk 'FNR==1 && NR > 1 {print "\n"} {print}' $(PRIVATE_NOTICES) > $@ endif ifdef LOCAL_INSTALLED_MODULE # Make LOCAL_INSTALLED_MODULE depend on NOTICE files if they exist # libraries so they get installed along with it. Make it an order-only # dependency so we don't re-install a module when the NOTICE changes. $(LOCAL_INSTALLED_MODULE): | $(installed_notice_file) endif # To facilitate collecting NOTICE files for apps_only build, # we install the NOTICE file even if a module gets built but not installed, # because shared jni libraries won't be installed to the system image. ifdef TARGET_BUILD_APPS # for static Java libraries, we don't need to even build LOCAL_BUILT_MODULE, # but just javalib.jar in the common intermediate dir. ifeq ($(LOCAL_MODULE_CLASS),JAVA_LIBRARIES) $(intermediates.COMMON)/javalib.jar : | $(installed_notice_file) else $(LOCAL_BUILT_MODULE): | $(installed_notice_file) endif # JAVA_LIBRARIES endif # TARGET_BUILD_APPS endif # module_installed_filename endif # notice_file # Create a predictable, phony target to build this notice file. # Define it even if the notice file doesn't exist so that other # modules can depend on it. notice_target := NOTICE-$(if \ $(LOCAL_IS_HOST_MODULE),HOST$(if $(my_host_cross),_CROSS,),TARGET)-$(LOCAL_MODULE_CLASS)-$(LOCAL_MODULE) .PHONY: $(notice_target) $(notice_target): $(installed_notice_file)