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