am f5089846: docs: combine all possible js files into one to reduce the number of requests Also make change to doc template and css to fix footer layout bug introduced by change 9edfa6db8c53ef9515aaeed734bea02c5d65e1e5
* commit 'f5089846a1876f8e976d4bd1ddf383d3ed68d558':
docs: combine all possible js files into one to reduce the number of requests Also make change to doc template and css to fix footer layout bug introduced by change 9edfa6db8c53ef9515aaeed734bea02c5d65e1e5
diff --git a/CleanSpec.mk b/CleanSpec.mk
index b1b139a..6d81733 100644
--- a/CleanSpec.mk
+++ b/CleanSpec.mk
@@ -122,10 +122,10 @@
# Changing where ro.carrier value is instantiated for system/build.prop
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/build.prop)
-$(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/APPS/*)
-$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/app/*)
-$(call add-clean-step, rm -rf $(PRODUCT_OUT)/data/app/*)
-$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/build.prop)
+# Now we switched to build against Mac OS X SDK 10.6
+$(call add-clean-step, rm -rf $(OUT_DIR)/host/darwin-x86/obj)
+
+$(call add-clean-step, rm -f $(OUT_DIR)/versions_checked.mk)
# ************************************************
# NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST
diff --git a/core/Makefile b/core/Makefile
index 78b9f1e..d9f9a25 100644
--- a/core/Makefile
+++ b/core/Makefile
@@ -352,13 +352,9 @@
BUILT_RAMDISK_TARGET := $(PRODUCT_OUT)/ramdisk.img
-ifeq ($(HAVE_SELINUX),true)
-SELINUX_DEPENDS := sepolicy file_contexts seapp_contexts
-endif
-
# We just build this directly to the install location.
INSTALLED_RAMDISK_TARGET := $(BUILT_RAMDISK_TARGET)
-$(INSTALLED_RAMDISK_TARGET): $(MKBOOTFS) $(INTERNAL_RAMDISK_FILES) $(SELINUX_DEPENDS) | $(MINIGZIP)
+$(INSTALLED_RAMDISK_TARGET): $(MKBOOTFS) $(INTERNAL_RAMDISK_FILES) | $(MINIGZIP)
$(call pretty,"Target ram disk: $@")
$(hide) $(MKBOOTFS) $(TARGET_ROOT_OUT) | $(MINIGZIP) > $@
@@ -707,7 +703,7 @@
# $(tests_MODULES))
endif
-FULL_SYSTEMIMAGE_DEPS := $(INTERNAL_SYSTEMIMAGE_FILES) $(INTERNAL_USERIMAGES_DEPS) $(SELINUX_DEPENDS)
+FULL_SYSTEMIMAGE_DEPS := $(INTERNAL_SYSTEMIMAGE_FILES) $(INTERNAL_USERIMAGES_DEPS)
# -----------------------------------------------------------------
# installed file list
# Depending on anything that $(BUILT_SYSTEMIMAGE) depends on.
@@ -1156,7 +1152,7 @@
$(INTERNAL_OTA_PACKAGE_TARGET): KEY_CERT_PAIR := $(DEFAULT_KEY_CERT_PAIR)
-$(INTERNAL_OTA_PACKAGE_TARGET): $(BUILT_TARGET_FILES_PACKAGE) $(DISTTOOLS) $(SELINUX_DEPENDS)
+$(INTERNAL_OTA_PACKAGE_TARGET): $(BUILT_TARGET_FILES_PACKAGE) $(DISTTOOLS)
@echo "Package OTA: $@"
$(hide) ./build/tools/releasetools/ota_from_target_files -v \
-p $(HOST_OUT) \
@@ -1184,7 +1180,7 @@
$(INTERNAL_UPDATE_PACKAGE_TARGET): extensions := $(TARGET_RELEASETOOLS_EXTENSIONS)
endif
-$(INTERNAL_UPDATE_PACKAGE_TARGET): $(BUILT_TARGET_FILES_PACKAGE) $(DISTTOOLS) $(SELINUX_DEPENDS)
+$(INTERNAL_UPDATE_PACKAGE_TARGET): $(BUILT_TARGET_FILES_PACKAGE) $(DISTTOOLS)
@echo "Package: $@"
$(hide) ./build/tools/releasetools/img_from_target_files -v \
-s $(extensions) \
@@ -1298,7 +1294,7 @@
# -----------------------------------------------------------------
# The emulator package
-
+ifeq ($(BUILD_EMULATOR),true)
INTERNAL_EMULATOR_PACKAGE_FILES += \
$(HOST_OUT_EXECUTABLES)/emulator$(HOST_EXECUTABLE_SUFFIX) \
prebuilts/qemu-kernel/$(TARGET_ARCH)/kernel-qemu \
@@ -1314,6 +1310,7 @@
@echo "Package: $@"
$(hide) zip -qj $@ $(INTERNAL_EMULATOR_PACKAGE_FILES)
+endif
# -----------------------------------------------------------------
# Old PDK stuffs, retired
# The pdk package (Platform Development Kit)
@@ -1409,7 +1406,8 @@
$(atree_dir)/sdk.atree \
$(sdk_tools_atree_files) \
$(HOST_OUT_EXECUTABLES)/atree \
- $(HOST_OUT_EXECUTABLES)/line_endings
+ $(ALL_HOST_INSTALLED_FILES) \
+ $(HOST_OUT_EXECUTABLES)/line_endings
INTERNAL_SDK_TARGET := $(sdk_dir)/$(sdk_name).zip
$(INTERNAL_SDK_TARGET): PRIVATE_NAME := $(sdk_name)
@@ -1433,6 +1431,7 @@
done; \
if [ $$FAIL ]; then exit 1; fi
$(hide) ( \
+ ATREE_STRIP="strip -x" \
$(HOST_OUT_EXECUTABLES)/atree \
$(addprefix -f ,$(PRIVATE_INPUT_FILES)) \
-m $(PRIVATE_DEP_FILE) \
@@ -1487,6 +1486,7 @@
# These are some additional build tasks that need to be run.
include $(sort $(wildcard $(BUILD_SYSTEM)/tasks/*.mk))
-include $(sort $(wildcard vendor/*/build/tasks/*.mk))
+-include $(sort $(wildcard device/*/build/tasks/*.mk))
# -----------------------------------------------------------------
# Create SDK repository packages. Must be done after tasks/* since
diff --git a/core/base_rules.mk b/core/base_rules.mk
index 51fb398..deb73ea 100644
--- a/core/base_rules.mk
+++ b/core/base_rules.mk
@@ -58,51 +58,31 @@
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 @@
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,16 @@
$(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)
+ ALL_HOST_INSTALLED_FILES += $(LOCAL_INSTALLED_MODULE)
+ ifneq ($(filter debug eng tests, $(LOCAL_MODULE_TAGS)),)
+ $(warning $(LOCAL_MODULE_MAKEFILE): Module "$(LOCAL_MODULE)" has useless module tags: $(filter debug eng tests, $(LOCAL_MODULE_TAGS)). It will be installed anyway.)
+ LOCAL_MODULE_TAGS := $(filter-out debug eng tests, $(LOCAL_MODULE_TAGS))
+ endif
+endif
+
endif # !LOCAL_UNINSTALLABLE_MODULE
@@ -593,6 +567,8 @@
$(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))
diff --git a/core/binary.mk b/core/binary.mk
index 04ac90b..04e0128 100644
--- a/core/binary.mk
+++ b/core/binary.mk
@@ -148,6 +148,15 @@
LOCAL_LDFLAGS += $(TARGET_FDO_CFLAGS)
endif
+####################################################
+## Add profiling flags if aprof is turned on
+####################################################
+ifeq ($(strip $(LOCAL_ENABLE_APROF)),true)
+ # -ffunction-sections and -fomit-frame-pointer are conflict with -pg
+ LOCAL_CFLAGS += -fno-omit-frame-pointer -fno-function-sections -pg
+ LOCAL_CPPFLAGS += -fno-omit-frame-pointer -fno-function-sections -pg
+endif
+
###########################################################
## Explicitly declare assembly-only __ASSEMBLY__ macro for
## assembly source
diff --git a/core/build_id.mk b/core/build_id.mk
index 40bb35d..e954794 100644
--- a/core/build_id.mk
+++ b/core/build_id.mk
@@ -23,7 +23,7 @@
# (like "TC1-RC5"). It must be a single word, and is
# capitalized by convention.
#
-BUILD_ID := MASTER
+BUILD_ID := OPENMASTER
# DISPLAY_BUILD_NUMBER should only be set for development branches,
# If set, the BUILD_NUMBER (cl) is appended to the BUILD_ID for
diff --git a/core/clear_vars.mk b/core/clear_vars.mk
index 0720efa..3137152 100644
--- a/core/clear_vars.mk
+++ b/core/clear_vars.mk
@@ -79,6 +79,8 @@
LOCAL_COPY_HEADERS:=
LOCAL_FORCE_STATIC_EXECUTABLE:=
LOCAL_ADDITIONAL_DEPENDENCIES:=
+LOCAL_ENABLE_APROF:=
+LOCAL_ENABLE_APROF_JNI:=
LOCAL_COMPRESS_MODULE_SYMBOLS:=
LOCAL_STRIP_MODULE:=
LOCAL_POST_PROCESS_COMMAND:=true
diff --git a/core/combo/HOST_darwin-x86.mk b/core/combo/HOST_darwin-x86.mk
index 198c53f..85bb2cd 100644
--- a/core/combo/HOST_darwin-x86.mk
+++ b/core/combo/HOST_darwin-x86.mk
@@ -29,27 +29,29 @@
HOST_GLOBAL_LDFLAGS += -m32
endif # BUILD_HOST_64bit
-# Use the Mac OSX SDK 10.5 if the build host is 10.6
build_mac_version := $(shell sw_vers -productVersion)
-ifneq ($(filter 10.6.%, $(build_mac_version)),)
-sdk_105_root := /Developer/SDKs/MacOSX10.5.sdk
-ifeq ($(wildcard $(sdk_105_root)),)
+mac_sdk_version := 10.6
+mac_sdk_root := /Developer/SDKs/MacOSX$(mac_sdk_version).sdk
+ifeq ($(wildcard $(mac_sdk_root)),)
+recent_xcode4_mac_sdk_root := /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX$(mac_sdk_version).sdk
+ifeq ($(wildcard $(recent_xcode4_mac_sdk_root)),)
$(warning *****************************************************)
-$(warning * You are building on Mac OSX 10.6.)
-$(warning * Can not find SDK 10.5 at $(sdk_105_root))
+$(warning * Can not find SDK $(mac_sdk_version) at $(mac_sdk_root))
+$(warning * or $(recent_xcode4_mac_sdk_root))
$(warning *****************************************************)
$(error Stop.)
endif
+mac_sdk_root := $(recent_xcode4_mac_sdk_root)
+endif
-HOST_GLOBAL_CFLAGS += -isysroot $(sdk_105_root) -mmacosx-version-min=10.5
-HOST_GLOBAL_LDFLAGS += -isysroot $(sdk_105_root) -mmacosx-version-min=10.5
-endif # build_mac_version is 10.6
+HOST_GLOBAL_CFLAGS += -isysroot $(mac_sdk_root) -mmacosx-version-min=$(mac_sdk_version)
+HOST_GLOBAL_LDFLAGS += -isysroot $(mac_sdk_root) -mmacosx-version-min=$(mac_sdk_version)
HOST_GLOBAL_CFLAGS += -fPIC
HOST_NO_UNDEFINED_LDFLAGS := -Wl,-undefined,error
-HOST_CC := $(CC)
-HOST_CXX := $(CXX)
+HOST_CC := gcc
+HOST_CXX := g++
HOST_AR := $(AR)
HOST_STRIP := $(STRIP)
HOST_STRIP_COMMAND = $(HOST_STRIP) --strip-debug $< -o $@
@@ -59,7 +61,7 @@
HOST_GLOBAL_CFLAGS += \
-include $(call select-android-config-h,darwin-x86)
-ifneq ($(filter 10.7.%, $(build_mac_version)),)
+ifneq ($(filter 10.7 10.7.% 10.8 10.8.%, $(build_mac_version)),)
HOST_RUN_RANLIB_AFTER_COPYING := false
else
HOST_RUN_RANLIB_AFTER_COPYING := true
diff --git a/core/combo/TARGET_linux-arm.mk b/core/combo/TARGET_linux-arm.mk
index 4a461f8..14c3d28 100644
--- a/core/combo/TARGET_linux-arm.mk
+++ b/core/combo/TARGET_linux-arm.mk
@@ -181,7 +181,7 @@
TARGET_FDO_LIB:=
target_libgcov := $(shell $(TARGET_CC) $(TARGET_GLOBAL_CFLAGS) \
- --print-file-name=libgcov.a)
+ -print-file-name=libgcov.a)
ifneq ($(strip $(BUILD_FDO_INSTRUMENT)),)
# Set BUILD_FDO_INSTRUMENT=true to turn on FDO instrumentation.
# The profile will be generated on /data/local/tmp/profile on the device.
@@ -280,6 +280,9 @@
$(call normalize-target-libraries,$(PRIVATE_ALL_SHARED_LIBRARIES)) \
$(if $(filter true,$(PRIVATE_NO_CRT)),,$(TARGET_CRTBEGIN_DYNAMIC_O)) \
$(PRIVATE_ALL_OBJECTS) \
+ -Wl,--whole-archive \
+ $(call normalize-target-libraries,$(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES)) \
+ -Wl,--no-whole-archive \
$(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--start-group) \
$(call normalize-target-libraries,$(PRIVATE_ALL_STATIC_LIBRARIES)) \
$(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--end-group) \
@@ -299,6 +302,9 @@
$(TARGET_GLOBAL_LDFLAGS) \
$(PRIVATE_LDFLAGS) \
$(PRIVATE_ALL_OBJECTS) \
+ -Wl,--whole-archive \
+ $(call normalize-target-libraries,$(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES)) \
+ -Wl,--no-whole-archive \
$(call normalize-target-libraries,$(filter-out %libc_nomalloc.a,$(filter-out %libc.a,$(PRIVATE_ALL_STATIC_LIBRARIES)))) \
-Wl,--start-group \
$(call normalize-target-libraries,$(filter %libc.a,$(PRIVATE_ALL_STATIC_LIBRARIES))) \
diff --git a/core/combo/TARGET_linux-mips.mk b/core/combo/TARGET_linux-mips.mk
new file mode 100644
index 0000000..a3a891e
--- /dev/null
+++ b/core/combo/TARGET_linux-mips.mk
@@ -0,0 +1,284 @@
+#
+# 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.
+#
+
+# Configuration for Linux on MIPS.
+# Included by combo/select.mk
+
+# You can set TARGET_ARCH_VARIANT to use an arch version other
+# than mips32r2-fp. Each value should correspond to a file named
+# $(BUILD_COMBOS)/arch/<name>.mk which must contain
+# makefile variable definitions similar to the preprocessor
+# defines in system/core/include/arch/<combo>/AndroidConfig.h. Their
+# purpose is to allow module Android.mk files to selectively compile
+# different versions of code based upon the funtionality and
+# instructions available in a given architecture version.
+#
+# The blocks also define specific arch_variant_cflags, which
+# include defines, and compiler settings for the given architecture
+# version.
+#
+ifeq ($(strip $(TARGET_ARCH_VARIANT)),)
+TARGET_ARCH_VARIANT := mips32r2-fp
+endif
+
+TARGET_ARCH_SPECIFIC_MAKEFILE := $(BUILD_COMBOS)/arch/$(TARGET_ARCH)/$(TARGET_ARCH_VARIANT).mk
+ifeq ($(strip $(wildcard $(TARGET_ARCH_SPECIFIC_MAKEFILE))),)
+$(error Unknown MIPS architecture variant: $(TARGET_ARCH_VARIANT))
+endif
+
+include $(TARGET_ARCH_SPECIFIC_MAKEFILE)
+
+# You can set TARGET_TOOLS_PREFIX to get gcc from somewhere else
+ifeq ($(strip $(TARGET_TOOLS_PREFIX)),)
+TARGET_TOOLCHAIN_ROOT := prebuilts/gcc/$(HOST_PREBUILT_TAG)/mips/mipsel-linux-android-4.6
+TARGET_TOOLS_PREFIX := $(TARGET_TOOLCHAIN_ROOT)/bin/mipsel-linux-android-
+endif
+
+# Only define these if there's actually a gcc in there.
+# The gcc toolchain does not exists for windows/cygwin. In this case, do not reference it.
+ifneq ($(wildcard $(TARGET_TOOLS_PREFIX)gcc$(HOST_EXECUTABLE_SUFFIX)),)
+ TARGET_CC := $(TARGET_TOOLS_PREFIX)gcc$(HOST_EXECUTABLE_SUFFIX)
+ TARGET_CXX := $(TARGET_TOOLS_PREFIX)g++$(HOST_EXECUTABLE_SUFFIX)
+ TARGET_AR := $(TARGET_TOOLS_PREFIX)ar$(HOST_EXECUTABLE_SUFFIX)
+ TARGET_OBJCOPY := $(TARGET_TOOLS_PREFIX)objcopy$(HOST_EXECUTABLE_SUFFIX)
+ TARGET_LD := $(TARGET_TOOLS_PREFIX)ld$(HOST_EXECUTABLE_SUFFIX)
+ TARGET_STRIP := $(TARGET_TOOLS_PREFIX)strip$(HOST_EXECUTABLE_SUFFIX)
+ ifeq ($(TARGET_BUILD_VARIANT),user)
+ TARGET_STRIP_COMMAND = $(TARGET_STRIP) --strip-all $< -o $@
+ else
+ TARGET_STRIP_COMMAND = $(TARGET_STRIP) --strip-all $< -o $@ && \
+ $(TARGET_OBJCOPY) --add-gnu-debuglink=$< $@
+ endif
+endif
+
+TARGET_NO_UNDEFINED_LDFLAGS := -Wl,--no-undefined
+
+TARGET_mips_CFLAGS := -O2 \
+ -fomit-frame-pointer \
+ -fno-strict-aliasing \
+ -funswitch-loops
+
+# Set FORCE_MIPS_DEBUGGING to "true" in your buildspec.mk
+# or in your environment to gdb debugging easier.
+# Don't forget to do a clean build.
+ifeq ($(FORCE_MIPS_DEBUGGING),true)
+ TARGET_mips_CFLAGS += -fno-omit-frame-pointer
+endif
+
+android_config_h := $(call select-android-config-h,linux-mips)
+arch_include_dir := $(dir $(android_config_h))
+
+TARGET_GLOBAL_CFLAGS += \
+ $(TARGET_mips_CFLAGS) \
+ -Ulinux -U__unix -U__unix__ -Umips \
+ -fpic \
+ -ffunction-sections \
+ -fdata-sections \
+ -funwind-tables \
+ -Werror=format-security \
+ $(arch_variant_cflags) \
+ -include $(android_config_h) \
+ -I $(arch_include_dir)
+
+# This warning causes dalvik not to build with gcc 4.6.x and -Werror.
+# We cannot turn it off blindly since the option is not available
+# in gcc-4.4.x.
+ifneq ($(filter 4.6.%, $(shell $(TARGET_CC) --version)),)
+TARGET_GLOBAL_CFLAGS += -Wno-unused-but-set-variable \
+ -fno-strict-volatile-bitfields
+endif
+
+# This is to avoid the dreaded warning compiler message:
+# note: the mangling of 'va_list' has changed in GCC 4.4
+#
+# The fact that the mangling changed does not affect the NDK ABI
+# very fortunately (since none of the exposed APIs used va_list
+# in their exported C++ functions). Also, GCC 4.5 has already
+# removed the warning from the compiler.
+#
+TARGET_GLOBAL_CFLAGS += -Wno-psabi
+
+ifneq ($(ARCH_MIPS_PAGE_SHIFT),)
+TARGET_GLOBAL_CFLAGS += -DPAGE_SHIFT=$(ARCH_MIPS_PAGE_SHIFT)
+endif
+
+TARGET_GLOBAL_LDFLAGS += \
+ $(arch_variant_ldflags)
+
+TARGET_GLOBAL_CPPFLAGS += -fvisibility-inlines-hidden \
+ -fno-use-cxa-atexit
+
+# More flags/options can be added here
+TARGET_RELEASE_CFLAGS := \
+ -DNDEBUG \
+ -g \
+ -Wstrict-aliasing=2 \
+ -fgcse-after-reload \
+ -frerun-cse-after-loop \
+ -frename-registers
+
+libc_root := bionic/libc
+libm_root := bionic/libm
+libstdc++_root := bionic/libstdc++
+libthread_db_root := bionic/libthread_db
+
+
+## on some hosts, the target cross-compiler is not available so do not run this command
+ifneq ($(wildcard $(TARGET_CC)),)
+# We compile with the global cflags to ensure that
+# any flags which affect libgcc are correctly taken
+# into account.
+TARGET_LIBGCC := \
+ $(shell $(TARGET_CC) $(TARGET_GLOBAL_CFLAGS) -print-file-name=libgcc.a)
+LIBGCC_EH := $(shell $(TARGET_CC) $(TARGET_GLOBAL_CFLAGS) -print-file-name=libgcc_eh.a)
+ifneq ($(LIBGCC_EH),libgcc_eh.a)
+ TARGET_LIBGCC += $(LIBGCC_EH)
+endif
+endif
+
+# Define FDO (Feedback Directed Optimization) options.
+
+TARGET_FDO_CFLAGS:=
+TARGET_FDO_LIB:=
+
+target_libgcov := $(shell $(TARGET_CC) $(TARGET_GLOBAL_CFLAGS) \
+ --print-file-name=libgcov.a)
+ifneq ($(strip $(BUILD_FDO_INSTRUMENT)),)
+ # Set BUILD_FDO_INSTRUMENT=true to turn on FDO instrumentation.
+ # The profile will be generated on /data/local/tmp/profile on the device.
+ TARGET_FDO_CFLAGS := -fprofile-generate=/data/local/tmp/profile -DANDROID_FDO
+ TARGET_FDO_LIB := $(target_libgcov)
+else
+ # If BUILD_FDO_INSTRUMENT is turned off, then consider doing the FDO optimizations.
+ # Set TARGET_FDO_PROFILE_PATH to set a custom profile directory for your build.
+ ifeq ($(strip $(TARGET_FDO_PROFILE_PATH)),)
+ TARGET_FDO_PROFILE_PATH := fdo/profiles/$(TARGET_ARCH)/$(TARGET_ARCH_VARIANT)
+ else
+ ifeq ($(strip $(wildcard $(TARGET_FDO_PROFILE_PATH))),)
+ $(warning Custom TARGET_FDO_PROFILE_PATH supplied, but directory does not exist. Turn off FDO.)
+ endif
+ endif
+
+ # If the FDO profile directory can't be found, then FDO is off.
+ ifneq ($(strip $(wildcard $(TARGET_FDO_PROFILE_PATH))),)
+ TARGET_FDO_CFLAGS := -fprofile-use=$(TARGET_FDO_PROFILE_PATH) -DANDROID_FDO
+ TARGET_FDO_LIB := $(target_libgcov)
+ endif
+endif
+
+
+# unless CUSTOM_KERNEL_HEADERS is defined, we're going to use
+# symlinks located in out/ to point to the appropriate kernel
+# headers. see 'config/kernel_headers.make' for more details
+#
+ifneq ($(CUSTOM_KERNEL_HEADERS),)
+ KERNEL_HEADERS_COMMON := $(CUSTOM_KERNEL_HEADERS)
+ KERNEL_HEADERS_ARCH := $(CUSTOM_KERNEL_HEADERS)
+else
+ KERNEL_HEADERS_COMMON := $(libc_root)/kernel/common
+ KERNEL_HEADERS_ARCH := $(libc_root)/kernel/arch-$(TARGET_ARCH)
+endif
+KERNEL_HEADERS := $(KERNEL_HEADERS_COMMON) $(KERNEL_HEADERS_ARCH)
+
+TARGET_C_INCLUDES := \
+ $(libc_root)/arch-mips/include \
+ $(libc_root)/include \
+ $(libstdc++_root)/include \
+ $(KERNEL_HEADERS) \
+ $(libm_root)/include \
+ $(libm_root)/include/mips \
+ $(libthread_db_root)/include
+
+TARGET_CRTBEGIN_STATIC_O := $(TARGET_OUT_STATIC_LIBRARIES)/crtbegin_static.o
+TARGET_CRTBEGIN_DYNAMIC_O := $(TARGET_OUT_STATIC_LIBRARIES)/crtbegin_dynamic.o
+TARGET_CRTEND_O := $(TARGET_OUT_STATIC_LIBRARIES)/crtend_android.o
+
+TARGET_CRTBEGIN_SO_O := $(TARGET_OUT_STATIC_LIBRARIES)/crtbegin_so.o
+TARGET_CRTEND_SO_O := $(TARGET_OUT_STATIC_LIBRARIES)/crtend_so.o
+
+TARGET_STRIP_MODULE:=true
+
+TARGET_DEFAULT_SYSTEM_SHARED_LIBRARIES := libc libstdc++ libm
+
+TARGET_CUSTOM_LD_COMMAND := true
+
+# Enable the Dalvik JIT compiler if not already specified.
+ifeq ($(strip $(WITH_JIT)),)
+ WITH_JIT := true
+endif
+
+define transform-o-to-shared-lib-inner
+$(hide) $(PRIVATE_CXX) \
+ -nostdlib -Wl,-soname,$(notdir $@) \
+ -Wl,--gc-sections \
+ -shared -Bsymbolic \
+ $(PRIVATE_TARGET_GLOBAL_LD_DIRS) \
+ $(if $(filter true,$(PRIVATE_NO_CRT)),,$(PRIVATE_TARGET_CRTBEGIN_SO_O)) \
+ $(PRIVATE_ALL_OBJECTS) \
+ -Wl,--whole-archive \
+ $(call normalize-target-libraries,$(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES)) \
+ -Wl,--no-whole-archive \
+ $(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--start-group) \
+ $(call normalize-target-libraries,$(PRIVATE_ALL_STATIC_LIBRARIES)) \
+ $(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--end-group) \
+ $(call normalize-target-libraries,$(PRIVATE_ALL_SHARED_LIBRARIES)) \
+ -o $@ \
+ $(PRIVATE_TARGET_GLOBAL_LDFLAGS) \
+ $(PRIVATE_LDFLAGS) \
+ $(PRIVATE_TARGET_FDO_LIB) \
+ $(PRIVATE_TARGET_LIBGCC) \
+ $(if $(filter true,$(PRIVATE_NO_CRT)),,$(PRIVATE_TARGET_CRTEND_SO_O))
+endef
+
+define transform-o-to-executable-inner
+$(hide) $(PRIVATE_CXX) -nostdlib -Bdynamic \
+ -Wl,-dynamic-linker,/system/bin/linker \
+ -Wl,--gc-sections \
+ -Wl,-z,nocopyreloc \
+ -o $@ \
+ $(TARGET_GLOBAL_LD_DIRS) \
+ -Wl,-rpath-link=$(TARGET_OUT_INTERMEDIATE_LIBRARIES) \
+ $(call normalize-target-libraries,$(PRIVATE_ALL_SHARED_LIBRARIES)) \
+ $(if $(filter true,$(PRIVATE_NO_CRT)),,$(TARGET_CRTBEGIN_DYNAMIC_O)) \
+ $(PRIVATE_ALL_OBJECTS) \
+ $(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--start-group) \
+ $(call normalize-target-libraries,$(PRIVATE_ALL_STATIC_LIBRARIES)) \
+ $(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--end-group) \
+ $(TARGET_GLOBAL_LDFLAGS) \
+ $(PRIVATE_LDFLAGS) \
+ $(TARGET_FDO_LIB) \
+ $(TARGET_LIBGCC) \
+ $(if $(filter true,$(PRIVATE_NO_CRT)),,$(TARGET_CRTEND_O))
+endef
+
+define transform-o-to-static-executable-inner
+$(hide) $(PRIVATE_CXX) -nostdlib -Bstatic \
+ -Wl,--gc-sections \
+ -o $@ \
+ $(TARGET_GLOBAL_LD_DIRS) \
+ $(if $(filter true,$(PRIVATE_NO_CRT)),,$(TARGET_CRTBEGIN_STATIC_O)) \
+ $(TARGET_GLOBAL_LDFLAGS) \
+ $(PRIVATE_LDFLAGS) \
+ $(PRIVATE_ALL_OBJECTS) \
+ $(call normalize-target-libraries,$(filter-out %libc_nomalloc.a,$(filter-out %libc.a,$(PRIVATE_ALL_STATIC_LIBRARIES)))) \
+ -Wl,--start-group \
+ $(call normalize-target-libraries,$(filter %libc.a,$(PRIVATE_ALL_STATIC_LIBRARIES))) \
+ $(call normalize-target-libraries,$(filter %libc_nomalloc.a,$(PRIVATE_ALL_STATIC_LIBRARIES))) \
+ $(TARGET_FDO_LIB) \
+ $(TARGET_LIBGCC) \
+ -Wl,--end-group \
+ $(if $(filter true,$(PRIVATE_NO_CRT)),,$(TARGET_CRTEND_O))
+endef
diff --git a/core/combo/TARGET_linux-sh.mk b/core/combo/TARGET_linux-sh.mk
deleted file mode 100644
index 88c6215..0000000
--- a/core/combo/TARGET_linux-sh.mk
+++ /dev/null
@@ -1,179 +0,0 @@
-#
-# Copyright (C) 2006 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.
-#
-
-# Configuration for Linux on SuperH.
-# Included by combo/select.make
-
-# You can set TARGET_TOOLS_PREFIX to get gcc from somewhere else
-ifeq ($(strip $(TARGET_TOOLS_PREFIX)),)
-TARGET_TOOLCHAIN_ROOT := prebuilt/$(HOST_PREBUILT_TAG)/toolchain/sh-4.3.3
-TARGET_TOOLS_PREFIX := $(TARGET_TOOLCHAIN_ROOT)/bin/sh-linux-gnu-
-endif
-
-TARGET_CC := $(TARGET_TOOLS_PREFIX)gcc$(HOST_EXECUTABLE_SUFFIX)
-TARGET_CXX := $(TARGET_TOOLS_PREFIX)c++$(HOST_EXECUTABLE_SUFFIX)
-TARGET_AR := $(TARGET_TOOLS_PREFIX)ar$(HOST_EXECUTABLE_SUFFIX)
-TARGET_OBJCOPY := $(TARGET_TOOLS_PREFIX)objcopy$(HOST_EXECUTABLE_SUFFIX)
-TARGET_LD := $(TARGET_TOOLS_PREFIX)ld$(HOST_EXECUTABLE_SUFFIX)
-TARGET_STRIP := $(TARGET_TOOLS_PREFIX)strip$(HOST_EXECUTABLE_SUFFIX)
-
-ifeq ($(TARGET_BUILD_VARIANT),user)
-TARGET_STRIP_COMMAND = $(TARGET_STRIP) --strip-debug $< -o $@
-else
-TARGET_STRIP_COMMAND = $(TARGET_STRIP) --strip-debug $< -o $@ && \
- $(TARGET_OBJCOPY) --add-gnu-debuglink=$< $@
-endif
-
-TARGET_NO_UNDEFINED_LDFLAGS := -Wl,--no-undefined
-
-TARGET_sh_release_CFLAGS := -O2 \
- -fomit-frame-pointer \
- -fstrict-aliasing \
- -funswitch-loops \
- -finline-limit=300
-
-# When building for debug, compile everything as superh.
-TARGET_sh_debug_CFLAGS := $(TARGET_sh_release_CFLAGS) -fno-omit-frame-pointer -fno-strict-aliasing
-
-TARGET_GLOBAL_CFLAGS += \
- -fpic \
- -ffunction-sections \
- -funwind-tables \
- -fstack-protector \
- -include $(call select-android-config-h,linux-sh)
-
-TARGET_GLOBAL_CPPFLAGS += \
- -fno-use-cxa-atexit \
- -fvisibility-inlines-hidden
-
-TARGET_RELEASE_CFLAGS := \
- -DSK_RELEASE -DNDEBUG \
- -O2 -g \
- -Wstrict-aliasing=2 \
- -finline-functions \
- -fno-inline-functions-called-once \
- -fgcse-after-reload \
- -frerun-cse-after-loop \
- -frename-registers \
- -fno-builtin
-
-libc_root := bionic/libc
-libm_root := bionic/libm
-libstdc++_root := bionic/libstdc++
-libthread_db_root := bionic/libthread_db
-
-
-## on some hosts, the target cross-compiler is not available so do not run this command
-ifneq ($(wildcard $(TARGET_CC)),)
-# We compile with the global cflags to ensure that
-# any flags which affect libgcc are correctly taken
-# into account.
-LIBGCC_FILENAME := $(shell $(TARGET_CC) $(TARGET_GLOBAL_CFLAGS) -print-libgcc-file-name)
-LIBGCC_EH_FILENAME := $(subst libgcc,libgcc_eh,$(LIBGCC_FILENAME))
-TARGET_LIBGCC := $(LIBGCC_EH_FILENAME) $(LIBGCC_FILENAME)
-endif
-
-# unless CUSTOM_KERNEL_HEADERS is defined, we're going to use
-# symlinks located in out/ to point to the appropriate kernel
-# headers. see 'config/kernel_headers.make' for more details
-#
-ifneq ($(CUSTOM_KERNEL_HEADERS),)
- KERNEL_HEADERS_COMMON := $(CUSTOM_KERNEL_HEADERS)
- KERNEL_HEADERS_ARCH := $(CUSTOM_KERNEL_HEADERS)
-else
- KERNEL_HEADERS_COMMON := $(libc_root)/kernel/common
- KERNEL_HEADERS_ARCH := $(libc_root)/kernel/arch-$(TARGET_ARCH)
-endif
-KERNEL_HEADERS := $(KERNEL_HEADERS_COMMON) $(KERNEL_HEADERS_ARCH)
-
-TARGET_C_INCLUDES := \
- $(libc_root)/arch-sh/include \
- $(libc_root)/include \
- $(libstdc++_root)/include \
- $(KERNEL_HEADERS) \
- $(libm_root)/include \
- $(libm_root)/include/sh \
- $(libthread_db_root)/include
-
-TARGET_CRTBEGIN_STATIC_O := $(TARGET_OUT_STATIC_LIBRARIES)/crtbegin_static.o
-TARGET_CRTBEGIN_DYNAMIC_O := $(TARGET_OUT_STATIC_LIBRARIES)/crtbegin_dynamic.o
-TARGET_CRTEND_O := $(TARGET_OUT_STATIC_LIBRARIES)/crtend_android.o
-
-TARGET_CRTBEGIN_SO_O := $(TARGET_OUT_STATIC_LIBRARIES)/sobegin.o
-TARGET_CRTEND_SO_O := $(TARGET_OUT_STATIC_LIBRARIES)/soend.o
-
-TARGET_STRIP_MODULE:=true
-
-TARGET_DEFAULT_SYSTEM_SHARED_LIBRARIES := libc libstdc++ libm
-
-TARGET_CUSTOM_LD_COMMAND := true
-define transform-o-to-shared-lib-inner
-$(hide) $(PRIVATE_CXX) \
- -nostdlib -Wl,-soname,$(notdir $@) -Wl,-T,$(BUILD_SYSTEM)/shlelf.xsc \
- -Wl,--gc-sections -Wl,-z,norelro \
- -Wl,-shared,-Bsymbolic \
- $(PRIVATE_TARGET_GLOBAL_LD_DIRS) \
- $(if $(filter true,$(PRIVATE_NO_CRT)),,$(PRIVATE_TARGET_CRTBEGIN_SO_O)) \
- $(PRIVATE_ALL_OBJECTS) \
- -Wl,--whole-archive \
- $(call normalize-target-libraries,$(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES)) \
- -Wl,--no-whole-archive \
- $(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--start-group) \
- $(call normalize-target-libraries,$(PRIVATE_ALL_STATIC_LIBRARIES)) \
- $(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--end-group) \
- $(call normalize-target-libraries,$(PRIVATE_ALL_SHARED_LIBRARIES)) \
- -o $@ \
- $(PRIVATE_LDFLAGS) \
- $(subst -lrt,, $(subst -lpthread,,$(PRIVATE_LDLIBS))) \
- $(PRIVATE_TARGET_LIBGCC) \
- $(if $(filter true,$(PRIVATE_NO_CRT)),,$(PRIVATE_TARGET_CRTEND_SO_O))
-endef
-
-define transform-o-to-executable-inner
-$(hide) $(PRIVATE_CXX) -nostdlib -Bdynamic -Wl,-T,$(BUILD_SYSTEM)/shlelf.x \
- -Wl,-dynamic-linker,/system/bin/linker \
- -Wl,--gc-sections -Wl,-z,norelro \
- -Wl,-z,nocopyreloc \
- -o $@ \
- $(TARGET_GLOBAL_LD_DIRS) \
- -Wl,-rpath-link=$(TARGET_OUT_INTERMEDIATE_LIBRARIES) \
- $(call normalize-target-libraries,$(PRIVATE_ALL_SHARED_LIBRARIES)) \
- $(if $(filter true,$(PRIVATE_NO_CRT)),,$(TARGET_CRTBEGIN_DYNAMIC_O)) \
- $(PRIVATE_ALL_OBJECTS) \
- $(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--start-group) \
- $(call normalize-target-libraries,$(PRIVATE_ALL_STATIC_LIBRARIES)) \
- $(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--end-group) \
- $(PRIVATE_LDFLAGS) \
- $(TARGET_LIBGCC) \
- $(subst -lrt,, $(subst -lpthread,,$(PRIVATE_LDLIBS))) \
- $(if $(filter true,$(PRIVATE_NO_CRT)),,$(TARGET_CRTEND_O))
-endef
-
-define transform-o-to-static-executable-inner
-$(hide) $(PRIVATE_CXX) -nostdlib -Bstatic -Wl,-T,$(BUILD_SYSTEM)/shlelf.x \
- -Wl,--gc-sections -Wl,-z,norelro \
- -o $@ \
- $(TARGET_GLOBAL_LD_DIRS) \
- $(if $(filter true,$(PRIVATE_NO_CRT)),,$(TARGET_CRTBEGIN_STATIC_O)) \
- $(PRIVATE_LDFLAGS) \
- $(PRIVATE_ALL_OBJECTS) \
- -Wl,--start-group \
- $(call normalize-target-libraries,$(PRIVATE_ALL_STATIC_LIBRARIES)) \
- -Wl,--end-group \
- $(TARGET_LIBGCC) \
- $(subst -lrt,, $(subst -lpthread,,$(PRIVATE_LDLIBS))) \
- $(if $(filter true,$(PRIVATE_NO_CRT)),,$(TARGET_CRTEND_O))
-endef
diff --git a/core/combo/TARGET_linux-x86.mk b/core/combo/TARGET_linux-x86.mk
index dc4afb8..9c0f7b9 100644
--- a/core/combo/TARGET_linux-x86.mk
+++ b/core/combo/TARGET_linux-x86.mk
@@ -36,8 +36,8 @@
# You can set TARGET_TOOLS_PREFIX to get gcc from somewhere else
ifeq ($(strip $(TARGET_TOOLS_PREFIX)),)
-TARGET_TOOLCHAIN_ROOT := prebuilts/gcc/$(HOST_PREBUILT_TAG)/x86/i686-android-linux-4.4.3
-TARGET_TOOLS_PREFIX := $(TARGET_TOOLCHAIN_ROOT)/bin/i686-android-linux-
+TARGET_TOOLCHAIN_ROOT := prebuilts/gcc/$(HOST_PREBUILT_TAG)/x86/i686-linux-android-4.6
+TARGET_TOOLS_PREFIX := $(TARGET_TOOLCHAIN_ROOT)/bin/i686-linux-android-
endif
TARGET_CC := $(TARGET_TOOLS_PREFIX)gcc$(HOST_EXECUTABLE_SUFFIX)
@@ -104,7 +104,7 @@
# however, there have been reports that this is sometimes not the case. So make
# them explicit here unless we have the time to carefully check it
#
-TARGET_GLOBAL_CFLAGS += -mstackrealign -msse3 -mfpmath=sse
+TARGET_GLOBAL_CFLAGS += -mstackrealign -msse3 -mfpmath=sse -m32
# XXX: These flags should not be defined here anymore. Instead, the Android.mk
# of the modules that depend on these features should instead check the
@@ -186,11 +186,14 @@
endef
+# Add -fuse-ld=bfd because ld.gold doesn't support "--copy-dt-needed-entries".
define transform-o-to-executable-inner
$(hide) $(PRIVATE_CXX) \
$(TARGET_GLOBAL_LDFLAGS) \
-nostdlib -Bdynamic \
-Wl,-dynamic-linker,/system/bin/linker \
+ -Wl,--copy-dt-needed-entries \
+ -fuse-ld=bfd \
-Wl,-z,nocopyreloc \
-fPIE -pie \
-o $@ \
@@ -199,6 +202,9 @@
$(call normalize-target-libraries,$(PRIVATE_ALL_SHARED_LIBRARIES)) \
$(if $(filter true,$(PRIVATE_NO_CRT)),,$(TARGET_CRTBEGIN_DYNAMIC_O)) \
$(PRIVATE_ALL_OBJECTS) \
+ -Wl,--whole-archive \
+ $(call normalize-target-libraries,$(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES)) \
+ -Wl,--no-whole-archive \
$(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--start-group) \
$(call normalize-target-libraries,$(PRIVATE_ALL_STATIC_LIBRARIES)) \
$(if $(PRIVATE_GROUP_STATIC_LIBRARIES),-Wl$(comma)--end-group) \
@@ -216,6 +222,9 @@
$(if $(filter true,$(PRIVATE_NO_CRT)),,$(TARGET_CRTBEGIN_STATIC_O)) \
$(PRIVATE_LDFLAGS) \
$(PRIVATE_ALL_OBJECTS) \
+ -Wl,--whole-archive \
+ $(call normalize-target-libraries,$(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES)) \
+ -Wl,--no-whole-archive \
-Wl,--start-group \
$(call normalize-target-libraries,$(PRIVATE_ALL_STATIC_LIBRARIES)) \
$(TARGET_LIBGCC) \
diff --git a/core/combo/arch/mips/mips32-fp.mk b/core/combo/arch/mips/mips32-fp.mk
new file mode 100644
index 0000000..e60bdac
--- /dev/null
+++ b/core/combo/arch/mips/mips32-fp.mk
@@ -0,0 +1,14 @@
+# Configuration for Android on MIPS.
+# Generating binaries for MIPS32/hard-float/little-endian
+
+ARCH_MIPS_HAS_FPU :=true
+ARCH_HAVE_ALIGNED_DOUBLES :=true
+arch_variant_cflags := \
+ -EL \
+ -march=mips32 \
+ -mtune=mips32 \
+ -mips32 \
+ -mhard-float
+
+arch_variant_ldflags := \
+ -EL
diff --git a/core/combo/arch/mips/mips32.mk b/core/combo/arch/mips/mips32.mk
new file mode 100644
index 0000000..35ef0d8
--- /dev/null
+++ b/core/combo/arch/mips/mips32.mk
@@ -0,0 +1,12 @@
+# Configuration for Android on MIPS.
+# Generating binaries for MIPS32/soft-float/little-endian
+
+arch_variant_cflags := \
+ -EL \
+ -march=mips32 \
+ -mtune=mips32 \
+ -mips32 \
+ -msoft-float
+
+arch_variant_ldflags := \
+ -EL
diff --git a/core/combo/arch/mips/mips32r2-fp.mk b/core/combo/arch/mips/mips32r2-fp.mk
new file mode 100644
index 0000000..a407f00
--- /dev/null
+++ b/core/combo/arch/mips/mips32r2-fp.mk
@@ -0,0 +1,14 @@
+# Configuration for Android on MIPS.
+# Generating binaries for MIPS32R2/hard-float/little-endian
+
+ARCH_MIPS_HAS_FPU :=true
+ARCH_HAVE_ALIGNED_DOUBLES :=true
+arch_variant_cflags := \
+ -EL \
+ -march=mips32r2 \
+ -mtune=mips32r2 \
+ -mips32r2 \
+ -mhard-float
+
+arch_variant_ldflags := \
+ -EL
diff --git a/core/combo/arch/mips/mips32r2.mk b/core/combo/arch/mips/mips32r2.mk
new file mode 100644
index 0000000..369d499
--- /dev/null
+++ b/core/combo/arch/mips/mips32r2.mk
@@ -0,0 +1,12 @@
+# Configuration for Android on MIPS.
+# Generating binaries for MIPS32R2/soft-float/little-endian
+
+arch_variant_cflags := \
+ -EL \
+ -march=mips32r2 \
+ -mtune=mips32r2 \
+ -mips32r2 \
+ -msoft-float
+
+arch_variant_ldflags := \
+ -EL
diff --git a/core/combo/arch/mips/mips32r2dsp-fp.mk b/core/combo/arch/mips/mips32r2dsp-fp.mk
new file mode 100644
index 0000000..886872d
--- /dev/null
+++ b/core/combo/arch/mips/mips32r2dsp-fp.mk
@@ -0,0 +1,17 @@
+# Configuration for Android on MIPS.
+# Generating binaries for MIPS32R2/hard-float/little-endian/dsp
+
+ARCH_MIPS_HAS_DSP :=true
+ARCH_MIPS_DSP_REV :=1
+ARCH_MIPS_HAS_FPU :=true
+ARCH_HAVE_ALIGNED_DOUBLES :=true
+arch_variant_cflags := \
+ -EL \
+ -march=mips32r2 \
+ -mtune=mips32r2 \
+ -mips32r2 \
+ -mhard-float \
+ -mdsp
+
+arch_variant_ldflags := \
+ -EL
diff --git a/core/combo/arch/mips/mips32r2dsp.mk b/core/combo/arch/mips/mips32r2dsp.mk
new file mode 100644
index 0000000..e67adc7
--- /dev/null
+++ b/core/combo/arch/mips/mips32r2dsp.mk
@@ -0,0 +1,16 @@
+# Configuration for Android on MIPS.
+# Generating binaries for MIPS32R2/soft-float/little-endian/dsp
+
+ARCH_MIPS_HAS_DSP :=true
+ARCH_MIPS_DSP_REV :=1
+
+arch_variant_cflags := \
+ -EL \
+ -march=mips32r2 \
+ -mtune=mips32r2 \
+ -mips32r2 \
+ -msoft-float \
+ -mdsp
+
+arch_variant_ldflags := \
+ -EL
diff --git a/core/combo/arch/mips/mips32r2dspr2-fp.mk b/core/combo/arch/mips/mips32r2dspr2-fp.mk
new file mode 100644
index 0000000..27e090d
--- /dev/null
+++ b/core/combo/arch/mips/mips32r2dspr2-fp.mk
@@ -0,0 +1,17 @@
+# Configuration for Android on MIPS.
+# Generating binaries for MIPS32R2/hard-float/little-endian/dsp
+
+ARCH_MIPS_HAS_DSP :=true
+ARCH_MIPS_DSP_REV :=2
+ARCH_MIPS_HAS_FPU :=true
+ARCH_HAVE_ALIGNED_DOUBLES :=true
+arch_variant_cflags := \
+ -EL \
+ -march=mips32r2 \
+ -mtune=mips32r2 \
+ -mips32r2 \
+ -mhard-float \
+ -mdspr2
+
+arch_variant_ldflags := \
+ -EL
diff --git a/core/combo/arch/mips/mips32r2dspr2.mk b/core/combo/arch/mips/mips32r2dspr2.mk
new file mode 100644
index 0000000..c493d9a
--- /dev/null
+++ b/core/combo/arch/mips/mips32r2dspr2.mk
@@ -0,0 +1,16 @@
+# Configuration for Android on MIPS.
+# Generating binaries for MIPS32R2/soft-float/little-endian/dsp
+
+ARCH_MIPS_HAS_DSP :=true
+ARCH_MIPS_DSP_REV :=2
+
+arch_variant_cflags := \
+ -EL \
+ -march=mips32r2 \
+ -mtune=mips32r2 \
+ -mips32r2 \
+ -msoft-float \
+ -mdspr2
+
+arch_variant_ldflags := \
+ -EL
diff --git a/core/combo/select.mk b/core/combo/select.mk
index 803cfc0..e485d00 100644
--- a/core/combo/select.mk
+++ b/core/combo/select.mk
@@ -60,6 +60,23 @@
include $(BUILD_COMBOS)/$(combo_target)$(combo_os_arch).mk
ifneq ($(USE_CCACHE),)
+ # The default check uses size and modification time, causing false misses
+ # since the mtime depends when the repo was checked out
+ export CCACHE_COMPILERCHECK := content
+
+ # See man page, optimizations to get more cache hits
+ # implies that __DATE__ and __TIME__ are not critical for functionality.
+ # Ignore include file modification time since it will depend on when
+ # the repo was checked out
+ export CCACHE_SLOPPINESS := time_macros,include_file_mtime,file_macro
+
+ # Turn all preprocessor absolute paths into relative paths.
+ # Fixes absolute paths in preprocessed source due to use of -g.
+ # We don't really use system headers much so the rootdir is
+ # fine; ensures these paths are relative for all Android trees
+ # on a workstation.
+ export CCACHE_BASEDIR := /
+
CCACHE_HOST_TAG := $(HOST_PREBUILT_TAG)
# If we are cross-compiling Windows binaries on Linux
# then use the linux ccache binary instead.
diff --git a/core/config.mk b/core/config.mk
index f02fbef..03e4245 100644
--- a/core/config.mk
+++ b/core/config.mk
@@ -148,6 +148,9 @@
$(error Multiple board config files for TARGET_DEVICE $(TARGET_DEVICE): $(board_config_mk))
endif
include $(board_config_mk)
+ifeq ($(TARGET_ARCH),)
+ $(error TARGET_ARCH not defined by board config: $(board_config_mk))
+endif
TARGET_DEVICE_DIR := $(patsubst %/,%,$(dir $(board_config_mk)))
board_config_mk :=
@@ -326,7 +329,7 @@
ifeq ($(HOST_OS),darwin)
dir := $(HOST_OS)-$(HOST_ARCH)
endif
-OLD_FLEX := prebuilt/$(HOST_PREBUILT_TAG)/flex/flex-2.5.4a$(HOST_EXECUTABLE_SUFFIX)
+OLD_FLEX := prebuilts/misc/$(HOST_PREBUILT_TAG)/flex/flex-2.5.4a$(HOST_EXECUTABLE_SUFFIX)
ifeq ($(HOST_OS),darwin)
# Mac OS' screwy version of java uses a non-standard directory layout
diff --git a/core/definitions.mk b/core/definitions.mk
index 9fe0a11..1508cc6 100644
--- a/core/definitions.mk
+++ b/core/definitions.mk
@@ -55,6 +55,11 @@
# 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:=
@@ -883,7 +888,7 @@
@echo "target $(PRIVATE_ARM_MODE) C++: $(PRIVATE_MODULE) <= $<"
$(hide) $(PRIVATE_CXX) \
$(addprefix -I , $(PRIVATE_C_INCLUDES)) \
- @$(PRIVATE_IMPORT_INCLUDES) \
+ $(shell cat $(PRIVATE_IMPORT_INCLUDES)) \
$(addprefix -isystem ,\
$(if $(PRIVATE_NO_DEFAULT_COMPILER_FLAGS),, \
$(filter-out $(PRIVATE_C_INCLUDES), \
@@ -913,7 +918,7 @@
@mkdir -p $(dir $@)
$(hide) $(PRIVATE_CC) \
$(addprefix -I , $(PRIVATE_C_INCLUDES)) \
- @$(PRIVATE_IMPORT_INCLUDES) \
+ $(shell cat $(PRIVATE_IMPORT_INCLUDES)) \
$(addprefix -isystem ,\
$(if $(PRIVATE_NO_DEFAULT_COMPILER_FLAGS),, \
$(filter-out $(PRIVATE_C_INCLUDES), \
@@ -975,7 +980,7 @@
@echo "host C++: $(PRIVATE_MODULE) <= $<"
$(hide) $(PRIVATE_CXX) \
$(addprefix -I , $(PRIVATE_C_INCLUDES)) \
- @$(PRIVATE_IMPORT_INCLUDES) \
+ $(shell cat $(PRIVATE_IMPORT_INCLUDES)) \
$(addprefix -isystem ,\
$(if $(PRIVATE_NO_DEFAULT_COMPILER_FLAGS),, \
$(filter-out $(PRIVATE_C_INCLUDES), \
@@ -1003,7 +1008,7 @@
@mkdir -p $(dir $@)
$(hide) $(PRIVATE_CC) \
$(addprefix -I , $(PRIVATE_C_INCLUDES)) \
- @$(PRIVATE_IMPORT_INCLUDES) \
+ $(shell cat $(PRIVATE_IMPORT_INCLUDES)) \
$(addprefix -isystem ,\
$(if $(PRIVATE_NO_DEFAULT_COMPILER_FLAGS),, \
$(filter-out $(PRIVATE_C_INCLUDES), \
@@ -2040,10 +2045,6 @@
# 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)))
diff --git a/core/dex_preopt.mk b/core/dex_preopt.mk
index 38982c0..4c51b10 100644
--- a/core/dex_preopt.mk
+++ b/core/dex_preopt.mk
@@ -4,7 +4,7 @@
####################################
# TODO: replace it with device's BOOTCLASSPATH
-DEXPREOPT_BOOT_JARS := core:core-junit:bouncycastle:ext:framework:android.policy:services:apache-xml
+DEXPREOPT_BOOT_JARS := core:core-junit:bouncycastle:ext:framework:telephony-common:mms-common:android.policy:services:apache-xml
DEXPREOPT_BOOT_JARS_MODULES := $(subst :, ,$(DEXPREOPT_BOOT_JARS))
DEXPREOPT_BUILD_DIR := $(OUT_DIR)
diff --git a/core/dumpvar.mk b/core/dumpvar.mk
index 0f7dd8f..5298f35 100644
--- a/core/dumpvar.mk
+++ b/core/dumpvar.mk
@@ -10,16 +10,26 @@
endif
# Add the ARM toolchain bin dir if it actually exists
-ifneq ($(wildcard $(PWD)/prebuilts/gcc/$(HOST_PREBUILT_TAG)/arm/arm-linux-androideabi-4.6/bin),)
- # this should be copied to HOST_OUT_EXECUTABLES instead
- ABP:=$(ABP):$(PWD)/prebuilts/gcc/$(HOST_PREBUILT_TAG)/arm/arm-linux-androideabi-4.6/bin
-endif
+ifeq ($(TARGET_ARCH),arm)
+ ifneq ($(wildcard $(PWD)/prebuilts/gcc/$(HOST_PREBUILT_TAG)/arm/arm-linux-androideabi-4.6/bin),)
+ # this should be copied to HOST_OUT_EXECUTABLES instead
+ ABP:=$(ABP):$(PWD)/prebuilts/gcc/$(HOST_PREBUILT_TAG)/arm/arm-linux-androideabi-4.6/bin
+ endif
+else ifeq ($(TARGET_ARCH),x86)
# Add the x86 toolchain bin dir if it actually exists
-ifneq ($(wildcard $(PWD)/prebuilts/gcc/$(HOST_PREBUILT_TAG)/x86/i686-android-linux-4.4.3/bin),)
- # this should be copied to HOST_OUT_EXECUTABLES instead
- ABP:=$(ABP):$(PWD)/prebuilts/gcc/$(HOST_PREBUILT_TAG)/x86/i686-android-linux-4.4.3/bin
+ ifneq ($(wildcard $(PWD)/prebuilts/gcc/$(HOST_PREBUILT_TAG)/x86/i686-linux-android-4.6/bin),)
+ # this should be copied to HOST_OUT_EXECUTABLES instead
+ ABP:=$(ABP):$(PWD)/prebuilts/gcc/$(HOST_PREBUILT_TAG)/x86/i686-linux-android-4.6/bin
+ endif
endif
+
+# Add the mips toolchain bin dir if it actually exists
+ifneq ($(wildcard $(PWD)/prebuilts/gcc/$(HOST_PREBUILT_TAG)/mips/mipsel-linux-android-4.6/bin),)
+ # this should be copied to HOST_OUT_EXECUTABLES instead
+ ABP:=$(ABP):$(PWD)/prebuilts/gcc/$(HOST_PREBUILT_TAG)/mips/mipsel-linux-android-4.6/bin
+endif
+
ANDROID_BUILD_PATHS := $(ABP)
ANDROID_PREBUILTS := prebuilt/$(HOST_PREBUILT_TAG)
ANDROID_GCC_PREBUILTS := prebuilts/gcc/$(HOST_PREBUILT_TAG)
diff --git a/core/envsetup.mk b/core/envsetup.mk
index 74e9100..97b4467 100644
--- a/core/envsetup.mk
+++ b/core/envsetup.mk
@@ -33,7 +33,7 @@
# ---------------------------------------------------------------
# Set up configuration for host machine. We don't do cross-
-# compiles except for arm, so the HOST is whatever we are
+# compiles except for arm/mips, so the HOST is whatever we are
# running on
UNAME := $(shell uname -sm)
@@ -114,23 +114,20 @@
# 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
# ---------------------------------------------------------------
# Set up configuration for target machine.
# The following must be set:
# TARGET_OS = { linux }
-# TARGET_ARCH = { arm | x86 }
+# TARGET_ARCH = { arm | x86 | mips }
-
-ifeq ($(TARGET_ARCH),)
-TARGET_ARCH := arm
-endif
TARGET_OS := linux
+# TARGET_ARCH should be set by BoardConfig.mk and will be checked later
# the target build type defaults to release
ifneq ($(TARGET_BUILD_TYPE),debug)
diff --git a/core/executable.mk b/core/executable.mk
index 6138adb..baebc3b 100644
--- a/core/executable.mk
+++ b/core/executable.mk
@@ -12,6 +12,18 @@
LOCAL_MODULE_SUFFIX := $(TARGET_EXECUTABLE_SUFFIX)
endif
+####################################################
+## Add profiling libraries if aprof is turned
+####################################################
+ifeq ($(strip $(LOCAL_ENABLE_APROF)),true)
+ ifeq ($(LOCAL_FORCE_STATIC_EXECUTABLE), true)
+ LOCAL_STATIC_LIBRARIES += libaprof libaprof_static libc libcutils
+ else
+ LOCAL_SHARED_LIBRARIES += libaprof libaprof_runtime libc
+ endif
+ LOCAL_WHOLE_STATIC_LIBRARIES += libaprof_aux
+endif
+
include $(BUILD_SYSTEM)/dynamic_binary.mk
ifeq ($(LOCAL_FORCE_STATIC_EXECUTABLE),true)
diff --git a/core/legacy_prebuilts.mk b/core/legacy_prebuilts.mk
index 0e33a64..0a5f6d1 100644
--- a/core/legacy_prebuilts.mk
+++ b/core/legacy_prebuilts.mk
@@ -103,7 +103,4 @@
ueventd.rc \
ueventd.stingray.rc \
vold.fstab \
- wl1271.bin \
- zoneinfo.dat \
- zoneinfo.idx \
- zoneinfo.version
+ wl1271.bin
diff --git a/core/llvm_config.mk b/core/llvm_config.mk
index bc90b95..4145028 100644
--- a/core/llvm_config.mk
+++ b/core/llvm_config.mk
@@ -41,12 +41,12 @@
endif
ifeq ($(TARGET_ARCH),x86)
CLANG_CONFIG_EXTRA_CFLAGS += \
- -target i686-android-linux \
+ -target i686-linux-android \
-nostdlibinc \
- -B$(TARGET_TOOLCHAIN_ROOT)/i686-android-linux/bin
+ -B$(TARGET_TOOLCHAIN_ROOT)/i686-linux-android/bin
CLANG_CONFIG_EXTRA_LDFLAGS += \
- -target i686-android-linux \
- -B$(TARGET_TOOLCHAIN_ROOT)/i686-android-linux/bin
+ -target i686-linux-android \
+ -B$(TARGET_TOOLCHAIN_ROOT)/i686-linux-android/bin
CLANG_CONFIG_UNKNOWN_CFLAGS += \
-finline-limit=300 \
-fno-inline-functions-called-once \
diff --git a/core/main.mk b/core/main.mk
index 407a529..7bd55b8 100644
--- a/core/main.mk
+++ b/core/main.mk
@@ -84,7 +84,7 @@
# be generated correctly
include $(BUILD_SYSTEM)/cleanbuild.mk
-VERSION_CHECK_SEQUENCE_NUMBER := 2
+VERSION_CHECK_SEQUENCE_NUMBER := 3
-include $(OUT_DIR)/versions_checked.mk
ifneq ($(VERSION_CHECK_SEQUENCE_NUMBER),$(VERSIONS_CHECKED))
@@ -157,8 +157,44 @@
$(error stop)
endif
+ifeq (darwin,$(HOST_OS))
+GCC_REALPATH = $(realpath $(shell which gcc))
+ifneq ($(findstring llvm-gcc,$(GCC_REALPATH)),)
+ # Using LLVM GCC results in a non functional emulator due to it
+ # not honouring global register variables
+ $(warning ****************************************)
+ $(warning * gcc is linked to llvm-gcc which will *)
+ $(warning * not create a useable emulator. *)
+ $(warning ****************************************)
+ BUILD_EMULATOR := false
+else
+ BUILD_EMULATOR := true
+endif
+# When building on Leopard or above, we need to use the 10.4 SDK
+# or the generated binary will not run on Tiger.
+darwin_version := $(strip $(shell sw_vers -productVersion))
+ifneq ($(filter 10.1 10.2 10.3 10.1.% 10.2.% 10.3.% 10.4 10.4.%,$(darwin_version)),)
+ $(error Building the Android emulator requires OS X 10.5 or above)
+endif
+ifneq ($(filter 10.5 10.5.% 10.6 10.6.%,$(darwin_version)),)
+ # We are on Leopard or Snow Leopard
+ MSDK=10.5
+else
+ # We are on Lion or beyond, and 10.6 SDK is the minimum in Xcode 4.x
+ MSDK=10.6
+endif
+MACOSX_SDK := /Developer/SDKs/MacOSX$(MSDK).sdk
+ifeq ($(strip $(wildcard $(MACOSX_SDK))),)
+ BUILD_EMULATOR := false
+endif
+else # HOST_OS is not darwin
+ BUILD_EMULATOR := true
+endif # HOST_OS is darwin
+
$(shell echo 'VERSIONS_CHECKED := $(VERSION_CHECK_SEQUENCE_NUMBER)' \
> $(OUT_DIR)/versions_checked.mk)
+$(shell echo 'BUILD_EMULATOR := $(BUILD_EMULATOR)' \
+ >> $(OUT_DIR)/versions_checked.mk)
endif
# These are the modifier targets that don't do anything themselves, but
@@ -188,13 +224,11 @@
# 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 ***************************************************************)
@@ -236,16 +270,20 @@
is_sdk_build := true
endif
+## have selinux ##
+ifeq ($(HAVE_SELINUX),true)
+ADDITIONAL_BUILD_PROPERTIES += ro.build.selinux=1
+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
@@ -293,7 +331,7 @@
## 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=%,\
@@ -305,7 +343,7 @@
## tests ##
ifeq ($(TARGET_BUILD_VARIANT),tests)
-tags_to_install := user debug eng tests
+tags_to_install := debug eng tests
endif
## sdk ##
@@ -322,7 +360,7 @@
# 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
@@ -551,42 +589,46 @@
# -------------------------------------------------------------------
# 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.
@@ -617,9 +659,11 @@
# 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!)))
+ $(warning $(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
@@ -632,6 +676,7 @@
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))
@@ -831,3 +876,7 @@
.PHONY: showcommands
showcommands:
@echo >/dev/null
+
+.PHONY: nothing
+nothing:
+ @echo Successfully read the makefiles.
diff --git a/core/product_config.mk b/core/product_config.mk
index ea3e517..9c85d2c 100644
--- a/core/product_config.mk
+++ b/core/product_config.mk
@@ -199,6 +199,12 @@
$(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.
#
diff --git a/core/shared_library.mk b/core/shared_library.mk
index d715349..ab7480d 100644
--- a/core/shared_library.mk
+++ b/core/shared_library.mk
@@ -20,12 +20,25 @@
$(error $(LOCAL_PATH): Can not set module stem for a library)
endif
+####################################################
+## Add profiling libraries if aprof is turned
+####################################################
+ifeq ($(strip $(LOCAL_ENABLE_APROF_JNI)),true)
+ LOCAL_ENABLE_APROF := true
+ LOCAL_WHOLE_STATIC_LIBRARIES += libaprof_jni
+endif
+
+ifeq ($(strip $(LOCAL_ENABLE_APROF)),true)
+ LOCAL_SHARED_LIBRARIES += libaprof libaprof_runtime
+endif
+
# Put the built targets of all shared libraries in a common directory
# to simplify the link line.
OVERRIDE_BUILT_MODULE_PATH := $(TARGET_OUT_INTERMEDIATE_LIBRARIES)
include $(BUILD_SYSTEM)/dynamic_binary.mk
+
# Define PRIVATE_ variables from global vars
my_target_global_ld_dirs := $(TARGET_GLOBAL_LD_DIRS)
my_target_global_ldflags := $(TARGET_GLOBAL_LDFLAGS)
diff --git a/core/static_library.mk b/core/static_library.mk
index 66e091b..2a8edfd 100644
--- a/core/static_library.mk
+++ b/core/static_library.mk
@@ -18,6 +18,13 @@
$(error $(LOCAL_PATH): Can not set module stem for a library)
endif
+####################################################
+## Add profiling libraries if aprof is turned
+####################################################
+ifeq ($(strip $(LOCAL_ENABLE_APROF)),true)
+ LOCAL_WHOLE_STATIC_LIBRARIES += libaprof
+endif
+
include $(BUILD_SYSTEM)/binary.mk
ifeq ($(LOCAL_RAW_STATIC_LIBRARY),true)
diff --git a/core/tasks/product-graph.mk b/core/tasks/product-graph.mk
index 6442252..1ccb20b 100644
--- a/core/tasks/product-graph.mk
+++ b/core/tasks/product-graph.mk
@@ -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)
diff --git a/core/user_tags.mk b/core/user_tags.mk
deleted file mode 100644
index 24f563d..0000000
--- a/core/user_tags.mk
+++ /dev/null
@@ -1,497 +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-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 \
- 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
diff --git a/core/version_defaults.mk b/core/version_defaults.mk
index 16f59f6..6ebfcef 100644
--- a/core/version_defaults.mk
+++ b/core/version_defaults.mk
@@ -41,7 +41,7 @@
# which is the version that we reveal to the end user.
# Update this value when the platform version changes (rather
# than overriding it somewhere else). Can be an arbitrary string.
- PLATFORM_VERSION := 4.1.2
+ PLATFORM_VERSION := 4.0.9.99.999.9999.99999
endif
ifeq "" "$(PLATFORM_SDK_VERSION)"
@@ -59,7 +59,7 @@
ifeq "" "$(PLATFORM_VERSION_CODENAME)"
# This is the current development code-name, if the build is not a final
# release build. If this is a final release build, it is simply "REL".
- PLATFORM_VERSION_CODENAME := REL
+ PLATFORM_VERSION_CODENAME := AOSP
endif
ifeq "" "$(DEFAULT_APP_TARGET_SDK)"
diff --git a/envsetup.sh b/envsetup.sh
index 8b7eea9..2da629d 100644
--- a/envsetup.sh
+++ b/envsetup.sh
@@ -118,10 +118,12 @@
export ANDROID_EABI_TOOLCHAIN=
local ARCH=$(get_build_var TARGET_ARCH)
case $ARCH in
- x86) toolchaindir=x86/i686-android-linux-4.4.3/bin
+ x86) toolchaindir=x86/i686-linux-android-4.6/bin
;;
arm) toolchaindir=arm/arm-linux-androideabi-4.6/bin
;;
+ mips) toolchaindir=mips/mipsel-linux-android-4.6/bin
+ ;;
*)
echo "Can't find toolchain for unknown architecture: $ARCH"
toolchaindir=xxxxxxxxx
@@ -131,25 +133,26 @@
export ANDROID_EABI_TOOLCHAIN=$gccprebuiltdir/$toolchaindir
fi
- export ARM_EABI_TOOLCHAIN=
+ unset ARM_EABI_TOOLCHAIN ARM_EABI_TOOLCHAIN_PATH
case $ARCH in
- x86) toolchaindir=x86/i686-eabi-4.4.3/bin
+ arm)
+ toolchaindir=arm/arm-eabi-4.6/bin
+ if [ -d "$gccprebuiltdir/$toolchaindir" ]; then
+ export ARM_EABI_TOOLCHAIN="$gccprebuiltdir/$toolchaindir"
+ ARM_EABI_TOOLCHAIN_PATH=":$gccprebuiltdir/$toolchaindir"
+ fi
;;
- arm) toolchaindir=arm/arm-eabi-4.6/bin
+ mips) toolchaindir=mips/mips-eabi-4.4.3/bin
;;
*)
- echo "Can't find toolchain for unknown architecture: $ARCH"
- toolchaindir=xxxxxxxxx
+ # No need to set ARM_EABI_TOOLCHAIN for other ARCHs
;;
esac
- if [ -d "$gccprebuiltdir/$toolchaindir" ]; then
- export ARM_EABI_TOOLCHAIN=$gccprebuiltdir/$toolchaindir
- fi
export ANDROID_TOOLCHAIN=$ANDROID_EABI_TOOLCHAIN
export ANDROID_QTOOLS=$T/development/emulator/qtools
export ANDROID_DEV_SCRIPTS=$T/development/scripts
- export ANDROID_BUILD_PATHS=:$(get_build_var ANDROID_BUILD_PATHS):$ANDROID_QTOOLS:$ANDROID_TOOLCHAIN:$ARM_EABI_TOOLCHAIN$CODE_REVIEWS:$ANDROID_DEV_SCRIPTS
+ export ANDROID_BUILD_PATHS=:$(get_build_var ANDROID_BUILD_PATHS):$ANDROID_QTOOLS:$ANDROID_TOOLCHAIN$ARM_EABI_TOOLCHAIN_PATH$CODE_REVIEWS:$ANDROID_DEV_SCRIPTS
export PATH=$PATH$ANDROID_BUILD_PATHS
unset ANDROID_JAVA_TOOLCHAIN
@@ -204,13 +207,14 @@
function settitle()
{
if [ "$STAY_OFF_MY_LAWN" = "" ]; then
+ local arch=$(gettargetarch)
local product=$TARGET_PRODUCT
local variant=$TARGET_BUILD_VARIANT
local apps=$TARGET_BUILD_APPS
if [ -z "$apps" ]; then
- export PROMPT_COMMAND="echo -ne \"\033]0;[${product}-${variant}] ${USER}@${HOSTNAME}: ${PWD}\007\""
+ export PROMPT_COMMAND="echo -ne \"\033]0;[${arch}-${product}-${variant}] ${USER}@${HOSTNAME}: ${PWD}\007\""
else
- export PROMPT_COMMAND="echo -ne \"\033]0;[$apps $variant] ${USER}@${HOSTNAME}: ${PWD}\007\""
+ export PROMPT_COMMAND="echo -ne \"\033]0;[$arch $apps $variant] ${USER}@${HOSTNAME}: ${PWD}\007\""
fi
fi
}
@@ -417,6 +421,7 @@
add_lunch_combo full-eng
add_lunch_combo full_x86-eng
add_lunch_combo vbox_x86-eng
+add_lunch_combo full_mips-eng
function print_lunch_menu()
{
@@ -737,8 +742,9 @@
local ARCH=$(get_build_var TARGET_ARCH)
local GDB
case "$ARCH" in
- x86) GDB=i686-android-linux-gdb;;
+ x86) GDB=i686-linux-android-gdb;;
arm) GDB=arm-linux-androideabi-gdb;;
+ mips) GDB=mipsel-linux-android-gdb;;
*) echo "Unknown arch $ARCH"; return 1;;
esac
@@ -805,6 +811,11 @@
;;
esac
+function gettargetarch
+{
+ get_build_var TARGET_ARCH
+}
+
function jgrep()
{
find . -name .repo -prune -o -name .git -prune -o -type f -name "*\.java" -print0 | xargs -0 grep --color -n "$@"
@@ -860,7 +871,8 @@
return
fi
local prebuiltdir=$(getprebuilt)
- local KERNEL=$T/prebuilt/android-arm/kernel/vmlinux-qemu
+ local arch=$(gettargetarch)
+ local KERNEL=$T/prebuilts/qemu-kernel/$arch/vmlinux-qemu
local TRACE=$1
if [ ! "$TRACE" ] ; then
diff --git a/target/board/generic/BoardConfig.mk b/target/board/generic/BoardConfig.mk
index 807125a..7a25f30 100644
--- a/target/board/generic/BoardConfig.mk
+++ b/target/board/generic/BoardConfig.mk
@@ -6,6 +6,7 @@
# The generic product target doesn't have any hardware-specific pieces.
TARGET_NO_BOOTLOADER := true
TARGET_NO_KERNEL := true
+TARGET_ARCH := arm
# Note: we build the platform images for ARMv7-A _without_ NEON.
#
@@ -32,7 +33,9 @@
# Enable dex-preoptimization to speed up the first boot sequence
# of an SDK AVD. Note that this operation only works on Linux for now
ifeq ($(HOST_OS),linux)
-WITH_DEXPREOPT := true
+ ifeq ($(WITH_DEXPREOPT),)
+ WITH_DEXPREOPT := true
+ endif
endif
# Build OpenGLES emulation guest and host libraries
diff --git a/target/board/generic_mips/Android.mk b/target/board/generic_mips/Android.mk
new file mode 100644
index 0000000..abf8d57
--- /dev/null
+++ b/target/board/generic_mips/Android.mk
@@ -0,0 +1,17 @@
+#
+# Copyright (C) 2011 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.
+#
+
+LOCAL_PATH := $(call my-dir)
diff --git a/target/board/generic_mips/BoardConfig.mk b/target/board/generic_mips/BoardConfig.mk
new file mode 100644
index 0000000..8c2371f
--- /dev/null
+++ b/target/board/generic_mips/BoardConfig.mk
@@ -0,0 +1,53 @@
+#
+# Copyright (C) 2011 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.
+#
+# BoardConfig.mk
+#
+# Product-specific compile-time definitions.
+#
+
+# The generic product target doesn't have any hardware-specific pieces.
+TARGET_NO_BOOTLOADER := true
+TARGET_NO_KERNEL := true
+
+TARGET_ARCH := mips
+ifeq (,$(TARGET_ARCH_VARIANT))
+TARGET_ARCH_VARIANT := mips32r2-fp
+endif
+TARGET_CPU_ABI := mips
+
+HAVE_HTC_AUDIO_DRIVER := true
+BOARD_USES_GENERIC_AUDIO := true
+
+# no hardware camera
+USE_CAMERA_STUB := true
+
+# Set /system/bin/sh to ash, not mksh, to make sure we can switch back.
+TARGET_SHELL := ash
+
+# Enable dex-preoptimization to speed up the first boot sequence
+# of an SDK AVD. Note that this operation only works on Linux for now
+ifeq ($(HOST_OS),linux)
+ ifeq ($(WITH_DEXPREOPT),)
+ WITH_DEXPREOPT := true
+ endif
+endif
+
+# Build OpenGLES emulation guest and host libraries
+BUILD_EMULATOR_OPENGL := true
+
+# Build and enable the OpenGL ES View renderer. When running on the emulator,
+# the GLES renderer disables itself if host GL acceleration isn't available.
+USE_OPENGL_RENDERER := true
diff --git a/target/board/generic_mips/README.txt b/target/board/generic_mips/README.txt
new file mode 100644
index 0000000..b31a857
--- /dev/null
+++ b/target/board/generic_mips/README.txt
@@ -0,0 +1,9 @@
+The "generic_mips" product defines a MIPS based non-hardware-specific
+target without a kernel or bootloader.
+
+It can be used to build the entire user-level system, and
+will work with the emulator, though sound will not work
+(see the "emulator" product for that).
+
+It is not a product "base class"; no other products inherit
+from it or use it in any way.
diff --git a/target/board/generic_mips/device.mk b/target/board/generic_mips/device.mk
new file mode 100644
index 0000000..8c770b5
--- /dev/null
+++ b/target/board/generic_mips/device.mk
@@ -0,0 +1,35 @@
+#
+# Copyright (C) 2009 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 a build configuration for the product aspects that
+# are specific to the emulator.
+
+PRODUCT_PROPERTY_OVERRIDES := \
+ ro.ril.hsxpa=1 \
+ ro.ril.gprsclass=10 \
+ ro.adb.qemud=1
+
+PRODUCT_COPY_FILES := \
+ device/generic/goldfish/data/etc/apns-conf.xml:system/etc/apns-conf.xml \
+ device/generic/goldfish/data/etc/vold.conf:system/etc/vold.conf \
+ $(call add-to-product-copy-files-if-exists,development/tools/emulator/system/camera/media_profiles.xml:system/etc/media_profiles.xml) \
+ $(call add-to-product-copy-files-if-exists,development/tools/emulator/system/camera/media_codecs.xml:system/etc/media_codecs.xml) \
+ hardware/libhardware_legacy/audio/audio_policy.conf:system/etc/audio_policy.conf
+
+PRODUCT_PACKAGES := \
+ audio.primary.goldfish \
+ power.goldfish \
+ libffi
diff --git a/target/board/generic_mips/system.prop b/target/board/generic_mips/system.prop
new file mode 100644
index 0000000..137a0f9
--- /dev/null
+++ b/target/board/generic_mips/system.prop
@@ -0,0 +1,6 @@
+#
+# system.prop for generic sdk
+#
+
+rild.libpath=/system/lib/libreference-ril.so
+rild.libargs=-d /dev/ttyS0
diff --git a/target/board/generic_x86/BoardConfig.mk b/target/board/generic_x86/BoardConfig.mk
index da597e8..4a9e5fe 100644
--- a/target/board/generic_x86/BoardConfig.mk
+++ b/target/board/generic_x86/BoardConfig.mk
@@ -8,7 +8,7 @@
TARGET_NO_KERNEL := true
TARGET_CPU_ABI := x86
TARGET_ARCH := x86
-TARGET_ARCH_VARIANT := x86-atom
+TARGET_ARCH_VARIANT := x86
TARGET_PRELINK_MODULE := false
# The IA emulator (qemu) uses the Goldfish devices
@@ -18,6 +18,9 @@
# no hardware camera
USE_CAMERA_STUB := true
+# customize the malloced address to be 16-byte aligned
+BOARD_MALLOC_ALIGNMENT := 16
+
# Enable dex-preoptimization to speed up the first boot sequence
# of an SDK AVD. Note that this operation only works on Linux for now
ifeq ($(HOST_OS),linux)
diff --git a/target/board/vbox_x86/BoardConfig.mk b/target/board/vbox_x86/BoardConfig.mk
index dc0f19e..80a9077 100644
--- a/target/board/vbox_x86/BoardConfig.mk
+++ b/target/board/vbox_x86/BoardConfig.mk
@@ -37,3 +37,5 @@
# The eth0 device should be started with dhcp on boot.
# Useful for emulators that don't provide a wifi connection.
NET_ETH0_STARTONBOOT := true
+
+ADDITIONAL_BUILD_PROPERTIES += dalvik.vm.heapsize=32m
diff --git a/target/product/AndroidProducts.mk b/target/product/AndroidProducts.mk
index 44b9000..9279633 100644
--- a/target/product/AndroidProducts.mk
+++ b/target/product/AndroidProducts.mk
@@ -36,10 +36,13 @@
$(LOCAL_DIR)/core.mk \
$(LOCAL_DIR)/generic.mk \
$(LOCAL_DIR)/generic_x86.mk \
+ $(LOCAL_DIR)/generic_mips.mk \
$(LOCAL_DIR)/full.mk \
$(LOCAL_DIR)/full_x86.mk \
+ $(LOCAL_DIR)/full_mips.mk \
$(LOCAL_DIR)/vbox_x86.mk \
$(LOCAL_DIR)/sdk.mk \
$(LOCAL_DIR)/sdk_x86.mk \
+ $(LOCAL_DIR)/sdk_mips.mk \
$(LOCAL_DIR)/large_emu_hw.mk
endif
diff --git a/target/product/base.mk b/target/product/base.mk
new file mode 100644
index 0000000..afde9b5
--- /dev/null
+++ b/target/product/base.mk
@@ -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
+
diff --git a/target/product/core.mk b/target/product/core.mk
index 688c806..8a7d6df 100644
--- a/target/product/core.mk
+++ b/target/product/core.mk
@@ -22,7 +22,7 @@
ro.config.notification_sound=OnTheHunt.ogg \
ro.config.alarm_alert=Alarm_Classic.ogg
-PRODUCT_PACKAGES := \
+PRODUCT_PACKAGES += \
ApplicationsProvider \
BackupRestoreConfirmation \
Browser \
@@ -119,7 +119,12 @@
screencap \
sensorservice \
lint \
- uiautomator
+ uiautomator \
+ telephony-common \
+ mms-common \
+ zoneinfo.dat \
+ zoneinfo.idx \
+ zoneinfo.version
PRODUCT_COPY_FILES += \
system/core/rootdir/init.usb.rc:root/init.usb.rc \
@@ -138,5 +143,20 @@
libjavacore \
libssl \
libz-host \
- dalvik
+ dalvik \
+ zoneinfo-host.dat \
+ zoneinfo-host.idx \
+ zoneinfo-host.version
endif
+
+ifeq ($(HAVE_SELINUX),true)
+ PRODUCT_PACKAGES += \
+ sepolicy \
+ file_contexts \
+ seapp_contexts \
+ property_contexts \
+ mac_permissions.xml
+endif
+
+$(call inherit-product, $(SRC_TARGET_DIR)/product/base.mk)
+
diff --git a/target/product/full_base.mk b/target/product/full_base.mk
index 6a702da..2c24b1a 100644
--- a/target/product/full_base.mk
+++ b/target/product/full_base.mk
@@ -20,9 +20,6 @@
# in inherited configurations.
PRODUCT_PACKAGES := \
- drmserver \
- libdrmframework \
- libdrmframework_jni \
libfwdlockengine \
OpenWnn \
PinyinIME \
diff --git a/target/product/full_mips.mk b/target/product/full_mips.mk
new file mode 100644
index 0000000..2debfec
--- /dev/null
+++ b/target/product/full_mips.mk
@@ -0,0 +1,29 @@
+#
+# Copyright (C) 2009 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 a build configuration for a full-featured build of the
+# Open-Source part of the tree. It's geared toward a US-centric
+# mips build quite specifically for the emulator, and might not be
+# entirely appropriate to inherit from for on-device configurations.
+
+$(call inherit-product, $(SRC_TARGET_DIR)/product/full_base_telephony.mk)
+$(call inherit-product, $(SRC_TARGET_DIR)/board/generic_mips/device.mk)
+
+# Overrides
+PRODUCT_NAME := full_mips
+PRODUCT_DEVICE := generic_mips
+PRODUCT_BRAND := Android
+PRODUCT_MODEL := Full MIPS Android on Emulator
diff --git a/target/product/full_x86.mk b/target/product/full_x86.mk
index d6a169a..9941384 100644
--- a/target/product/full_x86.mk
+++ b/target/product/full_x86.mk
@@ -22,13 +22,14 @@
# If running on an emulator or some other device that has a LAN connection
# that isn't a wifi connection. This will instruct init.rc to enable the
# network connection so that you can use it with ADB
+
+$(call inherit-product, $(SRC_TARGET_DIR)/product/full_base_telephony.mk)
+$(call inherit-product, $(SRC_TARGET_DIR)/board/generic_x86/device.mk)
+
ifdef NET_ETH0_STARTONBOOT
PRODUCT_PROPERTY_OVERRIDES += net.eth0.startonboot=1
endif
-$(call inherit-product, $(SRC_TARGET_DIR)/product/full_base.mk)
-$(call inherit-product, $(SRC_TARGET_DIR)/board/generic_x86/device.mk)
-
# Ensure we package the BIOS files too.
PRODUCT_PACKAGES += \
bios.bin \
diff --git a/target/product/generic_mips.mk b/target/product/generic_mips.mk
new file mode 100644
index 0000000..7b53d04
--- /dev/null
+++ b/target/product/generic_mips.mk
@@ -0,0 +1,26 @@
+#
+# Copyright (C) 2007 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 a generic phone product that isn't specialized for a specific device.
+# It includes the base Android platform.
+
+$(call inherit-product, $(SRC_TARGET_DIR)/product/generic_no_telephony.mk)
+$(call inherit-product, $(SRC_TARGET_DIR)/product/telephony.mk)
+
+# Overrides
+PRODUCT_BRAND := generic_mips
+PRODUCT_DEVICE := generic_mips
+PRODUCT_NAME := generic_mips
diff --git a/target/product/generic_no_telephony.mk b/target/product/generic_no_telephony.mk
index 0c6e9ac..049d7c0 100644
--- a/target/product/generic_no_telephony.mk
+++ b/target/product/generic_no_telephony.mk
@@ -45,6 +45,22 @@
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
PRODUCT_PACKAGES += \
diff --git a/target/product/generic_x86.mk b/target/product/generic_x86.mk
index 86710c4..0274b5b 100644
--- a/target/product/generic_x86.mk
+++ b/target/product/generic_x86.mk
@@ -14,10 +14,10 @@
# limitations under the License.
#
-# This is a generic product that isn't specialized for a specific device.
+# This is a generic phone product that isn't specialized for a specific device.
# It includes the base Android platform.
-$(call inherit-product, $(SRC_TARGET_DIR)/product/generic.mk)
+include $(SRC_TARGET_DIR)/product/generic.mk
# Overrides
PRODUCT_BRAND := generic_x86
diff --git a/target/product/locales_full.mk b/target/product/locales_full.mk
index 8b8ab05..3a90d2b 100644
--- a/target/product/locales_full.mk
+++ b/target/product/locales_full.mk
@@ -1,3 +1,3 @@
-PRODUCT_LOCALES := en_US cs_CZ da_DK de_AT de_CH de_DE de_LI el_GR en_AU en_CA en_GB en_NZ en_SG es_ES fr_CA fr_CH fr_BE fr_FR it_CH it_IT ja_JP ko_KR nb_NO nl_BE nl_NL pl_PL pt_PT ru_RU sv_SE tr_TR zh_CN zh_HK zh_TW am_ET hi_IN
+PRODUCT_LOCALES := en_US cs_CZ da_DK de_AT de_CH de_DE de_LI el_GR en_AU en_CA en_GB en_NZ en_SG eo_EU es_ES fr_CA fr_CH fr_BE fr_FR it_CH it_IT ja_JP ko_KR nb_NO nl_BE nl_NL pl_PL pt_PT ru_RU sv_SE tr_TR zh_CN zh_HK zh_TW am_ET hi_IN
$(call inherit-product, build/target/product/languages_full.mk)
diff --git a/target/product/mini.mk b/target/product/mini.mk
index 8a74428..5db6f3d 100644
--- a/target/product/mini.mk
+++ b/target/product/mini.mk
@@ -51,6 +51,7 @@
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 @@
TelephonyProvider \
UserDictionaryProvider \
apache-xml \
+ audio \
+ bluetoothd \
bouncycastle \
bu \
cacerts \
@@ -80,6 +83,7 @@
dx \
ext \
framework-res \
+ hciattach \
hprof-conv \
icu.dat \
installd \
@@ -133,11 +137,15 @@
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 @@
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)
diff --git a/target/product/sdk.mk b/target/product/sdk.mk
index 6165f71..697d295 100644
--- a/target/product/sdk.mk
+++ b/target/product/sdk.mk
@@ -89,6 +89,7 @@
development/tools/emulator/system/camera/media_codecs.xml:system/etc/media_codecs.xml \
frameworks/native/data/etc/android.hardware.touchscreen.multitouch.jazzhand.xml:system/etc/permissions/android.hardware.touchscreen.multitouch.jazzhand.xml \
frameworks/native/data/etc/android.hardware.camera.autofocus.xml:system/etc/permissions/android.hardware.camera.autofocus.xml \
+ frameworks/av/media/libeffects/data/audio_effects.conf:system/etc/audio_effects.conf \
hardware/libhardware_legacy/audio/audio_policy.conf:system/etc/audio_policy.conf
$(call inherit-product-if-exists, frameworks/base/data/fonts/fonts.mk)
diff --git a/target/product/sdk_mips.mk b/target/product/sdk_mips.mk
new file mode 100644
index 0000000..2072400
--- /dev/null
+++ b/target/product/sdk_mips.mk
@@ -0,0 +1,28 @@
+#
+# 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.
+#
+
+# This is a build configuration for a full-featured build of the
+# Open-Source part of the tree. It's geared toward a US-centric
+# build quite specifically for the emulator, and might not be
+# entirely appropriate to inherit from for on-device configurations.
+
+$(call inherit-product, $(SRC_TARGET_DIR)/product/sdk.mk)
+
+# Overrides
+PRODUCT_BRAND := generic_mips
+PRODUCT_NAME := sdk_mips
+PRODUCT_DEVICE := generic_mips
+PRODUCT_MODEL := Android SDK for Mips
diff --git a/target/product/sdk_x86.mk b/target/product/sdk_x86.mk
index 6c5e746..873d0c0 100644
--- a/target/product/sdk_x86.mk
+++ b/target/product/sdk_x86.mk
@@ -19,7 +19,7 @@
# build quite specifically for the emulator, and might not be
# entirely appropriate to inherit from for on-device configurations.
-$(call inherit-product, $(SRC_TARGET_DIR)/product/sdk.mk)
+include $(SRC_TARGET_DIR)/product/sdk.mk
# Overrides
PRODUCT_BRAND := generic_x86
diff --git a/tools/atree/fs.cpp b/tools/atree/fs.cpp
index b648394..9468cfd 100644
--- a/tools/atree/fs.cpp
+++ b/tools/atree/fs.cpp
@@ -152,8 +152,8 @@
int
strip_file(const string& path)
{
- // Default strip command to run is "strip" unless overridden by the STRIP env var.
- const char* strip_cmd = getenv("STRIP");
+ // Default strip command to run is "strip" unless overridden by the ATREE_STRIP env var.
+ const char* strip_cmd = getenv("ATREE_STRIP");
if (!strip_cmd || !strip_cmd[0]) {
strip_cmd = "strip";
}
@@ -163,7 +163,52 @@
return -1;
} else if (pid == 0) {
// Exec in the child. Only returns if execve failed.
- return execlp(strip_cmd, strip_cmd, path.c_str(), (char *)NULL);
+
+ int num_args = 0;
+ const char *s = strip_cmd;
+ while (*s) {
+ while (*s == ' ') ++s;
+ if (*s && *s != ' ') {
+ ++num_args;
+ while (*s && *s != ' ') ++s;
+ }
+ }
+
+ if (num_args <= 0) {
+ fprintf(stderr, "Invalid ATREE_STRIP command '%s'\n", strip_cmd);
+ return 1;
+
+ } else if (num_args == 1) {
+ return execlp(strip_cmd, strip_cmd, path.c_str(), (char *)NULL);
+
+ } else {
+ // Split the arguments if more than 1
+ char* cmd = strdup(strip_cmd);
+ const char** args = (const char**) malloc(sizeof(const char*) * (num_args + 2));
+
+ const char** curr = args;
+ char* s = cmd;
+ while (*s) {
+ while (*s == ' ') ++s;
+ if (*s && *s != ' ') {
+ *curr = s;
+ ++curr;
+ while (*s && *s != ' ') ++s;
+ if (*s) {
+ *s = '\0';
+ ++s;
+ }
+ }
+ }
+
+ args[num_args] = path.c_str();
+ args[num_args + 1] = NULL;
+
+ int ret = execvp(args[0], (char* const*)args);
+ free(args);
+ free(cmd);
+ return ret;
+ }
} else {
// Wait for child pid and return its exit code.
int status;
diff --git a/tools/check_builds.sh b/tools/check_builds.sh
index fd380dd..c255bf0 100644
--- a/tools/check_builds.sh
+++ b/tools/check_builds.sh
@@ -41,7 +41,7 @@
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
diff --git a/tools/filter-product-graph.py b/tools/filter-product-graph.py
new file mode 100755
index 0000000..b3a5b42
--- /dev/null
+++ b/tools/filter-product-graph.py
@@ -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()
diff --git a/tools/fs_config/Android.mk b/tools/fs_config/Android.mk
index 5486bc2..5ef32dd 100644
--- a/tools/fs_config/Android.mk
+++ b/tools/fs_config/Android.mk
@@ -18,6 +18,5 @@
LOCAL_SRC_FILES := fs_config.c
LOCAL_MODULE := fs_config
LOCAL_FORCE_STATIC_EXECUTABLE := true
-LOCAL_MODULE_TAGS := eng
include $(BUILD_HOST_EXECUTABLE)
diff --git a/tools/parsedeps.py b/tools/parsedeps.py
new file mode 100755
index 0000000..32d8ad7
--- /dev/null
+++ b/tools/parsedeps.py
@@ -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
+
diff --git a/tools/product_debug.py b/tools/product_debug.py
new file mode 100755
index 0000000..661c5b7
--- /dev/null
+++ b/tools/product_debug.py
@@ -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)