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 # this turns off the suffix rules built into make
     13 .SUFFIXES:
     14 
     15 # this turns off the RCS / SCCS implicit rules of GNU Make
     16 % : RCS/%,v
     17 % : RCS/%
     18 % : %,v
     19 % : s.%
     20 % : SCCS/s.%
     21 
     22 # If a rule fails, delete $@.
     23 .DELETE_ON_ERROR:
     24 
     25 # Figure out where we are.
     26 #TOP := $(dir $(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)))
     27 #TOP := $(patsubst %/,%,$(TOP))
     28 
     29 # TOPDIR is the normal variable you should use, because
     30 # if we are executing relative to the current directory
     31 # it can be "", whereas TOP must be "." which causes
     32 # pattern matching probles when make strips off the
     33 # trailing "./" from paths in various places.
     34 #ifeq ($(TOP),.)
     35 #TOPDIR :=
     36 #else
     37 #TOPDIR := $(TOP)/
     38 #endif
     39 
     40 # Check for broken versions of make.
     41 # (Allow any version under Cygwin since we don't actually build the platform there.)
     42 ifeq (,$(findstring CYGWIN,$(shell uname -sm)))
     43 ifneq (1,$(strip $(shell expr $(MAKE_VERSION) \>= 3.81)))
     44 $(warning ********************************************************************************)
     45 $(warning *  You are using version $(MAKE_VERSION) of make.)
     46 $(warning *  Android can only be built by versions 3.81 and higher.)
     47 $(warning *  see https://source.android.com/source/download.html)
     48 $(warning ********************************************************************************)
     49 $(error stopping)
     50 endif
     51 endif
     52 
     53 # Absolute path of the present working direcotry.
     54 # This overrides the shell variable $PWD, which does not necessarily points to
     55 # the top of the source tree, for example when "make -C" is used in m/mm/mmm.
     56 PWD := $(shell pwd)
     57 
     58 TOP := .
     59 TOPDIR :=
     60 
     61 BUILD_SYSTEM := $(TOPDIR)build/core
     62 
     63 # This is the default target.  It must be the first declared target.
     64 .PHONY: droid
     65 DEFAULT_GOAL := droid
     66 $(DEFAULT_GOAL):
     67 
     68 # Used to force goals to build.  Only use for conditionally defined goals.
     69 .PHONY: FORCE
     70 FORCE:
     71 
     72 # These goals don't need to collect and include Android.mks/CleanSpec.mks
     73 # in the source tree.
     74 dont_bother_goals := clean clobber dataclean installclean \
     75     help out \
     76     snod systemimage-nodeps \
     77     stnod systemtarball-nodeps \
     78     userdataimage-nodeps userdatatarball-nodeps \
     79     cacheimage-nodeps \
     80     vendorimage-nodeps \
     81     ramdisk-nodeps \
     82     bootimage-nodeps
     83 
     84 ifneq ($(filter $(dont_bother_goals), $(MAKECMDGOALS)),)
     85 dont_bother := true
     86 endif
     87 
     88 # Targets that provide quick help on the build system.
     89 include $(BUILD_SYSTEM)/help.mk
     90 
     91 # Set up various standard variables based on configuration
     92 # and host information.
     93 include $(BUILD_SYSTEM)/config.mk
     94 
     95 # This allows us to force a clean build - included after the config.mk
     96 # environment setup is done, but before we generate any dependencies.  This
     97 # file does the rm -rf inline so the deps which are all done below will
     98 # be generated correctly
     99 include $(BUILD_SYSTEM)/cleanbuild.mk
    100 
    101 # Include the google-specific config
    102 -include vendor/google/build/config.mk
    103 
    104 VERSION_CHECK_SEQUENCE_NUMBER := 5
    105 -include $(OUT_DIR)/versions_checked.mk
    106 ifneq ($(VERSION_CHECK_SEQUENCE_NUMBER),$(VERSIONS_CHECKED))
    107 
    108 $(info Checking build tools versions...)
    109 
    110 ifneq ($(HOST_OS),windows)
    111 # check for a case sensitive file system
    112 ifneq (a,$(shell mkdir -p $(OUT_DIR) ; \
    113                 echo a > $(OUT_DIR)/casecheck.txt; \
    114                     echo B > $(OUT_DIR)/CaseCheck.txt; \
    115                 cat $(OUT_DIR)/casecheck.txt))
    116 $(warning ************************************************************)
    117 $(warning You are building on a case-insensitive filesystem.)
    118 $(warning Please move your source tree to a case-sensitive filesystem.)
    119 $(warning ************************************************************)
    120 $(error Case-insensitive filesystems not supported)
    121 endif
    122 endif
    123 
    124 # Make sure that there are no spaces in the absolute path; the
    125 # build system can't deal with them.
    126 ifneq ($(words $(shell pwd)),1)
    127 $(warning ************************************************************)
    128 $(warning You are building in a directory whose absolute path contains)
    129 $(warning a space character:)
    130 $(warning $(space))
    131 $(warning "$(shell pwd)")
    132 $(warning $(space))
    133 $(warning Please move your source tree to a path that does not contain)
    134 $(warning any spaces.)
    135 $(warning ************************************************************)
    136 $(error Directory names containing spaces not supported)
    137 endif
    138 
    139 java_version_str := $(shell unset _JAVA_OPTIONS && java -version 2>&1)
    140 javac_version_str := $(shell unset _JAVA_OPTIONS && javac -version 2>&1)
    141 
    142 # Check for the correct version of java, should be 1.7 by
    143 # default, and 1.6 if LEGACY_USE_JAVA6 is set.
    144 ifeq ($(LEGACY_USE_JAVA6),)
    145 required_version := "1.7.x"
    146 required_javac_version := "1.7"
    147 java_version := $(shell echo '$(java_version_str)' | grep '^java .*[ "]1\.7[\. "$$]')
    148 javac_version := $(shell echo '$(javac_version_str)' | grep '[ "]1\.7[\. "$$]')
    149 else # if LEGACY_USE_JAVA6
    150 required_version := "1.6.x"
    151 required_javac_version := "1.6"
    152 java_version := $(shell echo '$(java_version_str)' | grep '^java .*[ "]1\.6[\. "$$]')
    153 javac_version := $(shell echo '$(javac_version_str)' | grep '[ "]1\.6[\. "$$]')
    154 endif # if LEGACY_USE_JAVA6
    155 
    156 ifeq ($(strip $(java_version)),)
    157 $(info ************************************************************)
    158 $(info You are attempting to build with the incorrect version)
    159 $(info of java.)
    160 $(info $(space))
    161 $(info Your version is: $(java_version_str).)
    162 $(info The required version is: $(required_version))
    163 $(info $(space))
    164 $(info Please follow the machine setup instructions at)
    165 $(info $(space)$(space)$(space)$(space)https://source.android.com/source/initializing.html)
    166 $(info ************************************************************)
    167 $(error stop)
    168 endif
    169 
    170 # Check for the current JDK.
    171 #
    172 # For Java 1.7, we require OpenJDK on linux and Oracle JDK on Mac OS.
    173 # For Java 1.6, we require Oracle for all host OSes.
    174 requires_openjdk := false
    175 ifeq ($(LEGACY_USE_JAVA6),)
    176 ifeq ($(HOST_OS), linux)
    177 requires_openjdk := true
    178 endif
    179 endif
    180 
    181 
    182 # Check for the current jdk
    183 ifeq ($(requires_openjdk), true)
    184 # The user asked for java7 openjdk, so check that the host
    185 # java version is really openjdk
    186 ifeq ($(shell echo '$(java_version_str)' | grep -i openjdk),)
    187 $(info ************************************************************)
    188 $(info You asked for an OpenJDK 7 build but your version is)
    189 $(info $(java_version_str).)
    190 $(info ************************************************************)
    191 $(error stop)
    192 endif # java version is not OpenJdk
    193 else # if requires_openjdk
    194 ifneq ($(shell echo '$(java_version_str)' | grep -i openjdk),)
    195 $(info ************************************************************)
    196 $(info You are attempting to build with an unsupported JDK.)
    197 $(info $(space))
    198 $(info You use OpenJDK but only Sun/Oracle JDK is supported.)
    199 $(info Please follow the machine setup instructions at)
    200 $(info $(space)$(space)$(space)$(space)https://source.android.com/source/download.html)
    201 $(info ************************************************************)
    202 $(error stop)
    203 endif # java version is not Sun Oracle JDK
    204 endif # if requires_openjdk
    205 
    206 # Check for the correct version of javac
    207 ifeq ($(strip $(javac_version)),)
    208 $(info ************************************************************)
    209 $(info You are attempting to build with the incorrect version)
    210 $(info of javac.)
    211 $(info $(space))
    212 $(info Your version is: $(javac_version_str).)
    213 $(info The required version is: $(required_javac_version))
    214 $(info $(space))
    215 $(info Please follow the machine setup instructions at)
    216 $(info $(space)$(space)$(space)$(space)https://source.android.com/source/download.html)
    217 $(info ************************************************************)
    218 $(error stop)
    219 endif
    220 
    221 
    222 ifndef BUILD_EMULATOR
    223   # Emulator binaries are now provided under prebuilts/android-emulator/
    224   BUILD_EMULATOR := false
    225 endif
    226 
    227 $(shell echo 'VERSIONS_CHECKED := $(VERSION_CHECK_SEQUENCE_NUMBER)' \
    228         > $(OUT_DIR)/versions_checked.mk)
    229 $(shell echo 'BUILD_EMULATOR ?= $(BUILD_EMULATOR)' \
    230         >> $(OUT_DIR)/versions_checked.mk)
    231 endif
    232 
    233 # These are the modifier targets that don't do anything themselves, but
    234 # change the behavior of the build.
    235 # (must be defined before including definitions.make)
    236 INTERNAL_MODIFIER_TARGETS := showcommands all incrementaljavac
    237 
    238 .PHONY: incrementaljavac
    239 incrementaljavac: ;
    240 
    241 # WARNING:
    242 # ENABLE_INCREMENTALJAVAC should NOT be enabled by default, because change of
    243 # a Java source file won't trigger rebuild of its dependent Java files.
    244 # You can only enable it by adding "incrementaljavac" to your make command line.
    245 # You are responsible for the correctness of the incremental build.
    246 # This may decrease incremental build time dramatically for large Java libraries,
    247 # such as core.jar, framework.jar, etc.
    248 ENABLE_INCREMENTALJAVAC :=
    249 ifneq (,$(filter incrementaljavac, $(MAKECMDGOALS)))
    250 ENABLE_INCREMENTALJAVAC := true
    251 MAKECMDGOALS := $(filter-out incrementaljavac, $(MAKECMDGOALS))
    252 endif
    253 
    254 # EMMA_INSTRUMENT_STATIC merges the static emma library to each emma-enabled module.
    255 ifeq (true,$(EMMA_INSTRUMENT_STATIC))
    256 EMMA_INSTRUMENT := true
    257 endif
    258 
    259 # Bring in standard build system definitions.
    260 include $(BUILD_SYSTEM)/definitions.mk
    261 
    262 # Bring in dex_preopt.mk
    263 include $(BUILD_SYSTEM)/dex_preopt.mk
    264 
    265 ifneq ($(filter user userdebug eng,$(MAKECMDGOALS)),)
    266 $(info ***************************************************************)
    267 $(info ***************************************************************)
    268 $(info Do not pass '$(filter user userdebug eng,$(MAKECMDGOALS))' on \
    269        the make command line.)
    270 $(info Set TARGET_BUILD_VARIANT in buildspec.mk, or use lunch or)
    271 $(info choosecombo.)
    272 $(info ***************************************************************)
    273 $(info ***************************************************************)
    274 $(error stopping)
    275 endif
    276 
    277 ifneq ($(filter-out $(INTERNAL_VALID_VARIANTS),$(TARGET_BUILD_VARIANT)),)
    278 $(info ***************************************************************)
    279 $(info ***************************************************************)
    280 $(info Invalid variant: $(TARGET_BUILD_VARIANT)
    281 $(info Valid values are: $(INTERNAL_VALID_VARIANTS)
    282 $(info ***************************************************************)
    283 $(info ***************************************************************)
    284 $(error stopping)
    285 endif
    286 
    287 # -----------------------------------------------------------------
    288 # Variable to check java support level inside PDK build.
    289 # Not necessary if the components is not in PDK.
    290 # not defined : not supported
    291 # "sdk" : sdk API only
    292 # "platform" : platform API supproted
    293 TARGET_BUILD_JAVA_SUPPORT_LEVEL := platform
    294 
    295 # -----------------------------------------------------------------
    296 # The pdk (Platform Development Kit) build
    297 include build/core/pdk_config.mk
    298 
    299 # -----------------------------------------------------------------
    300 ###
    301 ### In this section we set up the things that are different
    302 ### between the build variants
    303 ###
    304 
    305 is_sdk_build :=
    306 
    307 ifneq ($(filter sdk win_sdk sdk_addon,$(MAKECMDGOALS)),)
    308 is_sdk_build := true
    309 endif
    310 
    311 ADDITIONAL_BUILD_PROPERTIES += dalvik.vm.isa.$(TARGET_ARCH).features=$(DEX2OAT_TARGET_INSTRUCTION_SET_FEATURES)
    312 ifdef TARGET_2ND_ARCH
    313 ADDITIONAL_BUILD_PROPERTIES += dalvik.vm.isa.$(TARGET_2ND_ARCH).features=$($(TARGET_2ND_ARCH_VAR_PREFIX)DEX2OAT_TARGET_INSTRUCTION_SET_FEATURES)
    314 endif
    315 
    316 ## user/userdebug ##
    317 
    318 user_variant := $(filter user userdebug,$(TARGET_BUILD_VARIANT))
    319 enable_target_debugging := true
    320 tags_to_install :=
    321 ifneq (,$(user_variant))
    322   # Target is secure in user builds.
    323   ADDITIONAL_DEFAULT_PROPERTIES += ro.secure=1
    324 
    325   ifeq ($(user_variant),userdebug)
    326     # Pick up some extra useful tools
    327     tags_to_install += debug
    328 
    329     # Enable Dalvik lock contention logging for userdebug builds.
    330     ADDITIONAL_BUILD_PROPERTIES += dalvik.vm.lockprof.threshold=500
    331   else
    332     # Disable debugging in plain user builds.
    333     enable_target_debugging :=
    334   endif
    335 
    336   # Turn on Dalvik preoptimization for libdvm.so user builds, but only if not
    337   # explicitly disabled and the build is running on Linux (since host
    338   # Dalvik isn't built for non-Linux hosts).
    339   ifeq (,$(WITH_DEXPREOPT))
    340     ifeq ($(DALVIK_VM_LIB),libdvm.so)
    341       ifeq ($(user_variant),user)
    342         ifeq ($(HOST_OS),linux)
    343           WITH_DEXPREOPT := true
    344         endif
    345       endif
    346     endif
    347   endif
    348 
    349   # Disallow mock locations by default for user builds
    350   ADDITIONAL_DEFAULT_PROPERTIES += ro.allow.mock.location=0
    351 
    352 else # !user_variant
    353   # Turn on checkjni for non-user builds.
    354   ADDITIONAL_BUILD_PROPERTIES += ro.kernel.android.checkjni=1
    355   # Set device insecure for non-user builds.
    356   ADDITIONAL_DEFAULT_PROPERTIES += ro.secure=0
    357   # Allow mock locations by default for non user builds
    358   ADDITIONAL_DEFAULT_PROPERTIES += ro.allow.mock.location=1
    359 endif # !user_variant
    360 
    361 ifeq (true,$(strip $(enable_target_debugging)))
    362   # Target is more debuggable and adbd is on by default
    363   ADDITIONAL_DEFAULT_PROPERTIES += ro.debuggable=1
    364   # Include the debugging/testing OTA keys in this build.
    365   INCLUDE_TEST_OTA_KEYS := true
    366 else # !enable_target_debugging
    367   # Target is less debuggable and adbd is off by default
    368   ADDITIONAL_DEFAULT_PROPERTIES += ro.debuggable=0
    369 endif # !enable_target_debugging
    370 
    371 ## eng ##
    372 
    373 ifeq ($(TARGET_BUILD_VARIANT),eng)
    374 tags_to_install := debug eng
    375 ifneq ($(filter ro.setupwizard.mode=ENABLED, $(call collapse-pairs, $(ADDITIONAL_BUILD_PROPERTIES))),)
    376   # Don't require the setup wizard on eng builds
    377   ADDITIONAL_BUILD_PROPERTIES := $(filter-out ro.setupwizard.mode=%,\
    378           $(call collapse-pairs, $(ADDITIONAL_BUILD_PROPERTIES))) \
    379           ro.setupwizard.mode=OPTIONAL
    380 endif
    381 ifndef is_sdk_build
    382   # Don't even verify the image on eng builds to speed startup
    383   ADDITIONAL_BUILD_PROPERTIES += dalvik.vm.image-dex2oat-filter=verify-none
    384   # Don't compile apps on eng builds to speed startup
    385   ADDITIONAL_BUILD_PROPERTIES += dalvik.vm.dex2oat-filter=interpret-only
    386 endif
    387 endif
    388 
    389 ## sdk ##
    390 
    391 ifdef is_sdk_build
    392 
    393 # Detect if we want to build a repository for the SDK
    394 sdk_repo_goal := $(strip $(filter sdk_repo,$(MAKECMDGOALS)))
    395 MAKECMDGOALS := $(strip $(filter-out sdk_repo,$(MAKECMDGOALS)))
    396 
    397 ifneq ($(words $(filter-out $(INTERNAL_MODIFIER_TARGETS) checkbuild emulator_tests target-files-package,$(MAKECMDGOALS))),1)
    398 $(error The 'sdk' target may not be specified with any other targets)
    399 endif
    400 
    401 # TODO: this should be eng I think.  Since the sdk is built from the eng
    402 # variant.
    403 tags_to_install := debug eng
    404 ADDITIONAL_BUILD_PROPERTIES += xmpp.auto-presence=true
    405 ADDITIONAL_BUILD_PROPERTIES += ro.config.nocheckin=yes
    406 else # !sdk
    407 endif
    408 
    409 BUILD_WITHOUT_PV := true
    410 
    411 ## precise GC ##
    412 
    413 ifneq ($(filter dalvik.gc.type-precise,$(PRODUCT_TAGS)),)
    414   # Enabling type-precise GC results in larger optimized DEX files.  The
    415   # additional storage requirements for ".odex" files can cause /system
    416   # to overflow on some devices, so this is configured separately for
    417   # each product.
    418   ADDITIONAL_BUILD_PROPERTIES += dalvik.vm.dexopt-flags=m=y
    419 endif
    420 
    421 ADDITIONAL_BUILD_PROPERTIES += net.bt.name=Android
    422 
    423 # enable vm tracing in files for now to help track
    424 # the cause of ANRs in the content process
    425 ADDITIONAL_BUILD_PROPERTIES += dalvik.vm.stack-trace-file=/data/anr/traces.txt
    426 
    427 # ------------------------------------------------------------
    428 # Define a function that, given a list of module tags, returns
    429 # non-empty if that module should be installed in /system.
    430 
    431 # For most goals, anything not tagged with the "tests" tag should
    432 # be installed in /system.
    433 define should-install-to-system
    434 $(if $(filter tests,$(1)),,true)
    435 endef
    436 
    437 ifdef is_sdk_build
    438 # For the sdk goal, anything with the "samples" tag should be
    439 # installed in /data even if that module also has "eng"/"debug"/"user".
    440 define should-install-to-system
    441 $(if $(filter samples tests,$(1)),,true)
    442 endef
    443 endif
    444 
    445 
    446 # If they only used the modifier goals (showcommands, etc), we'll actually
    447 # build the default target.
    448 ifeq ($(filter-out $(INTERNAL_MODIFIER_TARGETS),$(MAKECMDGOALS)),)
    449 .PHONY: $(INTERNAL_MODIFIER_TARGETS)
    450 $(INTERNAL_MODIFIER_TARGETS): $(DEFAULT_GOAL)
    451 endif
    452 
    453 # Bring in all modules that need to be built.
    454 ifeq ($(HOST_OS),windows)
    455 SDK_ONLY := true
    456 endif
    457 
    458 ifeq ($(SDK_ONLY),true)
    459 include $(TOPDIR)sdk/build/windows_sdk_whitelist.mk
    460 include $(TOPDIR)development/build/windows_sdk_whitelist.mk
    461 
    462 # Exclude tools/acp when cross-compiling windows under linux
    463 ifeq ($(findstring Linux,$(UNAME)),)
    464 subdirs += build/tools/acp
    465 endif
    466 
    467 else	# !SDK_ONLY
    468 #
    469 # Typical build; include any Android.mk files we can find.
    470 #
    471 subdirs := $(TOP)
    472 
    473 FULL_BUILD := true
    474 
    475 endif	# !SDK_ONLY
    476 
    477 # Before we go and include all of the module makefiles, stash away
    478 # the PRODUCT_* values so that later we can verify they are not modified.
    479 stash_product_vars:=true
    480 ifeq ($(stash_product_vars),true)
    481   $(call stash-product-vars, __STASHED)
    482 endif
    483 
    484 ifneq ($(ONE_SHOT_MAKEFILE),)
    485 # We've probably been invoked by the "mm" shell function
    486 # with a subdirectory's makefile.
    487 include $(ONE_SHOT_MAKEFILE)
    488 # Change CUSTOM_MODULES to include only modules that were
    489 # defined by this makefile; this will install all of those
    490 # modules as a side-effect.  Do this after including ONE_SHOT_MAKEFILE
    491 # so that the modules will be installed in the same place they
    492 # would have been with a normal make.
    493 CUSTOM_MODULES := $(sort $(call get-tagged-modules,$(ALL_MODULE_TAGS)))
    494 FULL_BUILD :=
    495 # Stub out the notice targets, which probably aren't defined
    496 # when using ONE_SHOT_MAKEFILE.
    497 NOTICE-HOST-%: ;
    498 NOTICE-TARGET-%: ;
    499 
    500 # A helper goal printing out install paths
    501 .PHONY: GET-INSTALL-PATH
    502 GET-INSTALL-PATH:
    503 	@$(foreach m, $(ALL_MODULES), $(if $(ALL_MODULES.$(m).INSTALLED), \
    504 		echo 'INSTALL-PATH: $(m) $(ALL_MODULES.$(m).INSTALLED)';))
    505 
    506 else # ONE_SHOT_MAKEFILE
    507 
    508 ifneq ($(dont_bother),true)
    509 #
    510 # Include all of the makefiles in the system
    511 #
    512 
    513 # Can't use first-makefiles-under here because
    514 # --mindepth=2 makes the prunes not work.
    515 subdir_makefiles := \
    516 	$(shell build/tools/findleaves.py --prune=$(OUT_DIR) --prune=.repo --prune=.git $(subdirs) Android.mk)
    517 
    518 $(foreach mk, $(subdir_makefiles), $(info including $(mk) ...)$(eval include $(mk)))
    519 
    520 endif # dont_bother
    521 
    522 endif # ONE_SHOT_MAKEFILE
    523 
    524 # Now with all Android.mks loaded we can do post cleaning steps.
    525 include $(BUILD_SYSTEM)/post_clean.mk
    526 
    527 ifeq ($(stash_product_vars),true)
    528   $(call assert-product-vars, __STASHED)
    529 endif
    530 
    531 include $(BUILD_SYSTEM)/legacy_prebuilts.mk
    532 ifneq ($(filter-out $(GRANDFATHERED_ALL_PREBUILT),$(strip $(notdir $(ALL_PREBUILT)))),)
    533   $(warning *** Some files have been added to ALL_PREBUILT.)
    534   $(warning *)
    535   $(warning * ALL_PREBUILT is a deprecated mechanism that)
    536   $(warning * should not be used for new files.)
    537   $(warning * As an alternative, use PRODUCT_COPY_FILES in)
    538   $(warning * the appropriate product definition.)
    539   $(warning * build/target/product/core.mk is the product)
    540   $(warning * definition used in all products.)
    541   $(warning *)
    542   $(foreach bad_prebuilt,$(filter-out $(GRANDFATHERED_ALL_PREBUILT),$(strip $(notdir $(ALL_PREBUILT)))),$(warning * unexpected $(bad_prebuilt) in ALL_PREBUILT))
    543   $(warning *)
    544   $(error ALL_PREBUILT contains unexpected files)
    545 endif
    546 
    547 # -------------------------------------------------------------------
    548 # All module makefiles have been included at this point.
    549 # -------------------------------------------------------------------
    550 
    551 
    552 # -------------------------------------------------------------------
    553 # Fix up CUSTOM_MODULES to refer to installed files rather than
    554 # just bare module names.  Leave unknown modules alone in case
    555 # they're actually full paths to a particular file.
    556 known_custom_modules := $(filter $(ALL_MODULES),$(CUSTOM_MODULES))
    557 unknown_custom_modules := $(filter-out $(ALL_MODULES),$(CUSTOM_MODULES))
    558 CUSTOM_MODULES := \
    559 	$(call module-installed-files,$(known_custom_modules)) \
    560 	$(unknown_custom_modules)
    561 
    562 # -------------------------------------------------------------------
    563 # Define dependencies for modules that require other modules.
    564 # This can only happen now, after we've read in all module makefiles.
    565 #
    566 # TODO: deal with the fact that a bare module name isn't
    567 # unambiguous enough.  Maybe declare short targets like
    568 # APPS:Quake or HOST:SHARED_LIBRARIES:libutils.
    569 # BUG: the system image won't know to depend on modules that are
    570 # brought in as requirements of other modules.
    571 #
    572 # Resolve the required module name to 32-bit or 64-bit variant.
    573 # Get a list of corresponding 32-bit module names, if one exists.
    574 define get-32-bit-modules
    575 $(strip $(foreach m,$(1),\
    576   $(if $(ALL_MODULES.$(m)$(TARGET_2ND_ARCH_MODULE_SUFFIX).CLASS),\
    577     $(m)$(TARGET_2ND_ARCH_MODULE_SUFFIX))))
    578 endef
    579 # Get a list of corresponding 32-bit module names, if one exists;
    580 # otherwise return the original module name
    581 define get-32-bit-modules-if-we-can
    582 $(strip $(foreach m,$(1),\
    583   $(if $(ALL_MODULES.$(m)$(TARGET_2ND_ARCH_MODULE_SUFFIX).CLASS),\
    584     $(m)$(TARGET_2ND_ARCH_MODULE_SUFFIX),
    585     $(m))))
    586 endef
    587 
    588 # If a module is built for 32-bit, the required modules must be 32-bit too;
    589 # Otherwise if the module is an exectuable or shared library,
    590 #   the required modules must be 64-bit;
    591 #   otherwise we require both 64-bit and 32-bit variant, if one exists.
    592 $(foreach m,$(ALL_MODULES),\
    593   $(eval r := $(ALL_MODULES.$(m).REQUIRED))\
    594   $(if $(r),\
    595     $(if $(ALL_MODULES.$(m).FOR_2ND_ARCH),\
    596       $(eval r_r := $(call get-32-bit-modules-if-we-can,$(r))),\
    597       $(if $(filter EXECUTABLES SHARED_LIBRARIES,$(ALL_MODULES.$(m).CLASS)),\
    598         $(eval r_r := $(r)),\
    599         $(eval r_r := $(r) $(call get-32-bit-modules,$(r)))\
    600        )\
    601      )\
    602      $(eval ALL_MODULES.$(m).REQUIRED := $(strip $(r_r)))\
    603   )\
    604 )
    605 r_r :=
    606 
    607 define add-required-deps
    608 $(1): | $(2)
    609 endef
    610 
    611 $(foreach m,$(ALL_MODULES), \
    612   $(eval r := $(ALL_MODULES.$(m).REQUIRED)) \
    613   $(if $(r), \
    614     $(eval r := $(call module-installed-files,$(r))) \
    615     $(eval t_m := $(filter $(TARGET_OUT_ROOT)/%, $(ALL_MODULES.$(m).INSTALLED))) \
    616     $(eval h_m := $(filter $(HOST_OUT_ROOT)/%, $(ALL_MODULES.$(m).INSTALLED))) \
    617     $(eval t_r := $(filter $(TARGET_OUT_ROOT)/%, $(r))) \
    618     $(eval h_r := $(filter $(HOST_OUT_ROOT)/%, $(r))) \
    619     $(eval t_m := $(filter-out $(t_r), $(t_m))) \
    620     $(eval h_m := $(filter-out $(h_r), $(h_m))) \
    621     $(if $(t_m), $(eval $(call add-required-deps, $(t_m),$(t_r)))) \
    622     $(if $(h_m), $(eval $(call add-required-deps, $(h_m),$(h_r)))) \
    623    ) \
    624  )
    625 
    626 t_m :=
    627 h_m :=
    628 t_r :=
    629 h_r :=
    630 
    631 # Establish the dependecies on the shared libraries.
    632 # It also adds the shared library module names to ALL_MODULES.$(m).REQUIRED,
    633 # so they can be expanded to product_MODULES later.
    634 # $(1): TARGET_ or HOST_.
    635 # $(2): non-empty for 2nd arch.
    636 define resolve-shared-libs-depes
    637 $(foreach m,$($(if $(2),$($(1)2ND_ARCH_VAR_PREFIX))$(1)DEPENDENCIES_ON_SHARED_LIBRARIES),\
    638   $(eval p := $(subst :,$(space),$(m)))\
    639   $(eval mod := $(firstword $(p)))\
    640   $(eval deps := $(subst $(comma),$(space),$(lastword $(p))))\
    641   $(if $(2),$(eval deps := $(addsuffix $($(1)2ND_ARCH_MODULE_SUFFIX),$(deps))))\
    642   $(eval r := $(filter $($(1)OUT_ROOT)/%,$(call module-installed-files,\
    643     $(deps))))\
    644   $(eval $(call add-required-deps,$(word 2,$(p)),$(r)))\
    645   $(eval ALL_MODULES.$(mod).REQUIRED += $(deps)))
    646 endef
    647 
    648 $(call resolve-shared-libs-depes,TARGET_)
    649 ifdef TARGET_2ND_ARCH
    650 $(call resolve-shared-libs-depes,TARGET_,true)
    651 endif
    652 $(call resolve-shared-libs-depes,HOST_)
    653 ifdef HOST_2ND_ARCH
    654 $(call resolve-shared-libs-depes,HOST_,true)
    655 endif
    656 
    657 m :=
    658 r :=
    659 p :=
    660 deps :=
    661 add-required-deps :=
    662 
    663 # -------------------------------------------------------------------
    664 # Figure out our module sets.
    665 #
    666 # Of the modules defined by the component makefiles,
    667 # determine what we actually want to build.
    668 
    669 ###########################################################
    670 ## Expand a module name list with REQUIRED modules
    671 ###########################################################
    672 # $(1): The variable name that holds the initial module name list.
    673 #       the variable will be modified to hold the expanded results.
    674 # $(2): The initial module name list.
    675 # Returns empty string (maybe with some whitespaces).
    676 define expand-required-modules
    677 $(eval _erm_new_modules := $(sort $(filter-out $($(1)),\
    678   $(foreach m,$(2),$(ALL_MODULES.$(m).REQUIRED)))))\
    679 $(if $(_erm_new_modules),$(eval $(1) += $(_erm_new_modules))\
    680   $(call expand-required-modules,$(1),$(_erm_new_modules)))
    681 endef
    682 
    683 ifdef FULL_BUILD
    684   # The base list of modules to build for this product is specified
    685   # by the appropriate product definition file, which was included
    686   # by product_config.mk.
    687   product_MODULES := $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_PACKAGES)
    688   # Filter out the overridden packages before doing expansion
    689   product_MODULES := $(filter-out $(foreach p, $(product_MODULES), \
    690       $(PACKAGES.$(p).OVERRIDES)), $(product_MODULES))
    691 
    692   # Resolve the :32 :64 module name
    693   modules_32 := $(patsubst %:32,%,$(filter %:32, $(product_MODULES)))
    694   modules_64 := $(patsubst %:64,%,$(filter %:64, $(product_MODULES)))
    695   modules_rest := $(filter-out %:32 %:64,$(product_MODULES))
    696   # Note for 32-bit product, $(modules_32) and $(modules_64) will be
    697   # added as their original module names.
    698   product_MODULES := $(call get-32-bit-modules-if-we-can, $(modules_32))
    699   product_MODULES += $(modules_64)
    700   # For the rest we add both
    701   product_MODULES += $(call get-32-bit-modules, $(modules_rest))
    702   product_MODULES += $(modules_rest)
    703 
    704   $(call expand-required-modules,product_MODULES,$(product_MODULES))
    705 
    706   product_FILES := $(call module-installed-files, $(product_MODULES))
    707   ifeq (0,1)
    708     $(info product_FILES for $(TARGET_DEVICE) ($(INTERNAL_PRODUCT)):)
    709     $(foreach p,$(product_FILES),$(info :   $(p)))
    710     $(error done)
    711   endif
    712 else
    713   # We're not doing a full build, and are probably only including
    714   # a subset of the module makefiles.  Don't try to build any modules
    715   # requested by the product, because we probably won't have rules
    716   # to build them.
    717   product_FILES :=
    718 endif
    719 
    720 eng_MODULES := $(sort \
    721         $(call get-tagged-modules,eng) \
    722         $(call module-installed-files, $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_PACKAGES_ENG)) \
    723     )
    724 debug_MODULES := $(sort \
    725         $(call get-tagged-modules,debug) \
    726         $(call module-installed-files, $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_PACKAGES_DEBUG)) \
    727     )
    728 tests_MODULES := $(sort \
    729         $(call get-tagged-modules,tests) \
    730         $(call module-installed-files, $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_PACKAGES_TESTS)) \
    731     )
    732 
    733 # TODO: Remove the 3 places in the tree that use ALL_DEFAULT_INSTALLED_MODULES
    734 # and get rid of it from this list.
    735 modules_to_install := $(sort \
    736     $(ALL_DEFAULT_INSTALLED_MODULES) \
    737     $(product_FILES) \
    738     $(foreach tag,$(tags_to_install),$($(tag)_MODULES)) \
    739     $(CUSTOM_MODULES) \
    740   )
    741 
    742 # Some packages may override others using LOCAL_OVERRIDES_PACKAGES.
    743 # Filter out (do not install) any overridden packages.
    744 overridden_packages := $(call get-package-overrides,$(modules_to_install))
    745 ifdef overridden_packages
    746 #  old_modules_to_install := $(modules_to_install)
    747   modules_to_install := \
    748       $(filter-out $(foreach p,$(overridden_packages),$(p) %/$(p).apk), \
    749           $(modules_to_install))
    750 endif
    751 #$(error filtered out
    752 #           $(filter-out $(modules_to_install),$(old_modules_to_install)))
    753 
    754 # Don't include any GNU targets in the SDK.  It's ok (and necessary)
    755 # to build the host tools, but nothing that's going to be installed
    756 # on the target (including static libraries).
    757 ifdef is_sdk_build
    758   target_gnu_MODULES := \
    759               $(filter \
    760                       $(TARGET_OUT_INTERMEDIATES)/% \
    761                       $(TARGET_OUT)/% \
    762                       $(TARGET_OUT_DATA)/%, \
    763                               $(sort $(call get-tagged-modules,gnu)))
    764   $(info Removing from sdk:)$(foreach d,$(target_gnu_MODULES),$(info : $(d)))
    765   modules_to_install := \
    766               $(filter-out $(target_gnu_MODULES),$(modules_to_install))
    767 
    768   # Ensure every module listed in PRODUCT_PACKAGES* gets something installed
    769   # TODO: Should we do this for all builds and not just the sdk?
    770   dangling_modules :=
    771   $(foreach m, $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_PACKAGES), \
    772     $(if $(strip $(ALL_MODULES.$(m).INSTALLED) $(ALL_MODULES.$(m)$(TARGET_2ND_ARCH_MODULE_SUFFIX).INSTALLED)),,\
    773       $(eval dangling_modules += $(m))))
    774   ifneq ($(TARGET_IS_64_BIT),true)
    775     # We know those 64-bit modules don't exist in the 32-bit SDK build.
    776     dangling_modules := $(filter-out %64,$(dangling_modules))
    777   endif
    778   ifneq ($(dangling_modules),)
    779     $(warning: Modules '$(dangling_modules)' in PRODUCT_PACKAGES have nothing to install!)
    780   endif
    781   $(foreach m, $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_PACKAGES_DEBUG), \
    782     $(if $(strip $(ALL_MODULES.$(m).INSTALLED)),,\
    783       $(warning $(ALL_MODULES.$(m).MAKEFILE): Module '$(m)' in PRODUCT_PACKAGES_DEBUG has nothing to install!)))
    784   $(foreach m, $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_PACKAGES_ENG), \
    785     $(if $(strip $(ALL_MODULES.$(m).INSTALLED)),,\
    786       $(warning $(ALL_MODULES.$(m).MAKEFILE): Module '$(m)' in PRODUCT_PACKAGES_ENG has nothing to install!)))
    787   $(foreach m, $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_PACKAGES_TESTS), \
    788     $(if $(strip $(ALL_MODULES.$(m).INSTALLED)),,\
    789       $(warning $(ALL_MODULES.$(m).MAKEFILE): Module '$(m)' in PRODUCT_PACKAGES_TESTS has nothing to install!)))
    790 endif
    791 
    792 # build/core/Makefile contains extra stuff that we don't want to pollute this
    793 # top-level makefile with.  It expects that ALL_DEFAULT_INSTALLED_MODULES
    794 # contains everything that's built during the current make, but it also further
    795 # extends ALL_DEFAULT_INSTALLED_MODULES.
    796 ALL_DEFAULT_INSTALLED_MODULES := $(modules_to_install)
    797 include $(BUILD_SYSTEM)/Makefile
    798 modules_to_install := $(sort $(ALL_DEFAULT_INSTALLED_MODULES))
    799 ALL_DEFAULT_INSTALLED_MODULES :=
    800 
    801 
    802 # These are additional goals that we build, in order to make sure that there
    803 # is as little code as possible in the tree that doesn't build.
    804 modules_to_check := $(foreach m,$(ALL_MODULES),$(ALL_MODULES.$(m).CHECKED))
    805 
    806 # If you would like to build all goals, and not skip any intermediate
    807 # steps, you can pass the "all" modifier goal on the commandline.
    808 ifneq ($(filter all,$(MAKECMDGOALS)),)
    809 modules_to_check += $(foreach m,$(ALL_MODULES),$(ALL_MODULES.$(m).BUILT))
    810 endif
    811 
    812 # for easier debugging
    813 modules_to_check := $(sort $(modules_to_check))
    814 #$(error modules_to_check $(modules_to_check))
    815 
    816 # -------------------------------------------------------------------
    817 # This is used to to get the ordering right, you can also use these,
    818 # but they're considered undocumented, so don't complain if their
    819 # behavior changes.
    820 .PHONY: prebuilt
    821 prebuilt: $(ALL_PREBUILT)
    822 
    823 # An internal target that depends on all copied headers
    824 # (see copy_headers.make).  Other targets that need the
    825 # headers to be copied first can depend on this target.
    826 .PHONY: all_copied_headers
    827 all_copied_headers: ;
    828 
    829 $(ALL_C_CPP_ETC_OBJECTS): | all_copied_headers
    830 
    831 # All the droid stuff, in directories
    832 .PHONY: files
    833 files: prebuilt \
    834         $(modules_to_install) \
    835         $(INSTALLED_ANDROID_INFO_TXT_TARGET)
    836 
    837 # -------------------------------------------------------------------
    838 
    839 .PHONY: checkbuild
    840 checkbuild: $(modules_to_check)
    841 ifeq (true,$(ANDROID_BUILD_EVERYTHING_BY_DEFAULT)$(filter $(MAKECMDGOALS),checkbuild))
    842 droid: checkbuild
    843 else
    844 # ANDROID_BUILD_EVERYTHING_BY_DEFAULT not set, or checkbuild is one of the cmd goals.
    845 checkbuild: droid
    846 endif
    847 
    848 .PHONY: ramdisk
    849 ramdisk: $(INSTALLED_RAMDISK_TARGET)
    850 
    851 .PHONY: factory_ramdisk
    852 factory_ramdisk: $(INSTALLED_FACTORY_RAMDISK_TARGET)
    853 
    854 .PHONY: factory_bundle
    855 factory_bundle: $(INSTALLED_FACTORY_BUNDLE_TARGET)
    856 
    857 .PHONY: systemtarball
    858 systemtarball: $(INSTALLED_SYSTEMTARBALL_TARGET)
    859 
    860 .PHONY: boottarball
    861 boottarball: $(INSTALLED_BOOTTARBALL_TARGET)
    862 
    863 .PHONY: userdataimage
    864 userdataimage: $(INSTALLED_USERDATAIMAGE_TARGET)
    865 
    866 ifneq (,$(filter userdataimage, $(MAKECMDGOALS)))
    867 $(call dist-for-goals, userdataimage, $(BUILT_USERDATAIMAGE_TARGET))
    868 endif
    869 
    870 .PHONY: userdatatarball
    871 userdatatarball: $(INSTALLED_USERDATATARBALL_TARGET)
    872 
    873 .PHONY: cacheimage
    874 cacheimage: $(INSTALLED_CACHEIMAGE_TARGET)
    875 
    876 .PHONY: vendorimage
    877 vendorimage: $(INSTALLED_VENDORIMAGE_TARGET)
    878 
    879 .PHONY: bootimage
    880 bootimage: $(INSTALLED_BOOTIMAGE_TARGET)
    881 
    882 # phony target that include any targets in $(ALL_MODULES)
    883 .PHONY: all_modules
    884 ifndef BUILD_MODULES_IN_PATHS
    885 all_modules: $(ALL_MODULES)
    886 else
    887 # BUILD_MODULES_IN_PATHS is a list of paths relative to the top of the tree
    888 module_path_patterns := $(foreach p, $(BUILD_MODULES_IN_PATHS),\
    889     $(if $(filter %/,$(p)),$(p)%,$(p)/%))
    890 my_all_modules := $(sort $(foreach m, $(ALL_MODULES),$(if $(filter\
    891     $(module_path_patterns), $(addsuffix /,$(ALL_MODULES.$(m).PATH))),$(m))))
    892 all_modules: $(my_all_modules)
    893 endif
    894 
    895 
    896 # Build files and then package it into the rom formats
    897 .PHONY: droidcore
    898 droidcore: files \
    899 	systemimage \
    900 	$(INSTALLED_BOOTIMAGE_TARGET) \
    901 	$(INSTALLED_RECOVERYIMAGE_TARGET) \
    902 	$(INSTALLED_USERDATAIMAGE_TARGET) \
    903 	$(INSTALLED_CACHEIMAGE_TARGET) \
    904 	$(INSTALLED_VENDORIMAGE_TARGET) \
    905 	$(INSTALLED_FILES_FILE)
    906 
    907 # dist_files only for putting your library into the dist directory with a full build.
    908 .PHONY: dist_files
    909 
    910 ifneq ($(TARGET_BUILD_APPS),)
    911   # If this build is just for apps, only build apps and not the full system by default.
    912 
    913   unbundled_build_modules :=
    914   ifneq ($(filter all,$(TARGET_BUILD_APPS)),)
    915     # If they used the magic goal "all" then build all apps in the source tree.
    916     unbundled_build_modules := $(foreach m,$(sort $(ALL_MODULES)),$(if $(filter APPS,$(ALL_MODULES.$(m).CLASS)),$(m)))
    917   else
    918     unbundled_build_modules := $(TARGET_BUILD_APPS)
    919   endif
    920 
    921   # Dist the installed files if they exist.
    922   apps_only_installed_files := $(foreach m,$(unbundled_build_modules),$(ALL_MODULES.$(m).INSTALLED))
    923   $(call dist-for-goals,apps_only, $(apps_only_installed_files))
    924   # For uninstallable modules such as static Java library, we have to dist the built file,
    925   # as <module_name>.<suffix>
    926   apps_only_dist_built_files := $(foreach m,$(unbundled_build_modules),$(if $(ALL_MODULES.$(m).INSTALLED),,\
    927       $(if $(ALL_MODULES.$(m).BUILT),$(ALL_MODULES.$(m).BUILT):$(m)$(suffix $(ALL_MODULES.$(m).BUILT)))))
    928   $(call dist-for-goals,apps_only, $(apps_only_dist_built_files))
    929 
    930   ifeq ($(EMMA_INSTRUMENT),true)
    931     $(EMMA_META_ZIP) : $(apps_only_installed_files)
    932 
    933     $(call dist-for-goals,apps_only, $(EMMA_META_ZIP))
    934   endif
    935 
    936   $(PROGUARD_DICT_ZIP) : $(apps_only_installed_files)
    937   $(call dist-for-goals,apps_only, $(PROGUARD_DICT_ZIP))
    938 
    939   $(SYMBOLS_ZIP) : $(apps_only_installed_files)
    940   $(call dist-for-goals,apps_only, $(SYMBOLS_ZIP))
    941 
    942 .PHONY: apps_only
    943 apps_only: $(unbundled_build_modules)
    944 
    945 droid: apps_only
    946 
    947 # Combine the NOTICE files for a apps_only build
    948 $(eval $(call combine-notice-files, \
    949     $(target_notice_file_txt), \
    950     $(target_notice_file_html), \
    951     "Notices for files for apps:", \
    952     $(TARGET_OUT_NOTICE_FILES), \
    953     $(apps_only_installed_files)))
    954 
    955 
    956 else # TARGET_BUILD_APPS
    957   $(call dist-for-goals, droidcore, \
    958     $(INTERNAL_UPDATE_PACKAGE_TARGET) \
    959     $(INTERNAL_OTA_PACKAGE_TARGET) \
    960     $(SYMBOLS_ZIP) \
    961     $(INSTALLED_FILES_FILE) \
    962     $(INSTALLED_BUILD_PROP_TARGET) \
    963     $(BUILT_TARGET_FILES_PACKAGE) \
    964     $(INSTALLED_ANDROID_INFO_TXT_TARGET) \
    965     $(INSTALLED_RAMDISK_TARGET) \
    966     $(INSTALLED_FACTORY_RAMDISK_TARGET) \
    967     $(INSTALLED_FACTORY_BUNDLE_TARGET) \
    968    )
    969 
    970   # Put a copy of the radio/bootloader files in the dist dir.
    971   $(foreach f,$(INSTALLED_RADIOIMAGE_TARGET), \
    972     $(call dist-for-goals, droidcore, $(f)))
    973 
    974   ifneq ($(ANDROID_BUILD_EMBEDDED),true)
    975   ifneq ($(TARGET_BUILD_PDK),true)
    976     $(call dist-for-goals, droidcore, \
    977       $(APPS_ZIP) \
    978       $(INTERNAL_EMULATOR_PACKAGE_TARGET) \
    979       $(PACKAGE_STATS_FILE) \
    980     )
    981   endif
    982   endif
    983 
    984   ifeq ($(EMMA_INSTRUMENT),true)
    985     $(EMMA_META_ZIP) : $(INSTALLED_SYSTEMIMAGE)
    986 
    987     $(call dist-for-goals, dist_files, $(EMMA_META_ZIP))
    988   endif
    989 
    990 # Building a full system-- the default is to build droidcore
    991 droid: droidcore dist_files
    992 
    993 endif # TARGET_BUILD_APPS
    994 
    995 .PHONY: docs
    996 docs: $(ALL_DOCS)
    997 
    998 .PHONY: sdk
    999 ALL_SDK_TARGETS := $(INTERNAL_SDK_TARGET)
   1000 sdk: $(ALL_SDK_TARGETS)
   1001 $(call dist-for-goals,sdk win_sdk, \
   1002     $(ALL_SDK_TARGETS) \
   1003     $(SYMBOLS_ZIP) \
   1004     $(INSTALLED_BUILD_PROP_TARGET) \
   1005 )
   1006 
   1007 # umbrella targets to assit engineers in verifying builds
   1008 .PHONY: java native target host java-host java-target native-host native-target \
   1009         java-host-tests java-target-tests native-host-tests native-target-tests \
   1010         java-tests native-tests host-tests target-tests tests
   1011 # some synonyms
   1012 .PHONY: host-java target-java host-native target-native \
   1013         target-java-tests target-native-tests
   1014 host-java : java-host
   1015 target-java : java-target
   1016 host-native : native-host
   1017 target-native : native-target
   1018 target-java-tests : java-target-tests
   1019 target-native-tests : native-target-tests
   1020 tests : host-tests target-tests
   1021 
   1022 # To catch more build breakage, check build tests modules in eng and userdebug builds.
   1023 ifneq ($(TARGET_BUILD_PDK),true)
   1024 ifneq ($(filter eng userdebug,$(TARGET_BUILD_VARIANT)),)
   1025 droidcore : target-tests host-tests
   1026 endif
   1027 endif
   1028 
   1029 .PHONY: lintall
   1030 
   1031 ifneq (,$(filter samplecode, $(MAKECMDGOALS)))
   1032 .PHONY: samplecode
   1033 sample_MODULES := $(sort $(call get-tagged-modules,samples))
   1034 sample_APKS_DEST_PATH := $(TARGET_COMMON_OUT_ROOT)/samples
   1035 sample_APKS_COLLECTION := \
   1036         $(foreach module,$(sample_MODULES),$(sample_APKS_DEST_PATH)/$(notdir $(module)))
   1037 $(foreach module,$(sample_MODULES),$(eval $(call \
   1038         copy-one-file,$(module),$(sample_APKS_DEST_PATH)/$(notdir $(module)))))
   1039 sample_ADDITIONAL_INSTALLED := \
   1040         $(filter-out $(modules_to_install) $(modules_to_check) $(ALL_PREBUILT),$(sample_MODULES))
   1041 samplecode: $(sample_APKS_COLLECTION)
   1042 	@echo "Collect sample code apks: $^"
   1043 	# remove apks that are not intended to be installed.
   1044 	rm -f $(sample_ADDITIONAL_INSTALLED)
   1045 endif  # samplecode in $(MAKECMDGOALS)
   1046 
   1047 .PHONY: findbugs
   1048 findbugs: $(INTERNAL_FINDBUGS_HTML_TARGET) $(INTERNAL_FINDBUGS_XML_TARGET)
   1049 
   1050 .PHONY: clean
   1051 clean:
   1052 	@rm -rf $(OUT_DIR)/*
   1053 	@echo "Entire build directory removed."
   1054 
   1055 .PHONY: clobber
   1056 clobber: clean
   1057 
   1058 # The rules for dataclean and installclean are defined in cleanbuild.mk.
   1059 
   1060 #xxx scrape this from ALL_MODULE_NAME_TAGS
   1061 .PHONY: modules
   1062 modules:
   1063 	@echo "Available sub-modules:"
   1064 	@echo "$(call module-names-for-tag-list,$(ALL_MODULE_TAGS))" | \
   1065 	      tr -s ' ' '\n' | sort -u | $(COLUMN)
   1066 
   1067 .PHONY: showcommands
   1068 showcommands:
   1069 	@echo >/dev/null
   1070 
   1071 .PHONY: nothing
   1072 nothing:
   1073 	@echo Successfully read the makefiles.
   1074