1# 2# Copyright (C) 2008 The Android Open Source Project 3# 4# Licensed under the Apache License, Version 2.0 (the "License"); 5# you may not use this file except in compliance with the License. 6# You may obtain a copy of the License at 7# 8# http://www.apache.org/licenses/LICENSE-2.0 9# 10# Unless required by applicable law or agreed to in writing, software 11# distributed under the License is distributed on an "AS IS" BASIS, 12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13# See the License for the specific language governing permissions and 14# limitations under the License. 15# 16 17# Catch users that directly include base_rules.mk 18$(call record-module-type,base_rules) 19 20# Users can define base-rules-hook in their buildspec.mk to perform 21# arbitrary operations as each module is included. 22ifdef base-rules-hook 23$(if $(base-rules-hook),) 24endif 25 26########################################################### 27## Common instructions for a generic module. 28########################################################### 29 30LOCAL_MODULE := $(strip $(LOCAL_MODULE)) 31ifeq ($(LOCAL_MODULE),) 32 $(error $(LOCAL_PATH): LOCAL_MODULE is not defined) 33endif 34$(call verify-module-name) 35 36LOCAL_IS_HOST_MODULE := $(strip $(LOCAL_IS_HOST_MODULE)) 37ifdef LOCAL_IS_HOST_MODULE 38 ifneq ($(LOCAL_IS_HOST_MODULE),true) 39 $(error $(LOCAL_PATH): LOCAL_IS_HOST_MODULE must be "true" or empty, not "$(LOCAL_IS_HOST_MODULE)") 40 endif 41 ifeq ($(LOCAL_HOST_PREFIX),) 42 my_prefix := HOST_ 43 else 44 my_prefix := $(LOCAL_HOST_PREFIX) 45 endif 46 my_host := host- 47 my_kind := HOST 48else 49 my_prefix := TARGET_ 50 my_kind := 51 my_host := 52endif 53 54ifeq ($(my_prefix),HOST_CROSS_) 55 my_host_cross := true 56else 57 my_host_cross := 58endif 59 60ifeq (true, $(LOCAL_PRODUCT_MODULE)) 61ifneq (,$(filter $(LOCAL_MODULE),$(PRODUCT_FORCE_PRODUCT_MODULES_TO_SYSTEM_PARTITION))) 62 LOCAL_PRODUCT_MODULE := 63endif 64endif 65 66_path := $(LOCAL_MODULE_PATH) $(LOCAL_MODULE_PATH_32) $(LOCAL_MODULE_PATH_64) 67ifneq ($(filter $(TARGET_OUT_VENDOR)%,$(_path)),) 68LOCAL_VENDOR_MODULE := true 69else ifneq ($(filter $(TARGET_OUT_OEM)/%,$(_path)),) 70LOCAL_OEM_MODULE := true 71else ifneq ($(filter $(TARGET_OUT_ODM)/%,$(_path)),) 72LOCAL_ODM_MODULE := true 73else ifneq ($(filter $(TARGET_OUT_PRODUCT)/%,$(_path)),) 74LOCAL_PRODUCT_MODULE := true 75else ifneq ($(filter $(TARGET_OUT_SYSTEM_EXT)/%,$(_path)),) 76LOCAL_SYSTEM_EXT_MODULE := true 77endif 78_path := 79 80# TODO(b/135957588) Remove following workaround 81# LOCAL_PRODUCT_SERVICES_MODULE to LOCAL_PRODUCT_MODULE for all Android.mk 82ifndef LOCAL_PRODUCT_MODULE 83LOCAL_PRODUCT_MODULE := $(LOCAL_PRODUCT_SERVICES_MODULE) 84endif 85 86ifndef LOCAL_PROPRIETARY_MODULE 87 LOCAL_PROPRIETARY_MODULE := $(LOCAL_VENDOR_MODULE) 88endif 89ifndef LOCAL_VENDOR_MODULE 90 LOCAL_VENDOR_MODULE := $(LOCAL_PROPRIETARY_MODULE) 91endif 92ifneq ($(filter-out $(LOCAL_PROPRIETARY_MODULE),$(LOCAL_VENDOR_MODULE))$(filter-out $(LOCAL_VENDOR_MODULE),$(LOCAL_PROPRIETARY_MODULE)),) 93$(call pretty-error,Only one of LOCAL_PROPRIETARY_MODULE[$(LOCAL_PROPRIETARY_MODULE)] and LOCAL_VENDOR_MODULE[$(LOCAL_VENDOR_MODULE)] may be set, or they must be equal) 94endif 95 96non_system_module := $(filter true, \ 97 $(LOCAL_PRODUCT_MODULE) \ 98 $(LOCAL_SYSTEM_EXT_MODULE) \ 99 $(LOCAL_VENDOR_MODULE) \ 100 $(LOCAL_PROPRIETARY_MODULE)) 101 102include $(BUILD_SYSTEM)/local_vndk.mk 103include $(BUILD_SYSTEM)/local_systemsdk.mk 104 105my_module_tags := $(LOCAL_MODULE_TAGS) 106ifeq ($(my_host_cross),true) 107 my_module_tags := 108endif 109 110# Ninja has an implicit dependency on the command being run, and kati will 111# regenerate the ninja manifest if any read makefile changes, so there is no 112# need to have dependencies on makefiles. 113# This won't catch all the cases where LOCAL_ADDITIONAL_DEPENDENCIES contains 114# a .mk file, because a few users of LOCAL_ADDITIONAL_DEPENDENCIES don't include 115# base_rules.mk, but it will fix the most common ones. 116LOCAL_ADDITIONAL_DEPENDENCIES := $(filter-out %.mk,$(LOCAL_ADDITIONAL_DEPENDENCIES)) 117 118my_bad_deps := $(strip $(foreach dep,$(filter-out | ||,$(LOCAL_ADDITIONAL_DEPENDENCIES)),\ 119 $(if $(findstring /,$(dep)),,$(dep)))) 120ifneq ($(my_bad_deps),) 121$(call pretty-warning,"Bad LOCAL_ADDITIONAL_DEPENDENCIES: $(my_bad_deps)") 122$(call pretty-error,"LOCAL_ADDITIONAL_DEPENDENCIES must only contain paths (not module names)") 123endif 124 125########################################################### 126## Validate and define fallbacks for input LOCAL_* variables. 127########################################################### 128 129## Dump a .csv file of all modules and their tags 130#ifneq ($(tag-list-first-time),false) 131#$(shell rm -f tag-list.csv) 132#tag-list-first-time := false 133#endif 134#$(shell echo $(lastword $(filter-out config/% out/%,$(MAKEFILE_LIST))),$(LOCAL_MODULE),$(strip $(LOCAL_MODULE_CLASS)),$(subst $(space),$(comma),$(sort $(my_module_tags))) >> tag-list.csv) 135 136LOCAL_UNINSTALLABLE_MODULE := $(strip $(LOCAL_UNINSTALLABLE_MODULE)) 137my_module_tags := $(sort $(my_module_tags)) 138ifeq (,$(my_module_tags)) 139 my_module_tags := optional 140endif 141 142# User tags are not allowed anymore. Fail early because it will not be installed 143# like it used to be. 144ifneq ($(filter $(my_module_tags),user),) 145 $(warning *** Module name: $(LOCAL_MODULE)) 146 $(warning *** Makefile location: $(LOCAL_MODULE_MAKEFILE)) 147 $(warning * ) 148 $(warning * Module is attempting to use the 'user' tag. This) 149 $(warning * used to cause the module to be installed automatically.) 150 $(warning * Now, the module must be listed in the PRODUCT_PACKAGES) 151 $(warning * section of a product makefile to have it installed.) 152 $(warning * ) 153 $(error user tag detected on module.) 154endif 155 156my_bad_module_tags := $(filter eng debug,$(my_module_tags)) 157ifdef my_bad_module_tags 158 ifeq (true,$(LOCAL_UNINSTALLABLE_MODULE)) 159 $(call pretty-warning,LOCAL_MODULE_TAGS := $(my_bad_module_tags) does not do anything for uninstallable modules) 160 endif 161 $(call pretty-error,LOCAL_MODULE_TAGS := $(my_bad_module_tags) is obsolete. See $(CHANGES_URL)#LOCAL_MODULE_TAGS) 162endif 163 164# Only the tags mentioned in this test are expected to be set by module 165# makefiles. Anything else is either a typo or a source of unexpected 166# behaviors. 167ifneq ($(filter-out tests optional samples,$(my_module_tags)),) 168$(call pretty-error,unusual tags: $(filter-out tests optional samples,$(my_module_tags))) 169endif 170 171# Add implicit tags. 172# 173# If the local directory or one of its parents contains a MODULE_LICENSE_GPL 174# file, tag the module as "gnu". Search for "*_GPL*", "*_LGPL*" and "*_MPL*" 175# so that we can also find files like MODULE_LICENSE_GPL_AND_AFL 176# 177gpl_license_file := $(call find-parent-file,$(LOCAL_PATH),MODULE_LICENSE*_GPL* MODULE_LICENSE*_MPL* MODULE_LICENSE*_LGPL*) 178ifneq ($(gpl_license_file),) 179 my_module_tags += gnu 180 ALL_GPL_MODULE_LICENSE_FILES += $(gpl_license_file) 181endif 182 183LOCAL_MODULE_CLASS := $(strip $(LOCAL_MODULE_CLASS)) 184ifneq ($(words $(LOCAL_MODULE_CLASS)),1) 185 $(error $(LOCAL_PATH): LOCAL_MODULE_CLASS must contain exactly one word, not "$(LOCAL_MODULE_CLASS)") 186endif 187 188my_32_64_bit_suffix := $(if $($(LOCAL_2ND_ARCH_VAR_PREFIX)$(my_prefix)IS_64_BIT),64,32) 189 190ifneq (true,$(LOCAL_UNINSTALLABLE_MODULE)) 191my_multilib_module_path := $(strip $(LOCAL_MODULE_PATH_$(my_32_64_bit_suffix))) 192ifdef my_multilib_module_path 193my_module_path := $(my_multilib_module_path) 194else 195my_module_path := $(strip $(LOCAL_MODULE_PATH)) 196endif 197my_module_path := $(patsubst %/,%,$(my_module_path)) 198my_module_relative_path := $(strip $(LOCAL_MODULE_RELATIVE_PATH)) 199 200ifdef LOCAL_IS_HOST_MODULE 201 partition_tag := 202 actual_partition_tag := 203else 204ifeq (true,$(strip $(LOCAL_VENDOR_MODULE))) 205 partition_tag := _VENDOR 206 # A vendor module could be on the vendor partition at "vendor" or the system 207 # partition at "system/vendor". 208 actual_partition_tag := $(if $(filter true,$(BOARD_USES_VENDORIMAGE)),vendor,system) 209else ifeq (true,$(strip $(LOCAL_OEM_MODULE))) 210 partition_tag := _OEM 211 actual_partition_tag := oem 212else ifeq (true,$(strip $(LOCAL_ODM_MODULE))) 213 partition_tag := _ODM 214 # An ODM module could be on the odm partition at "odm", the vendor partition 215 # at "vendor/odm", or the system partition at "system/vendor/odm". 216 actual_partition_tag := $(if $(filter true,$(BOARD_USES_ODMIMAGE)),odm,$(if $(filter true,$(BOARD_USES_VENDORIMAGE)),vendor,system)) 217else ifeq (true,$(strip $(LOCAL_PRODUCT_MODULE))) 218 partition_tag := _PRODUCT 219 # A product module could be on the product partition at "product" or the 220 # system partition at "system/product". 221 actual_partition_tag := $(if $(filter true,$(BOARD_USES_PRODUCTIMAGE)),product,system) 222else ifeq (true,$(strip $(LOCAL_SYSTEM_EXT_MODULE))) 223 partition_tag := _SYSTEM_EXT 224 # A system_ext-specific module could be on the system_ext partition at 225 # "system_ext" or the system partition at "system/system_ext". 226 actual_partition_tag := $(if $(filter true,$(BOARD_USES_SYSTEM_EXTIMAGE)),system_ext,system) 227else ifeq (NATIVE_TESTS,$(LOCAL_MODULE_CLASS)) 228 partition_tag := _DATA 229 actual_partition_tag := data 230else 231 # The definition of should-install-to-system will be different depending 232 # on which goal (e.g., sdk or just droid) is being built. 233 partition_tag := $(if $(call should-install-to-system,$(my_module_tags)),,_DATA) 234 actual_partition_tag := $(if $(partition_tag),data,system) 235endif 236endif 237# For test modules that lack a suite tag, set null-suite as the default. 238# We only support adding a default suite to native tests, native benchmarks, and instrumentation tests. 239# This is because they are the only tests we currently auto-generate test configs for. 240ifndef LOCAL_COMPATIBILITY_SUITE 241 ifneq ($(filter NATIVE_TESTS NATIVE_BENCHMARK, $(LOCAL_MODULE_CLASS)),) 242 LOCAL_COMPATIBILITY_SUITE := null-suite 243 endif 244 ifneq ($(filter APPS, $(LOCAL_MODULE_CLASS)),) 245 ifneq ($(filter $(my_module_tags),tests),) 246 LOCAL_COMPATIBILITY_SUITE := null-suite 247 endif 248 endif 249endif 250 251use_testcase_folder := 252ifeq ($(my_module_path),) 253 ifneq ($(LOCAL_MODULE),$(filter $(LOCAL_MODULE),$(DEFAULT_DATA_OUT_MODULES))) 254 ifdef LOCAL_COMPATIBILITY_SUITE 255 ifneq (true, $(LOCAL_IS_HOST_MODULE)) 256 use_testcase_folder := true 257 endif 258 endif 259 endif 260endif 261 262ifeq ($(my_module_path),) 263 install_path_var := $(LOCAL_2ND_ARCH_VAR_PREFIX)$(my_prefix)OUT$(partition_tag)_$(LOCAL_MODULE_CLASS) 264 ifeq (true,$(LOCAL_PRIVILEGED_MODULE)) 265 install_path_var := $(install_path_var)_PRIVILEGED 266 endif 267 268 my_module_path := $($(install_path_var)) 269 270 # If use_testcase_folder be set, and LOCAL_MODULE_PATH not set, 271 # overwrite the default path under testcase. 272 ifeq ($(use_testcase_folder),true) 273 arch_dir := $($(my_prefix)$(LOCAL_2ND_ARCH_VAR_PREFIX)ARCH) 274 testcase_folder := $($(my_prefix)OUT_TESTCASES)/$(LOCAL_MODULE)/$(arch_dir) 275 my_module_path := $(testcase_folder) 276 arch_dir := 277 endif 278 279 ifeq ($(strip $(my_module_path)),) 280 $(error $(LOCAL_PATH): unhandled install path "$(install_path_var) for $(LOCAL_MODULE)") 281 endif 282endif 283ifneq ($(my_module_relative_path),) 284 my_module_path := $(my_module_path)/$(my_module_relative_path) 285endif 286endif # not LOCAL_UNINSTALLABLE_MODULE 287 288ifneq ($(strip $(LOCAL_BUILT_MODULE)$(LOCAL_INSTALLED_MODULE)),) 289 $(error $(LOCAL_PATH): LOCAL_BUILT_MODULE and LOCAL_INSTALLED_MODULE must not be defined by component makefiles) 290endif 291 292my_register_name := $(LOCAL_MODULE) 293ifeq ($(my_host_cross),true) 294 my_register_name := host_cross_$(LOCAL_MODULE) 295endif 296ifdef LOCAL_2ND_ARCH_VAR_PREFIX 297ifndef LOCAL_NO_2ND_ARCH_MODULE_SUFFIX 298my_register_name := $(my_register_name)$($(my_prefix)2ND_ARCH_MODULE_SUFFIX) 299endif 300endif 301 302ifeq ($(my_host_cross),true) 303 my_all_targets := host_cross_$(my_register_name)_all_targets 304else ifneq ($(LOCAL_IS_HOST_MODULE),) 305 my_all_targets := host_$(my_register_name)_all_targets 306else 307 my_all_targets := device_$(my_register_name)_all_targets 308endif 309 310# Make sure that this IS_HOST/CLASS/MODULE combination is unique. 311module_id := MODULE.$(if \ 312 $(LOCAL_IS_HOST_MODULE),$($(my_prefix)OS),TARGET).$(LOCAL_MODULE_CLASS).$(my_register_name) 313ifdef $(module_id) 314$(error $(LOCAL_PATH): $(module_id) already defined by $($(module_id))) 315endif 316$(module_id) := $(LOCAL_PATH) 317 318# These are the same as local-intermediates-dir / local-generated-sources dir, but faster 319intermediates.COMMON := $($(my_prefix)OUT_COMMON_INTERMEDIATES)/$(LOCAL_MODULE_CLASS)/$(LOCAL_MODULE)_intermediates 320ifneq (,$(filter $(my_prefix)$(LOCAL_MODULE_CLASS),$(COMMON_MODULE_CLASSES))) 321 intermediates := $($(my_prefix)OUT_COMMON_INTERMEDIATES)/$(LOCAL_MODULE_CLASS)/$(LOCAL_MODULE)_intermediates 322 generated_sources_dir := $($(my_prefix)OUT_COMMON_GEN)/$(LOCAL_MODULE_CLASS)/$(LOCAL_MODULE)_intermediates 323else 324 ifneq (,$(filter $(LOCAL_MODULE_CLASS),$(PER_ARCH_MODULE_CLASSES))) 325 intermediates := $($(LOCAL_2ND_ARCH_VAR_PREFIX)$(my_prefix)OUT_INTERMEDIATES)/$(LOCAL_MODULE_CLASS)/$(LOCAL_MODULE)_intermediates 326 else 327 intermediates := $($(my_prefix)OUT_INTERMEDIATES)/$(LOCAL_MODULE_CLASS)/$(LOCAL_MODULE)_intermediates 328 endif 329 generated_sources_dir := $($(my_prefix)OUT_GEN)/$(LOCAL_MODULE_CLASS)/$(LOCAL_MODULE)_intermediates 330endif 331 332ifneq ($(LOCAL_OVERRIDES_MODULES),) 333 ifndef LOCAL_IS_HOST_MODULE 334 ifeq ($(LOCAL_MODULE_CLASS),EXECUTABLES) 335 EXECUTABLES.$(LOCAL_MODULE).OVERRIDES := $(strip $(LOCAL_OVERRIDES_MODULES)) 336 else ifeq ($(LOCAL_MODULE_CLASS),SHARED_LIBRARIES) 337 SHARED_LIBRARIES.$(LOCAL_MODULE).OVERRIDES := $(strip $(LOCAL_OVERRIDES_MODULES)) 338 else ifeq ($(LOCAL_MODULE_CLASS),ETC) 339 ETC.$(LOCAL_MODULE).OVERRIDES := $(strip $(LOCAL_OVERRIDES_MODULES)) 340 else 341 $(call pretty-error,LOCAL_MODULE_CLASS := $(LOCAL_MODULE_CLASS) cannot use LOCAL_OVERRIDES_MODULES) 342 endif 343 else 344 $(call pretty-error,host modules cannot use LOCAL_OVERRIDES_MODULES) 345 endif 346endif 347 348########################################################### 349# Pick a name for the intermediate and final targets 350########################################################### 351include $(BUILD_SYSTEM)/configure_module_stem.mk 352 353LOCAL_BUILT_MODULE := $(intermediates)/$(my_built_module_stem) 354 355ifneq (true,$(LOCAL_UNINSTALLABLE_MODULE)) 356 # Apk and its attachments reside in its own subdir. 357 ifeq ($(LOCAL_MODULE_CLASS),APPS) 358 # framework-res.apk doesn't like the additional layer. 359 ifeq ($(LOCAL_NO_STANDARD_LIBRARIES),true) 360 # Neither do Runtime Resource Overlay apks, which contain just the overlaid resources. 361 else ifeq ($(LOCAL_IS_RUNTIME_RESOURCE_OVERLAY),true) 362 else 363 ifneq ($(use_testcase_folder),true) 364 my_module_path := $(my_module_path)/$(LOCAL_MODULE) 365 endif 366 endif 367 endif 368 LOCAL_INSTALLED_MODULE := $(my_module_path)/$(my_installed_module_stem) 369endif 370 371# Assemble the list of targets to create PRIVATE_ variables for. 372LOCAL_INTERMEDIATE_TARGETS += $(LOCAL_BUILT_MODULE) 373 374########################################################### 375## Create .toc files from shared objects to reduce unnecessary rebuild 376# .toc files have the list of external dynamic symbols without their addresses. 377# As .KATI_RESTAT is specified to .toc files and commit-change-for-toc is used, 378# dependent binaries of a .toc file will be rebuilt only when the content of 379# the .toc file is changed. 380# 381# Don't create .toc files for Soong shared libraries, that is handled in 382# Soong and soong_cc_prebuilt.mk 383########################################################### 384ifneq ($(LOCAL_MODULE_MAKEFILE),$(SOONG_ANDROID_MK)) 385ifeq ($(LOCAL_MODULE_CLASS),SHARED_LIBRARIES) 386LOCAL_INTERMEDIATE_TARGETS += $(LOCAL_BUILT_MODULE).toc 387$(LOCAL_BUILT_MODULE).toc: $(LOCAL_BUILT_MODULE) 388 $(call $(PRIVATE_2ND_ARCH_VAR_PREFIX)$(PRIVATE_PREFIX)transform-shared-lib-to-toc,$<,$@.tmp) 389 $(call commit-change-for-toc,$@) 390 391# Kati adds restat=1 to ninja. GNU make does nothing for this. 392.KATI_RESTAT: $(LOCAL_BUILT_MODULE).toc 393# Build .toc file when using mm, mma, or make $(my_register_name) 394$(my_all_targets): $(LOCAL_BUILT_MODULE).toc 395endif 396endif 397 398########################################################### 399## logtags: Add .logtags files to global list 400########################################################### 401 402logtags_sources := $(filter %.logtags,$(LOCAL_SRC_FILES)) $(LOCAL_LOGTAGS_FILES) 403 404ifneq ($(strip $(logtags_sources)),) 405event_log_tags := $(foreach f,$(addprefix $(LOCAL_PATH)/,$(logtags_sources)),$(call clean-path,$(f))) 406else 407event_log_tags := 408endif 409 410########################################################### 411## make clean- targets 412########################################################### 413cleantarget := clean-$(my_register_name) 414.PHONY: $(cleantarget) 415$(cleantarget) : PRIVATE_MODULE := $(my_register_name) 416$(cleantarget) : PRIVATE_CLEAN_FILES := \ 417 $(LOCAL_BUILT_MODULE) \ 418 $(LOCAL_INSTALLED_MODULE) \ 419 $(intermediates) 420$(cleantarget):: 421 @echo "Clean: $(PRIVATE_MODULE)" 422 $(hide) rm -rf $(PRIVATE_CLEAN_FILES) 423 424########################################################### 425## Common definitions for module. 426########################################################### 427$(LOCAL_INTERMEDIATE_TARGETS) : PRIVATE_PATH:=$(LOCAL_PATH) 428$(LOCAL_INTERMEDIATE_TARGETS) : PRIVATE_IS_HOST_MODULE := $(LOCAL_IS_HOST_MODULE) 429$(LOCAL_INTERMEDIATE_TARGETS) : PRIVATE_HOST:= $(my_host) 430$(LOCAL_INTERMEDIATE_TARGETS) : PRIVATE_PREFIX := $(my_prefix) 431 432$(LOCAL_INTERMEDIATE_TARGETS) : PRIVATE_INTERMEDIATES_DIR:= $(intermediates) 433$(LOCAL_INTERMEDIATE_TARGETS) : PRIVATE_2ND_ARCH_VAR_PREFIX := $(LOCAL_2ND_ARCH_VAR_PREFIX) 434 435# Tell the module and all of its sub-modules who it is. 436$(LOCAL_INTERMEDIATE_TARGETS) : PRIVATE_MODULE:= $(my_register_name) 437 438# Provide a short-hand for building this module. 439# We name both BUILT and INSTALLED in case 440# LOCAL_UNINSTALLABLE_MODULE is set. 441.PHONY: $(my_all_targets) 442$(my_all_targets): $(LOCAL_BUILT_MODULE) $(LOCAL_INSTALLED_MODULE) $(LOCAL_ADDITIONAL_CHECKED_MODULE) 443 444.PHONY: $(my_register_name) 445$(my_register_name): $(my_all_targets) 446 447ifneq ($(my_register_name),$(LOCAL_MODULE)) 448# $(LOCAL_MODULE) covers all the multilib targets. 449.PHONY: $(LOCAL_MODULE) 450$(LOCAL_MODULE) : $(my_all_targets) 451endif 452 453# Set up phony targets that covers all modules under the given paths. 454# This allows us to build everything in given paths by running mmma/mma. 455define my_path_comp 456parent := $(patsubst %/,%,$(dir $(1))) 457parent_target := MODULES-IN-$$(subst /,-,$$(parent)) 458.PHONY: $$(parent_target) 459$$(parent_target): $(2) 460ifndef $$(parent_target) 461 $$(parent_target) := true 462 ifneq (,$$(findstring /,$$(parent))) 463 $$(eval $$(call my_path_comp,$$(parent),$$(parent_target))) 464 endif 465endif 466endef 467 468_local_path := $(patsubst %/,%,$(LOCAL_PATH)) 469_local_path_target := MODULES-IN-$(subst /,-,$(_local_path)) 470 471.PHONY: $(_local_path_target) 472$(_local_path_target): $(my_register_name) 473 474ifndef $(_local_path_target) 475 $(_local_path_target) := true 476 $(eval $(call my_path_comp,$(_local_path),$(_local_path_target))) 477endif 478 479_local_path := 480_local_path_target := 481my_path_comp := 482 483########################################################### 484## Module installation rule 485########################################################### 486 487my_init_rc_installed := 488my_init_rc_pairs := 489my_installed_symlinks := 490my_default_test_module := 491ifeq ($(use_testcase_folder),true) 492arch_dir := $($(my_prefix)$(LOCAL_2ND_ARCH_VAR_PREFIX)ARCH) 493my_default_test_module := $($(my_prefix)OUT_TESTCASES)/$(LOCAL_MODULE)/$(arch_dir)/$(my_installed_module_stem) 494arch_dir := 495endif 496 497ifneq (true,$(LOCAL_UNINSTALLABLE_MODULE)) 498ifneq ($(LOCAL_INSTALLED_MODULE),$(my_default_test_module)) 499$(LOCAL_INSTALLED_MODULE): PRIVATE_POST_INSTALL_CMD := $(LOCAL_POST_INSTALL_CMD) 500$(LOCAL_INSTALLED_MODULE): $(LOCAL_BUILT_MODULE) 501 @echo "Install: $@" 502 $(copy-file-to-new-target) 503 $(PRIVATE_POST_INSTALL_CMD) 504endif 505 506ifndef LOCAL_IS_HOST_MODULE 507# Rule to install the module's companion init.rc. 508my_init_rc := $(LOCAL_INIT_RC_$(my_32_64_bit_suffix)) $(LOCAL_INIT_RC) 509ifneq ($(strip $(my_init_rc)),) 510my_init_rc_pairs := $(foreach rc,$(my_init_rc),$(LOCAL_PATH)/$(rc):$(TARGET_OUT$(partition_tag)_ETC)/init/$(notdir $(rc))) 511my_init_rc_installed := $(foreach rc,$(my_init_rc_pairs),$(call word-colon,2,$(rc))) 512 513# Make sure we only set up the copy rules once, even if another arch variant 514# shares a common LOCAL_INIT_RC. 515my_init_rc_new_pairs := $(filter-out $(ALL_INIT_RC_INSTALLED_PAIRS),$(my_init_rc_pairs)) 516my_init_rc_new_installed := $(call copy-many-init-script-files-checked,$(my_init_rc_new_pairs)) 517ALL_INIT_RC_INSTALLED_PAIRS += $(my_init_rc_new_pairs) 518 519$(my_all_targets) : $(my_init_rc_installed) 520endif # my_init_rc 521endif # !LOCAL_IS_HOST_MODULE 522 523# Rule to install the module's companion symlinks 524my_installed_symlinks := $(addprefix $(my_module_path)/,$(LOCAL_MODULE_SYMLINKS) $(LOCAL_MODULE_SYMLINKS_$(my_32_64_bit_suffix))) 525$(foreach symlink,$(my_installed_symlinks),\ 526 $(call symlink-file,$(LOCAL_INSTALLED_MODULE),$(my_installed_module_stem),$(symlink))) 527 528$(my_all_targets) : | $(my_installed_symlinks) 529 530endif # !LOCAL_UNINSTALLABLE_MODULE 531 532########################################################### 533## VINTF manifest fragment goals 534########################################################### 535 536my_vintf_installed:= 537my_vintf_pairs:= 538ifneq (true,$(LOCAL_UNINSTALLABLE_MODULE)) 539ifndef LOCAL_IS_HOST_MODULE 540ifneq ($(strip $(LOCAL_VINTF_FRAGMENTS)),) 541 542my_vintf_pairs := $(foreach xml,$(LOCAL_VINTF_FRAGMENTS),$(LOCAL_PATH)/$(xml):$(TARGET_OUT$(partition_tag)_ETC)/vintf/manifest/$(notdir $(xml))) 543my_vintf_installed := $(foreach xml,$(my_vintf_pairs),$(call word-colon,2,$(xml))) 544 545# Only set up copy rules once, even if another arch variant shares it 546my_vintf_new_pairs := $(filter-out $(ALL_VINTF_MANIFEST_FRAGMENTS_LIST),$(my_vintf_pairs)) 547my_vintf_new_installed := $(call copy-many-vintf-manifest-files-checked,$(my_vintf_new_pairs)) 548 549ALL_VINTF_MANIFEST_FRAGMENTS_LIST += $(my_vintf_new_pairs) 550 551$(my_all_targets) : $(my_vintf_new_installed) 552endif # LOCAL_VINTF_FRAGMENTS 553endif # !LOCAL_IS_HOST_MODULE 554endif # !LOCAL_UNINSTALLABLE_MODULE 555 556########################################################### 557## CHECK_BUILD goals 558########################################################### 559my_checked_module := 560# If nobody has defined a more specific module for the 561# checked modules, use LOCAL_BUILT_MODULE. 562ifdef LOCAL_CHECKED_MODULE 563 my_checked_module := $(LOCAL_CHECKED_MODULE) 564else 565 my_checked_module := $(LOCAL_BUILT_MODULE) 566endif 567 568my_checked_module += $(LOCAL_ADDITIONAL_CHECKED_MODULE) 569 570# If they request that this module not be checked, then don't. 571# PLEASE DON'T SET THIS. ANY PLACES THAT SET THIS WITHOUT 572# GOOD REASON WILL HAVE IT REMOVED. 573ifdef LOCAL_DONT_CHECK_MODULE 574 my_checked_module := 575endif 576# Don't check build target module defined for the 2nd arch 577ifndef LOCAL_IS_HOST_MODULE 578ifdef LOCAL_2ND_ARCH_VAR_PREFIX 579 my_checked_module := 580endif 581endif 582 583########################################################### 584## Test Data 585########################################################### 586my_test_data_pairs := 587my_installed_test_data := 588# Source to relative dst file paths for reuse in LOCAL_COMPATIBILITY_SUITE. 589my_test_data_file_pairs := 590 591ifneq ($(strip $(filter NATIVE_TESTS,$(LOCAL_MODULE_CLASS)) $(LOCAL_IS_FUZZ_TARGET)),) 592ifneq ($(strip $(LOCAL_TEST_DATA)),) 593ifneq (true,$(LOCAL_UNINSTALLABLE_MODULE)) 594 595# Soong LOCAL_TEST_DATA is of the form <from_base>:<file>:<relative_install_path> 596# or <from_base>:<file>, to be installed to 597# <install_root>/<relative_install_path>/<file> or <install_root>/<file>, 598# respectively. 599ifeq ($(LOCAL_MODULE_MAKEFILE),$(SOONG_ANDROID_MK)) 600 define copy_test_data_pairs 601 _src_base := $$(call word-colon,1,$$(td)) 602 _file := $$(call word-colon,2,$$(td)) 603 _relative_install_path := $$(call word-colon,3,$$(td)) 604 ifeq (,$$(_relative_install_path)) 605 _relative_dest_file := $$(_file) 606 else 607 _relative_dest_file := $$(call append-path,$$(_relative_install_path),$$(_file)) 608 endif 609 my_test_data_pairs += $$(call append-path,$$(_src_base),$$(_file)):$$(call append-path,$$(my_module_path),$$(_relative_dest_file)) 610 my_test_data_file_pairs += $$(call append-path,$$(_src_base),$$(_file)):$$(_relative_dest_file) 611 endef 612else 613 define copy_test_data_pairs 614 _src_base := $$(call word-colon,1,$$(td)) 615 _file := $$(call word-colon,2,$$(td)) 616 ifndef _file 617 _file := $$(_src_base) 618 _src_base := $$(LOCAL_PATH) 619 endif 620 ifneq (,$$(findstring ..,$$(_file))) 621 $$(call pretty-error,LOCAL_TEST_DATA may not include '..': $$(_file)) 622 endif 623 ifneq (,$$(filter/%,$$(_src_base) $$(_file))) 624 $$(call pretty-error,LOCAL_TEST_DATA may not include absolute paths: $$(_src_base) $$(_file)) 625 endif 626 my_test_data_pairs += $$(call append-path,$$(_src_base),$$(_file)):$$(call append-path,$$(my_module_path),$$(_file)) 627 my_test_data_file_pairs += $$(call append-path,$$(_src_base),$$(_file)):$$(_file) 628 endef 629endif 630 631$(foreach td,$(LOCAL_TEST_DATA),$(eval $(copy_test_data_pairs))) 632 633copy_test_data_pairs := 634 635my_installed_test_data := $(call copy-many-files,$(my_test_data_pairs)) 636$(LOCAL_INSTALLED_MODULE): $(my_installed_test_data) 637 638endif 639endif 640endif 641 642########################################################### 643## Compatibility suite files. 644########################################################### 645ifdef LOCAL_COMPATIBILITY_SUITE 646ifneq (true,$(LOCAL_UNINSTALLABLE_MODULE)) 647 648# If we are building a native test or benchmark and its stem variants are not defined, 649# separate the multiple architectures into subdirectories of the testcase folder. 650arch_dir := 651is_native := 652multi_arch := 653ifeq ($(LOCAL_MODULE_CLASS),NATIVE_TESTS) 654 is_native := true 655 multi_arch := true 656endif 657ifdef LOCAL_MULTILIB 658 multi_arch := true 659endif 660 661ifdef multi_arch 662arch_dir := /$($(my_prefix)$(LOCAL_2ND_ARCH_VAR_PREFIX)ARCH) 663else 664ifeq ($(use_testcase_folder),true) 665 arch_dir := /$($(my_prefix)$(LOCAL_2ND_ARCH_VAR_PREFIX)ARCH) 666endif 667endif 668 669multi_arch := 670 671my_default_test_module := 672my_default_test_module := $($(my_prefix)OUT_TESTCASES)/$(LOCAL_MODULE)$(arch_dir)/$(my_installed_module_stem) 673ifneq ($(LOCAL_INSTALLED_MODULE),$(my_default_test_module)) 674# Install into the testcase folder 675$(LOCAL_INSTALLED_MODULE) : $(my_default_test_module) 676endif 677 678# The module itself. 679$(foreach suite, $(LOCAL_COMPATIBILITY_SUITE), \ 680 $(eval my_compat_dist_$(suite) := $(foreach dir, $(call compatibility_suite_dirs,$(suite),$(arch_dir)), \ 681 $(LOCAL_BUILT_MODULE):$(dir)/$(my_installed_module_stem))) \ 682 $(eval my_compat_dist_config_$(suite) := )) 683 684 685# Auto-generate build config. 686ifneq (,$(LOCAL_FULL_TEST_CONFIG)) 687 test_config := $(LOCAL_FULL_TEST_CONFIG) 688else ifneq (,$(LOCAL_TEST_CONFIG)) 689 test_config := $(LOCAL_PATH)/$(LOCAL_TEST_CONFIG) 690else 691 test_config := $(wildcard $(LOCAL_PATH)/AndroidTest.xml) 692endif 693ifeq (,$(test_config)) 694 ifneq (true,$(is_native)) 695 is_instrumentation_test := true 696 ifeq (true, $(LOCAL_IS_HOST_MODULE)) 697 is_instrumentation_test := false 698 endif 699 # If LOCAL_MODULE_CLASS is not APPS, it's certainly not an instrumentation 700 # test. However, some packages for test data also have LOCAL_MODULE_CLASS 701 # set to APPS. These will require flag LOCAL_DISABLE_AUTO_GENERATE_TEST_CONFIG 702 # to disable auto-generating test config file. 703 ifneq (APPS, $(LOCAL_MODULE_CLASS)) 704 is_instrumentation_test := false 705 endif 706 endif 707 # CTS modules can be used for test data, so test config files must be 708 # explicitly created using AndroidTest.xml 709 ifeq (,$(filter cts, $(LOCAL_COMPATIBILITY_SUITE))) 710 ifneq (true, $(LOCAL_DISABLE_AUTO_GENERATE_TEST_CONFIG)) 711 ifeq (true, $(filter true,$(is_native) $(is_instrumentation_test))) 712 include $(BUILD_SYSTEM)/autogen_test_config.mk 713 test_config := $(autogen_test_config_file) 714 autogen_test_config_file := 715 endif 716 endif 717 endif 718endif 719is_instrumentation_test := 720 721# Make sure we only add the files once for multilib modules. 722ifdef $(my_prefix)$(LOCAL_MODULE_CLASS)_$(LOCAL_MODULE)_compat_files 723 # Sync the auto_test_config value for multilib modules. 724 ifdef $(my_prefix)$(LOCAL_MODULE_CLASS)_$(LOCAL_MODULE)_autogen 725 ALL_MODULES.$(my_register_name).auto_test_config := true 726 endif 727else 728 $(my_prefix)$(LOCAL_MODULE_CLASS)_$(LOCAL_MODULE)_compat_files := true 729 # LOCAL_COMPATIBILITY_SUPPORT_FILES is a list of <src>[:<dest>]. 730 $(foreach suite, $(LOCAL_COMPATIBILITY_SUITE), \ 731 $(eval my_compat_dist_$(suite) += $(foreach f, $(LOCAL_COMPATIBILITY_SUPPORT_FILES), \ 732 $(eval p := $(subst :,$(space),$(f))) \ 733 $(eval s := $(word 1,$(p))) \ 734 $(eval n := $(or $(word 2,$(p)),$(notdir $(word 1, $(p))))) \ 735 $(foreach dir, $(call compatibility_suite_dirs,$(suite)), \ 736 $(s):$(dir)/$(n))))) 737 738 ifneq (,$(test_config)) 739 $(foreach suite, $(LOCAL_COMPATIBILITY_SUITE), \ 740 $(eval my_compat_dist_config_$(suite) += $(foreach dir, $(call compatibility_suite_dirs,$(suite)), \ 741 $(test_config):$(dir)/$(LOCAL_MODULE).config))) 742 endif 743 744 ifneq (,$(wildcard $(LOCAL_PATH)/DynamicConfig.xml)) 745 $(foreach suite, $(LOCAL_COMPATIBILITY_SUITE), \ 746 $(eval my_compat_dist_config_$(suite) += $(foreach dir, $(call compatibility_suite_dirs,$(suite)), \ 747 $(LOCAL_PATH)/DynamicConfig.xml:$(dir)/$(LOCAL_MODULE).dynamic))) 748 endif 749 750 ifneq (,$(wildcard $(LOCAL_PATH)/$(LOCAL_MODULE)_*.config)) 751 $(foreach extra_config, $(wildcard $(LOCAL_PATH)/$(LOCAL_MODULE)_*.config), \ 752 $(foreach suite, $(LOCAL_COMPATIBILITY_SUITE), \ 753 $(eval my_compat_dist_config_$(suite) += $(foreach dir, $(call compatibility_suite_dirs,$(suite)), \ 754 $(extra_config):$(dir)/$(notdir $(extra_config)))))) 755 endif 756endif # $(my_prefix)$(LOCAL_MODULE_CLASS)_$(LOCAL_MODULE)_compat_files 757 758# HACK: pretend a soong LOCAL_FULL_TEST_CONFIG is autogenerated by setting the flag in 759# module-info.json 760# TODO: (b/113029686) Add explicit flag from Soong to determine if a test was 761# autogenerated. 762ifneq (,$(filter $(SOONG_OUT_DIR)%,$(LOCAL_FULL_TEST_CONFIG))) 763 ifeq ($(LOCAL_MODULE_MAKEFILE),$(SOONG_ANDROID_MK)) 764 ALL_MODULES.$(my_register_name).auto_test_config := true 765 endif 766endif 767 768 769ifeq ($(use_testcase_folder),true) 770ifneq ($(my_test_data_file_pairs),) 771# Filter out existng installed test data paths when collecting test data files to be installed and 772# indexed as they cause build rule conflicts. Instead put them in a separate list which is only 773# used for indexing. 774$(foreach pair, $(my_test_data_file_pairs), \ 775 $(eval parts := $(subst :,$(space),$(pair))) \ 776 $(eval src_path := $(word 1,$(parts))) \ 777 $(eval file := $(word 2,$(parts))) \ 778 $(foreach suite, $(LOCAL_COMPATIBILITY_SUITE), \ 779 $(eval my_compat_dist_$(suite) += $(foreach dir, $(call compatibility_suite_dirs,$(suite),$(arch_dir)), \ 780 $(call filter-copy-pair,$(src_path),$(call append-path,$(dir),$(file)),$(my_installed_test_data)))) \ 781 $(eval my_compat_dist_test_data_$(suite) += \ 782 $(foreach dir, $(call compatibility_suite_dirs,$(suite),$(arch_dir)), \ 783 $(filter $(my_installed_test_data),$(call append-path,$(dir),$(file))))))) 784endif 785else 786ifneq ($(my_test_data_file_pairs),) 787$(foreach pair, $(my_test_data_file_pairs), \ 788 $(eval parts := $(subst :,$(space),$(pair))) \ 789 $(eval src_path := $(word 1,$(parts))) \ 790 $(eval file := $(word 2,$(parts))) \ 791 $(foreach suite, $(LOCAL_COMPATIBILITY_SUITE), \ 792 $(eval my_compat_dist_$(suite) += $(foreach dir, $(call compatibility_suite_dirs,$(suite),$(arch_dir)), \ 793 $(src_path):$(call append-path,$(dir),$(file)))))) 794endif 795endif 796 797 798 799arch_dir := 800is_native := 801 802$(call create-suite-dependencies) 803$(foreach suite, $(LOCAL_COMPATIBILITY_SUITE), \ 804 $(eval my_compat_dist_config_$(suite) := ) \ 805 $(eval my_compat_dist_test_data_$(suite) := )) 806 807endif # LOCAL_UNINSTALLABLE_MODULE 808endif # LOCAL_COMPATIBILITY_SUITE 809 810########################################################### 811## Add test module to ALL_DISABLED_PRESUBMIT_TESTS if LOCAL_PRESUBMIT_DISABLED is set to true. 812########################################################### 813ifeq ($(LOCAL_PRESUBMIT_DISABLED),true) 814 ALL_DISABLED_PRESUBMIT_TESTS += $(LOCAL_MODULE) 815endif # LOCAL_PRESUBMIT_DISABLED 816 817########################################################### 818## Register with ALL_MODULES 819########################################################### 820 821ifndef ALL_MODULES.$(my_register_name).PATH 822 # These keys are no longer used, they've been replaced by keys that specify 823 # target/host/host_cross (REQUIRED_FROM_TARGET / REQUIRED_FROM_HOST) and similar. 824 # 825 # Marking them obsolete to ensure that anyone using these internal variables looks for 826 # alternates. 827 $(KATI_obsolete_var ALL_MODULES.$(my_register_name).REQUIRED) 828 $(KATI_obsolete_var ALL_MODULES.$(my_register_name).EXPLICITLY_REQUIRED) 829 $(KATI_obsolete_var ALL_MODULES.$(my_register_name).HOST_REQUIRED) 830 $(KATI_obsolete_var ALL_MODULES.$(my_register_name).TARGET_REQUIRED) 831endif 832 833ALL_MODULES += $(my_register_name) 834 835# Don't use += on subvars, or else they'll end up being 836# recursively expanded. 837ALL_MODULES.$(my_register_name).CLASS := \ 838 $(ALL_MODULES.$(my_register_name).CLASS) $(LOCAL_MODULE_CLASS) 839ALL_MODULES.$(my_register_name).PATH := \ 840 $(ALL_MODULES.$(my_register_name).PATH) $(LOCAL_PATH) 841ALL_MODULES.$(my_register_name).TAGS := \ 842 $(ALL_MODULES.$(my_register_name).TAGS) $(my_module_tags) 843ALL_MODULES.$(my_register_name).CHECKED := \ 844 $(ALL_MODULES.$(my_register_name).CHECKED) $(my_checked_module) 845ALL_MODULES.$(my_register_name).BUILT := \ 846 $(ALL_MODULES.$(my_register_name).BUILT) $(LOCAL_BUILT_MODULE) 847ifndef LOCAL_IS_HOST_MODULE 848ALL_MODULES.$(my_register_name).TARGET_BUILT := \ 849 $(ALL_MODULES.$(my_register_name).TARGET_BUILT) $(LOCAL_BUILT_MODULE) 850endif 851ifneq (true,$(LOCAL_UNINSTALLABLE_MODULE)) 852ALL_MODULES.$(my_register_name).INSTALLED := \ 853 $(strip $(ALL_MODULES.$(my_register_name).INSTALLED) \ 854 $(LOCAL_INSTALLED_MODULE) $(my_init_rc_installed) $(my_installed_symlinks) \ 855 $(my_installed_test_data) $(my_vintf_installed)) 856ALL_MODULES.$(my_register_name).BUILT_INSTALLED := \ 857 $(strip $(ALL_MODULES.$(my_register_name).BUILT_INSTALLED) \ 858 $(LOCAL_BUILT_MODULE):$(LOCAL_INSTALLED_MODULE) \ 859 $(my_init_rc_pairs) $(my_test_data_pairs) $(my_vintf_pairs)) 860endif 861ifdef LOCAL_PICKUP_FILES 862# Files or directories ready to pick up by the build system 863# when $(LOCAL_BUILT_MODULE) is done. 864ALL_MODULES.$(my_register_name).PICKUP_FILES := \ 865 $(ALL_MODULES.$(my_register_name).PICKUP_FILES) $(LOCAL_PICKUP_FILES) 866endif 867# Record the platform availability of this module. Note that the availability is not 868# meaningful for non-installable modules (e.g., static libs) or host modules. 869# We only care about modules that are installable to the device. 870ifeq (true,$(LOCAL_NOT_AVAILABLE_FOR_PLATFORM)) 871 ifneq (true,$(LOCAL_UNINSTALLABLE_MODULE)) 872 ifndef LOCAL_IS_HOST_MODULE 873 ALL_MODULES.$(my_register_name).NOT_AVAILABLE_FOR_PLATFORM := true 874 endif 875 endif 876endif 877 878my_required_modules := $(LOCAL_REQUIRED_MODULES) \ 879 $(LOCAL_REQUIRED_MODULES_$(TARGET_$(LOCAL_2ND_ARCH_VAR_PREFIX)ARCH)) 880ifdef LOCAL_IS_HOST_MODULE 881my_required_modules += $(LOCAL_REQUIRED_MODULES_$($(my_prefix)OS)) 882endif 883 884########################################################################## 885## When compiling against the VNDK, add the .vendor or .product suffix to 886## required modules. 887########################################################################## 888ifneq ($(LOCAL_USE_VNDK),) 889 ##################################################### 890 ## Soong modules may be built three times, once for 891 ## /system, once for /vendor and once for /product. 892 ## If we're using the VNDK, switch all soong 893 ## libraries over to the /vendor or /product variant. 894 ##################################################### 895 ifneq ($(LOCAL_MODULE_MAKEFILE),$(SOONG_ANDROID_MK)) 896 # We don't do this renaming for soong-defined modules since they already 897 # have correct names (with .vendor or .product suffix when necessary) in 898 # their LOCAL_*_LIBRARIES. 899 ifeq ($(LOCAL_USE_VNDK_PRODUCT),true) 900 my_required_modules := $(foreach l,$(my_required_modules),\ 901 $(if $(SPLIT_PRODUCT.SHARED_LIBRARIES.$(l)),$(l).product,$(l))) 902 else 903 my_required_modules := $(foreach l,$(my_required_modules),\ 904 $(if $(SPLIT_VENDOR.SHARED_LIBRARIES.$(l)),$(l).vendor,$(l))) 905 endif 906 endif 907endif 908 909ifdef LOCAL_IS_HOST_MODULE 910 ifneq ($(my_host_cross),true) 911 ALL_MODULES.$(my_register_name).REQUIRED_FROM_HOST := \ 912 $(strip $(ALL_MODULES.$(my_register_name).REQUIRED_FROM_HOST) $(my_required_modules)) 913 ALL_MODULES.$(my_register_name).EXPLICITLY_REQUIRED_FROM_HOST := \ 914 $(strip $(ALL_MODULES.$(my_register_name).EXPLICITLY_REQUIRED_FROM_HOST)\ 915 $(my_required_modules)) 916 ALL_MODULES.$(my_register_name).TARGET_REQUIRED_FROM_HOST := \ 917 $(strip $(ALL_MODULES.$(my_register_name).TARGET_REQUIRED_FROM_HOST)\ 918 $(LOCAL_TARGET_REQUIRED_MODULES)) 919 else 920 ALL_MODULES.$(my_register_name).REQUIRED_FROM_HOST_CROSS := \ 921 $(strip $(ALL_MODULES.$(my_register_name).REQUIRED_FROM_HOST_CROSS) $(my_required_modules)) 922 ALL_MODULES.$(my_register_name).EXPLICITLY_REQUIRED_FROM_HOST_CROSS := \ 923 $(strip $(ALL_MODULES.$(my_register_name).EXPLICITLY_REQUIRED_FROM_HOST_CROSS)\ 924 $(my_required_modules)) 925 ifdef LOCAL_TARGET_REQUIRED_MODULES 926 $(call pretty-error,LOCAL_TARGET_REQUIRED_MODULES may not be used from host_cross modules) 927 endif 928 endif 929 ifdef LOCAL_HOST_REQUIRED_MODULES 930 $(call pretty-error,LOCAL_HOST_REQUIRED_MODULES may not be used from host modules. Use LOCAL_REQUIRED_MODULES instead) 931 endif 932else 933 ALL_MODULES.$(my_register_name).REQUIRED_FROM_TARGET := \ 934 $(strip $(ALL_MODULES.$(my_register_name).REQUIRED_FROM_TARGET) $(my_required_modules)) 935 ALL_MODULES.$(my_register_name).EXPLICITLY_REQUIRED_FROM_TARGET := \ 936 $(strip $(ALL_MODULES.$(my_register_name).EXPLICITLY_REQUIRED_FROM_TARGET)\ 937 $(my_required_modules)) 938 ALL_MODULES.$(my_register_name).HOST_REQUIRED_FROM_TARGET := \ 939 $(strip $(ALL_MODULES.$(my_register_name).HOST_REQUIRED_FROM_TARGET)\ 940 $(LOCAL_HOST_REQUIRED_MODULES)) 941 ifdef LOCAL_TARGET_REQUIRED_MODULES 942 $(call pretty-error,LOCAL_TARGET_REQUIRED_MODULES may not be used from target modules. Use LOCAL_REQUIRED_MODULES instead) 943 endif 944endif 945ALL_MODULES.$(my_register_name).EVENT_LOG_TAGS := \ 946 $(ALL_MODULES.$(my_register_name).EVENT_LOG_TAGS) $(event_log_tags) 947ALL_MODULES.$(my_register_name).MAKEFILE := \ 948 $(ALL_MODULES.$(my_register_name).MAKEFILE) $(LOCAL_MODULE_MAKEFILE) 949ifdef LOCAL_MODULE_OWNER 950ALL_MODULES.$(my_register_name).OWNER := \ 951 $(sort $(ALL_MODULES.$(my_register_name).OWNER) $(LOCAL_MODULE_OWNER)) 952endif 953ifdef LOCAL_2ND_ARCH_VAR_PREFIX 954ALL_MODULES.$(my_register_name).FOR_2ND_ARCH := true 955endif 956ALL_MODULES.$(my_register_name).FOR_HOST_CROSS := $(my_host_cross) 957ALL_MODULES.$(my_register_name).MODULE_NAME := $(LOCAL_MODULE) 958ALL_MODULES.$(my_register_name).COMPATIBILITY_SUITES := $(LOCAL_COMPATIBILITY_SUITE) 959ALL_MODULES.$(my_register_name).TEST_CONFIG := $(test_config) 960test_config := 961 962INSTALLABLE_FILES.$(LOCAL_INSTALLED_MODULE).MODULE := $(my_register_name) 963 964########################################################## 965# Track module-level dependencies. 966# Use $(LOCAL_MODULE) instead of $(my_register_name) to ignore module's bitness. 967ifdef RECORD_ALL_DEPS 968ALL_DEPS.MODULES += $(LOCAL_MODULE) 969ALL_DEPS.$(LOCAL_MODULE).ALL_DEPS := $(sort \ 970 $(ALL_DEPS.$(LOCAL_MODULE).ALL_DEPS) \ 971 $(LOCAL_STATIC_LIBRARIES) \ 972 $(LOCAL_WHOLE_STATIC_LIBRARIES) \ 973 $(LOCAL_SHARED_LIBRARIES) \ 974 $(LOCAL_DYLIB_LIBRARIES) \ 975 $(LOCAL_RLIB_LIBRARIES) \ 976 $(LOCAL_PROC_MACRO_LIBRARIES) \ 977 $(LOCAL_HEADER_LIBRARIES) \ 978 $(LOCAL_STATIC_JAVA_LIBRARIES) \ 979 $(LOCAL_JAVA_LIBRARIES) \ 980 $(LOCAL_JNI_SHARED_LIBRARIES)) 981 982license_files := $(call find-parent-file,$(LOCAL_PATH),MODULE_LICENSE*) 983ALL_DEPS.$(LOCAL_MODULE).LICENSE := $(sort $(ALL_DEPS.$(LOCAL_MODULE).LICENSE) $(license_files)) 984endif 985 986########################################################### 987## Take care of my_module_tags 988########################################################### 989 990# Keep track of all the tags we've seen. 991ALL_MODULE_TAGS := $(sort $(ALL_MODULE_TAGS) $(my_module_tags)) 992 993# Add this module name to the tag list of each specified tag. 994$(foreach tag,$(filter-out optional,$(my_module_tags)),\ 995 $(eval ALL_MODULE_NAME_TAGS.$(tag) := $$(ALL_MODULE_NAME_TAGS.$(tag)) $(my_register_name))) 996 997########################################################### 998## umbrella targets used to verify builds 999########################################################### 1000j_or_n := 1001ifneq (,$(filter EXECUTABLES SHARED_LIBRARIES STATIC_LIBRARIES HEADER_LIBRARIES NATIVE_TESTS RLIB_LIBRARIES DYLIB_LIBRARIES PROC_MACRO_LIBRARIES,$(LOCAL_MODULE_CLASS))) 1002j_or_n := native 1003else 1004ifneq (,$(filter JAVA_LIBRARIES APPS,$(LOCAL_MODULE_CLASS))) 1005j_or_n := java 1006endif 1007endif 1008ifdef LOCAL_IS_HOST_MODULE 1009h_or_t := host 1010ifeq ($(my_host_cross),true) 1011h_or_hc_or_t := host-cross 1012else 1013h_or_hc_or_t := host 1014endif 1015else 1016h_or_hc_or_t := target 1017h_or_t := target 1018endif 1019 1020 1021ifdef j_or_n 1022$(j_or_n) $(h_or_t) $(j_or_n)-$(h_or_hc_or_t) : $(my_checked_module) 1023ifneq (,$(filter $(my_module_tags),tests)) 1024$(j_or_n)-$(h_or_t)-tests $(j_or_n)-tests $(h_or_t)-tests : $(my_checked_module) 1025endif 1026$(LOCAL_MODULE)-$(h_or_hc_or_t) : $(my_all_targets) 1027.PHONY: $(LOCAL_MODULE)-$(h_or_hc_or_t) 1028ifeq ($(j_or_n),native) 1029$(LOCAL_MODULE)-$(h_or_hc_or_t)$(my_32_64_bit_suffix) : $(my_all_targets) 1030.PHONY: $(LOCAL_MODULE)-$(h_or_hc_or_t)$(my_32_64_bit_suffix) 1031endif 1032endif 1033 1034########################################################### 1035# Ensure privileged applications always have LOCAL_PRIVILEGED_MODULE 1036########################################################### 1037ifndef LOCAL_PRIVILEGED_MODULE 1038 ifneq (,$(filter $(TARGET_OUT_APPS_PRIVILEGED)/% $(TARGET_OUT_VENDOR_APPS_PRIVILEGED)/%,$(my_module_path))) 1039 LOCAL_PRIVILEGED_MODULE := true 1040 endif 1041endif 1042 1043########################################################### 1044## NOTICE files 1045########################################################### 1046 1047include $(BUILD_NOTICE_FILE) 1048