main.mk revision e47e3d302f2fce88710bac8cd6b7ba03947a24a0
1# Only use ANDROID_BUILD_SHELL to wrap around bash. 2# DO NOT use other shells such as zsh. 3ifdef ANDROID_BUILD_SHELL 4SHELL := $(ANDROID_BUILD_SHELL) 5else 6# Use bash, not whatever shell somebody has installed as /bin/sh 7# This is repeated in config.mk, since envsetup.sh runs that file 8# directly. 9SHELL := /bin/bash 10endif 11 12ifndef KATI 13 14host_prebuilts := linux-x86 15ifeq ($(shell uname),Darwin) 16host_prebuilts := darwin-x86 17endif 18 19.PHONY: run_soong_ui 20run_soong_ui: 21 +@prebuilts/build-tools/$(host_prebuilts)/bin/makeparallel --ninja build/soong/soong_ui.bash --make-mode $(MAKECMDGOALS) 22 23.PHONY: $(MAKECMDGOALS) 24$(sort $(MAKECMDGOALS)) : run_soong_ui 25 @#empty 26 27else # KATI 28 29# Absolute path of the present working direcotry. 30# This overrides the shell variable $PWD, which does not necessarily points to 31# the top of the source tree, for example when "make -C" is used in m/mm/mmm. 32PWD := $(shell pwd) 33 34TOP := . 35TOPDIR := 36 37BUILD_SYSTEM := $(TOPDIR)build/make/core 38 39# This is the default target. It must be the first declared target. 40.PHONY: droid 41DEFAULT_GOAL := droid 42$(DEFAULT_GOAL): droid_targets 43 44.PHONY: droid_targets 45droid_targets: 46 47# Set up various standard variables based on configuration 48# and host information. 49include $(BUILD_SYSTEM)/config.mk 50 51ifneq ($(filter $(dont_bother_goals), $(MAKECMDGOALS)),) 52dont_bother := true 53endif 54 55include $(SOONG_MAKEVARS_MK) 56 57include $(BUILD_SYSTEM)/clang/config.mk 58 59# Write the build number to a file so it can be read back in 60# without changing the command line every time. Avoids rebuilds 61# when using ninja. 62$(shell mkdir -p $(OUT_DIR) && \ 63 echo -n $(BUILD_NUMBER) > $(OUT_DIR)/build_number.txt) 64BUILD_NUMBER_FILE := $(OUT_DIR)/build_number.txt 65 66ifeq ($(HOST_OS),darwin) 67DATE_FROM_FILE := date -r $(BUILD_DATETIME_FROM_FILE) 68else 69DATE_FROM_FILE := date -d @$(BUILD_DATETIME_FROM_FILE) 70endif 71 72# Pick a reasonable string to use to identify files. 73ifeq ($(strip $(HAS_BUILD_NUMBER)),false) 74 # BUILD_NUMBER has a timestamp in it, which means that 75 # it will change every time. Pick a stable value. 76 FILE_NAME_TAG := eng.$(USER) 77else 78 FILE_NAME_TAG := $(file <$(BUILD_NUMBER_FILE)) 79endif 80 81# Make an empty directory, which can be used to make empty jars 82EMPTY_DIRECTORY := $(OUT_DIR)/empty 83$(shell mkdir -p $(EMPTY_DIRECTORY) && rm -rf $(EMPTY_DIRECTORY)/*) 84 85# CTS-specific config. 86-include cts/build/config.mk 87# VTS-specific config. 88-include test/vts/tools/vts-tradefed/build/config.mk 89# device-tests-specific-config. 90-include tools/tradefederation/build/suites/device-tests/config.mk 91# general-tests-specific-config. 92-include tools/tradefederation/build/suites/general-tests/config.mk 93# STS-specific config. 94-include test/sts/tools/sts-tradefed/build/config.mk 95 96# Clean rules 97.PHONY: clean-dex-files 98clean-dex-files: 99 $(hide) find $(OUT_DIR) -name "*.dex" | xargs rm -f 100 $(hide) for i in `find $(OUT_DIR) -name "*.jar" -o -name "*.apk"` ; do ((unzip -l $$i 2> /dev/null | \ 101 grep -q "\.dex$$" && rm -f $$i) || continue ) ; done 102 @echo "All dex files and archives containing dex files have been removed." 103 104# Include the google-specific config 105-include vendor/google/build/config.mk 106 107# These are the modifier targets that don't do anything themselves, but 108# change the behavior of the build. 109# (must be defined before including definitions.make) 110INTERNAL_MODIFIER_TARGETS := all 111 112# EMMA_INSTRUMENT_STATIC merges the static jacoco library to each 113# jacoco-enabled module. 114ifeq (true,$(EMMA_INSTRUMENT_STATIC)) 115EMMA_INSTRUMENT := true 116endif 117 118ifeq (true,$(EMMA_INSTRUMENT)) 119# Adding the jacoco library can cause the inclusion of 120# some typically banned classes 121# So if the user didn't specify SKIP_BOOT_JARS_CHECK, enable it here 122ifndef SKIP_BOOT_JARS_CHECK 123SKIP_BOOT_JARS_CHECK := true 124endif 125endif 126 127# 128# ----------------------------------------------------------------- 129# Validate ADDITIONAL_DEFAULT_PROPERTIES. 130ifneq ($(ADDITIONAL_DEFAULT_PROPERTIES),) 131$(error ADDITIONAL_DEFAULT_PROPERTIES must not be set before here: $(ADDITIONAL_DEFAULT_PROPERTIES)) 132endif 133 134# 135# ----------------------------------------------------------------- 136# Validate ADDITIONAL_BUILD_PROPERTIES. 137ifneq ($(ADDITIONAL_BUILD_PROPERTIES),) 138$(error ADDITIONAL_BUILD_PROPERTIES must not be set before here: $(ADDITIONAL_BUILD_PROPERTIES)) 139endif 140 141ADDITIONAL_BUILD_PROPERTIES := 142 143# 144# ----------------------------------------------------------------- 145# Add the product-defined properties to the build properties. 146ifdef PRODUCT_SHIPPING_API_LEVEL 147ADDITIONAL_BUILD_PROPERTIES += \ 148 ro.product.first_api_level=$(PRODUCT_SHIPPING_API_LEVEL) 149endif 150 151ifneq ($(BOARD_PROPERTY_OVERRIDES_SPLIT_ENABLED), true) 152 ADDITIONAL_BUILD_PROPERTIES += $(PRODUCT_PROPERTY_OVERRIDES) 153else 154 ifndef BOARD_VENDORIMAGE_FILE_SYSTEM_TYPE 155 ADDITIONAL_BUILD_PROPERTIES += $(PRODUCT_PROPERTY_OVERRIDES) 156 endif 157endif 158 159 160# Bring in standard build system definitions. 161include $(BUILD_SYSTEM)/definitions.mk 162 163# Bring in dex_preopt.mk 164include $(BUILD_SYSTEM)/dex_preopt.mk 165 166ifneq ($(filter user userdebug eng,$(MAKECMDGOALS)),) 167$(info ***************************************************************) 168$(info ***************************************************************) 169$(info Do not pass '$(filter user userdebug eng,$(MAKECMDGOALS))' on \ 170 the make command line.) 171$(info Set TARGET_BUILD_VARIANT in buildspec.mk, or use lunch or) 172$(info choosecombo.) 173$(info ***************************************************************) 174$(info ***************************************************************) 175$(error stopping) 176endif 177 178ifneq ($(filter-out $(INTERNAL_VALID_VARIANTS),$(TARGET_BUILD_VARIANT)),) 179$(info ***************************************************************) 180$(info ***************************************************************) 181$(info Invalid variant: $(TARGET_BUILD_VARIANT)) 182$(info Valid values are: $(INTERNAL_VALID_VARIANTS)) 183$(info ***************************************************************) 184$(info ***************************************************************) 185$(error stopping) 186endif 187 188# ----------------------------------------------------------------- 189# Variable to check java support level inside PDK build. 190# Not necessary if the components is not in PDK. 191# not defined : not supported 192# "sdk" : sdk API only 193# "platform" : platform API supproted 194TARGET_BUILD_JAVA_SUPPORT_LEVEL := platform 195 196# ----------------------------------------------------------------- 197# The pdk (Platform Development Kit) build 198include build/make/core/pdk_config.mk 199 200# 201# ----------------------------------------------------------------- 202# Enable dynamic linker and hidden API developer warnings for 203# userdebug, eng and non-REL builds 204ifneq ($(TARGET_BUILD_VARIANT),user) 205 ADDITIONAL_BUILD_PROPERTIES += ro.bionic.ld.warning=1 \ 206 ro.art.hiddenapi.warning=1 207else 208# Enable it for user builds as long as they are not final. 209ifneq ($(PLATFORM_VERSION_CODENAME),REL) 210 ADDITIONAL_BUILD_PROPERTIES += ro.bionic.ld.warning=1 \ 211 ro.art.hiddenapi.warning=1 212endif 213endif 214 215ADDITIONAL_BUILD_PROPERTIES += ro.treble.enabled=${PRODUCT_FULL_TREBLE} 216 217$(KATI_obsolete_var PRODUCT_FULL_TREBLE,\ 218 Code should be written to work regardless of a device being Treble or \ 219 variables like PRODUCT_SEPOLICY_SPLIT should be used until that is \ 220 possible.) 221 222# Sets ro.actionable_compatible_property.enabled to know on runtime whether the whitelist 223# of actionable compatible properties is enabled or not. 224ifeq ($(PRODUCT_ACTIONABLE_COMPATIBLE_PROPERTY_DISABLE),true) 225ADDITIONAL_DEFAULT_PROPERTIES += ro.actionable_compatible_property.enabled=false 226else 227ADDITIONAL_DEFAULT_PROPERTIES += ro.actionable_compatible_property.enabled=${PRODUCT_COMPATIBLE_PROPERTY} 228endif 229 230# ----------------------------------------------------------------- 231### 232### In this section we set up the things that are different 233### between the build variants 234### 235 236is_sdk_build := 237 238ifneq ($(filter sdk win_sdk sdk_addon,$(MAKECMDGOALS)),) 239is_sdk_build := true 240endif 241 242# Add build properties for ART. These define system properties used by installd 243# to pass flags to dex2oat. 244ADDITIONAL_BUILD_PROPERTIES += persist.sys.dalvik.vm.lib.2=libart.so 245ADDITIONAL_BUILD_PROPERTIES += dalvik.vm.isa.$(TARGET_ARCH).variant=$(DEX2OAT_TARGET_CPU_VARIANT) 246ifneq ($(DEX2OAT_TARGET_INSTRUCTION_SET_FEATURES),) 247 ADDITIONAL_BUILD_PROPERTIES += dalvik.vm.isa.$(TARGET_ARCH).features=$(DEX2OAT_TARGET_INSTRUCTION_SET_FEATURES) 248endif 249 250ifdef TARGET_2ND_ARCH 251 ADDITIONAL_BUILD_PROPERTIES += dalvik.vm.isa.$(TARGET_2ND_ARCH).variant=$($(TARGET_2ND_ARCH_VAR_PREFIX)DEX2OAT_TARGET_CPU_VARIANT) 252 ifneq ($($(TARGET_2ND_ARCH_VAR_PREFIX)DEX2OAT_TARGET_INSTRUCTION_SET_FEATURES),) 253 ADDITIONAL_BUILD_PROPERTIES += dalvik.vm.isa.$(TARGET_2ND_ARCH).features=$($(TARGET_2ND_ARCH_VAR_PREFIX)DEX2OAT_TARGET_INSTRUCTION_SET_FEATURES) 254 endif 255endif 256 257# Add the system server compiler filter if they are specified for the product. 258ifneq (,$(PRODUCT_SYSTEM_SERVER_COMPILER_FILTER)) 259ADDITIONAL_BUILD_PROPERTIES += dalvik.vm.systemservercompilerfilter=$(PRODUCT_SYSTEM_SERVER_COMPILER_FILTER) 260endif 261 262## user/userdebug ## 263 264user_variant := $(filter user userdebug,$(TARGET_BUILD_VARIANT)) 265enable_target_debugging := true 266tags_to_install := 267ifneq (,$(user_variant)) 268 # Target is secure in user builds. 269 ADDITIONAL_DEFAULT_PROPERTIES += ro.secure=1 270 ADDITIONAL_DEFAULT_PROPERTIES += security.perf_harden=1 271 272 ifeq ($(user_variant),user) 273 ADDITIONAL_DEFAULT_PROPERTIES += ro.adb.secure=1 274 endif 275 276 ifeq ($(user_variant),userdebug) 277 # Pick up some extra useful tools 278 tags_to_install += debug 279 else 280 # Disable debugging in plain user builds. 281 enable_target_debugging := 282 endif 283 284 # Disallow mock locations by default for user builds 285 ADDITIONAL_DEFAULT_PROPERTIES += ro.allow.mock.location=0 286 287else # !user_variant 288 # Turn on checkjni for non-user builds. 289 ADDITIONAL_BUILD_PROPERTIES += ro.kernel.android.checkjni=1 290 # Set device insecure for non-user builds. 291 ADDITIONAL_DEFAULT_PROPERTIES += ro.secure=0 292 # Allow mock locations by default for non user builds 293 ADDITIONAL_DEFAULT_PROPERTIES += ro.allow.mock.location=1 294endif # !user_variant 295 296ifeq (true,$(strip $(enable_target_debugging))) 297 # Target is more debuggable and adbd is on by default 298 ADDITIONAL_DEFAULT_PROPERTIES += ro.debuggable=1 299 # Enable Dalvik lock contention logging. 300 ADDITIONAL_BUILD_PROPERTIES += dalvik.vm.lockprof.threshold=500 301 # Include the debugging/testing OTA keys in this build. 302 INCLUDE_TEST_OTA_KEYS := true 303else # !enable_target_debugging 304 # Target is less debuggable and adbd is off by default 305 ADDITIONAL_DEFAULT_PROPERTIES += ro.debuggable=0 306endif # !enable_target_debugging 307 308## eng ## 309 310ifeq ($(TARGET_BUILD_VARIANT),eng) 311tags_to_install := debug eng 312ifneq ($(filter ro.setupwizard.mode=ENABLED, $(call collapse-pairs, $(ADDITIONAL_BUILD_PROPERTIES))),) 313 # Don't require the setup wizard on eng builds 314 ADDITIONAL_BUILD_PROPERTIES := $(filter-out ro.setupwizard.mode=%,\ 315 $(call collapse-pairs, $(ADDITIONAL_BUILD_PROPERTIES))) \ 316 ro.setupwizard.mode=OPTIONAL 317endif 318ifndef is_sdk_build 319 # To speedup startup of non-preopted builds, don't verify or compile the boot image. 320 ADDITIONAL_BUILD_PROPERTIES += dalvik.vm.image-dex2oat-filter=verify-at-runtime 321endif 322endif 323 324## sdk ## 325 326ifdef is_sdk_build 327 328# Detect if we want to build a repository for the SDK 329sdk_repo_goal := $(strip $(filter sdk_repo,$(MAKECMDGOALS))) 330MAKECMDGOALS := $(strip $(filter-out sdk_repo,$(MAKECMDGOALS))) 331 332ifneq ($(words $(sort $(filter-out $(INTERNAL_MODIFIER_TARGETS) checkbuild emulator_tests target-files-package,$(MAKECMDGOALS)))),1) 333$(error The 'sdk' target may not be specified with any other targets) 334endif 335 336# AUX dependencies are already added by now; remove triggers from the MAKECMDGOALS 337MAKECMDGOALS := $(strip $(filter-out AUX-%,$(MAKECMDGOALS))) 338 339# TODO: this should be eng I think. Since the sdk is built from the eng 340# variant. 341tags_to_install := debug eng 342ADDITIONAL_BUILD_PROPERTIES += xmpp.auto-presence=true 343ADDITIONAL_BUILD_PROPERTIES += ro.config.nocheckin=yes 344else # !sdk 345endif 346 347BUILD_WITHOUT_PV := true 348 349ADDITIONAL_BUILD_PROPERTIES += net.bt.name=Android 350 351# Sets the location that the runtime dumps stack traces to when signalled 352# with SIGQUIT. Stack trace dumping is turned on for all android builds. 353ADDITIONAL_BUILD_PROPERTIES += dalvik.vm.stack-trace-dir=/data/anr 354 355# ------------------------------------------------------------ 356# Define a function that, given a list of module tags, returns 357# non-empty if that module should be installed in /system. 358 359# For most goals, anything not tagged with the "tests" tag should 360# be installed in /system. 361define should-install-to-system 362$(if $(filter tests,$(1)),,true) 363endef 364 365ifdef is_sdk_build 366# For the sdk goal, anything with the "samples" tag should be 367# installed in /data even if that module also has "eng"/"debug"/"user". 368define should-install-to-system 369$(if $(filter samples tests,$(1)),,true) 370endef 371endif 372 373 374# If they only used the modifier goals (all, etc), we'll actually 375# build the default target. 376ifeq ($(filter-out $(INTERNAL_MODIFIER_TARGETS),$(MAKECMDGOALS)),) 377.PHONY: $(INTERNAL_MODIFIER_TARGETS) 378$(INTERNAL_MODIFIER_TARGETS): $(DEFAULT_GOAL) 379endif 380 381# 382# Typical build; include any Android.mk files we can find. 383# 384 385FULL_BUILD := true 386 387# Before we go and include all of the module makefiles, mark the PRODUCT_* 388# and ADDITIONAL*PROPERTIES values readonly so that they won't be modified. 389$(call readonly-product-vars) 390ADDITIONAL_DEFAULT_PROPERTIES := $(strip $(ADDITIONAL_DEFAULT_PROPERTIES)) 391.KATI_READONLY := ADDITIONAL_DEFAULT_PROPERTIES 392ADDITIONAL_BUILD_PROPERTIES := $(strip $(ADDITIONAL_BUILD_PROPERTIES)) 393.KATI_READONLY := ADDITIONAL_BUILD_PROPERTIES 394 395ifneq ($(PRODUCT_ENFORCE_RRO_TARGETS),) 396ENFORCE_RRO_SOURCES := 397endif 398 399ifneq ($(ONE_SHOT_MAKEFILE),) 400# We've probably been invoked by the "mm" shell function 401# with a subdirectory's makefile. 402include $(SOONG_ANDROID_MK) $(wildcard $(ONE_SHOT_MAKEFILE)) 403# Change CUSTOM_MODULES to include only modules that were 404# defined by this makefile; this will install all of those 405# modules as a side-effect. Do this after including ONE_SHOT_MAKEFILE 406# so that the modules will be installed in the same place they 407# would have been with a normal make. 408CUSTOM_MODULES := $(sort $(call get-tagged-modules,$(ALL_MODULE_TAGS))) 409FULL_BUILD := 410# Stub out the notice targets, which probably aren't defined 411# when using ONE_SHOT_MAKEFILE. 412NOTICE-HOST-%: ; 413NOTICE-TARGET-%: ; 414 415# A helper goal printing out install paths 416define register_module_install_path 417.PHONY: GET-MODULE-INSTALL-PATH-$(1) 418GET-MODULE-INSTALL-PATH-$(1): 419 echo 'INSTALL-PATH: $(1) $(ALL_MODULES.$(1).INSTALLED)' 420endef 421 422SORTED_ALL_MODULES := $(sort $(ALL_MODULES)) 423UNIQUE_ALL_MODULES := 424$(foreach m,$(SORTED_ALL_MODULES),\ 425 $(if $(call streq,$(m),$(lastword $(UNIQUE_ALL_MODULES))),,\ 426 $(eval UNIQUE_ALL_MODULES += $(m)))) 427SORTED_ALL_MODULES := 428 429$(foreach mod,$(UNIQUE_ALL_MODULES),$(if $(ALL_MODULES.$(mod).INSTALLED),\ 430 $(eval $(call register_module_install_path,$(mod)))\ 431 $(foreach path,$(ALL_MODULES.$(mod).PATH),\ 432 $(eval my_path_prefix := GET-INSTALL-PATH-IN)\ 433 $(foreach component,$(subst /,$(space),$(path)),\ 434 $(eval my_path_prefix := $$(my_path_prefix)-$$(component))\ 435 $(eval .PHONY: $$(my_path_prefix))\ 436 $(eval $$(my_path_prefix): GET-MODULE-INSTALL-PATH-$(mod)))))) 437UNIQUE_ALL_MODULES := 438 439else # ONE_SHOT_MAKEFILE 440 441ifneq ($(dont_bother),true) 442# 443# Include all of the makefiles in the system 444# 445 446subdir_makefiles := $(SOONG_ANDROID_MK) $(file <$(OUT_DIR)/.module_paths/Android.mk.list) 447subdir_makefiles_total := $(words $(subdir_makefiles)) 448.KATI_READONLY := subdir_makefiles_total 449 450$(foreach mk,$(subdir_makefiles),$(info [$(call inc_and_print,subdir_makefiles_inc)/$(subdir_makefiles_total)] including $(mk) ...)$(eval include $(mk))) 451 452ifdef PDK_FUSION_PLATFORM_ZIP 453# Bring in the PDK platform.zip modules. 454include $(BUILD_SYSTEM)/pdk_fusion_modules.mk 455endif # PDK_FUSION_PLATFORM_ZIP 456 457droid_targets : blueprint_tools 458 459endif # dont_bother 460 461endif # ONE_SHOT_MAKEFILE 462 463# ------------------------------------------------------------------- 464# All module makefiles have been included at this point. 465# ------------------------------------------------------------------- 466 467# ------------------------------------------------------------------- 468# Enforce to generate all RRO packages for modules having resource 469# overlays. 470# ------------------------------------------------------------------- 471ifneq ($(PRODUCT_ENFORCE_RRO_TARGETS),) 472$(call generate_all_enforce_rro_packages) 473endif 474 475# ------------------------------------------------------------------- 476# Fix up CUSTOM_MODULES to refer to installed files rather than 477# just bare module names. Leave unknown modules alone in case 478# they're actually full paths to a particular file. 479known_custom_modules := $(filter $(ALL_MODULES),$(CUSTOM_MODULES)) 480unknown_custom_modules := $(filter-out $(ALL_MODULES),$(CUSTOM_MODULES)) 481CUSTOM_MODULES := \ 482 $(call module-installed-files,$(known_custom_modules)) \ 483 $(unknown_custom_modules) 484 485# ------------------------------------------------------------------- 486# Define dependencies for modules that require other modules. 487# This can only happen now, after we've read in all module makefiles. 488# 489# TODO: deal with the fact that a bare module name isn't 490# unambiguous enough. Maybe declare short targets like 491# APPS:Quake or HOST:SHARED_LIBRARIES:libutils. 492# BUG: the system image won't know to depend on modules that are 493# brought in as requirements of other modules. 494# 495# Resolve the required module name to 32-bit or 64-bit variant. 496# Get a list of corresponding 32-bit module names, if one exists. 497ifneq ($(TARGET_TRANSLATE_2ND_ARCH),true) 498define get-32-bit-modules 499$(sort $(foreach m,$(1),\ 500 $(if $(ALL_MODULES.$(m)$(TARGET_2ND_ARCH_MODULE_SUFFIX).CLASS),\ 501 $(m)$(TARGET_2ND_ARCH_MODULE_SUFFIX))\ 502 $(if $(ALL_MODULES.$(m)$(HOST_2ND_ARCH_MODULE_SUFFIX).CLASS),\ 503 $(m)$(HOST_2ND_ARCH_MODULE_SUFFIX))\ 504 )) 505endef 506# Get a list of corresponding 32-bit module names, if one exists; 507# otherwise return the original module name 508define get-32-bit-modules-if-we-can 509$(sort $(foreach m,$(1),\ 510 $(if $(ALL_MODULES.$(m)$(TARGET_2ND_ARCH_MODULE_SUFFIX).CLASS)$(ALL_MODULES.$(m)$(HOST_2ND_ARCH_MODULE_SUFFIX).CLASS),\ 511 $(if $(ALL_MODULES.$(m)$(TARGET_2ND_ARCH_MODULE_SUFFIX).CLASS),$(m)$(TARGET_2ND_ARCH_MODULE_SUFFIX)) \ 512 $(if $(ALL_MODULES.$(m)$(HOST_2ND_ARCH_MODULE_SUFFIX).CLASS),$(m)$(HOST_2ND_ARCH_MODULE_SUFFIX)),\ 513 $(m)))) 514endef 515else # TARGET_TRANSLATE_2ND_ARCH 516# For binary translation config, by default only install the first arch. 517define get-32-bit-modules 518endef 519 520define get-32-bit-modules-if-we-can 521$(strip $(1)) 522endef 523endif # TARGET_TRANSLATE_2ND_ARCH 524 525# If a module is for a cross host os, the required modules must be for 526# that OS too. 527# If a module is built for 32-bit, the required modules must be 32-bit too; 528# Otherwise if the module is an executable or shared library, 529# the required modules must be 64-bit; 530# otherwise we require both 64-bit and 32-bit variant, if one exists. 531define select-bitness-of-required-modules 532$(foreach m,$(ALL_MODULES),\ 533 $(eval r := $(ALL_MODULES.$(m).REQUIRED))\ 534 $(if $(r),\ 535 $(if $(ALL_MODULES.$(m).FOR_HOST_CROSS),\ 536 $(eval r := $(addprefix host_cross_,$(r))))\ 537 $(if $(ALL_MODULES.$(m).FOR_2ND_ARCH),\ 538 $(eval r_r := $(call get-32-bit-modules-if-we-can,$(r))),\ 539 $(if $(filter EXECUTABLES SHARED_LIBRARIES NATIVE_TESTS,$(ALL_MODULES.$(m).CLASS)),\ 540 $(eval r_r := $(r)),\ 541 $(eval r_r := $(r) $(call get-32-bit-modules,$(r)))\ 542 )\ 543 )\ 544 $(eval ALL_MODULES.$(m).REQUIRED := $(strip $(r_r)))\ 545 )\ 546) 547endef 548$(call select-bitness-of-required-modules) 549r_r := 550 551define add-required-deps 552$(1): | $(2) 553endef 554 555# Use a normal dependency instead of an order-only dependency when installing 556# host dynamic binaries so that the timestamp of the final binary always 557# changes, even if the toc optimization has skipped relinking the binary 558# and its dependant shared libraries. 559define add-required-host-so-deps 560$(1): $(2) 561endef 562 563# Sets up dependencies such that whenever a host module is installed, 564# any other host modules listed in $(ALL_MODULES.$(m).REQUIRED) will also be installed 565define add-all-host-to-host-required-modules-deps 566$(foreach m,$(ALL_MODULES), \ 567 $(eval r := $(ALL_MODULES.$(m).REQUIRED)) \ 568 $(if $(r), \ 569 $(eval r := $(call module-installed-files,$(r))) \ 570 $(eval h_m := $(filter $(HOST_OUT)/%, $(ALL_MODULES.$(m).INSTALLED))) \ 571 $(eval hc_m := $(filter $(HOST_CROSS_OUT)/%, $(ALL_MODULES.$(m).INSTALLED))) \ 572 $(eval h_r := $(filter $(HOST_OUT)/%, $(r))) \ 573 $(eval hc_r := $(filter $(HOST_CROSS_OUT)/%, $(r))) \ 574 $(eval h_m := $(filter-out $(h_r), $(h_m))) \ 575 $(eval hc_m := $(filter-out $(hc_r), $(hc_m))) \ 576 $(if $(h_m), $(eval $(call add-required-deps, $(h_m),$(h_r)))) \ 577 $(if $(hc_m), $(eval $(call add-required-deps, $(hc_m),$(hc_r)))) \ 578 ) \ 579) 580endef 581$(call add-all-host-to-host-required-modules-deps) 582 583# Sets up dependencies such that whenever a target module is installed, 584# any other target modules listed in $(ALL_MODULES.$(m).REQUIRED) will also be installed 585define add-all-target-to-target-required-modules-deps 586$(foreach m,$(ALL_MODULES), \ 587 $(eval r := $(ALL_MODULES.$(m).REQUIRED)) \ 588 $(if $(r), \ 589 $(eval r := $(call module-installed-files,$(r))) \ 590 $(eval t_m := $(filter $(TARGET_OUT_ROOT)/%, $(ALL_MODULES.$(m).INSTALLED))) \ 591 $(eval t_r := $(filter $(TARGET_OUT_ROOT)/%, $(r))) \ 592 $(eval t_m := $(filter-out $(t_r), $(t_m))) \ 593 $(if $(t_m), $(eval $(call add-required-deps, $(t_m),$(t_r)))) \ 594 ) \ 595) 596endef 597$(call add-all-target-to-target-required-modules-deps) 598 599# Sets up dependencies such that whenever a host module is installed, 600# any target modules listed in $(ALL_MODULES.$(m).TARGET_REQUIRED) will also be installed 601define add-all-host-to-target-required-modules-deps 602$(foreach m,$(ALL_MODULES), \ 603 $(eval req_mods := $(ALL_MODULES.$(m).TARGET_REQUIRED))\ 604 $(if $(req_mods), \ 605 $(eval req_files := )\ 606 $(foreach req_mod,$(req_mods), \ 607 $(eval req_file := $(filter $(TARGET_OUT_ROOT)/%, $(call module-installed-files,$(req_mod)))) \ 608 $(if $(strip $(req_file)),\ 609 ,\ 610 $(error $(m).LOCAL_TARGET_REQUIRED_MODULES : illegal value $(req_mod) : not a device module. If you want to specify host modules to be required to be installed along with your host module, add those module names to LOCAL_REQUIRED_MODULES instead)\ 611 )\ 612 $(eval req_files := $(req_files)$(space)$(req_file))\ 613 )\ 614 $(eval req_files := $(strip $(req_files)))\ 615 $(eval mod_files := $(filter $(HOST_OUT)/%, $(call module-installed-files,$(m)))) \ 616 $(eval mod_files := $(filter-out $(req_files),$(mod_files)))\ 617 $(if $(mod_files),\ 618 $(eval $(call add-required-deps, $(mod_files),$(req_files))) \ 619 )\ 620 )\ 621) 622endef 623$(call add-all-host-to-target-required-modules-deps) 624 625# Sets up dependencies such that whenever a target module is installed, 626# any host modules listed in $(ALL_MODULES.$(m).HOST_REQUIRED) will also be installed 627define add-all-target-to-host-required-modules-deps 628$(foreach m,$(ALL_MODULES), \ 629 $(eval req_mods := $(ALL_MODULES.$(m).HOST_REQUIRED))\ 630 $(if $(req_mods), \ 631 $(eval req_files := )\ 632 $(foreach req_mod,$(req_mods), \ 633 $(eval req_file := $(filter $(HOST_OUT)/%, $(call module-installed-files,$(req_mod)))) \ 634 $(if $(strip $(req_file)),\ 635 ,\ 636 $(error $(m).LOCAL_HOST_REQUIRED_MODULES : illegal value $(req_mod) : not a host module. If you want to specify target modules to be required to be installed along with your target module, add those module names to LOCAL_REQUIRED_MODULES instead)\ 637 )\ 638 $(eval req_files := $(req_files)$(space)$(req_file))\ 639 )\ 640 $(eval req_files := $(strip $(req_files)))\ 641 $(eval mod_files := $(filter $(TARGET_OUT_ROOT)/%, $(call module-installed-files,$(m))))\ 642 $(eval mod_files := $(filter-out $(req_files),$(mod_files)))\ 643 $(if $(mod_files),\ 644 $(eval $(call add-required-deps, $(mod_files),$(req_files))) \ 645 )\ 646 )\ 647) 648endef 649$(call add-all-target-to-host-required-modules-deps) 650 651t_m := 652h_m := 653hc_m := 654t_r := 655h_r := 656hc_r := 657 658# Establish the dependencies on the shared libraries. 659# It also adds the shared library module names to ALL_MODULES.$(m).REQUIRED, 660# so they can be expanded to product_MODULES later. 661# $(1): TARGET_ or HOST_ or HOST_CROSS_. 662# $(2): non-empty for 2nd arch. 663# $(3): non-empty for host cross compile. 664define resolve-shared-libs-depes 665$(foreach m,$($(if $(2),$($(1)2ND_ARCH_VAR_PREFIX))$(1)DEPENDENCIES_ON_SHARED_LIBRARIES),\ 666 $(eval p := $(subst :,$(space),$(m)))\ 667 $(eval mod := $(firstword $(p)))\ 668 $(eval deps := $(subst $(comma),$(space),$(lastword $(p))))\ 669 $(eval root := $(1)OUT$(if $(call streq,$(1),TARGET_),_ROOT))\ 670 $(if $(2),$(eval deps := $(addsuffix $($(1)2ND_ARCH_MODULE_SUFFIX),$(deps))))\ 671 $(if $(3),$(eval deps := $(addprefix host_cross_,$(deps))))\ 672 $(eval r := $(filter $($(root))/%,$(call module-installed-files,\ 673 $(deps))))\ 674 $(if $(filter $(1),HOST_),\ 675 $(eval $(call add-required-host-so-deps,$(word 2,$(p)),$(r))),\ 676 $(eval $(call add-required-deps,$(word 2,$(p)),$(r))))\ 677 $(eval ALL_MODULES.$(mod).REQUIRED += $(deps))) 678endef 679 680$(call resolve-shared-libs-depes,TARGET_) 681ifdef TARGET_2ND_ARCH 682$(call resolve-shared-libs-depes,TARGET_,true) 683endif 684$(call resolve-shared-libs-depes,HOST_) 685ifdef HOST_2ND_ARCH 686$(call resolve-shared-libs-depes,HOST_,true) 687endif 688ifdef HOST_CROSS_OS 689$(call resolve-shared-libs-depes,HOST_CROSS_,,true) 690endif 691 692m := 693r := 694p := 695deps := 696add-required-deps := 697 698################################################################################ 699# Link type checking 700# 701# ALL_LINK_TYPES contains a list of all link type prefixes (generally one per 702# module, but APKs can "link" to both java and native code). The link type 703# prefix consists of all the information needed by intermediates-dir-for: 704# 705# LINK_TYPE:TARGET:_:2ND:STATIC_LIBRARIES:libfoo 706# 707# 1: LINK_TYPE literal 708# 2: prefix 709# - TARGET 710# - HOST 711# - HOST_CROSS 712# - AUX-<variant-name> 713# 3: Whether to use the common intermediates directory or not 714# - _ 715# - COMMON 716# 4: Whether it's the second arch or not 717# - _ 718# - 2ND_ 719# 5: Module Class 720# - STATIC_LIBRARIES 721# - SHARED_LIBRARIES 722# - ... 723# 6: Module Name 724# 725# Then fields under that are separated by a period and the field name: 726# - TYPE: the link types for this module 727# - MAKEFILE: Where this module was defined 728# - BUILT: The built module location 729# - DEPS: the link type prefixes for the module's dependencies 730# - ALLOWED: the link types to allow in this module's dependencies 731# - WARN: the link types to warn about in this module's dependencies 732# 733# All of the dependency link types not listed in ALLOWED or WARN will become 734# errors. 735################################################################################ 736 737link_type_error := 738 739define link-type-prefix-base 740$(word 2,$(subst :,$(space),$(1))) 741endef 742define link-type-prefix 743$(if $(filter AUX-%,$(link-type-prefix-base)),$(patsubst AUX-%,AUX,$(link-type-prefix-base)),$(link-type-prefix-base)) 744endef 745define link-type-aux-variant 746$(if $(filter AUX-%,$(link-type-prefix-base)),$(patsubst AUX-%,%,$(link-type-prefix-base))) 747endef 748define link-type-common 749$(patsubst _,,$(word 3,$(subst :,$(space),$(1)))) 750endef 751define link-type-2ndarchprefix 752$(patsubst _,,$(word 4,$(subst :,$(space),$(1)))) 753endef 754define link-type-class 755$(word 5,$(subst :,$(space),$(1))) 756endef 757define link-type-name 758$(word 6,$(subst :,$(space),$(1))) 759endef 760define link-type-os 761$(strip $(eval _p := $(link-type-prefix))\ 762 $(if $(filter HOST HOST_CROSS,$(_p)),\ 763 $($(_p)_OS),\ 764 $(if $(filter AUX,$(_p)),AUX,android))) 765endef 766define link-type-arch 767$($(link-type-prefix)_$(link-type-2ndarchprefix)ARCH) 768endef 769define link-type-name-variant 770$(link-type-name) ($(link-type-class) $(link-type-os)-$(link-type-arch)) 771endef 772 773# $(1): the prefix of the module doing the linking 774# $(2): the prefix of the linked module 775define link-type-warning 776$(shell $(call echo-warning,$($(1).MAKEFILE),"$(call link-type-name,$(1)) ($($(1).TYPE)) should not link against $(call link-type-name,$(2)) ($(3))")) 777endef 778 779# $(1): the prefix of the module doing the linking 780# $(2): the prefix of the linked module 781define link-type-error 782$(shell $(call echo-error,$($(1).MAKEFILE),"$(call link-type-name,$(1)) ($($(1).TYPE)) can not link against $(call link-type-name,$(2)) ($(3))"))\ 783$(eval link_type_error := true) 784endef 785 786link-type-missing := 787ifneq ($(ALLOW_MISSING_DEPENDENCIES),true) 788 # Print an error message if the linked-to module is missing 789 # $(1): the prefix of the module doing the linking 790 # $(2): the prefix of the missing module 791 define link-type-missing 792 $(shell $(call echo-error,$($(1).MAKEFILE),"$(call link-type-name-variant,$(1)) missing $(call link-type-name-variant,$(2))"))\ 793 $(eval available_variants := $(filter %:$(call link-type-name,$(2)),$(ALL_LINK_TYPES)))\ 794 $(if $(available_variants),\ 795 $(info Available variants:)\ 796 $(foreach v,$(available_variants),$(info $(space)$(space)$(call link-type-name-variant,$(v)))))\ 797 $(info You can set ALLOW_MISSING_DEPENDENCIES=true in your environment if this is intentional, but that may defer real problems until later in the build.)\ 798 $(eval link_type_error := true) 799 endef 800else 801 define link-type-missing 802 $(eval $$(1).MISSING := true) 803 endef 804endif 805 806# Verify that $(1) can link against $(2) 807# Both $(1) and $(2) are the link type prefix defined above 808define verify-link-type 809$(foreach t,$($(2).TYPE),\ 810 $(if $(filter-out $($(1).ALLOWED),$(t)),\ 811 $(if $(filter $(t),$($(1).WARN)),\ 812 $(call link-type-warning,$(1),$(2),$(t)),\ 813 $(call link-type-error,$(1),$(2),$(t))))) 814endef 815 816# TODO: Verify all branches/configs have reasonable warnings/errors, and remove 817# this override 818verify-link-type = $(eval $$(1).MISSING := true) 819 820$(foreach lt,$(ALL_LINK_TYPES),\ 821 $(foreach d,$($(lt).DEPS),\ 822 $(if $($(d).TYPE),\ 823 $(call verify-link-type,$(lt),$(d)),\ 824 $(call link-type-missing,$(lt),$(d))))) 825 826ifdef link_type_error 827 $(error exiting from previous errors) 828endif 829 830# The intermediate filename for link type rules 831# 832# APPS are special -- they have up to three different rules: 833# 1. The COMMON rule for Java libraries 834# 2. The jni_link_type rule for embedded native code 835# 3. The 2ND_jni_link_type for the second architecture native code 836define link-type-file 837$(eval _ltf_aux_variant:=$(link-type-aux-variant))\ 838$(if $(_ltf_aux_variant),$(call aux-variant-load-env,$(_ltf_aux_variant)))\ 839$(call intermediates-dir-for,$(link-type-class),$(link-type-name),$(filter AUX HOST HOST_CROSS,$(link-type-prefix)),$(link-type-common),$(link-type-2ndarchprefix),$(filter HOST_CROSS,$(link-type-prefix)))/$(if $(filter APPS,$(link-type-class)),$(if $(link-type-common),,$(link-type-2ndarchprefix)jni_))link_type\ 840$(if $(_ltf_aux_variant),$(call aux-variant-load-env,none))\ 841$(eval _ltf_aux_variant:=) 842endef 843 844# Write out the file-based link_type rules for the ALLOW_MISSING_DEPENDENCIES 845# case. We always need to write the file for mm to work, but only need to 846# check it if we weren't able to check it when reading the Android.mk files. 847define link-type-file-rule 848my_link_type_deps := $(foreach l,$($(1).DEPS),$(call link-type-file,$(l))) 849my_link_type_file := $(call link-type-file,$(1)) 850$($(1).BUILT): | $$(my_link_type_file) 851$$(my_link_type_file): PRIVATE_DEPS := $$(my_link_type_deps) 852ifeq ($($(1).MISSING),true) 853$$(my_link_type_file): $(CHECK_LINK_TYPE) 854endif 855$$(my_link_type_file): $$(my_link_type_deps) 856 @echo Check module type: $$@ 857 $$(hide) mkdir -p $$(dir $$@) && rm -f $$@ 858ifeq ($($(1).MISSING),true) 859 $$(hide) $(CHECK_LINK_TYPE) --makefile $($(1).MAKEFILE) --module $(link-type-name) \ 860 --type "$($(1).TYPE)" $(addprefix --allowed ,$($(1).ALLOWED)) \ 861 $(addprefix --warn ,$($(1).WARN)) $$(PRIVATE_DEPS) 862endif 863 $$(hide) echo "$($(1).TYPE)" >$$@ 864endef 865 866$(foreach lt,$(ALL_LINK_TYPES),\ 867 $(eval $(call link-type-file-rule,$(lt)))) 868 869# ------------------------------------------------------------------- 870# Figure out our module sets. 871# 872# Of the modules defined by the component makefiles, 873# determine what we actually want to build. 874 875########################################################### 876## Expand a module name list with REQUIRED modules 877########################################################### 878# $(1): The variable name that holds the initial module name list. 879# the variable will be modified to hold the expanded results. 880# $(2): The initial module name list. 881# Returns empty string (maybe with some whitespaces). 882define expand-required-modules 883$(eval _erm_new_modules := $(sort $(filter-out $($(1)),\ 884 $(foreach m,$(2),$(ALL_MODULES.$(m).REQUIRED)))))\ 885$(if $(_erm_new_modules),$(eval $(1) += $(_erm_new_modules))\ 886 $(call expand-required-modules,$(1),$(_erm_new_modules))) 887endef 888 889ifdef FULL_BUILD 890 # The base list of modules to build for this product is specified 891 # by the appropriate product definition file, which was included 892 # by product_config.mk. 893 product_MODULES := $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_PACKAGES) 894 # Filter out the overridden packages before doing expansion 895 product_MODULES := $(filter-out $(foreach p, $(product_MODULES), \ 896 $(PACKAGES.$(p).OVERRIDES)), $(product_MODULES)) 897 # Filter out executables as well 898 product_MODULES := $(filter-out $(foreach m, $(product_MODULES), \ 899 $(EXECUTABLES.$(m).OVERRIDES)), $(product_MODULES)) 900 901 # Resolve the :32 :64 module name 902 modules_32 := $(patsubst %:32,%,$(filter %:32, $(product_MODULES))) 903 modules_64 := $(patsubst %:64,%,$(filter %:64, $(product_MODULES))) 904 modules_rest := $(filter-out %:32 %:64,$(product_MODULES)) 905 # Note for 32-bit product, $(modules_32) and $(modules_64) will be 906 # added as their original module names. 907 product_MODULES := $(call get-32-bit-modules-if-we-can, $(modules_32)) 908 product_MODULES += $(modules_64) 909 # For the rest we add both 910 product_MODULES += $(call get-32-bit-modules, $(modules_rest)) 911 product_MODULES += $(modules_rest) 912 913 $(call expand-required-modules,product_MODULES,$(product_MODULES)) 914 915 product_FILES := $(call module-installed-files, $(product_MODULES)) 916 ifeq (0,1) 917 $(info product_FILES for $(TARGET_DEVICE) ($(INTERNAL_PRODUCT)):) 918 $(foreach p,$(product_FILES),$(info : $(p))) 919 $(error done) 920 endif 921else 922 # We're not doing a full build, and are probably only including 923 # a subset of the module makefiles. Don't try to build any modules 924 # requested by the product, because we probably won't have rules 925 # to build them. 926 product_FILES := 927endif 928 929eng_MODULES := $(sort \ 930 $(call get-tagged-modules,eng) \ 931 $(call module-installed-files, $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_PACKAGES_ENG)) \ 932 ) 933debug_MODULES := $(sort \ 934 $(call get-tagged-modules,debug) \ 935 $(call module-installed-files, $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_PACKAGES_DEBUG)) \ 936 ) 937tests_MODULES := $(sort \ 938 $(call get-tagged-modules,tests) \ 939 $(call module-installed-files, $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_PACKAGES_TESTS)) \ 940 ) 941 942# TODO: Remove the 3 places in the tree that use ALL_DEFAULT_INSTALLED_MODULES 943# and get rid of it from this list. 944modules_to_install := $(sort \ 945 $(ALL_DEFAULT_INSTALLED_MODULES) \ 946 $(product_FILES) \ 947 $(foreach tag,$(tags_to_install),$($(tag)_MODULES)) \ 948 $(CUSTOM_MODULES) \ 949 ) 950 951# Some packages may override others using LOCAL_OVERRIDES_PACKAGES. 952# Filter out (do not install) any overridden packages. 953overridden_packages := $(call get-package-overrides,$(modules_to_install)) 954ifdef overridden_packages 955# old_modules_to_install := $(modules_to_install) 956 modules_to_install := \ 957 $(filter-out $(foreach p,$(overridden_packages),$(p) %/$(p).apk %/$(p).odex %/$(p).vdex), \ 958 $(modules_to_install)) 959endif 960#$(error filtered out 961# $(filter-out $(modules_to_install),$(old_modules_to_install))) 962 963# Don't include any GNU General Public License shared objects or static 964# libraries in SDK images. GPL executables (not static/dynamic libraries) 965# are okay if they don't link against any closed source libraries (directly 966# or indirectly) 967 968# It's ok (and necessary) to build the host tools, but nothing that's 969# going to be installed on the target (including static libraries). 970 971ifdef is_sdk_build 972 target_gnu_MODULES := \ 973 $(filter \ 974 $(TARGET_OUT_INTERMEDIATES)/% \ 975 $(TARGET_OUT)/% \ 976 $(TARGET_OUT_DATA)/%, \ 977 $(sort $(call get-tagged-modules,gnu))) 978 target_gnu_MODULES := $(filter-out $(TARGET_OUT_EXECUTABLES)/%,$(target_gnu_MODULES)) 979 target_gnu_MODULES := $(filter-out %/libopenjdkjvmti.so,$(target_gnu_MODULES)) 980 target_gnu_MODULES := $(filter-out %/libopenjdkjvmtid.so,$(target_gnu_MODULES)) 981 $(info Removing from sdk:)$(foreach d,$(target_gnu_MODULES),$(info : $(d))) 982 modules_to_install := \ 983 $(filter-out $(target_gnu_MODULES),$(modules_to_install)) 984 985 # Ensure every module listed in PRODUCT_PACKAGES* gets something installed 986 # TODO: Should we do this for all builds and not just the sdk? 987 dangling_modules := 988 $(foreach m, $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_PACKAGES), \ 989 $(if $(strip $(ALL_MODULES.$(m).INSTALLED) $(ALL_MODULES.$(m)$(TARGET_2ND_ARCH_MODULE_SUFFIX).INSTALLED)),,\ 990 $(eval dangling_modules += $(m)))) 991 ifneq ($(dangling_modules),) 992 $(warning: Modules '$(dangling_modules)' in PRODUCT_PACKAGES have nothing to install!) 993 endif 994 $(foreach m, $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_PACKAGES_DEBUG), \ 995 $(if $(strip $(ALL_MODULES.$(m).INSTALLED)),,\ 996 $(warning $(ALL_MODULES.$(m).MAKEFILE): Module '$(m)' in PRODUCT_PACKAGES_DEBUG has nothing to install!))) 997 $(foreach m, $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_PACKAGES_ENG), \ 998 $(if $(strip $(ALL_MODULES.$(m).INSTALLED)),,\ 999 $(warning $(ALL_MODULES.$(m).MAKEFILE): Module '$(m)' in PRODUCT_PACKAGES_ENG has nothing to install!))) 1000 $(foreach m, $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_PACKAGES_TESTS), \ 1001 $(if $(strip $(ALL_MODULES.$(m).INSTALLED)),,\ 1002 $(warning $(ALL_MODULES.$(m).MAKEFILE): Module '$(m)' in PRODUCT_PACKAGES_TESTS has nothing to install!))) 1003endif 1004 1005# build/make/core/Makefile contains extra stuff that we don't want to pollute this 1006# top-level makefile with. It expects that ALL_DEFAULT_INSTALLED_MODULES 1007# contains everything that's built during the current make, but it also further 1008# extends ALL_DEFAULT_INSTALLED_MODULES. 1009ALL_DEFAULT_INSTALLED_MODULES := $(modules_to_install) 1010include $(BUILD_SYSTEM)/Makefile 1011modules_to_install := $(sort $(ALL_DEFAULT_INSTALLED_MODULES)) 1012ALL_DEFAULT_INSTALLED_MODULES := 1013 1014 1015# These are additional goals that we build, in order to make sure that there 1016# is as little code as possible in the tree that doesn't build. 1017modules_to_check := $(foreach m,$(ALL_MODULES),$(ALL_MODULES.$(m).CHECKED)) 1018 1019# If you would like to build all goals, and not skip any intermediate 1020# steps, you can pass the "all" modifier goal on the commandline. 1021ifneq ($(filter all,$(MAKECMDGOALS)),) 1022modules_to_check += $(foreach m,$(ALL_MODULES),$(ALL_MODULES.$(m).BUILT)) 1023endif 1024 1025# for easier debugging 1026modules_to_check := $(sort $(modules_to_check)) 1027#$(error modules_to_check $(modules_to_check)) 1028 1029# ------------------------------------------------------------------- 1030# This is used to to get the ordering right, you can also use these, 1031# but they're considered undocumented, so don't complain if their 1032# behavior changes. 1033# An internal target that depends on all copied headers 1034# (see copy_headers.make). Other targets that need the 1035# headers to be copied first can depend on this target. 1036.PHONY: all_copied_headers 1037all_copied_headers: ; 1038 1039$(ALL_C_CPP_ETC_OBJECTS): | all_copied_headers 1040 1041# All the droid stuff, in directories 1042.PHONY: files 1043files: $(modules_to_install) \ 1044 $(INSTALLED_ANDROID_INFO_TXT_TARGET) 1045 1046# ------------------------------------------------------------------- 1047 1048.PHONY: checkbuild 1049checkbuild: $(modules_to_check) droid_targets 1050 1051ifeq (true,$(ANDROID_BUILD_EVERYTHING_BY_DEFAULT)) 1052droid: checkbuild 1053endif 1054 1055.PHONY: ramdisk 1056ramdisk: $(INSTALLED_RAMDISK_TARGET) 1057 1058.PHONY: systemtarball 1059systemtarball: $(INSTALLED_SYSTEMTARBALL_TARGET) 1060 1061.PHONY: boottarball 1062boottarball: $(INSTALLED_BOOTTARBALL_TARGET) 1063 1064.PHONY: userdataimage 1065userdataimage: $(INSTALLED_USERDATAIMAGE_TARGET) 1066 1067ifneq (,$(filter userdataimage, $(MAKECMDGOALS))) 1068$(call dist-for-goals, userdataimage, $(BUILT_USERDATAIMAGE_TARGET)) 1069endif 1070 1071.PHONY: userdatatarball 1072userdatatarball: $(INSTALLED_USERDATATARBALL_TARGET) 1073 1074.PHONY: cacheimage 1075cacheimage: $(INSTALLED_CACHEIMAGE_TARGET) 1076 1077.PHONY: bptimage 1078bptimage: $(INSTALLED_BPTIMAGE_TARGET) 1079 1080.PHONY: vendorimage 1081vendorimage: $(INSTALLED_VENDORIMAGE_TARGET) 1082 1083.PHONY: productimage 1084productimage: $(INSTALLED_PRODUCTIMAGE_TARGET) 1085 1086.PHONY: systemotherimage 1087systemotherimage: $(INSTALLED_SYSTEMOTHERIMAGE_TARGET) 1088 1089.PHONY: bootimage 1090bootimage: $(INSTALLED_BOOTIMAGE_TARGET) 1091 1092.PHONY: vbmetaimage 1093vbmetaimage: $(INSTALLED_VBMETAIMAGE_TARGET) 1094 1095.PHONY: auxiliary 1096auxiliary: $(INSTALLED_AUX_TARGETS) 1097 1098# Build files and then package it into the rom formats 1099.PHONY: droidcore 1100droidcore: files \ 1101 systemimage \ 1102 $(INSTALLED_BOOTIMAGE_TARGET) \ 1103 $(INSTALLED_RECOVERYIMAGE_TARGET) \ 1104 $(INSTALLED_VBMETAIMAGE_TARGET) \ 1105 $(INSTALLED_USERDATAIMAGE_TARGET) \ 1106 $(INSTALLED_CACHEIMAGE_TARGET) \ 1107 $(INSTALLED_BPTIMAGE_TARGET) \ 1108 $(INSTALLED_VENDORIMAGE_TARGET) \ 1109 $(INSTALLED_PRODUCTIMAGE_TARGET) \ 1110 $(INSTALLED_SYSTEMOTHERIMAGE_TARGET) \ 1111 $(INSTALLED_FILES_FILE) \ 1112 $(INSTALLED_FILES_FILE_VENDOR) \ 1113 $(INSTALLED_FILES_FILE_PRODUCT) \ 1114 $(INSTALLED_FILES_FILE_SYSTEMOTHER) \ 1115 soong_docs 1116 1117# dist_files only for putting your library into the dist directory with a full build. 1118.PHONY: dist_files 1119 1120ifneq ($(TARGET_BUILD_APPS),) 1121 # If this build is just for apps, only build apps and not the full system by default. 1122 1123 unbundled_build_modules := 1124 ifneq ($(filter all,$(TARGET_BUILD_APPS)),) 1125 # If they used the magic goal "all" then build all apps in the source tree. 1126 unbundled_build_modules := $(foreach m,$(sort $(ALL_MODULES)),$(if $(filter APPS,$(ALL_MODULES.$(m).CLASS)),$(m))) 1127 else 1128 unbundled_build_modules := $(TARGET_BUILD_APPS) 1129 endif 1130 1131 # Dist the installed files if they exist. 1132 apps_only_installed_files := $(foreach m,$(unbundled_build_modules),$(ALL_MODULES.$(m).INSTALLED)) 1133 $(call dist-for-goals,apps_only, $(apps_only_installed_files)) 1134 # For uninstallable modules such as static Java library, we have to dist the built file, 1135 # as <module_name>.<suffix> 1136 apps_only_dist_built_files := $(foreach m,$(unbundled_build_modules),$(if $(ALL_MODULES.$(m).INSTALLED),,\ 1137 $(if $(ALL_MODULES.$(m).BUILT),$(ALL_MODULES.$(m).BUILT):$(m)$(suffix $(ALL_MODULES.$(m).BUILT)))\ 1138 $(if $(ALL_MODULES.$(m).AAR),$(ALL_MODULES.$(m).AAR):$(m).aar)\ 1139 )) 1140 $(call dist-for-goals,apps_only, $(apps_only_dist_built_files)) 1141 1142 ifeq ($(EMMA_INSTRUMENT),true) 1143 $(JACOCO_REPORT_CLASSES_ALL) : $(apps_only_installed_files) 1144 $(call dist-for-goals,apps_only, $(JACOCO_REPORT_CLASSES_ALL)) 1145 endif 1146 1147 $(PROGUARD_DICT_ZIP) : $(apps_only_installed_files) 1148 $(call dist-for-goals,apps_only, $(PROGUARD_DICT_ZIP)) 1149 1150 $(SYMBOLS_ZIP) : $(apps_only_installed_files) 1151 $(call dist-for-goals,apps_only, $(SYMBOLS_ZIP)) 1152 1153 $(COVERAGE_ZIP) : $(apps_only_installed_files) 1154 $(call dist-for-goals,apps_only, $(COVERAGE_ZIP)) 1155 1156.PHONY: apps_only 1157apps_only: $(unbundled_build_modules) 1158 1159droid_targets: apps_only 1160 1161# Combine the NOTICE files for a apps_only build 1162$(eval $(call combine-notice-files, html, \ 1163 $(target_notice_file_txt), \ 1164 $(target_notice_file_html_or_xml), \ 1165 "Notices for files for apps:", \ 1166 $(TARGET_OUT_NOTICE_FILES), \ 1167 $(apps_only_installed_files))) 1168 1169 1170else # TARGET_BUILD_APPS 1171 $(call dist-for-goals, droidcore, \ 1172 $(INTERNAL_UPDATE_PACKAGE_TARGET) \ 1173 $(INTERNAL_OTA_PACKAGE_TARGET) \ 1174 $(BUILT_OTATOOLS_PACKAGE) \ 1175 $(SYMBOLS_ZIP) \ 1176 $(COVERAGE_ZIP) \ 1177 $(INSTALLED_FILES_FILE) \ 1178 $(INSTALLED_FILES_FILE_VENDOR) \ 1179 $(INSTALLED_FILES_FILE_PRODUCT) \ 1180 $(INSTALLED_FILES_FILE_SYSTEMOTHER) \ 1181 $(INSTALLED_BUILD_PROP_TARGET) \ 1182 $(BUILT_TARGET_FILES_PACKAGE) \ 1183 $(INSTALLED_ANDROID_INFO_TXT_TARGET) \ 1184 $(INSTALLED_RAMDISK_TARGET) \ 1185 ) 1186 1187 # Put a copy of the radio/bootloader files in the dist dir. 1188 $(foreach f,$(INSTALLED_RADIOIMAGE_TARGET), \ 1189 $(call dist-for-goals, droidcore, $(f))) 1190 1191 ifneq ($(ANDROID_BUILD_EMBEDDED),true) 1192 ifneq ($(TARGET_BUILD_PDK),true) 1193 $(call dist-for-goals, droidcore, \ 1194 $(APPS_ZIP) \ 1195 $(INTERNAL_EMULATOR_PACKAGE_TARGET) \ 1196 $(PACKAGE_STATS_FILE) \ 1197 ) 1198 endif 1199 endif 1200 1201 ifeq ($(EMMA_INSTRUMENT),true) 1202 $(JACOCO_REPORT_CLASSES_ALL) : $(INSTALLED_SYSTEMIMAGE) 1203 $(call dist-for-goals, dist_files, $(JACOCO_REPORT_CLASSES_ALL)) 1204 endif 1205 1206# Building a full system-- the default is to build droidcore 1207droid_targets: droidcore dist_files 1208 1209endif # TARGET_BUILD_APPS 1210 1211.PHONY: docs 1212docs: $(ALL_DOCS) 1213 1214.PHONY: sdk 1215ALL_SDK_TARGETS := $(INTERNAL_SDK_TARGET) 1216sdk: $(ALL_SDK_TARGETS) 1217$(call dist-for-goals,sdk win_sdk, \ 1218 $(ALL_SDK_TARGETS) \ 1219 $(SYMBOLS_ZIP) \ 1220 $(COVERAGE_ZIP) \ 1221 $(INSTALLED_BUILD_PROP_TARGET) \ 1222) 1223 1224# umbrella targets to assit engineers in verifying builds 1225.PHONY: java native target host java-host java-target native-host native-target \ 1226 java-host-tests java-target-tests native-host-tests native-target-tests \ 1227 java-tests native-tests host-tests target-tests tests java-dex 1228# some synonyms 1229.PHONY: host-java target-java host-native target-native \ 1230 target-java-tests target-native-tests 1231host-java : java-host 1232target-java : java-target 1233host-native : native-host 1234target-native : native-target 1235target-java-tests : java-target-tests 1236target-native-tests : native-target-tests 1237tests : host-tests target-tests 1238 1239# Phony target to run all java compilations that use javac 1240.PHONY: javac-check 1241 1242ifneq (,$(filter samplecode, $(MAKECMDGOALS))) 1243.PHONY: samplecode 1244sample_MODULES := $(sort $(call get-tagged-modules,samples)) 1245sample_APKS_DEST_PATH := $(TARGET_COMMON_OUT_ROOT)/samples 1246sample_APKS_COLLECTION := \ 1247 $(foreach module,$(sample_MODULES),$(sample_APKS_DEST_PATH)/$(notdir $(module))) 1248$(foreach module,$(sample_MODULES),$(eval $(call \ 1249 copy-one-file,$(module),$(sample_APKS_DEST_PATH)/$(notdir $(module))))) 1250sample_ADDITIONAL_INSTALLED := \ 1251 $(filter-out $(modules_to_install) $(modules_to_check),$(sample_MODULES)) 1252samplecode: $(sample_APKS_COLLECTION) 1253 @echo "Collect sample code apks: $^" 1254 # remove apks that are not intended to be installed. 1255 rm -f $(sample_ADDITIONAL_INSTALLED) 1256endif # samplecode in $(MAKECMDGOALS) 1257 1258.PHONY: findbugs 1259findbugs: $(INTERNAL_FINDBUGS_HTML_TARGET) $(INTERNAL_FINDBUGS_XML_TARGET) 1260 1261.PHONY: findlsdumps 1262findlsdumps: $(FIND_LSDUMPS_FILE) 1263 1264#xxx scrape this from ALL_MODULE_NAME_TAGS 1265.PHONY: modules 1266modules: 1267 @echo "Available sub-modules:" 1268 @echo "$(call module-names-for-tag-list,$(ALL_MODULE_TAGS))" | \ 1269 tr -s ' ' '\n' | sort -u | $(COLUMN) 1270 1271.PHONY: nothing 1272nothing: 1273 @echo Successfully read the makefiles. 1274 1275.PHONY: tidy_only 1276tidy_only: 1277 @echo Successfully make tidy_only. 1278 1279ndk: $(SOONG_OUT_DIR)/ndk.timestamp 1280.PHONY: ndk 1281 1282endif # KATI 1283