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