resolved conflicts for merge of 5836d3b3
to jb-mr1-dev
Change-Id: If3d84a7439717ccf7723b3f79e934d73abbb3fea
This commit is contained in:
@@ -58,51 +58,30 @@ endif
|
|||||||
LOCAL_UNINSTALLABLE_MODULE := $(strip $(LOCAL_UNINSTALLABLE_MODULE))
|
LOCAL_UNINSTALLABLE_MODULE := $(strip $(LOCAL_UNINSTALLABLE_MODULE))
|
||||||
LOCAL_MODULE_TAGS := $(sort $(LOCAL_MODULE_TAGS))
|
LOCAL_MODULE_TAGS := $(sort $(LOCAL_MODULE_TAGS))
|
||||||
ifeq (,$(LOCAL_MODULE_TAGS))
|
ifeq (,$(LOCAL_MODULE_TAGS))
|
||||||
ifeq (true,$(LOCAL_UNINSTALLABLE_MODULE))
|
LOCAL_MODULE_TAGS := optional
|
||||||
LOCAL_MODULE_TAGS := optional
|
|
||||||
else
|
|
||||||
# Installable modules without tags fall back to user (which is changed to user eng below)
|
|
||||||
LOCAL_MODULE_TAGS := user
|
|
||||||
endif
|
endif
|
||||||
#$(warning default tags: $(lastword $(filter-out config/% out/%,$(MAKEFILE_LIST))))
|
|
||||||
|
# User tags are not allowed anymore. Fail early because it will not be installed
|
||||||
|
# like it used to be.
|
||||||
|
ifneq ($(filter $(LOCAL_MODULE_TAGS),user),)
|
||||||
|
$(warning *** Module name: $(LOCAL_MODULE))
|
||||||
|
$(warning *** Makefile location: $(LOCAL_MODULE_MAKEFILE))
|
||||||
|
$(warning * )
|
||||||
|
$(warning * Module is attempting to use the 'user' tag. This)
|
||||||
|
$(warning * used to cause the module to be installed automatically.)
|
||||||
|
$(warning * Now, the module must be listed in the PRODUCT_PACKAGES)
|
||||||
|
$(warning * section of a product makefile to have it installed.)
|
||||||
|
$(warning * )
|
||||||
|
$(error user tag detected on module.)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# Only the tags mentioned in this test are expected to be set by module
|
# Only the tags mentioned in this test are expected to be set by module
|
||||||
# makefiles. Anything else is either a typo or a source of unexpected
|
# makefiles. Anything else is either a typo or a source of unexpected
|
||||||
# behaviors.
|
# behaviors.
|
||||||
ifneq ($(filter-out user debug eng tests optional samples shell_ash shell_mksh,$(LOCAL_MODULE_TAGS)),)
|
ifneq ($(filter-out debug eng tests optional samples shell_ash shell_mksh,$(LOCAL_MODULE_TAGS)),)
|
||||||
$(warning unusual tags $(LOCAL_MODULE_TAGS) on $(LOCAL_MODULE) at $(LOCAL_PATH))
|
$(warning unusual tags $(LOCAL_MODULE_TAGS) on $(LOCAL_MODULE) at $(LOCAL_PATH))
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifneq ($(filter $(LOCAL_MODULE_TAGS),user),)
|
|
||||||
ifeq ($(filter $(GRANDFATHERED_USER_MODULES),$(LOCAL_MODULE)),)
|
|
||||||
$(warning *** Module name: $(LOCAL_MODULE))
|
|
||||||
$(warning *** Makefile location: $(LOCAL_PATH))
|
|
||||||
$(warning * )
|
|
||||||
$(warning * Each module must use a LOCAL_MODULE_TAGS in its)
|
|
||||||
$(warning * Android.mk. Possible tags declared by a module:)
|
|
||||||
$(warning * )
|
|
||||||
$(warning * optional, debug, eng, tests, samples)
|
|
||||||
$(warning * )
|
|
||||||
$(warning * If the module is expected to be in all builds)
|
|
||||||
$(warning * of a product, then it should use the)
|
|
||||||
$(warning * "optional" tag: )
|
|
||||||
$(warning * )
|
|
||||||
$(warning * Add "LOCAL_MODULE_TAGS := optional" in the)
|
|
||||||
$(warning * Android.mk for the affected module, and add)
|
|
||||||
$(warning * the LOCAL_MODULE value for that component)
|
|
||||||
$(warning * into the PRODUCT_PACKAGES section of product)
|
|
||||||
$(warning * makefile(s) where necessary, if appropriate.)
|
|
||||||
$(warning * )
|
|
||||||
$(warning * If the component should be in EVERY build of ALL)
|
|
||||||
$(warning * products, then add its LOCAL_MODULE value to the)
|
|
||||||
$(warning * PRODUCT_PACKAGES section of)
|
|
||||||
$(warning * build/target/product/core.mk)
|
|
||||||
$(warning * )
|
|
||||||
$(error user tag detected on new module - user tags are only supported on legacy modules)
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
# Add implicit tags.
|
# Add implicit tags.
|
||||||
#
|
#
|
||||||
# If the local directory or one of its parents contains a MODULE_LICENSE_GPL
|
# If the local directory or one of its parents contains a MODULE_LICENSE_GPL
|
||||||
@@ -116,27 +95,11 @@ ifneq ($(gpl_license_file),)
|
|||||||
ALL_GPL_MODULE_LICENSE_FILES := $(sort $(ALL_GPL_MODULE_LICENSE_FILES) $(gpl_license_file))
|
ALL_GPL_MODULE_LICENSE_FILES := $(sort $(ALL_GPL_MODULE_LICENSE_FILES) $(gpl_license_file))
|
||||||
endif
|
endif
|
||||||
|
|
||||||
#
|
|
||||||
# If this module is listed on CUSTOM_MODULES, promote it to "user"
|
|
||||||
# so that it will be installed in $(TARGET_OUT).
|
|
||||||
#
|
|
||||||
ifneq (,$(filter $(LOCAL_MODULE),$(CUSTOM_MODULES)))
|
|
||||||
LOCAL_MODULE_TAGS := $(sort $(LOCAL_MODULE_TAGS) user)
|
|
||||||
endif
|
|
||||||
|
|
||||||
LOCAL_MODULE_CLASS := $(strip $(LOCAL_MODULE_CLASS))
|
LOCAL_MODULE_CLASS := $(strip $(LOCAL_MODULE_CLASS))
|
||||||
ifneq ($(words $(LOCAL_MODULE_CLASS)),1)
|
ifneq ($(words $(LOCAL_MODULE_CLASS)),1)
|
||||||
$(error $(LOCAL_PATH): LOCAL_MODULE_CLASS must contain exactly one word, not "$(LOCAL_MODULE_CLASS)")
|
$(error $(LOCAL_PATH): LOCAL_MODULE_CLASS must contain exactly one word, not "$(LOCAL_MODULE_CLASS)")
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# Those used to be implicitly ignored, but aren't any more.
|
|
||||||
# As of 20100110 there are no apps with the user tag.
|
|
||||||
ifeq ($(LOCAL_MODULE_CLASS),APPS)
|
|
||||||
ifneq ($(filter $(LOCAL_MODULE_TAGS),user),)
|
|
||||||
$(warning user tag on app $(LOCAL_MODULE) at $(LOCAL_PATH) - add your app to core.mk instead)
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifneq (true,$(LOCAL_UNINSTALLABLE_MODULE))
|
ifneq (true,$(LOCAL_UNINSTALLABLE_MODULE))
|
||||||
ifdef LOCAL_IS_HOST_MODULE
|
ifdef LOCAL_IS_HOST_MODULE
|
||||||
partition_tag :=
|
partition_tag :=
|
||||||
@@ -543,6 +506,17 @@ $(installed_odex) : $(built_odex) | $(ACP)
|
|||||||
$(LOCAL_INSTALLED_MODULE) : $(installed_odex)
|
$(LOCAL_INSTALLED_MODULE) : $(installed_odex)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
# All host modules that are not tagged with optional are automatically installed.
|
||||||
|
# Save the installed files in ALL_HOST_INSTALLED_FILES.
|
||||||
|
ifeq ($(LOCAL_IS_HOST_MODULE),true)
|
||||||
|
ifneq ($(filter optional,$(LOCAL_MODULE_TAGS)),optional)
|
||||||
|
ALL_HOST_INSTALLED_FILES += $(LOCAL_INSTALLED_MODULE)
|
||||||
|
endif
|
||||||
|
ifneq ($(filter debug eng tests, $(LOCAL_MODULE_TAGS)),)
|
||||||
|
$(error $(LOCAL_MODULE_MAKEFILE): Module "$(LOCAL_MODULE)" has useless module tags: $(filter debug eng tests, $(LOCAL_MODULE_TAGS)). It will be installed anyway.)
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
endif # !LOCAL_UNINSTALLABLE_MODULE
|
endif # !LOCAL_UNINSTALLABLE_MODULE
|
||||||
|
|
||||||
|
|
||||||
@@ -592,6 +566,8 @@ ALL_MODULES.$(LOCAL_MODULE).EVENT_LOG_TAGS := \
|
|||||||
$(ALL_MODULES.$(LOCAL_MODULE).EVENT_LOG_TAGS) $(event_log_tags)
|
$(ALL_MODULES.$(LOCAL_MODULE).EVENT_LOG_TAGS) $(event_log_tags)
|
||||||
ALL_MODULES.$(LOCAL_MODULE).INTERMEDIATE_SOURCE_DIR := \
|
ALL_MODULES.$(LOCAL_MODULE).INTERMEDIATE_SOURCE_DIR := \
|
||||||
$(ALL_MODULES.$(LOCAL_MODULE).INTERMEDIATE_SOURCE_DIR) $(LOCAL_INTERMEDIATE_SOURCE_DIR)
|
$(ALL_MODULES.$(LOCAL_MODULE).INTERMEDIATE_SOURCE_DIR) $(LOCAL_INTERMEDIATE_SOURCE_DIR)
|
||||||
|
ALL_MODULES.$(LOCAL_MODULE).MAKEFILE := \
|
||||||
|
$(ALL_MODULES.$(LOCAL_MODULE).MAKEFILE) $(LOCAL_MODULE_MAKEFILE)
|
||||||
ifdef LOCAL_MODULE_OWNER
|
ifdef LOCAL_MODULE_OWNER
|
||||||
ALL_MODULES.$(LOCAL_MODULE).OWNER := \
|
ALL_MODULES.$(LOCAL_MODULE).OWNER := \
|
||||||
$(strip $(ALL_MODULES.$(LOCAL_MODULE).OWNER) $(LOCAL_MODULE_OWNER))
|
$(strip $(ALL_MODULES.$(LOCAL_MODULE).OWNER) $(LOCAL_MODULE_OWNER))
|
||||||
|
@@ -55,6 +55,11 @@ ALL_MODULE_TAGS:=
|
|||||||
# its sub-variables.)
|
# its sub-variables.)
|
||||||
ALL_MODULE_NAME_TAGS:=
|
ALL_MODULE_NAME_TAGS:=
|
||||||
|
|
||||||
|
# All host modules are automatically installed (i.e. outside
|
||||||
|
# of the product configuration scheme). This is a list of the
|
||||||
|
# install targets (LOCAL_INSTALLED_MODULE).
|
||||||
|
ALL_HOST_INSTALLED_FILES:=
|
||||||
|
|
||||||
# Full paths to all prebuilt files that will be copied
|
# Full paths to all prebuilt files that will be copied
|
||||||
# (used to make the dependency on acp)
|
# (used to make the dependency on acp)
|
||||||
ALL_PREBUILT:=
|
ALL_PREBUILT:=
|
||||||
@@ -2054,10 +2059,6 @@ endef
|
|||||||
# when requested.
|
# when requested.
|
||||||
include $(BUILD_SYSTEM)/distdir.mk
|
include $(BUILD_SYSTEM)/distdir.mk
|
||||||
|
|
||||||
# -----------------------------------------------------------------
|
|
||||||
# The modules allowed to use a user tag
|
|
||||||
include $(BUILD_SYSTEM)/user_tags.mk
|
|
||||||
|
|
||||||
# broken:
|
# broken:
|
||||||
# $(foreach file,$^,$(if $(findstring,.a,$(suffix $file)),-l$(file),$(file)))
|
# $(foreach file,$^,$(if $(findstring,.a,$(suffix $file)),-l$(file),$(file)))
|
||||||
|
|
||||||
|
@@ -114,10 +114,10 @@ TARGET_COPY_OUT_RECOVERY := recovery
|
|||||||
# variables that we need in order to locate the output files.
|
# variables that we need in order to locate the output files.
|
||||||
include $(BUILD_SYSTEM)/product_config.mk
|
include $(BUILD_SYSTEM)/product_config.mk
|
||||||
|
|
||||||
build_variant := $(filter-out eng user userdebug tests,$(TARGET_BUILD_VARIANT))
|
build_variant := $(filter-out user userdebug eng tests,$(TARGET_BUILD_VARIANT))
|
||||||
ifneq ($(build_variant)-$(words $(TARGET_BUILD_VARIANT)),-1)
|
ifneq ($(build_variant)-$(words $(TARGET_BUILD_VARIANT)),-1)
|
||||||
$(warning bad TARGET_BUILD_VARIANT: $(TARGET_BUILD_VARIANT))
|
$(warning bad TARGET_BUILD_VARIANT: $(TARGET_BUILD_VARIANT))
|
||||||
$(error must be empty or one of: eng user userdebug tests)
|
$(error must be empty or one of: user userdebug eng tests)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# ---------------------------------------------------------------
|
# ---------------------------------------------------------------
|
||||||
|
87
core/main.mk
87
core/main.mk
@@ -224,13 +224,11 @@ include $(BUILD_SYSTEM)/definitions.mk
|
|||||||
# Bring in dex_preopt.mk
|
# Bring in dex_preopt.mk
|
||||||
include $(BUILD_SYSTEM)/dex_preopt.mk
|
include $(BUILD_SYSTEM)/dex_preopt.mk
|
||||||
|
|
||||||
ifneq ($(filter eng user userdebug,$(MAKECMDGOALS)),)
|
ifneq ($(filter user userdebug eng,$(MAKECMDGOALS)),)
|
||||||
$(info ***************************************************************)
|
$(info ***************************************************************)
|
||||||
$(info ***************************************************************)
|
$(info ***************************************************************)
|
||||||
$(info Don't pass '$(filter eng user userdebug tests,$(MAKECMDGOALS))' on \
|
$(info Do not pass '$(filter user userdebug eng tests,$(MAKECMDGOALS))' on \
|
||||||
the make command line.)
|
the make command line.)
|
||||||
# XXX The single quote on this line fixes gvim's syntax highlighting.
|
|
||||||
# Without which, the rest of this file is impossible to read.
|
|
||||||
$(info Set TARGET_BUILD_VARIANT in buildspec.mk, or use lunch or)
|
$(info Set TARGET_BUILD_VARIANT in buildspec.mk, or use lunch or)
|
||||||
$(info choosecombo.)
|
$(info choosecombo.)
|
||||||
$(info ***************************************************************)
|
$(info ***************************************************************)
|
||||||
@@ -279,13 +277,13 @@ endif # HAVE_SELINUX
|
|||||||
|
|
||||||
## user/userdebug ##
|
## user/userdebug ##
|
||||||
|
|
||||||
user_variant := $(filter userdebug user,$(TARGET_BUILD_VARIANT))
|
user_variant := $(filter user userdebug,$(TARGET_BUILD_VARIANT))
|
||||||
enable_target_debugging := true
|
enable_target_debugging := true
|
||||||
|
tags_to_install :=
|
||||||
ifneq (,$(user_variant))
|
ifneq (,$(user_variant))
|
||||||
# Target is secure in user builds.
|
# Target is secure in user builds.
|
||||||
ADDITIONAL_DEFAULT_PROPERTIES += ro.secure=1
|
ADDITIONAL_DEFAULT_PROPERTIES += ro.secure=1
|
||||||
|
|
||||||
tags_to_install := user
|
|
||||||
ifeq ($(user_variant),userdebug)
|
ifeq ($(user_variant),userdebug)
|
||||||
# Pick up some extra useful tools
|
# Pick up some extra useful tools
|
||||||
tags_to_install += debug
|
tags_to_install += debug
|
||||||
@@ -333,7 +331,7 @@ endif # !enable_target_debugging
|
|||||||
## eng ##
|
## eng ##
|
||||||
|
|
||||||
ifeq ($(TARGET_BUILD_VARIANT),eng)
|
ifeq ($(TARGET_BUILD_VARIANT),eng)
|
||||||
tags_to_install := user debug eng
|
tags_to_install := debug eng
|
||||||
ifneq ($(filter ro.setupwizard.mode=ENABLED, $(call collapse-pairs, $(ADDITIONAL_BUILD_PROPERTIES))),)
|
ifneq ($(filter ro.setupwizard.mode=ENABLED, $(call collapse-pairs, $(ADDITIONAL_BUILD_PROPERTIES))),)
|
||||||
# Don't require the setup wizard on eng builds
|
# Don't require the setup wizard on eng builds
|
||||||
ADDITIONAL_BUILD_PROPERTIES := $(filter-out ro.setupwizard.mode=%,\
|
ADDITIONAL_BUILD_PROPERTIES := $(filter-out ro.setupwizard.mode=%,\
|
||||||
@@ -345,7 +343,7 @@ endif
|
|||||||
## tests ##
|
## tests ##
|
||||||
|
|
||||||
ifeq ($(TARGET_BUILD_VARIANT),tests)
|
ifeq ($(TARGET_BUILD_VARIANT),tests)
|
||||||
tags_to_install := user debug eng tests
|
tags_to_install := debug eng tests
|
||||||
endif
|
endif
|
||||||
|
|
||||||
## sdk ##
|
## sdk ##
|
||||||
@@ -362,7 +360,7 @@ endif
|
|||||||
|
|
||||||
# TODO: this should be eng I think. Since the sdk is built from the eng
|
# TODO: this should be eng I think. Since the sdk is built from the eng
|
||||||
# variant.
|
# variant.
|
||||||
tags_to_install := user debug eng
|
tags_to_install := debug eng
|
||||||
ADDITIONAL_BUILD_PROPERTIES += xmpp.auto-presence=true
|
ADDITIONAL_BUILD_PROPERTIES += xmpp.auto-presence=true
|
||||||
ADDITIONAL_BUILD_PROPERTIES += ro.config.nocheckin=yes
|
ADDITIONAL_BUILD_PROPERTIES += ro.config.nocheckin=yes
|
||||||
else # !sdk
|
else # !sdk
|
||||||
@@ -591,51 +589,55 @@ add-required-deps :=
|
|||||||
|
|
||||||
# -------------------------------------------------------------------
|
# -------------------------------------------------------------------
|
||||||
# Figure out our module sets.
|
# Figure out our module sets.
|
||||||
|
#
|
||||||
# Of the modules defined by the component makefiles,
|
# Of the modules defined by the component makefiles,
|
||||||
# determine what we actually want to build.
|
# determine what we actually want to build.
|
||||||
Default_MODULES := $(sort $(ALL_DEFAULT_INSTALLED_MODULES) \
|
|
||||||
$(CUSTOM_MODULES))
|
|
||||||
# TODO: Remove the 3 places in the tree that use
|
|
||||||
# ALL_DEFAULT_INSTALLED_MODULES and get rid of it from this list.
|
|
||||||
|
|
||||||
ifdef FULL_BUILD
|
ifdef FULL_BUILD
|
||||||
# The base list of modules to build for this product is specified
|
# The base list of modules to build for this product is specified
|
||||||
# by the appropriate product definition file, which was included
|
# by the appropriate product definition file, which was included
|
||||||
# by product_config.make.
|
# by product_config.make.
|
||||||
user_PACKAGES := $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_PACKAGES)
|
product_MODULES := $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_PACKAGES)
|
||||||
$(call expand-required-modules,user_PACKAGES,$(user_PACKAGES))
|
$(call expand-required-modules,product_MODULES,$(product_MODULES))
|
||||||
user_PACKAGES := $(call module-installed-files, $(user_PACKAGES))
|
product_FILES := $(call module-installed-files, $(product_MODULES))
|
||||||
|
ifeq (0,1)
|
||||||
|
$(info product_FILES for $(TARGET_DEVICE) ($(INTERNAL_PRODUCT)):)
|
||||||
|
$(foreach p,$(product_FILES),$(info : $(p)))
|
||||||
|
$(error done)
|
||||||
|
endif
|
||||||
else
|
else
|
||||||
# We're not doing a full build, and are probably only including
|
# We're not doing a full build, and are probably only including
|
||||||
# a subset of the module makefiles. Don't try to build any modules
|
# a subset of the module makefiles. Don't try to build any modules
|
||||||
# requested by the product, because we probably won't have rules
|
# requested by the product, because we probably won't have rules
|
||||||
# to build them.
|
# to build them.
|
||||||
user_PACKAGES :=
|
product_FILES :=
|
||||||
endif
|
endif
|
||||||
# Use tags to get the non-APPS user modules. Use the product
|
|
||||||
# definition files to get the APPS user modules.
|
|
||||||
user_MODULES := $(sort $(call get-tagged-modules,user shell_$(TARGET_SHELL)))
|
|
||||||
user_MODULES := $(user_MODULES) $(user_PACKAGES)
|
|
||||||
|
|
||||||
eng_MODULES := $(sort \
|
# When modules are tagged with debug eng or tests, they are installed
|
||||||
$(call get-tagged-modules,eng) \
|
# for those variants regardless of what the product spec says.
|
||||||
$(call module-installed-files, $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_PACKAGES_ENG)) \
|
|
||||||
)
|
|
||||||
debug_MODULES := $(sort \
|
debug_MODULES := $(sort \
|
||||||
$(call get-tagged-modules,debug) \
|
$(call get-tagged-modules,debug) \
|
||||||
$(call module-installed-files, $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_PACKAGES_DEBUG)) \
|
$(call module-installed-files, $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_PACKAGES_DEBUG)) \
|
||||||
)
|
)
|
||||||
|
eng_MODULES := $(sort \
|
||||||
|
$(call get-tagged-modules,eng) \
|
||||||
|
$(call module-installed-files, $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_PACKAGES_ENG)) \
|
||||||
|
)
|
||||||
tests_MODULES := $(sort \
|
tests_MODULES := $(sort \
|
||||||
$(call get-tagged-modules,tests) \
|
$(call get-tagged-modules,tests) \
|
||||||
$(call module-installed-files, $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_PACKAGES_TESTS)) \
|
$(call module-installed-files, $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_PACKAGES_TESTS)) \
|
||||||
)
|
)
|
||||||
|
|
||||||
ifeq ($(strip $(tags_to_install)),)
|
# TODO: Remove the 3 places in the tree that use ALL_DEFAULT_INSTALLED_MODULES
|
||||||
$(error ASSERTION FAILED: tags_to_install should not be empty)
|
# and get rid of it from this list.
|
||||||
endif
|
# TODO: The shell is chosen by magic. Do we still need this?
|
||||||
modules_to_install := $(sort $(Default_MODULES) \
|
modules_to_install := $(sort \
|
||||||
$(foreach tag,$(tags_to_install),$($(tag)_MODULES)))
|
$(ALL_DEFAULT_INSTALLED_MODULES) \
|
||||||
|
$(product_FILES) \
|
||||||
|
$(foreach tag,$(tags_to_install),$($(tag)_MODULES)) \
|
||||||
|
$(call get-tagged-modules, shell_$(TARGET_SHELL)) \
|
||||||
|
$(CUSTOM_MODULES) \
|
||||||
|
)
|
||||||
|
|
||||||
# Some packages may override others using LOCAL_OVERRIDES_PACKAGES.
|
# Some packages may override others using LOCAL_OVERRIDES_PACKAGES.
|
||||||
# Filter out (do not install) any overridden packages.
|
# Filter out (do not install) any overridden packages.
|
||||||
@@ -666,19 +668,21 @@ ifdef is_sdk_build
|
|||||||
# Ensure every module listed in PRODUCT_PACKAGES* gets something installed
|
# Ensure every module listed in PRODUCT_PACKAGES* gets something installed
|
||||||
# TODO: Should we do this for all builds and not just the sdk?
|
# TODO: Should we do this for all builds and not just the sdk?
|
||||||
$(foreach m, $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_PACKAGES), \
|
$(foreach m, $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_PACKAGES), \
|
||||||
$(if $(strip $(ALL_MODULES.$(m).INSTALLED)),,\
|
$(if $(strip $(ALL_MODULES.$(m).INSTALLED)),,\
|
||||||
$(error Module '$(m)' in PRODUCT_PACKAGES has nothing to install!)))
|
$(error $(ALL_MODULES.$(m).MAKEFILE): Module '$(m)' in PRODUCT_PACKAGES has nothing to install!)))
|
||||||
$(foreach m, $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_PACKAGES_DEBUG), \
|
$(foreach m, $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_PACKAGES_DEBUG), \
|
||||||
$(if $(strip $(ALL_MODULES.$(m).INSTALLED)),,\
|
$(if $(strip $(ALL_MODULES.$(m).INSTALLED)),,\
|
||||||
$(error Module '$(m)' in PRODUCT_PACKAGES_DEBUG has nothing to install!)))
|
$(error $(ALL_MODULES.$(m).MAKEFILE): Module '$(m)' in PRODUCT_PACKAGES_DEBUG has nothing to install!)))
|
||||||
$(foreach m, $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_PACKAGES_ENG), \
|
$(foreach m, $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_PACKAGES_ENG), \
|
||||||
$(if $(strip $(ALL_MODULES.$(m).INSTALLED)),,\
|
$(if $(strip $(ALL_MODULES.$(m).INSTALLED)),,\
|
||||||
$(error Module '$(m)' in PRODUCT_PACKAGES_ENG has nothing to install!)))
|
$(error $(ALL_MODULES.$(m).MAKEFILE): Module '$(m)' in PRODUCT_PACKAGES_ENG has nothing to install!)))
|
||||||
$(foreach m, $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_PACKAGES_TESTS), \
|
$(foreach m, $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_PACKAGES_TESTS), \
|
||||||
$(if $(strip $(ALL_MODULES.$(m).INSTALLED)),,\
|
$(if $(strip $(ALL_MODULES.$(m).INSTALLED)),,\
|
||||||
$(error Module '$(m)' in PRODUCT_PACKAGES_TESTS has nothing to install!)))
|
$(error $(ALL_MODULES.$(m).MAKEFILE): Module '$(m)' in PRODUCT_PACKAGES_TESTS has nothing to install!)))
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
# Install all of the host modules
|
||||||
|
modules_to_install += $(sort $(modules_to_install) $(ALL_HOST_INSTALLED_FILES))
|
||||||
|
|
||||||
# build/core/Makefile contains extra stuff that we don't want to pollute this
|
# build/core/Makefile contains extra stuff that we don't want to pollute this
|
||||||
# top-level makefile with. It expects that ALL_DEFAULT_INSTALLED_MODULES
|
# top-level makefile with. It expects that ALL_DEFAULT_INSTALLED_MODULES
|
||||||
@@ -691,6 +695,7 @@ ALL_DEFAULT_INSTALLED_MODULES :=
|
|||||||
|
|
||||||
endif # dont_bother
|
endif # dont_bother
|
||||||
|
|
||||||
|
|
||||||
# These are additional goals that we build, in order to make sure that there
|
# These are additional goals that we build, in order to make sure that there
|
||||||
# is as little code as possible in the tree that doesn't build.
|
# is as little code as possible in the tree that doesn't build.
|
||||||
modules_to_check := $(foreach m,$(ALL_MODULES),$(ALL_MODULES.$(m).CHECKED))
|
modules_to_check := $(foreach m,$(ALL_MODULES),$(ALL_MODULES.$(m).CHECKED))
|
||||||
@@ -903,3 +908,7 @@ modules:
|
|||||||
.PHONY: showcommands
|
.PHONY: showcommands
|
||||||
showcommands:
|
showcommands:
|
||||||
@echo >/dev/null
|
@echo >/dev/null
|
||||||
|
|
||||||
|
.PHONY: nothing
|
||||||
|
nothing:
|
||||||
|
@echo Successfully read the makefiles.
|
||||||
|
@@ -199,6 +199,12 @@ $(dump-products)
|
|||||||
$(error done)
|
$(error done)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifeq (a,b)
|
||||||
|
$(info PRODUCTS -----------)
|
||||||
|
$(foreach product, $(PRODUCTS), $(info $(PRODUCTS.$(product).PRODUCT_NAME)))# $(product)))
|
||||||
|
$(error stop)
|
||||||
|
endif
|
||||||
|
|
||||||
# Convert a short name like "sooner" into the path to the product
|
# Convert a short name like "sooner" into the path to the product
|
||||||
# file defining that product.
|
# file defining that product.
|
||||||
#
|
#
|
||||||
|
@@ -14,35 +14,127 @@
|
|||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
#
|
#
|
||||||
|
|
||||||
products_pdf := $(OUT_DIR)/products.pdf
|
# the foreach and the if remove the single space entries that creep in because of the evals
|
||||||
products_graph := $(products_pdf:%.pdf=%.dot)
|
define gather-all-products
|
||||||
|
$(sort $(foreach p, \
|
||||||
|
$(eval _all_products_visited := )
|
||||||
|
$(call all-products-inner, $(ALL_PRODUCTS)) \
|
||||||
|
, $(if $(strip $(p)),$(strip $(p)),)) \
|
||||||
|
)
|
||||||
|
endef
|
||||||
|
|
||||||
$(products_graph):
|
define all-products-inner
|
||||||
@echo Product graph DOT: $@
|
$(foreach p,$(1),\
|
||||||
|
$(if $(filter $(p),$(_all_products_visited)),, \
|
||||||
|
$(p) \
|
||||||
|
$(eval _all_products_visited += $(p)) \
|
||||||
|
$(call all-products-inner, $(PRODUCTS.$(strip $(p)).INHERITS_FROM))
|
||||||
|
) \
|
||||||
|
)
|
||||||
|
endef
|
||||||
|
|
||||||
|
|
||||||
|
this_makefile := build/core/tasks/product-graph.mk
|
||||||
|
|
||||||
|
products_svg := $(OUT_DIR)/products.svg
|
||||||
|
products_pdf := $(OUT_DIR)/products.pdf
|
||||||
|
products_graph := $(OUT_DIR)/products.dot
|
||||||
|
ifeq ($(strip $(ANDROID_PRODUCT_GRAPH)),)
|
||||||
|
products_list := $(INTERNAL_PRODUCT)
|
||||||
|
else
|
||||||
|
ifeq ($(strip $(ANDROID_PRODUCT_GRAPH)),--all)
|
||||||
|
products_list := --all
|
||||||
|
else
|
||||||
|
products_list := $(foreach prod,$(ANDROID_PRODUCT_GRAPH),$(call resolve-short-product-name,$(prod)))
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
really_all_products := $(call gather-all-products)
|
||||||
|
|
||||||
|
$(products_graph): PRIVATE_PRODUCTS := $(really_all_products)
|
||||||
|
$(products_graph): PRIVATE_PRODUCTS_FILTER := $(products_list)
|
||||||
|
|
||||||
|
$(products_graph): $(this_makefile)
|
||||||
|
@echo Product graph DOT: $@ for $(PRIVATE_PRODUCTS_FILTER)
|
||||||
$(hide) ( \
|
$(hide) ( \
|
||||||
echo 'digraph {'; \
|
echo 'digraph {'; \
|
||||||
echo 'graph [ ratio=.5 ];'; \
|
echo 'graph [ ratio=.5 ];'; \
|
||||||
$(foreach p,$(ALL_PRODUCTS), \
|
$(foreach p,$(PRIVATE_PRODUCTS), \
|
||||||
$(foreach d,$(PRODUCTS.$(strip $(p)).INHERITS_FROM), \
|
$(foreach d,$(PRODUCTS.$(strip $(p)).INHERITS_FROM), echo \"$(d)\" -\> \"$(p)\";)) \
|
||||||
echo \"$(d)\" -\> \"$(p)\";)) \
|
$(foreach prod, $(PRIVATE_PRODUCTS), \
|
||||||
$(foreach prod, \
|
echo \"$(prod)\" [ \
|
||||||
$(sort $(foreach p,$(ALL_PRODUCTS), \
|
label=\"$(dir $(prod))\\n$(notdir $(prod))\\n\\n$(PRODUCTS.$(strip $(prod)).PRODUCT_MODEL)\\n$(PRODUCTS.$(strip $(prod)).PRODUCT_DEVICE)\" \
|
||||||
$(foreach d,$(PRODUCTS.$(strip $(p)).INHERITS_FROM), \
|
$(if $(filter $(prod),$(PRIVATE_PRODUCTS_FILTER)), style=\"filled\" fillcolor=\"#FFFDB0\",) \
|
||||||
$(d))) \
|
fontcolor=\"darkblue\" href=\"products/$(prod).html\" \
|
||||||
$(foreach p,$(ALL_PRODUCTS),$(p))), \
|
];) \
|
||||||
echo \"$(prod)\" [ label=\"$(dir $(prod))\\n$(notdir $(prod))\"];) \
|
|
||||||
echo '}' \
|
echo '}' \
|
||||||
) > $@
|
) \
|
||||||
|
| ./build/tools/filter-product-graph.py $(PRIVATE_PRODUCTS_FILTER) \
|
||||||
|
> $@
|
||||||
|
|
||||||
# This rule doesn't include any nodes that don't inherit from
|
# Evaluates to the name of the product file
|
||||||
# anything or don't have anything inherit from them, to make the
|
# $(1) product file
|
||||||
# graph more readable. To add that, add this line to the rule
|
define product-debug-filename
|
||||||
# below:
|
$(OUT_DIR)/products/$(strip $(1)).html
|
||||||
# $(foreach p,$(ALL_PRODUCTS), echo \"$(p)\";) \
|
endef
|
||||||
|
|
||||||
|
# Makes a rule for the product debug info
|
||||||
|
# $(1) product file
|
||||||
|
define transform-product-debug
|
||||||
|
$(OUT_DIR)/products/$(strip $(1)).txt: $(this_makefile)
|
||||||
|
@echo Product debug info file: $$@
|
||||||
|
$(hide) rm -f $$@
|
||||||
|
$(hide) mkdir -p $$(dir $$@)
|
||||||
|
$(hide) echo 'FILE=$(strip $(1))' >> $$@
|
||||||
|
$(hide) echo 'PRODUCT_NAME=$$(PRODUCTS.$(strip $(1)).PRODUCT_NAME)' >> $$@
|
||||||
|
$(hide) echo 'PRODUCT_MODEL=$$(PRODUCTS.$(strip $(1)).PRODUCT_MODEL)' >> $$@
|
||||||
|
$(hide) echo 'PRODUCT_LOCALES=$$(PRODUCTS.$(strip $(1)).PRODUCT_LOCALES)' >> $$@
|
||||||
|
$(hide) echo 'PRODUCT_AAPT_CONFIG=$$(PRODUCTS.$(strip $(1)).PRODUCT_AAPT_CONFIG)' >> $$@
|
||||||
|
$(hide) echo 'PRODUCT_AAPT_PREF_CONFIG=$$(PRODUCTS.$(strip $(1)).PRODUCT_AAPT_PREF_CONFIG)' >> $$@
|
||||||
|
$(hide) echo 'PRODUCT_PACKAGES=$$(PRODUCTS.$(strip $(1)).PRODUCT_PACKAGES)' >> $$@
|
||||||
|
$(hide) echo 'PRODUCT_DEVICE=$$(PRODUCTS.$(strip $(1)).PRODUCT_DEVICE)' >> $$@
|
||||||
|
$(hide) echo 'PRODUCT_MANUFACTURER=$$(PRODUCTS.$(strip $(1)).PRODUCT_MANUFACTURER)' >> $$@
|
||||||
|
$(hide) echo 'PRODUCT_PROPERTY_OVERRIDES=$$(PRODUCTS.$(strip $(1)).PRODUCT_PROPERTY_OVERRIDES)' >> $$@
|
||||||
|
$(hide) echo 'PRODUCT_DEFAULT_PROPERTY_OVERRIDES=$$(PRODUCTS.$(strip $(1)).PRODUCT_DEFAULT_PROPERTY_OVERRIDES)' >> $$@
|
||||||
|
$(hide) echo 'PRODUCT_CHARACTERISTICS=$$(PRODUCTS.$(strip $(1)).PRODUCT_CHARACTERISTICS)' >> $$@
|
||||||
|
$(hide) echo 'PRODUCT_COPY_FILES=$$(PRODUCTS.$(strip $(1)).PRODUCT_COPY_FILES)' >> $$@
|
||||||
|
$(hide) echo 'PRODUCT_OTA_PUBLIC_KEYS=$$(PRODUCTS.$(strip $(1)).PRODUCT_OTA_PUBLIC_KEYS)' >> $$@
|
||||||
|
$(hide) echo 'PRODUCT_EXTRA_RECOVERY_KEYS=$$(PRODUCTS.$(strip $(1)).PRODUCT_EXTRA_RECOVERY_KEYS)' >> $$@
|
||||||
|
$(hide) echo 'PRODUCT_PACKAGE_OVERLAYS=$$(PRODUCTS.$(strip $(1)).PRODUCT_PACKAGE_OVERLAYS)' >> $$@
|
||||||
|
$(hide) echo 'DEVICE_PACKAGE_OVERLAYS=$$(PRODUCTS.$(strip $(1)).DEVICE_PACKAGE_OVERLAYS)' >> $$@
|
||||||
|
$(hide) echo 'PRODUCT_TAGS=$$(PRODUCTS.$(strip $(1)).PRODUCT_TAGS)' >> $$@
|
||||||
|
$(hide) echo 'PRODUCT_SDK_ADDON_NAME=$$(PRODUCTS.$(strip $(1)).PRODUCT_SDK_ADDON_NAME)' >> $$@
|
||||||
|
$(hide) echo 'PRODUCT_SDK_ADDON_COPY_FILES=$$(PRODUCTS.$(strip $(1)).PRODUCT_SDK_ADDON_COPY_FILES)' >> $$@
|
||||||
|
$(hide) echo 'PRODUCT_SDK_ADDON_COPY_MODULES=$$(PRODUCTS.$(strip $(1)).PRODUCT_SDK_ADDON_COPY_MODULES)' >> $$@
|
||||||
|
$(hide) echo 'PRODUCT_SDK_ADDON_DOC_MODULES=$$(PRODUCTS.$(strip $(1)).PRODUCT_SDK_ADDON_DOC_MODULES)' >> $$@
|
||||||
|
$(hide) echo 'PRODUCT_DEFAULT_WIFI_CHANNELS=$$(PRODUCTS.$(strip $(1)).PRODUCT_DEFAULT_WIFI_CHANNELS)' >> $$@
|
||||||
|
$(hide) echo 'PRODUCT_DEFAULT_DEV_CERTIFICATE=$$(PRODUCTS.$(strip $(1)).PRODUCT_DEFAULT_DEV_CERTIFICATE)' >> $$@
|
||||||
|
$(hide) echo 'PRODUCT_RESTRICT_VENDOR_FILES=$$(PRODUCTS.$(strip $(1)).PRODUCT_RESTRICT_VENDOR_FILES)' >> $$@
|
||||||
|
$(hide) echo 'PRODUCT_FACTORY_RAMDISK_MODULES=$$(PRODUCTS.$(strip $(1)).PRODUCT_FACTORY_RAMDISK_MODULES)' >> $$@
|
||||||
|
$(hide) echo 'PRODUCT_VENDOR_KERNEL_HEADERS=$$(PRODUCTS.$(strip $(1)).PRODUCT_VENDOR_KERNEL_HEADERS)' >> $$@
|
||||||
|
|
||||||
|
$(call product-debug-filename, $(p)): \
|
||||||
|
$(OUT_DIR)/products/$(strip $(1)).txt \
|
||||||
|
build/tools/product_debug.py \
|
||||||
|
$(this_makefile)
|
||||||
|
@echo Product debug html file: $$@
|
||||||
|
$(hide) mkdir -p $$(dir $$@)
|
||||||
|
$(hide) cat $$< | build/tools/product_debug.py > $$@
|
||||||
|
endef
|
||||||
|
|
||||||
|
product_debug_files:=
|
||||||
|
$(foreach p,$(really_all_products), \
|
||||||
|
$(eval $(call transform-product-debug, $(p))) \
|
||||||
|
$(eval product_debug_files += $(call product-debug-filename, $(p))) \
|
||||||
|
)
|
||||||
|
|
||||||
$(products_pdf): $(products_graph)
|
$(products_pdf): $(products_graph)
|
||||||
@echo Product graph PDF: $@
|
@echo Product graph PDF: $@
|
||||||
dot -Tpdf -Nshape=box -o $@ $<
|
dot -Tpdf -Nshape=box -o $@ $<
|
||||||
|
|
||||||
product-graph: $(products_pdf)
|
$(products_svg): $(products_graph) $(product_debug_files)
|
||||||
|
@echo Product graph SVG: $@
|
||||||
|
dot -Tsvg -Nshape=box -o $@ $<
|
||||||
|
|
||||||
|
product-graph: $(products_pdf) $(products_svg)
|
||||||
|
|
||||||
|
@@ -1,498 +0,0 @@
|
|||||||
#
|
|
||||||
# Copyright (C) 2010 The Android Open Source Project
|
|
||||||
#
|
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
# you may not use this file except in compliance with the License.
|
|
||||||
# You may obtain a copy of the License at
|
|
||||||
#
|
|
||||||
# http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
#
|
|
||||||
# Unless required by applicable law or agreed to in writing, software
|
|
||||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
# See the License for the specific language governing permissions and
|
|
||||||
# limitations under the License.
|
|
||||||
#
|
|
||||||
|
|
||||||
# This is the list of modules grandfathered to use a user tag
|
|
||||||
|
|
||||||
# DO NOT ADD ANY NEW MODULE TO THIS FILE
|
|
||||||
#
|
|
||||||
# user modules are hard to control and audit and we don't want
|
|
||||||
# to add any new such module in the system
|
|
||||||
|
|
||||||
GRANDFATHERED_USER_MODULES :=
|
|
||||||
|
|
||||||
-include vendor/google/user_tags.mk
|
|
||||||
|
|
||||||
GRANDFATHERED_USER_MODULES += \
|
|
||||||
20-dns.conf \
|
|
||||||
95-configured \
|
|
||||||
aapt \
|
|
||||||
acp \
|
|
||||||
adb \
|
|
||||||
AdbWinApi \
|
|
||||||
AdbWinUsbApi \
|
|
||||||
adbd \
|
|
||||||
aidl \
|
|
||||||
am \
|
|
||||||
android \
|
|
||||||
android-common \
|
|
||||||
android-common-carousel \
|
|
||||||
android.policy \
|
|
||||||
androidprefs \
|
|
||||||
android.test.runner \
|
|
||||||
ant \
|
|
||||||
antlr-2.7.7 \
|
|
||||||
anttasks \
|
|
||||||
apicheck \
|
|
||||||
apkcheck \
|
|
||||||
applypatch \
|
|
||||||
app_process \
|
|
||||||
archquery \
|
|
||||||
atree \
|
|
||||||
audio \
|
|
||||||
badblocks \
|
|
||||||
badblocks_host \
|
|
||||||
bb2sym \
|
|
||||||
bb_dump \
|
|
||||||
bbprof \
|
|
||||||
bcc \
|
|
||||||
bison \
|
|
||||||
bluetoothd \
|
|
||||||
bmgr \
|
|
||||||
bootanimation \
|
|
||||||
brcm_patchram_plus \
|
|
||||||
bugreport \
|
|
||||||
cfassembler \
|
|
||||||
check_stack \
|
|
||||||
check_trace \
|
|
||||||
com.android.phone.common \
|
|
||||||
com.android.vcard \
|
|
||||||
commons-compress-1.0 \
|
|
||||||
content \
|
|
||||||
copybit.qsd8k \
|
|
||||||
copybit.s5pc110 \
|
|
||||||
coverage \
|
|
||||||
cpufeatures \
|
|
||||||
cts \
|
|
||||||
CtsAppSecurityTests \
|
|
||||||
cts-dalvik-buildutil \
|
|
||||||
dasm \
|
|
||||||
dbus-daemon \
|
|
||||||
ddmlib \
|
|
||||||
ddmlib-prebuilt \
|
|
||||||
ddmlibTests \
|
|
||||||
ddms \
|
|
||||||
ddmuilib \
|
|
||||||
debuggerd \
|
|
||||||
descGen \
|
|
||||||
dexgen \
|
|
||||||
dexpreopt \
|
|
||||||
dex-tools \
|
|
||||||
dhcpcd \
|
|
||||||
dhcpcd.conf \
|
|
||||||
dhcpcd-run-hooks \
|
|
||||||
dictTest \
|
|
||||||
dnsmasq \
|
|
||||||
doclava \
|
|
||||||
draw9patch \
|
|
||||||
dumpeventlog \
|
|
||||||
dumpkey \
|
|
||||||
dump_regions \
|
|
||||||
dumpstate \
|
|
||||||
dumpsys \
|
|
||||||
dx-tests \
|
|
||||||
e2fsck \
|
|
||||||
e2fsck_host \
|
|
||||||
easymock \
|
|
||||||
easymocklib \
|
|
||||||
edify \
|
|
||||||
elftree \
|
|
||||||
emmalib \
|
|
||||||
emulator \
|
|
||||||
emulator-arm \
|
|
||||||
emulator-mips \
|
|
||||||
emulator-core \
|
|
||||||
emulator-elff \
|
|
||||||
emulator-hw \
|
|
||||||
emulator-memcheck \
|
|
||||||
emulator-tcg \
|
|
||||||
emulator-ui \
|
|
||||||
etc1tool \
|
|
||||||
eventanalyzer \
|
|
||||||
exc_dump \
|
|
||||||
fastboot \
|
|
||||||
framework \
|
|
||||||
FrameworkCoreHostTests \
|
|
||||||
frameworks-core-util-lib \
|
|
||||||
fsck_msdos \
|
|
||||||
fs_get_stats \
|
|
||||||
fw_bcm4329_apsta.bin \
|
|
||||||
fw_bcm4329.bin \
|
|
||||||
genext2fs \
|
|
||||||
gps.mahimahi \
|
|
||||||
gralloc.default \
|
|
||||||
gralloc.qsd8k \
|
|
||||||
groovy-all-1.7.0 \
|
|
||||||
grxmlcompile \
|
|
||||||
guava \
|
|
||||||
guavalib \
|
|
||||||
gzip \
|
|
||||||
hciattach \
|
|
||||||
hierarchyviewer \
|
|
||||||
hierarchyviewer1 \
|
|
||||||
hierarchyviewer2 \
|
|
||||||
hierarchyviewerlib \
|
|
||||||
hist_trace \
|
|
||||||
hosttestlib \
|
|
||||||
icudata \
|
|
||||||
idegen \
|
|
||||||
ime \
|
|
||||||
init \
|
|
||||||
input \
|
|
||||||
ip \
|
|
||||||
jarjar \
|
|
||||||
javax.obex \
|
|
||||||
jcommon-1.0.12 \
|
|
||||||
jdiff \
|
|
||||||
jdwpspy \
|
|
||||||
jfreechart-1.0.9 \
|
|
||||||
jfreechart-1.0.9-swt \
|
|
||||||
jsilver \
|
|
||||||
jsr305 \
|
|
||||||
jsr305lib \
|
|
||||||
junit \
|
|
||||||
jython \
|
|
||||||
kxml2-2.3.0 \
|
|
||||||
launch-wrapper \
|
|
||||||
layoutlib \
|
|
||||||
layoutlib_api \
|
|
||||||
layoutlib_create \
|
|
||||||
layoutlib_utils \
|
|
||||||
liba2dp \
|
|
||||||
libabi \
|
|
||||||
libandroid \
|
|
||||||
libandroid_runtime \
|
|
||||||
libandroid_servers \
|
|
||||||
libarity \
|
|
||||||
libastl \
|
|
||||||
libastl_host \
|
|
||||||
libaudio \
|
|
||||||
libaudioeffect_jni \
|
|
||||||
libaudioflinger \
|
|
||||||
libaudiointerface \
|
|
||||||
libaudiopolicy \
|
|
||||||
libaudiopolicybase \
|
|
||||||
libbinder \
|
|
||||||
libbluedroid \
|
|
||||||
libbluetooth \
|
|
||||||
libbluetoothd \
|
|
||||||
libbuiltinplugin \
|
|
||||||
libbundlewrapper \
|
|
||||||
libbz \
|
|
||||||
libc \
|
|
||||||
libcamera_client \
|
|
||||||
libcameraservice \
|
|
||||||
libcamerastub \
|
|
||||||
libc_common \
|
|
||||||
libchromium_net \
|
|
||||||
libc_nomalloc \
|
|
||||||
libctest \
|
|
||||||
libcutils \
|
|
||||||
libdb \
|
|
||||||
libdbus \
|
|
||||||
libdiskconfig \
|
|
||||||
libdiskconfig_host \
|
|
||||||
libdl \
|
|
||||||
libdrm1 \
|
|
||||||
libdrm1_jni \
|
|
||||||
libebl \
|
|
||||||
libebl_arm \
|
|
||||||
libebl_sh \
|
|
||||||
libebl_mips \
|
|
||||||
libedify \
|
|
||||||
libeffects \
|
|
||||||
libEGL \
|
|
||||||
libelf \
|
|
||||||
libESR_Portable \
|
|
||||||
libESR_Shared \
|
|
||||||
libETC1 \
|
|
||||||
libext \
|
|
||||||
libext2_blkid \
|
|
||||||
libext2_blkid_host \
|
|
||||||
libext2_com_err \
|
|
||||||
libext2_com_err_host \
|
|
||||||
libext2_e2p \
|
|
||||||
libext2_e2p_host \
|
|
||||||
libext2fs \
|
|
||||||
libext2fs_host \
|
|
||||||
libext2_profile \
|
|
||||||
libext2_profile_host \
|
|
||||||
libext2_uuid \
|
|
||||||
libext2_uuid_host \
|
|
||||||
libfdlibm \
|
|
||||||
libfdlibm-host \
|
|
||||||
libFFTEm \
|
|
||||||
libfst \
|
|
||||||
libft2 \
|
|
||||||
libgdbus_static \
|
|
||||||
libgif \
|
|
||||||
libGLES_android \
|
|
||||||
libGLESv1_CM \
|
|
||||||
libGLESv2 \
|
|
||||||
libglib \
|
|
||||||
libgui \
|
|
||||||
libhardware \
|
|
||||||
libhardware_legacy \
|
|
||||||
libhost \
|
|
||||||
libhyphenation \
|
|
||||||
libiprouteutil \
|
|
||||||
libiptc \
|
|
||||||
libjnigraphics \
|
|
||||||
libjni_latinime \
|
|
||||||
libjpeg \
|
|
||||||
libjs \
|
|
||||||
liblinenoise \
|
|
||||||
libloc_api-rpc \
|
|
||||||
liblog \
|
|
||||||
libm \
|
|
||||||
libmedia \
|
|
||||||
libmedia_jni \
|
|
||||||
libmediaplayerservice \
|
|
||||||
libmincrypt \
|
|
||||||
libminelf \
|
|
||||||
libminui \
|
|
||||||
libminzip \
|
|
||||||
libmtdutils \
|
|
||||||
libmtp \
|
|
||||||
libmusicbundle \
|
|
||||||
libneo_cgi \
|
|
||||||
libneo_cs \
|
|
||||||
libneo_util \
|
|
||||||
libnetlink \
|
|
||||||
libnetutils \
|
|
||||||
libop \
|
|
||||||
libOpenSLES \
|
|
||||||
libopensles_helper \
|
|
||||||
libOpenSLESUT \
|
|
||||||
libpcap \
|
|
||||||
libpixelflinger \
|
|
||||||
libpixelflinger_static \
|
|
||||||
libpng \
|
|
||||||
libpopt \
|
|
||||||
libpower \
|
|
||||||
libprotobuf-cpp-2.3.0-full \
|
|
||||||
libprotobuf-cpp-2.3.0-lite \
|
|
||||||
libprotobuf-java-2.3.0-lite \
|
|
||||||
libprotobuf-java-2.3.0-micro \
|
|
||||||
librecovery_ui_htc \
|
|
||||||
libreference-ril \
|
|
||||||
libreverb \
|
|
||||||
libreverbwrapper \
|
|
||||||
libril \
|
|
||||||
librilproto-java \
|
|
||||||
librpc \
|
|
||||||
librtp_jni \
|
|
||||||
libsafe_iop \
|
|
||||||
libSDL \
|
|
||||||
libSDLmain \
|
|
||||||
libsensorservice \
|
|
||||||
libskia \
|
|
||||||
libskiagl \
|
|
||||||
libsonivox \
|
|
||||||
libsoundpool \
|
|
||||||
libspeex \
|
|
||||||
libsqlite \
|
|
||||||
libsqlite3_android \
|
|
||||||
libSR_AcousticModels \
|
|
||||||
libSR_AcousticState \
|
|
||||||
libSR_AudioIn \
|
|
||||||
libSR_Core \
|
|
||||||
libSR_EventLog \
|
|
||||||
libSR_G2P \
|
|
||||||
libSR_Grammar \
|
|
||||||
libSR_Nametag \
|
|
||||||
libSR_Recognizer \
|
|
||||||
libSR_Semproc \
|
|
||||||
libSR_Session \
|
|
||||||
libSR_Vocabulary \
|
|
||||||
libstagefright_aacdec \
|
|
||||||
libstagefright_aacenc \
|
|
||||||
libstagefright_amrnb_common \
|
|
||||||
libstagefright_amrnbdec \
|
|
||||||
libstagefright_amrnbenc \
|
|
||||||
libstagefright_amrwbdec \
|
|
||||||
libstagefright_amrwbenc \
|
|
||||||
libstagefright_avc_common \
|
|
||||||
libstagefright_avcdec \
|
|
||||||
libstagefright_avcenc \
|
|
||||||
libstagefright_color_conversion \
|
|
||||||
libstagefright_enc_common \
|
|
||||||
libstagefright_foundation \
|
|
||||||
libstagefright_g711dec \
|
|
||||||
libstagefright_httplive \
|
|
||||||
libstagefrighthw \
|
|
||||||
libstagefright_id3 \
|
|
||||||
libstagefright_m4vh263dec \
|
|
||||||
libstagefright_m4vh263enc \
|
|
||||||
libstagefright_matroska \
|
|
||||||
libstagefright_mp3dec \
|
|
||||||
libstagefright_mpeg2ts \
|
|
||||||
libstagefright_omx \
|
|
||||||
libstagefright_rtsp \
|
|
||||||
libstagefright_vorbisdec \
|
|
||||||
libstagefright_vpxdec \
|
|
||||||
libstagefright_yuv \
|
|
||||||
libstdc++ \
|
|
||||||
libstlport \
|
|
||||||
libstlport_static \
|
|
||||||
libstorage \
|
|
||||||
libsurfaceflinger \
|
|
||||||
libsurfaceflinger_client \
|
|
||||||
libsvoxpico \
|
|
||||||
libsystem_server \
|
|
||||||
libsysutils \
|
|
||||||
libthread_db \
|
|
||||||
libtinyxml \
|
|
||||||
libtomcrypt \
|
|
||||||
libtommath \
|
|
||||||
libttspico \
|
|
||||||
libttssynthproxy \
|
|
||||||
libui \
|
|
||||||
libunz \
|
|
||||||
libusbhost \
|
|
||||||
libutil \
|
|
||||||
libutils \
|
|
||||||
libv8 \
|
|
||||||
libvisualizer \
|
|
||||||
libvorbisidec \
|
|
||||||
libvpx \
|
|
||||||
libwebcore \
|
|
||||||
libwpa_client \
|
|
||||||
libwrapsim \
|
|
||||||
libxml2 \
|
|
||||||
libxslt \
|
|
||||||
libzipfile \
|
|
||||||
lights.kraken \
|
|
||||||
lights.qsd8k \
|
|
||||||
line_endings \
|
|
||||||
linker \
|
|
||||||
llvm-rs-link \
|
|
||||||
localize \
|
|
||||||
logcat \
|
|
||||||
logwrapper \
|
|
||||||
lsd \
|
|
||||||
make_cfst \
|
|
||||||
makedict \
|
|
||||||
make_ext4fs \
|
|
||||||
make_g2g \
|
|
||||||
makekeycodes \
|
|
||||||
make_ve_grammar \
|
|
||||||
mediaserver \
|
|
||||||
minigzip \
|
|
||||||
mkbootfs \
|
|
||||||
mkbootimg \
|
|
||||||
mke2fs \
|
|
||||||
mke2fs_host \
|
|
||||||
mksdcard \
|
|
||||||
mksnapshot \
|
|
||||||
mkstubs \
|
|
||||||
mkuserimg.sh \
|
|
||||||
mkyaffs2image \
|
|
||||||
mockrilcontroller \
|
|
||||||
monkey \
|
|
||||||
monkeyrunner \
|
|
||||||
MonkeyRunnerTest \
|
|
||||||
mtp \
|
|
||||||
mtpd \
|
|
||||||
ndc \
|
|
||||||
netcfg \
|
|
||||||
netd \
|
|
||||||
network \
|
|
||||||
ninepatch \
|
|
||||||
oauth \
|
|
||||||
obbtool \
|
|
||||||
omx_tests \
|
|
||||||
org.eclipse.core.commands_3.4.0.I20080509-2000 \
|
|
||||||
org.eclipse.equinox.common_3.4.0.v20080421-2006 \
|
|
||||||
org.eclipse.jface_3.4.2.M20090107-0800 \
|
|
||||||
org-netbeans-api-visual \
|
|
||||||
org-openide-util \
|
|
||||||
osgi \
|
|
||||||
pand \
|
|
||||||
parseStringTest \
|
|
||||||
ping \
|
|
||||||
platform.xml \
|
|
||||||
pm \
|
|
||||||
post_trace \
|
|
||||||
pppd \
|
|
||||||
preload \
|
|
||||||
profile_pid \
|
|
||||||
profile_trace \
|
|
||||||
q2dm \
|
|
||||||
q2g \
|
|
||||||
qemu-android \
|
|
||||||
racoon \
|
|
||||||
read_addr \
|
|
||||||
read_method \
|
|
||||||
read_pid \
|
|
||||||
read_trace \
|
|
||||||
resize2fs \
|
|
||||||
resize2fs_host \
|
|
||||||
rgb2565 \
|
|
||||||
rsg-generator \
|
|
||||||
run-as \
|
|
||||||
runtime \
|
|
||||||
schedtest \
|
|
||||||
screenshot \
|
|
||||||
screenshot2 \
|
|
||||||
sdcard \
|
|
||||||
sdklauncher \
|
|
||||||
sdklib \
|
|
||||||
sdkmanager \
|
|
||||||
sdkstats \
|
|
||||||
sdkuilib \
|
|
||||||
sdk_v4 \
|
|
||||||
sdk_v5 \
|
|
||||||
sdk_v6 \
|
|
||||||
sdk_v7 \
|
|
||||||
sdk_v8 \
|
|
||||||
sdptool \
|
|
||||||
service \
|
|
||||||
servicemanager \
|
|
||||||
services \
|
|
||||||
sig \
|
|
||||||
sig-check \
|
|
||||||
sig-create \
|
|
||||||
signapk \
|
|
||||||
signature-tools \
|
|
||||||
spec-progress \
|
|
||||||
sqlite3 \
|
|
||||||
stack_dump \
|
|
||||||
stringtemplate \
|
|
||||||
surfaceflinger \
|
|
||||||
svc \
|
|
||||||
swing-worker-1.1 \
|
|
||||||
swt \
|
|
||||||
system_server \
|
|
||||||
tblgen \
|
|
||||||
tc \
|
|
||||||
temp_layoutlib \
|
|
||||||
test_g2g \
|
|
||||||
test-progress \
|
|
||||||
test-progress-new \
|
|
||||||
test_swiarb \
|
|
||||||
test_zipfile \
|
|
||||||
toolbox \
|
|
||||||
traceview \
|
|
||||||
tune2fs \
|
|
||||||
tune2fs_host \
|
|
||||||
usbtest \
|
|
||||||
vdc \
|
|
||||||
vm-tests \
|
|
||||||
vold \
|
|
||||||
wdsclient \
|
|
||||||
wpa_supplicant \
|
|
||||||
yuv420sp2rgb \
|
|
||||||
zipalign
|
|
147
target/product/base.mk
Normal file
147
target/product/base.mk
Normal file
@@ -0,0 +1,147 @@
|
|||||||
|
#
|
||||||
|
# Copyright (C) 2012 The Android Open Source Project
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
#
|
||||||
|
|
||||||
|
# Base modules (will move elsewhere, previously user tagged)
|
||||||
|
PRODUCT_PACKAGES += \
|
||||||
|
20-dns.conf \
|
||||||
|
95-configured \
|
||||||
|
adb \
|
||||||
|
adbd \
|
||||||
|
am \
|
||||||
|
android.policy \
|
||||||
|
android.test.runner \
|
||||||
|
app_process \
|
||||||
|
applypatch \
|
||||||
|
bmgr \
|
||||||
|
bootanimation \
|
||||||
|
bugreport \
|
||||||
|
content \
|
||||||
|
dbus-daemon \
|
||||||
|
debuggerd \
|
||||||
|
dhcpcd \
|
||||||
|
dhcpcd-run-hooks \
|
||||||
|
dnsmasq \
|
||||||
|
dumpstate \
|
||||||
|
dumpsys \
|
||||||
|
framework \
|
||||||
|
fsck_msdos \
|
||||||
|
gralloc.default \
|
||||||
|
gzip \
|
||||||
|
ime \
|
||||||
|
init \
|
||||||
|
input \
|
||||||
|
javax.obex \
|
||||||
|
libEGL \
|
||||||
|
libETC1 \
|
||||||
|
libFFTEm \
|
||||||
|
libGLES_android \
|
||||||
|
libGLESv1_CM \
|
||||||
|
libGLESv2 \
|
||||||
|
libSR_AudioIn \
|
||||||
|
libandroid \
|
||||||
|
libandroid_runtime \
|
||||||
|
libandroid_servers \
|
||||||
|
libaudioeffect_jni \
|
||||||
|
libaudioflinger \
|
||||||
|
libbinder \
|
||||||
|
libbundlewrapper \
|
||||||
|
libc \
|
||||||
|
libcamera_client \
|
||||||
|
libcameraservice \
|
||||||
|
libchromium_net \
|
||||||
|
libctest \
|
||||||
|
libcutils \
|
||||||
|
libdbus \
|
||||||
|
libdl \
|
||||||
|
libdrm1 \
|
||||||
|
libdrm1_jni \
|
||||||
|
libeffects \
|
||||||
|
libgui \
|
||||||
|
libhardware \
|
||||||
|
libhardware_legacy \
|
||||||
|
libiprouteutil \
|
||||||
|
libjni_latinime \
|
||||||
|
libjnigraphics \
|
||||||
|
libjpeg \
|
||||||
|
liblog \
|
||||||
|
libm \
|
||||||
|
libmedia \
|
||||||
|
libmedia_jni \
|
||||||
|
libmediaplayerservice \
|
||||||
|
libmtp \
|
||||||
|
libnetlink \
|
||||||
|
libnetutils \
|
||||||
|
libpixelflinger \
|
||||||
|
libpower \
|
||||||
|
libreference-ril \
|
||||||
|
libreverbwrapper \
|
||||||
|
libril \
|
||||||
|
librtp_jni \
|
||||||
|
libsensorservice \
|
||||||
|
libskia \
|
||||||
|
libsonivox \
|
||||||
|
libsoundpool \
|
||||||
|
libsqlite \
|
||||||
|
libstagefright \
|
||||||
|
libstagefright_amrnb_common \
|
||||||
|
libstagefright_avc_common \
|
||||||
|
libstagefright_enc_common \
|
||||||
|
libstagefright_foundation \
|
||||||
|
libstagefright_omx \
|
||||||
|
libstagefright_yuv \
|
||||||
|
libstdc++ \
|
||||||
|
libstlport \
|
||||||
|
libsurfaceflinger \
|
||||||
|
libsurfaceflinger_client \
|
||||||
|
libsystem_server \
|
||||||
|
libsysutils \
|
||||||
|
libthread_db \
|
||||||
|
libui \
|
||||||
|
libusbhost \
|
||||||
|
libutils \
|
||||||
|
libvisualizer \
|
||||||
|
libvorbisidec \
|
||||||
|
libwebcore \
|
||||||
|
libwpa_client \
|
||||||
|
linker \
|
||||||
|
logcat \
|
||||||
|
logwrapper \
|
||||||
|
mediaserver \
|
||||||
|
monkey \
|
||||||
|
mtpd \
|
||||||
|
ndc \
|
||||||
|
netcfg \
|
||||||
|
netd \
|
||||||
|
ping \
|
||||||
|
platform.xml \
|
||||||
|
pppd \
|
||||||
|
pm \
|
||||||
|
racoon \
|
||||||
|
run-as \
|
||||||
|
schedtest \
|
||||||
|
screenshot \
|
||||||
|
sdcard \
|
||||||
|
service \
|
||||||
|
servicemanager \
|
||||||
|
services \
|
||||||
|
surfaceflinger \
|
||||||
|
svc \
|
||||||
|
system_server \
|
||||||
|
tc \
|
||||||
|
toolbox \
|
||||||
|
vdc \
|
||||||
|
vold
|
||||||
|
|
@@ -22,7 +22,7 @@ PRODUCT_PROPERTY_OVERRIDES := \
|
|||||||
ro.config.notification_sound=OnTheHunt.ogg \
|
ro.config.notification_sound=OnTheHunt.ogg \
|
||||||
ro.config.alarm_alert=Alarm_Classic.ogg
|
ro.config.alarm_alert=Alarm_Classic.ogg
|
||||||
|
|
||||||
PRODUCT_PACKAGES := \
|
PRODUCT_PACKAGES += \
|
||||||
ApplicationsProvider \
|
ApplicationsProvider \
|
||||||
BackupRestoreConfirmation \
|
BackupRestoreConfirmation \
|
||||||
Browser \
|
Browser \
|
||||||
@@ -163,3 +163,6 @@ ifeq ($(HAVE_SELINUX),true)
|
|||||||
property_contexts \
|
property_contexts \
|
||||||
mac_permissions.xml
|
mac_permissions.xml
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
$(call inherit-product, $(SRC_TARGET_DIR)/product/base.mk)
|
||||||
|
|
||||||
|
@@ -46,6 +46,22 @@ PRODUCT_PACKAGES := \
|
|||||||
hostapd \
|
hostapd \
|
||||||
wpa_supplicant.conf
|
wpa_supplicant.conf
|
||||||
|
|
||||||
|
PRODUCT_PACKAGES += \
|
||||||
|
audio \
|
||||||
|
bluetoothd \
|
||||||
|
brcm_patchram_plus \
|
||||||
|
dhcpcd.conf \
|
||||||
|
hciattach \
|
||||||
|
libbluedroid \
|
||||||
|
libbluetooth \
|
||||||
|
libbluetoothd \
|
||||||
|
libglib \
|
||||||
|
network \
|
||||||
|
pand \
|
||||||
|
pppd \
|
||||||
|
sdptool \
|
||||||
|
wpa_supplicant
|
||||||
|
|
||||||
PRODUCT_PACKAGES += \
|
PRODUCT_PACKAGES += \
|
||||||
icu.dat
|
icu.dat
|
||||||
|
|
||||||
|
@@ -51,6 +51,7 @@ PRODUCT_PROPERTY_OVERRIDES += \
|
|||||||
ro.config.notification_sound=OnTheHunt.ogg \
|
ro.config.notification_sound=OnTheHunt.ogg \
|
||||||
ro.config.alarm_alert=Alarm_Classic.ogg
|
ro.config.alarm_alert=Alarm_Classic.ogg
|
||||||
|
|
||||||
|
# Please keep this list sorted alphabetically
|
||||||
PRODUCT_PACKAGES += \
|
PRODUCT_PACKAGES += \
|
||||||
ApplicationsProvider \
|
ApplicationsProvider \
|
||||||
ContactsProvider \
|
ContactsProvider \
|
||||||
@@ -64,6 +65,8 @@ PRODUCT_PACKAGES += \
|
|||||||
UserDictionaryProvider \
|
UserDictionaryProvider \
|
||||||
abcc \
|
abcc \
|
||||||
apache-xml \
|
apache-xml \
|
||||||
|
audio \
|
||||||
|
bluetoothd \
|
||||||
bouncycastle \
|
bouncycastle \
|
||||||
bu \
|
bu \
|
||||||
cacerts \
|
cacerts \
|
||||||
@@ -81,6 +84,7 @@ PRODUCT_PACKAGES += \
|
|||||||
dx \
|
dx \
|
||||||
ext \
|
ext \
|
||||||
framework-res \
|
framework-res \
|
||||||
|
hciattach \
|
||||||
hprof-conv \
|
hprof-conv \
|
||||||
icu.dat \
|
icu.dat \
|
||||||
installd \
|
installd \
|
||||||
@@ -138,13 +142,17 @@ PRODUCT_PACKAGES += \
|
|||||||
libwebrtc_audio_preprocessing \
|
libwebrtc_audio_preprocessing \
|
||||||
libwilhelm \
|
libwilhelm \
|
||||||
libz \
|
libz \
|
||||||
|
lint \
|
||||||
mdnsd \
|
mdnsd \
|
||||||
|
mms-common \
|
||||||
|
network \
|
||||||
|
pand \
|
||||||
requestsync \
|
requestsync \
|
||||||
screencap \
|
screencap \
|
||||||
|
sdptool \
|
||||||
sensorservice \
|
sensorservice \
|
||||||
lint \
|
|
||||||
telephony-common \
|
telephony-common \
|
||||||
mms-common
|
wpa_supplicant
|
||||||
|
|
||||||
PRODUCT_COPY_FILES += \
|
PRODUCT_COPY_FILES += \
|
||||||
system/core/rootdir/init.usb.rc:root/init.usb.rc \
|
system/core/rootdir/init.usb.rc:root/init.usb.rc \
|
||||||
@@ -211,6 +219,7 @@ PRODUCT_PROPERTY_OVERRIDES += \
|
|||||||
ro.config.ringtone=Ring_Synth_04.ogg \
|
ro.config.ringtone=Ring_Synth_04.ogg \
|
||||||
ro.config.notification_sound=pixiedust.ogg
|
ro.config.notification_sound=pixiedust.ogg
|
||||||
|
|
||||||
|
$(call inherit-product, $(SRC_TARGET_DIR)/product/base.mk)
|
||||||
$(call inherit-product-if-exists, frameworks/base/data/keyboards/keyboards.mk)
|
$(call inherit-product-if-exists, frameworks/base/data/keyboards/keyboards.mk)
|
||||||
$(call inherit-product-if-exists, frameworks/base/data/fonts/fonts.mk)
|
$(call inherit-product-if-exists, frameworks/base/data/fonts/fonts.mk)
|
||||||
$(call inherit-product-if-exists, frameworks/base/data/sounds/AudioPackage5.mk)
|
$(call inherit-product-if-exists, frameworks/base/data/sounds/AudioPackage5.mk)
|
||||||
|
@@ -41,7 +41,7 @@ function do_builds
|
|||||||
do
|
do
|
||||||
rm -rf $TEST_BUILD_DIR/$PREFIX-$1
|
rm -rf $TEST_BUILD_DIR/$PREFIX-$1
|
||||||
make PRODUCT-$(echo $1 | sed "s/-.*//" )-installclean
|
make PRODUCT-$(echo $1 | sed "s/-.*//" )-installclean
|
||||||
make -j6 PRODUCT-$1 dist DIST_DIR=$TEST_BUILD_DIR/$PREFIX-$1
|
make -j16 PRODUCT-$1 dist DIST_DIR=$TEST_BUILD_DIR/$PREFIX-$1
|
||||||
if [ $? -ne 0 ] ; then
|
if [ $? -ne 0 ] ; then
|
||||||
echo FAILED
|
echo FAILED
|
||||||
return
|
return
|
||||||
|
68
tools/filter-product-graph.py
Executable file
68
tools/filter-product-graph.py
Executable file
@@ -0,0 +1,68 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
# vim: ts=2 sw=2 nocindent
|
||||||
|
|
||||||
|
import re
|
||||||
|
import sys
|
||||||
|
|
||||||
|
def choose_regex(regs, line):
|
||||||
|
for func,reg in regs:
|
||||||
|
m = reg.match(line)
|
||||||
|
if m:
|
||||||
|
return (func,m)
|
||||||
|
return (None,None)
|
||||||
|
|
||||||
|
def gather(included, deps):
|
||||||
|
result = set()
|
||||||
|
for inc in included:
|
||||||
|
result.add(inc)
|
||||||
|
for d in deps:
|
||||||
|
if inc == d[1]:
|
||||||
|
result.add(d[0])
|
||||||
|
return result
|
||||||
|
|
||||||
|
def main():
|
||||||
|
deps = []
|
||||||
|
infos = []
|
||||||
|
def dependency(m):
|
||||||
|
deps.append((m.group(1), m.group(2)))
|
||||||
|
def info(m):
|
||||||
|
infos.append((m.group(1), m.group(2)))
|
||||||
|
|
||||||
|
REGS = [
|
||||||
|
(dependency, re.compile(r'"(.*)"\s*->\s*"(.*)"')),
|
||||||
|
(info, re.compile(r'"(.*)"(\s*\[.*\])')),
|
||||||
|
]
|
||||||
|
|
||||||
|
lines = sys.stdin.readlines()
|
||||||
|
lines = [line.strip() for line in lines]
|
||||||
|
|
||||||
|
for line in lines:
|
||||||
|
func,m = choose_regex(REGS, line)
|
||||||
|
if func:
|
||||||
|
func(m)
|
||||||
|
|
||||||
|
# filter
|
||||||
|
sys.stderr.write("argv: " + str(sys.argv) + "\n")
|
||||||
|
if not (len(sys.argv) == 2 and sys.argv[1] == "--all"):
|
||||||
|
targets = sys.argv[1:]
|
||||||
|
|
||||||
|
included = set(targets)
|
||||||
|
prevLen = -1
|
||||||
|
while prevLen != len(included):
|
||||||
|
prevLen = len(included)
|
||||||
|
included = gather(included, deps)
|
||||||
|
|
||||||
|
deps = [dep for dep in deps if dep[1] in included]
|
||||||
|
infos = [info for info in infos if info[0] in included]
|
||||||
|
|
||||||
|
print "digraph {"
|
||||||
|
print "graph [ ratio=.5 ];"
|
||||||
|
for dep in deps:
|
||||||
|
print '"%s" -> "%s"' % dep
|
||||||
|
for info in infos:
|
||||||
|
print '"%s"%s' % info
|
||||||
|
print "}"
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
@@ -18,6 +18,5 @@ include $(CLEAR_VARS)
|
|||||||
LOCAL_SRC_FILES := fs_config.c
|
LOCAL_SRC_FILES := fs_config.c
|
||||||
LOCAL_MODULE := fs_config
|
LOCAL_MODULE := fs_config
|
||||||
LOCAL_FORCE_STATIC_EXECUTABLE := true
|
LOCAL_FORCE_STATIC_EXECUTABLE := true
|
||||||
LOCAL_MODULE_TAGS := eng
|
|
||||||
|
|
||||||
include $(BUILD_HOST_EXECUTABLE)
|
include $(BUILD_HOST_EXECUTABLE)
|
||||||
|
151
tools/parsedeps.py
Executable file
151
tools/parsedeps.py
Executable file
@@ -0,0 +1,151 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
# vim: ts=2 sw=2
|
||||||
|
|
||||||
|
import optparse
|
||||||
|
import re
|
||||||
|
import sys
|
||||||
|
|
||||||
|
|
||||||
|
class Dependency:
|
||||||
|
def __init__(self, tgt):
|
||||||
|
self.tgt = tgt
|
||||||
|
self.pos = ""
|
||||||
|
self.prereqs = set()
|
||||||
|
self.visit = 0
|
||||||
|
|
||||||
|
def add(self, prereq):
|
||||||
|
self.prereqs.add(prereq)
|
||||||
|
|
||||||
|
|
||||||
|
class Dependencies:
|
||||||
|
def __init__(self):
|
||||||
|
self.lines = {}
|
||||||
|
self.__visit = 0
|
||||||
|
self.count = 0
|
||||||
|
|
||||||
|
def add(self, tgt, prereq):
|
||||||
|
t = self.lines.get(tgt)
|
||||||
|
if not t:
|
||||||
|
t = Dependency(tgt)
|
||||||
|
self.lines[tgt] = t
|
||||||
|
p = self.lines.get(prereq)
|
||||||
|
if not p:
|
||||||
|
p = Dependency(prereq)
|
||||||
|
self.lines[prereq] = p
|
||||||
|
t.add(p)
|
||||||
|
self.count = self.count + 1
|
||||||
|
|
||||||
|
def setPos(self, tgt, pos):
|
||||||
|
t = self.lines.get(tgt)
|
||||||
|
if not t:
|
||||||
|
t = Dependency(tgt)
|
||||||
|
self.lines[tgt] = t
|
||||||
|
t.pos = pos
|
||||||
|
|
||||||
|
def get(self, tgt):
|
||||||
|
if self.lines.has_key(tgt):
|
||||||
|
return self.lines[tgt]
|
||||||
|
else:
|
||||||
|
return None
|
||||||
|
|
||||||
|
def __iter__(self):
|
||||||
|
return self.lines.iteritems()
|
||||||
|
|
||||||
|
def trace(self, tgt, prereq):
|
||||||
|
self.__visit = self.__visit + 1
|
||||||
|
d = self.lines.get(tgt)
|
||||||
|
if not d:
|
||||||
|
return
|
||||||
|
return self.__trace(d, prereq)
|
||||||
|
|
||||||
|
def __trace(self, d, prereq):
|
||||||
|
if d.visit == self.__visit:
|
||||||
|
return d.trace
|
||||||
|
if d.tgt == prereq:
|
||||||
|
return [ [ d ], ]
|
||||||
|
d.visit = self.__visit
|
||||||
|
result = []
|
||||||
|
for pre in d.prereqs:
|
||||||
|
recursed = self.__trace(pre, prereq)
|
||||||
|
for r in recursed:
|
||||||
|
result.append([ d ] + r)
|
||||||
|
d.trace = result
|
||||||
|
return result
|
||||||
|
|
||||||
|
def help():
|
||||||
|
print "Commands:"
|
||||||
|
print " dep TARGET Print the prerequisites for TARGET"
|
||||||
|
print " trace TARGET PREREQ Print the paths from TARGET to PREREQ"
|
||||||
|
|
||||||
|
|
||||||
|
def main(argv):
|
||||||
|
opts = optparse.OptionParser()
|
||||||
|
opts.add_option("-i", "--interactive", action="store_true", dest="interactive",
|
||||||
|
help="Interactive mode")
|
||||||
|
(options, args) = opts.parse_args()
|
||||||
|
|
||||||
|
deps = Dependencies()
|
||||||
|
|
||||||
|
filename = args[0]
|
||||||
|
print "Reading %s" % filename
|
||||||
|
|
||||||
|
if True:
|
||||||
|
f = open(filename)
|
||||||
|
for line in f:
|
||||||
|
line = line.strip()
|
||||||
|
if len(line) > 0:
|
||||||
|
if line[0] == '#':
|
||||||
|
pos,tgt = line.rsplit(":", 1)
|
||||||
|
pos = pos[1:].strip()
|
||||||
|
tgt = tgt.strip()
|
||||||
|
deps.setPos(tgt, pos)
|
||||||
|
else:
|
||||||
|
(tgt,prereq) = line.split(':', 1)
|
||||||
|
tgt = tgt.strip()
|
||||||
|
prereq = prereq.strip()
|
||||||
|
deps.add(tgt, prereq)
|
||||||
|
f.close()
|
||||||
|
|
||||||
|
print "Read %d dependencies. %d targets." % (deps.count, len(deps.lines))
|
||||||
|
while True:
|
||||||
|
line = raw_input("target> ")
|
||||||
|
if not line.strip():
|
||||||
|
continue
|
||||||
|
split = line.split()
|
||||||
|
cmd = split[0]
|
||||||
|
if len(split) == 2 and cmd == "dep":
|
||||||
|
tgt = split[1]
|
||||||
|
d = deps.get(tgt)
|
||||||
|
if d:
|
||||||
|
for prereq in d.prereqs:
|
||||||
|
print prereq.tgt
|
||||||
|
elif len(split) == 3 and cmd == "trace":
|
||||||
|
tgt = split[1]
|
||||||
|
prereq = split[2]
|
||||||
|
if False:
|
||||||
|
print "from %s to %s" % (tgt, prereq)
|
||||||
|
trace = deps.trace(tgt, prereq)
|
||||||
|
if trace:
|
||||||
|
width = 0
|
||||||
|
for g in trace:
|
||||||
|
for t in g:
|
||||||
|
if len(t.tgt) > width:
|
||||||
|
width = len(t.tgt)
|
||||||
|
for g in trace:
|
||||||
|
for t in g:
|
||||||
|
if t.pos:
|
||||||
|
print t.tgt, " " * (width-len(t.tgt)), " #", t.pos
|
||||||
|
else:
|
||||||
|
print t.tgt
|
||||||
|
print
|
||||||
|
else:
|
||||||
|
help()
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
try:
|
||||||
|
main(sys.argv)
|
||||||
|
except KeyboardInterrupt:
|
||||||
|
print
|
||||||
|
except EOFError:
|
||||||
|
print
|
||||||
|
|
160
tools/product_debug.py
Executable file
160
tools/product_debug.py
Executable file
@@ -0,0 +1,160 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
#
|
||||||
|
# Copyright (C) 2012 The Android Open Source Project
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
|
||||||
|
import os
|
||||||
|
import re
|
||||||
|
import sys
|
||||||
|
|
||||||
|
def break_lines(key, val):
|
||||||
|
# these don't get split
|
||||||
|
if key in ("PRODUCT_MODEL"):
|
||||||
|
return (key,val)
|
||||||
|
return (key, "\n".join(val.split()))
|
||||||
|
|
||||||
|
def split_line(line):
|
||||||
|
words = line.split("=", 1)
|
||||||
|
if len(words) == 1:
|
||||||
|
return (words[0], "")
|
||||||
|
else:
|
||||||
|
return (words[0], words[1])
|
||||||
|
|
||||||
|
def sort_lines(text):
|
||||||
|
lines = text.split()
|
||||||
|
lines.sort()
|
||||||
|
return "\n".join(lines)
|
||||||
|
|
||||||
|
def parse_variables(lines):
|
||||||
|
return [split_line(line) for line in lines if line.strip()]
|
||||||
|
|
||||||
|
def render_variables(variables):
|
||||||
|
variables = dict(variables)
|
||||||
|
del variables["FILE"]
|
||||||
|
variables = list(variables.iteritems())
|
||||||
|
variables.sort(lambda a, b: cmp(a[0], b[0]))
|
||||||
|
return ("<table id='variables'>"
|
||||||
|
+ "\n".join([ "<tr><th>%(key)s</th><td>%(val)s</td></tr>" % { "key": key, "val": val }
|
||||||
|
for key,val in variables])
|
||||||
|
+"</table>")
|
||||||
|
|
||||||
|
def linkify_inherit(variables, text, func_name):
|
||||||
|
groups = re.split("(\\$\\(call " + func_name + ",.*\\))", text)
|
||||||
|
result = ""
|
||||||
|
for i in range(0,len(groups)/2):
|
||||||
|
i = i * 2
|
||||||
|
result = result + groups[i]
|
||||||
|
s = groups[i+1]
|
||||||
|
href = s.split(",", 1)[1].strip()[:-1]
|
||||||
|
href = href.replace("$(SRC_TARGET_DIR)", "build/target")
|
||||||
|
href = ("../" * variables["FILE"].count("/")) + href + ".html"
|
||||||
|
result = result + "<a href=\"%s\">%s</a>" % (href,s)
|
||||||
|
result = result + groups[-1]
|
||||||
|
return result
|
||||||
|
|
||||||
|
def render_original(variables, text):
|
||||||
|
text = linkify_inherit(variables, text, "inherit-product")
|
||||||
|
text = linkify_inherit(variables, text, "inherit-product-if-exists")
|
||||||
|
return text
|
||||||
|
|
||||||
|
def read_file(fn):
|
||||||
|
f = file(fn)
|
||||||
|
text = f.read()
|
||||||
|
f.close()
|
||||||
|
return text
|
||||||
|
|
||||||
|
def main(argv):
|
||||||
|
# read the variables
|
||||||
|
lines = sys.stdin.readlines()
|
||||||
|
variables = parse_variables(lines)
|
||||||
|
|
||||||
|
# format the variables
|
||||||
|
variables = [break_lines(key,val) for key,val in variables]
|
||||||
|
|
||||||
|
# now it's a dict
|
||||||
|
variables = dict(variables)
|
||||||
|
|
||||||
|
sorted_vars = (
|
||||||
|
"PRODUCT_COPY_FILES",
|
||||||
|
"PRODUCT_PACKAGES",
|
||||||
|
"PRODUCT_LOCALES",
|
||||||
|
"PRODUCT_FACTORY_RAMDISK_MODULES",
|
||||||
|
"PRODUCT_PROPERTY_OVERRIDES",
|
||||||
|
)
|
||||||
|
|
||||||
|
for key in sorted_vars:
|
||||||
|
variables[key] = sort_lines(variables[key])
|
||||||
|
|
||||||
|
# the original file
|
||||||
|
original = read_file(variables["FILE"])
|
||||||
|
|
||||||
|
# formatting
|
||||||
|
values = dict(variables)
|
||||||
|
values.update({
|
||||||
|
"variables": render_variables(variables),
|
||||||
|
"original": render_original(variables, original),
|
||||||
|
})
|
||||||
|
print """<html>
|
||||||
|
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<title>%(FILE)s</title>
|
||||||
|
<style type="text/css">
|
||||||
|
body {
|
||||||
|
font-family: Helvetica, Arial, sans-serif;
|
||||||
|
padding-bottom: 20px;
|
||||||
|
}
|
||||||
|
#variables {
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
#variables th, #variables td {
|
||||||
|
vertical-align: top;
|
||||||
|
text-align: left;
|
||||||
|
border-top: 1px solid #c5cdde;
|
||||||
|
border-bottom: 1px solid #c5cdde;
|
||||||
|
padding: 2px 10px 2px 10px;
|
||||||
|
}
|
||||||
|
#variables th {
|
||||||
|
font-size: 10pt;
|
||||||
|
background-color: #e2ecff
|
||||||
|
}
|
||||||
|
#variables td {
|
||||||
|
background-color: #ebf2ff;
|
||||||
|
white-space: pre;
|
||||||
|
font-size: 10pt;
|
||||||
|
}
|
||||||
|
#original {
|
||||||
|
background-color: #ebf2ff;
|
||||||
|
border-top: 1px solid #c5cdde;
|
||||||
|
border-bottom: 1px solid #c5cdde;
|
||||||
|
padding: 2px 10px 2px 10px;
|
||||||
|
white-space: pre;
|
||||||
|
font-size: 10pt;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>%(FILE)s</h1>
|
||||||
|
<a href="#Original">Original</a>
|
||||||
|
<a href="#Variables">Variables</a>
|
||||||
|
<h2><a name="Original"></a>Original</h2>
|
||||||
|
<div id="original">%(original)s</div>
|
||||||
|
<h2><a name="Variables"></a>Variables</h2>
|
||||||
|
%(variables)s
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
""" % values
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main(sys.argv)
|
Reference in New Issue
Block a user