forked from openkylin/platform_build
am f72e34eb: Merge changes I9d3a3c16,I17b5d441,I29e27505,Ia5ca233e,I0a0b200b,I6f412ed4,I623821df,Ifec8e63e,I12d0a847,Idac551e5,I59a88027,I2498139d,I6bd93a87
* commit 'f72e34ebf49ed2a06fe9e37d134f2088e2c0c0e4': Move the old user tagged modules over to base.mk so mini and core both share them. More product debugging. build system changes for jb-aah-dev merge Fail when a non-vendor product references a vendor module. Remove support for user tags in the build system. List the user modules explicitly, and we can get rid of the support for the user tag! Dump the user tagged modules. host modules don't need LOCAL_MODULE_TAGS Don't give the user tag to host modules automatically. Add a phony "nothing" goal that reads the makefiles but doesn't try to build anything. Add tool to parse make dependency info from new --deps flag. Use a more modern -j flag. make product-graph now filtered
This commit is contained in:
commit
5836d3b3d9
|
@ -58,51 +58,31 @@ endif
|
|||
LOCAL_UNINSTALLABLE_MODULE := $(strip $(LOCAL_UNINSTALLABLE_MODULE))
|
||||
LOCAL_MODULE_TAGS := $(sort $(LOCAL_MODULE_TAGS))
|
||||
ifeq (,$(LOCAL_MODULE_TAGS))
|
||||
ifeq (true,$(LOCAL_UNINSTALLABLE_MODULE))
|
||||
LOCAL_MODULE_TAGS := optional
|
||||
else
|
||||
# Installable modules without tags fall back to user (which is changed to user eng below)
|
||||
LOCAL_MODULE_TAGS := user
|
||||
LOCAL_MODULE_TAGS := optional
|
||||
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
|
||||
|
||||
# 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
|
||||
# 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))
|
||||
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 it's necessary, if)
|
||||
$(warning * 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.
|
||||
#
|
||||
|
@ -117,27 +97,11 @@ ifneq ($(gpl_license_file),)
|
|||
ALL_GPL_MODULE_LICENSE_FILES := $(sort $(ALL_GPL_MODULE_LICENSE_FILES) $(gpl_license_file))
|
||||
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))
|
||||
ifneq ($(words $(LOCAL_MODULE_CLASS)),1)
|
||||
$(error $(LOCAL_PATH): LOCAL_MODULE_CLASS must contain exactly one word, not "$(LOCAL_MODULE_CLASS)")
|
||||
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))
|
||||
ifdef LOCAL_IS_HOST_MODULE
|
||||
partition_tag :=
|
||||
|
@ -544,6 +508,17 @@ $(installed_odex) : $(built_odex) | $(ACP)
|
|||
$(LOCAL_INSTALLED_MODULE) : $(installed_odex)
|
||||
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
|
||||
|
||||
|
||||
|
@ -593,6 +568,8 @@ ALL_MODULES.$(LOCAL_MODULE).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) $(LOCAL_INTERMEDIATE_SOURCE_DIR)
|
||||
ALL_MODULES.$(LOCAL_MODULE).MAKEFILE := \
|
||||
$(ALL_MODULES.$(LOCAL_MODULE).MAKEFILE) $(LOCAL_MODULE_MAKEFILE)
|
||||
ifdef LOCAL_MODULE_OWNER
|
||||
ALL_MODULES.$(LOCAL_MODULE).OWNER := \
|
||||
$(strip $(ALL_MODULES.$(LOCAL_MODULE).OWNER) $(LOCAL_MODULE_OWNER))
|
||||
|
|
|
@ -55,6 +55,11 @@ ALL_MODULE_TAGS:=
|
|||
# its sub-variables.)
|
||||
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
|
||||
# (used to make the dependency on acp)
|
||||
ALL_PREBUILT:=
|
||||
|
@ -2040,10 +2045,6 @@ endef
|
|||
# when requested.
|
||||
include $(BUILD_SYSTEM)/distdir.mk
|
||||
|
||||
# -----------------------------------------------------------------
|
||||
# The modules allowed to use a user tag
|
||||
include $(BUILD_SYSTEM)/user_tags.mk
|
||||
|
||||
# broken:
|
||||
# $(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.
|
||||
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)
|
||||
$(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
|
||||
|
||||
# ---------------------------------------------------------------
|
||||
|
|
67
core/main.mk
67
core/main.mk
|
@ -224,13 +224,11 @@ include $(BUILD_SYSTEM)/definitions.mk
|
|||
# Bring in dex_preopt.mk
|
||||
include $(BUILD_SYSTEM)/dex_preopt.mk
|
||||
|
||||
ifneq ($(filter eng user userdebug,$(MAKECMDGOALS)),)
|
||||
ifneq ($(filter user userdebug eng,$(MAKECMDGOALS)),)
|
||||
$(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.)
|
||||
# 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 choosecombo.)
|
||||
$(info ***************************************************************)
|
||||
|
@ -279,13 +277,13 @@ endif # HAVE_SELINUX
|
|||
|
||||
## user/userdebug ##
|
||||
|
||||
user_variant := $(filter userdebug user,$(TARGET_BUILD_VARIANT))
|
||||
user_variant := $(filter user userdebug,$(TARGET_BUILD_VARIANT))
|
||||
enable_target_debugging := true
|
||||
tags_to_install :=
|
||||
ifneq (,$(user_variant))
|
||||
# Target is secure in user builds.
|
||||
ADDITIONAL_DEFAULT_PROPERTIES += ro.secure=1
|
||||
|
||||
tags_to_install := user
|
||||
ifeq ($(user_variant),userdebug)
|
||||
# Pick up some extra useful tools
|
||||
tags_to_install += debug
|
||||
|
@ -333,7 +331,7 @@ endif # !enable_target_debugging
|
|||
## 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))),)
|
||||
# Don't require the setup wizard on eng builds
|
||||
ADDITIONAL_BUILD_PROPERTIES := $(filter-out ro.setupwizard.mode=%,\
|
||||
|
@ -345,7 +343,7 @@ endif
|
|||
## tests ##
|
||||
|
||||
ifeq ($(TARGET_BUILD_VARIANT),tests)
|
||||
tags_to_install := user debug eng tests
|
||||
tags_to_install := debug eng tests
|
||||
endif
|
||||
|
||||
## sdk ##
|
||||
|
@ -362,7 +360,7 @@ endif
|
|||
|
||||
# TODO: this should be eng I think. Since the sdk is built from the eng
|
||||
# variant.
|
||||
tags_to_install := user debug eng
|
||||
tags_to_install := debug eng
|
||||
ADDITIONAL_BUILD_PROPERTIES += xmpp.auto-presence=true
|
||||
ADDITIONAL_BUILD_PROPERTIES += ro.config.nocheckin=yes
|
||||
else # !sdk
|
||||
|
@ -591,42 +589,46 @@ add-required-deps :=
|
|||
|
||||
# -------------------------------------------------------------------
|
||||
# Figure out our module sets.
|
||||
|
||||
#
|
||||
# Of the modules defined by the component makefiles,
|
||||
# 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
|
||||
# The base list of modules to build for this product is specified
|
||||
# by the appropriate product definition file, which was included
|
||||
# by product_config.make.
|
||||
user_PACKAGES := $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_PACKAGES)
|
||||
$(call expand-required-modules,user_PACKAGES,$(user_PACKAGES))
|
||||
user_PACKAGES := $(call module-installed-files, $(user_PACKAGES))
|
||||
product_MODULES := $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_PACKAGES)
|
||||
$(call expand-required-modules,product_MODULES,$(product_MODULES))
|
||||
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
|
||||
# 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
|
||||
# requested by the product, because we probably won't have rules
|
||||
# to build them.
|
||||
user_PACKAGES :=
|
||||
product_FILES :=
|
||||
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 $(call get-tagged-modules,eng))
|
||||
# When modules are tagged with debug eng or tests, they are installed
|
||||
# for those variants regardless of what the product spec says.
|
||||
debug_MODULES := $(sort $(call get-tagged-modules,debug))
|
||||
eng_MODULES := $(sort $(call get-tagged-modules,eng))
|
||||
tests_MODULES := $(sort $(call get-tagged-modules,tests))
|
||||
|
||||
ifeq ($(strip $(tags_to_install)),)
|
||||
$(error ASSERTION FAILED: tags_to_install should not be empty)
|
||||
endif
|
||||
modules_to_install := $(sort $(Default_MODULES) \
|
||||
$(foreach tag,$(tags_to_install),$($(tag)_MODULES)))
|
||||
# TODO: Remove the 3 places in the tree that use ALL_DEFAULT_INSTALLED_MODULES
|
||||
# and get rid of it from this list.
|
||||
# TODO: The shell is chosen by magic. Do we still need this?
|
||||
modules_to_install := $(sort \
|
||||
$(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.
|
||||
# Filter out (do not install) any overridden packages.
|
||||
|
@ -657,9 +659,11 @@ ifdef is_sdk_build
|
|||
# Ensure every module listed in PRODUCT_PACKAGES gets something installed
|
||||
$(foreach m, $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_PACKAGES), \
|
||||
$(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!)))
|
||||
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
|
||||
# top-level makefile with. It expects that ALL_DEFAULT_INSTALLED_MODULES
|
||||
|
@ -672,6 +676,7 @@ ALL_DEFAULT_INSTALLED_MODULES :=
|
|||
|
||||
endif # dont_bother
|
||||
|
||||
|
||||
# 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.
|
||||
modules_to_check := $(foreach m,$(ALL_MODULES),$(ALL_MODULES.$(m).CHECKED))
|
||||
|
@ -871,3 +876,7 @@ modules:
|
|||
.PHONY: showcommands
|
||||
showcommands:
|
||||
@echo >/dev/null
|
||||
|
||||
.PHONY: nothing
|
||||
nothing:
|
||||
@echo Successfully read the makefiles.
|
||||
|
|
|
@ -199,6 +199,12 @@ $(dump-products)
|
|||
$(error done)
|
||||
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
|
||||
# file defining that product.
|
||||
#
|
||||
|
|
|
@ -14,35 +14,127 @@
|
|||
# limitations under the License.
|
||||
#
|
||||
|
||||
products_pdf := $(OUT_DIR)/products.pdf
|
||||
products_graph := $(products_pdf:%.pdf=%.dot)
|
||||
# the foreach and the if remove the single space entries that creep in because of the evals
|
||||
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):
|
||||
@echo Product graph DOT: $@
|
||||
define all-products-inner
|
||||
$(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) ( \
|
||||
echo 'digraph {'; \
|
||||
echo 'graph [ ratio=.5 ];'; \
|
||||
$(foreach p,$(ALL_PRODUCTS), \
|
||||
$(foreach d,$(PRODUCTS.$(strip $(p)).INHERITS_FROM), \
|
||||
echo \"$(d)\" -\> \"$(p)\";)) \
|
||||
$(foreach prod, \
|
||||
$(sort $(foreach p,$(ALL_PRODUCTS), \
|
||||
$(foreach d,$(PRODUCTS.$(strip $(p)).INHERITS_FROM), \
|
||||
$(d))) \
|
||||
$(foreach p,$(ALL_PRODUCTS),$(p))), \
|
||||
echo \"$(prod)\" [ label=\"$(dir $(prod))\\n$(notdir $(prod))\"];) \
|
||||
$(foreach p,$(PRIVATE_PRODUCTS), \
|
||||
$(foreach d,$(PRODUCTS.$(strip $(p)).INHERITS_FROM), echo \"$(d)\" -\> \"$(p)\";)) \
|
||||
$(foreach prod, $(PRIVATE_PRODUCTS), \
|
||||
echo \"$(prod)\" [ \
|
||||
label=\"$(dir $(prod))\\n$(notdir $(prod))\\n\\n$(PRODUCTS.$(strip $(prod)).PRODUCT_MODEL)\\n$(PRODUCTS.$(strip $(prod)).PRODUCT_DEVICE)\" \
|
||||
$(if $(filter $(prod),$(PRIVATE_PRODUCTS_FILTER)), style=\"filled\" fillcolor=\"#FFFDB0\",) \
|
||||
fontcolor=\"darkblue\" href=\"products/$(prod).html\" \
|
||||
];) \
|
||||
echo '}' \
|
||||
) > $@
|
||||
) \
|
||||
| ./build/tools/filter-product-graph.py $(PRIVATE_PRODUCTS_FILTER) \
|
||||
> $@
|
||||
|
||||
# This rule doesn't include any nodes that don't inherit from
|
||||
# anything or don't have anything inherit from them, to make the
|
||||
# graph more readable. To add that, add this line to the rule
|
||||
# below:
|
||||
# $(foreach p,$(ALL_PRODUCTS), echo \"$(p)\";) \
|
||||
# Evaluates to the name of the product file
|
||||
# $(1) product file
|
||||
define product-debug-filename
|
||||
$(OUT_DIR)/products/$(strip $(1)).html
|
||||
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)
|
||||
@echo Product graph PDF: $@
|
||||
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,499 +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 \
|
||||
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
|
|
@ -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.alarm_alert=Alarm_Classic.ogg
|
||||
|
||||
PRODUCT_PACKAGES := \
|
||||
PRODUCT_PACKAGES += \
|
||||
ApplicationsProvider \
|
||||
BackupRestoreConfirmation \
|
||||
Browser \
|
||||
|
@ -157,3 +157,6 @@ ifeq ($(HAVE_SELINUX),true)
|
|||
property_contexts \
|
||||
mac_permissions.xml
|
||||
endif
|
||||
|
||||
$(call inherit-product, $(SRC_TARGET_DIR)/product/base.mk)
|
||||
|
||||
|
|
|
@ -44,6 +44,22 @@ PRODUCT_PACKAGES := \
|
|||
hostapd \
|
||||
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 += \
|
||||
icu.dat
|
||||
|
||||
|
|
|
@ -51,6 +51,7 @@ PRODUCT_PROPERTY_OVERRIDES += \
|
|||
ro.config.notification_sound=OnTheHunt.ogg \
|
||||
ro.config.alarm_alert=Alarm_Classic.ogg
|
||||
|
||||
# Please keep this list sorted alphabetically
|
||||
PRODUCT_PACKAGES += \
|
||||
ApplicationsProvider \
|
||||
ContactsProvider \
|
||||
|
@ -63,6 +64,8 @@ PRODUCT_PACKAGES += \
|
|||
TelephonyProvider \
|
||||
UserDictionaryProvider \
|
||||
apache-xml \
|
||||
audio \
|
||||
bluetoothd \
|
||||
bouncycastle \
|
||||
bu \
|
||||
cacerts \
|
||||
|
@ -80,6 +83,7 @@ PRODUCT_PACKAGES += \
|
|||
dx \
|
||||
ext \
|
||||
framework-res \
|
||||
hciattach \
|
||||
hprof-conv \
|
||||
icu.dat \
|
||||
installd \
|
||||
|
@ -133,11 +137,15 @@ PRODUCT_PACKAGES += \
|
|||
libwebrtc_audio_preprocessing \
|
||||
libwilhelm \
|
||||
libz \
|
||||
lint \
|
||||
mdnsd \
|
||||
network \
|
||||
pand \
|
||||
requestsync \
|
||||
screencap \
|
||||
sdptool \
|
||||
sensorservice \
|
||||
lint
|
||||
wpa_supplicant
|
||||
|
||||
PRODUCT_COPY_FILES += \
|
||||
system/core/rootdir/init.usb.rc:root/init.usb.rc \
|
||||
|
@ -202,6 +210,7 @@ PRODUCT_PROPERTY_OVERRIDES += \
|
|||
ro.config.ringtone=Ring_Synth_04.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/fonts/fonts.mk)
|
||||
$(call inherit-product-if-exists, frameworks/base/data/sounds/AudioPackage5.mk)
|
||||
|
|
|
@ -41,7 +41,7 @@ function do_builds
|
|||
do
|
||||
rm -rf $TEST_BUILD_DIR/$PREFIX-$1
|
||||
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
|
||||
echo FAILED
|
||||
return
|
||||
|
|
|
@ -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_MODULE := fs_config
|
||||
LOCAL_FORCE_STATIC_EXECUTABLE := true
|
||||
LOCAL_MODULE_TAGS := eng
|
||||
|
||||
include $(BUILD_HOST_EXECUTABLE)
|
||||
|
|
|
@ -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
|
||||
|
|
@ -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)
|
Loading…
Reference in New Issue