github.com/westcoastroms/westcoastroms-build@v0.0.0-20190928114312-2350e5a73030/build/make/core/main.mk (about)

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