diff options
70 files changed, 1716 insertions, 889 deletions
diff --git a/CleanSpec.mk b/CleanSpec.mk index b1b139a..8109ebb 100644 --- a/CleanSpec.mk +++ b/CleanSpec.mk @@ -122,10 +122,15 @@ $(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/build.prop) # 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) + +$(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/STATIC_LIBRARIES) +$(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/SHARED_LIBRARIES) +$(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/EXECUTABLES) +$(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/lib/*.o) # ************************************************ # NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST diff --git a/core/Makefile b/core/Makefile index 78b9f1e..3ed33dc 100644 --- a/core/Makefile +++ b/core/Makefile @@ -23,8 +23,13 @@ define check-product-copy-files $(if $(filter %.apk, $(1)),$(error \ Prebuilt apk found in PRODUCT_COPY_FILES: $(1), use BUILD_PREBUILT instead!)) endef -unique_product_copy_files_destinations := +# filter out the duplicate <source file>:<dest file> pairs. +unique_product_copy_files_pairs := $(foreach cf,$(PRODUCT_COPY_FILES), \ + $(if $(filter $(unique_product_copy_files_pairs),$(cf)),,\ + $(eval unique_product_copy_files_pairs += $(cf)))) +unique_product_copy_files_destinations := +$(foreach cf,$(unique_product_copy_files_pairs), \ $(eval _src := $(call word-colon,1,$(cf))) \ $(eval _dest := $(call word-colon,2,$(cf))) \ $(call check-product-copy-files,$(cf)) \ @@ -36,6 +41,7 @@ $(foreach cf,$(PRODUCT_COPY_FILES), \ $(eval $(call copy-one-file,$(_src),$(_fulldest)))) \ $(eval ALL_DEFAULT_INSTALLED_MODULES += $(_fulldest)) \ $(eval unique_product_copy_files_destinations += $(_dest)))) +unique_product_copy_files_pairs := unique_product_copy_files_destinations := # ----------------------------------------------------------------- @@ -352,13 +358,9 @@ INTERNAL_RAMDISK_FILES := $(filter $(TARGET_ROOT_OUT)/%, \ 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 +709,7 @@ ifdef is_tests_build # $(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 +1158,7 @@ INTERNAL_OTA_PACKAGE_TARGET := $(PRODUCT_OUT)/$(name).zip $(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 +1186,7 @@ else $(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 +1300,7 @@ dalvikfiles: $(INTERNAL_DALVIK_MODULES) # ----------------------------------------------------------------- # 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 +1316,7 @@ $(INTERNAL_EMULATOR_PACKAGE_TARGET): $(INTERNAL_EMULATOR_PACKAGE_FILES) @echo "Package: $@" $(hide) zip -qj $@ $(INTERNAL_EMULATOR_PACKAGE_FILES) +endif # ----------------------------------------------------------------- # Old PDK stuffs, retired # The pdk package (Platform Development Kit) @@ -1409,7 +1412,8 @@ deps := \ $(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 +1437,7 @@ $(INTERNAL_SDK_TARGET): $(deps) 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 +1492,7 @@ $(INTERNAL_FINDBUGS_HTML_TARGET): $(INTERNAL_FINDBUGS_XML_TARGET) # 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 @@ endif LOCAL_UNINSTALLABLE_MODULE := $(strip $(LOCAL_UNINSTALLABLE_MODULE)) LOCAL_MODULE_TAGS := $(sort $(LOCAL_MODULE_TAGS)) ifeq (,$(LOCAL_MODULE_TAGS)) -ifeq (true,$(LOCAL_UNINSTALLABLE_MODULE)) -LOCAL_MODULE_TAGS := optional -else -# Installable modules without tags fall back to user (which is changed to user eng below) -LOCAL_MODULE_TAGS := user + LOCAL_MODULE_TAGS := optional endif -#$(warning default tags: $(lastword $(filter-out config/% out/%,$(MAKEFILE_LIST)))) + +# User tags are not allowed anymore. Fail early because it will not be installed +# like it used to be. +ifneq ($(filter $(LOCAL_MODULE_TAGS),user),) + $(warning *** Module name: $(LOCAL_MODULE)) + $(warning *** Makefile location: $(LOCAL_MODULE_MAKEFILE)) + $(warning * ) + $(warning * Module is attempting to use the 'user' tag. This) + $(warning * used to cause the module to be installed automatically.) + $(warning * Now, the module must be listed in the PRODUCT_PACKAGES) + $(warning * section of a product makefile to have it installed.) + $(warning * ) + $(error user tag detected on module.) endif # Only the tags mentioned in this test are expected to be set by module # makefiles. Anything else is either a typo or a source of unexpected # behaviors. -ifneq ($(filter-out user debug eng tests optional samples shell_ash shell_mksh,$(LOCAL_MODULE_TAGS)),) +ifneq ($(filter-out debug eng tests optional samples shell_ash shell_mksh,$(LOCAL_MODULE_TAGS)),) $(warning unusual tags $(LOCAL_MODULE_TAGS) on $(LOCAL_MODULE) at $(LOCAL_PATH)) endif -ifneq ($(filter $(LOCAL_MODULE_TAGS),user),) - ifeq ($(filter $(GRANDFATHERED_USER_MODULES),$(LOCAL_MODULE)),) - $(warning *** Module name: $(LOCAL_MODULE)) - $(warning *** Makefile location: $(LOCAL_PATH)) - $(warning * ) - $(warning * Each module must use a LOCAL_MODULE_TAGS in its) - $(warning * Android.mk. Possible tags declared by a module:) - $(warning * ) - $(warning * optional, debug, eng, tests, samples) - $(warning * ) - $(warning * If the module is expected to be in all builds) - $(warning * of a product, then it should use the) - $(warning * "optional" tag: ) - $(warning * ) - $(warning * Add "LOCAL_MODULE_TAGS := optional" in the) - $(warning * Android.mk for the affected module, and add) - $(warning * the LOCAL_MODULE value for that component) - $(warning * into the PRODUCT_PACKAGES section of product) - $(warning * makefile(s) where it's necessary, if) - $(warning * appropriate.) - $(warning * ) - $(warning * If the component should be in EVERY build of ALL) - $(warning * products, then add its LOCAL_MODULE value to the) - $(warning * PRODUCT_PACKAGES section of) - $(warning * build/target/product/core.mk) - $(warning * ) - $(error user tag detected on new module - user tags are only supported on legacy modules) - endif -endif + # Add implicit tags. # @@ -117,27 +97,11 @@ ifneq ($(gpl_license_file),) ALL_GPL_MODULE_LICENSE_FILES := $(sort $(ALL_GPL_MODULE_LICENSE_FILES) $(gpl_license_file)) endif -# -# If this module is listed on CUSTOM_MODULES, promote it to "user" -# so that it will be installed in $(TARGET_OUT). -# -ifneq (,$(filter $(LOCAL_MODULE),$(CUSTOM_MODULES))) - LOCAL_MODULE_TAGS := $(sort $(LOCAL_MODULE_TAGS) user) -endif - LOCAL_MODULE_CLASS := $(strip $(LOCAL_MODULE_CLASS)) ifneq ($(words $(LOCAL_MODULE_CLASS)),1) $(error $(LOCAL_PATH): LOCAL_MODULE_CLASS must contain exactly one word, not "$(LOCAL_MODULE_CLASS)") endif -# Those used to be implicitly ignored, but aren't any more. -# As of 20100110 there are no apps with the user tag. -ifeq ($(LOCAL_MODULE_CLASS),APPS) - ifneq ($(filter $(LOCAL_MODULE_TAGS),user),) - $(warning user tag on app $(LOCAL_MODULE) at $(LOCAL_PATH) - add your app to core.mk instead) - endif -endif - ifneq (true,$(LOCAL_UNINSTALLABLE_MODULE)) ifdef LOCAL_IS_HOST_MODULE partition_tag := @@ -544,6 +508,16 @@ $(installed_odex) : $(built_odex) | $(ACP) $(LOCAL_INSTALLED_MODULE) : $(installed_odex) endif +# All host modules that are not tagged with optional are automatically installed. +# Save the installed files in ALL_HOST_INSTALLED_FILES. +ifeq ($(LOCAL_IS_HOST_MODULE),true) + 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 := \ $(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 @@ ifeq ($(strip $(LOCAL_NO_FDO_SUPPORT)),) 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_TO:= 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..668998f 100644 --- a/core/combo/HOST_darwin-x86.mk +++ b/core/combo/HOST_darwin-x86.mk @@ -29,27 +29,55 @@ HOST_GLOBAL_CFLAGS += -m32 HOST_GLOBAL_LDFLAGS += -m32 endif # BUILD_HOST_64bit -# Use the Mac OSX SDK 10.5 if the build host is 10.6 +ifneq ($(strip $(BUILD_HOST_static)),) +# Statically-linked binaries are desirable for sandboxed environment +HOST_GLOBAL_LDFLAGS += -static +endif # BUILD_HOST_static + 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)),) + +ifneq ($(strip $(BUILD_MAC_SDK_EXPERIMENTAL)),) +# SDK 10.7 and higher is not fully compatible with Android. +mac_sdk_versions_supported := 10.7 10.8 +else +mac_sdk_versions_supported := 10.6 +endif # BUILD_MAC_SDK_EXPERIMENTAL +mac_sdk_versions_installed := $(shell xcodebuild -showsdks |grep macosx | sort | sed -e "s/.*macosx//g") +mac_sdk_version := $(firstword $(filter $(mac_sdk_versions_installed), $(mac_sdk_versions_supported))) +ifeq ($(mac_sdk_version),) +mac_sdk_version := $(firstword $(mac_sdk_versions_supported)) +endif + +mac_sdk_path := $(shell xcode-select -print-path) +ifeq ($(findstring /Applications,$(mac_sdk_path)),) +# Legacy Xcode +mac_sdk_root := /Developer/SDKs/MacOSX$(mac_sdk_version).sdk +else +# Xcode 4.4(App Store) or higher +# /Applications/Xcode*.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.?.sdk +mac_sdk_root := $(mac_sdk_path)/Platforms/MacOSX.platform/Developer/SDKs/MacOSX$(mac_sdk_version).sdk +endif + +ifeq ($(wildcard $(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)) +ifeq ($(strip $(BUILD_MAC_SDK_EXPERIMENTAL)),) +$(warning * If you wish to build using higher version of SDK, ) +$(warning * try setting BUILD_MAC_SDK_EXPERIMENTAL=1 before ) +$(warning * rerunning this command ) +endif $(warning *****************************************************) $(error Stop.) 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 +87,7 @@ HOST_JNILIB_SUFFIX := .jnilib 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/HOST_linux-x86.mk b/core/combo/HOST_linux-x86.mk index a4da5ce..b369199 100644 --- a/core/combo/HOST_linux-x86.mk +++ b/core/combo/HOST_linux-x86.mk @@ -52,6 +52,11 @@ HOST_GLOBAL_CFLAGS += -m32 HOST_GLOBAL_LDFLAGS += -m32 endif # BUILD_HOST_64bit +ifneq ($(strip $(BUILD_HOST_static)),) +# Statically-linked binaries are desirable for sandboxed environment +HOST_GLOBAL_LDFLAGS += -static +endif # BUILD_HOST_static + HOST_GLOBAL_CFLAGS += -fPIC HOST_GLOBAL_CFLAGS += \ -include $(call select-android-config-h,linux-x86) diff --git a/core/combo/HOST_windows-x86.mk b/core/combo/HOST_windows-x86.mk index fe4bd66..85bc1e0 100644 --- a/core/combo/HOST_windows-x86.mk +++ b/core/combo/HOST_windows-x86.mk @@ -46,6 +46,10 @@ HOST_AR := $(TOOLS_PREFIX)ar$(TOOLS_EXE_SUFFIX) HOST_GLOBAL_CFLAGS += -include $(call select-android-config-h,windows) HOST_GLOBAL_LDFLAGS += --enable-stdcall-fixup +ifneq ($(strip $(BUILD_HOST_static)),) +# Statically-linked binaries are desirable for sandboxed environment +HOST_GLOBAL_LDFLAGS += -static +endif # BUILD_HOST_static # when building under Cygwin, ensure that we use Mingw compilation by default. # you can disable this (i.e. to generate Cygwin executables) by defining the diff --git a/core/combo/TARGET_linux-arm.mk b/core/combo/TARGET_linux-arm.mk index 4a461f8..75b2742 100644 --- a/core/combo/TARGET_linux-arm.mk +++ b/core/combo/TARGET_linux-arm.mk @@ -118,7 +118,7 @@ TARGET_GLOBAL_CFLAGS += \ # We cannot turn it off blindly since the option is not available # in gcc-4.4.x. We also want to disable sincos optimization globally # by turning off the builtin sin function. -ifneq ($(filter 4.6.%, $(shell $(TARGET_CC) --version)),) +ifneq ($(filter 4.6 4.6.%, $(shell $(TARGET_CC) --version)),) TARGET_GLOBAL_CFLAGS += -Wno-unused-but-set-variable -fno-builtin-sin \ -fno-strict-volatile-bitfields endif @@ -181,7 +181,7 @@ TARGET_FDO_CFLAGS:= 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. @@ -252,8 +252,8 @@ $(hide) $(PRIVATE_CXX) \ -Wl,--gc-sections \ -Wl,-shared,-Bsymbolic \ $(PRIVATE_TARGET_GLOBAL_LD_DIRS) \ - $(PRIVATE_ALL_OBJECTS) \ $(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 \ @@ -280,6 +280,9 @@ $(hide) $(PRIVATE_CXX) -nostdlib -Bdynamic -fPIE -pie \ $(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 @@ $(hide) $(PRIVATE_CXX) -nostdlib -Bstatic \ $(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..0a7e20f --- /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 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..9a6e08e 100644 --- a/core/combo/TARGET_linux-x86.mk +++ b/core/combo/TARGET_linux-x86.mk @@ -36,8 +36,8 @@ 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)/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) @@ -94,6 +94,7 @@ TARGET_GLOBAL_CFLAGS += \ -fstrict-aliasing \ -funswitch-loops \ -funwind-tables \ + -fstack-protector \ -include $(call select-android-config-h,target_linux-x86) # XXX: Not sure this is still needed. Must check with our toolchains. @@ -104,7 +105,7 @@ TARGET_GLOBAL_CPPFLAGS += \ # 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 @@ -199,6 +200,9 @@ $(hide) $(PRIVATE_CXX) \ $(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 +220,9 @@ $(hide) $(PRIVATE_CXX) \ $(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 @@ $(combo_target)STATIC_LIB_SUFFIX := .a 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 @@ ifneq ($(words $(board_config_mk)),1) $(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 @@ endif 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..4dace8d 100644 --- a/core/definitions.mk +++ b/core/definitions.mk @@ -55,6 +55,11 @@ ALL_MODULE_TAGS:= # its sub-variables.) ALL_MODULE_NAME_TAGS:= +# All host modules are automatically installed (i.e. outside +# of the product configuration scheme). This is a list of the +# install targets (LOCAL_INSTALLED_MODULE). +ALL_HOST_INSTALLED_FILES:= + # Full paths to all prebuilt files that will be copied # (used to make the dependency on acp) ALL_PREBUILT:= @@ -756,12 +761,17 @@ endef ########################################################### ## Commands for munging the dependency files GCC generates ########################################################### +# $(1): the input .d file +# $(2): the output .P file +define transform-d-to-p-args +$(hide) cp $(1) $(2); \ + sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \ + -e '/^$$/ d' -e 's/$$/ :/' < $(1) >> $(2); \ + rm -f $(1) +endef define transform-d-to-p -$(hide) cp $(@:%.o=%.d) $(@:%.o=%.P); \ - sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \ - -e '/^$$/ d' -e 's/$$/ :/' < $(@:%.o=%.d) >> $(@:%.o=%.P); \ - rm -f $(@:%.o=%.d) +$(call transform-d-to-p-args,$(@:%.o=%.d),$(@:%.o=%.P)) endef ########################################################### @@ -883,7 +893,7 @@ define transform-cpp-to-o @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 +923,7 @@ define transform-c-or-s-to-o-no-deps @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 +985,7 @@ define transform-host-cpp-to-o @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 +1013,7 @@ define transform-host-c-or-s-to-o-no-deps @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 +2050,6 @@ endef # when requested. include $(BUILD_SYSTEM)/distdir.mk -# ----------------------------------------------------------------- -# The modules allowed to use a user tag -include $(BUILD_SYSTEM)/user_tags.mk - # broken: # $(foreach file,$^,$(if $(findstring,.a,$(suffix $file)),-l$(file),$(file))) 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 @@ ABP:=$(PWD)/$(HOST_OUT_EXECUTABLES) 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 @@ endif # --------------------------------------------------------------- # 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 @@ TARGET_COPY_OUT_RECOVERY := recovery # variables that we need in order to locate the output files. include $(BUILD_SYSTEM)/product_config.mk -build_variant := $(filter-out eng user userdebug tests,$(TARGET_BUILD_VARIANT)) +build_variant := $(filter-out user userdebug eng tests,$(TARGET_BUILD_VARIANT)) ifneq ($(build_variant)-$(words $(TARGET_BUILD_VARIANT)),-1) $(warning bad TARGET_BUILD_VARIANT: $(TARGET_BUILD_VARIANT)) -$(error must be empty or one of: eng user userdebug tests) +$(error must be empty or one of: user userdebug eng tests) endif # --------------------------------------------------------------- # 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 @@ ifeq ($(strip $(LOCAL_MODULE_SUFFIX)),) 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 @@ GRANDFATHERED_ALL_PREBUILT := \ 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 @@ ifeq ($(TARGET_ARCH),arm) 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 @@ include $(BUILD_SYSTEM)/config.mk # 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 @@ $(info ************************************************************) $(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 @@ include $(BUILD_SYSTEM)/definitions.mk # Bring in dex_preopt.mk include $(BUILD_SYSTEM)/dex_preopt.mk -ifneq ($(filter eng user userdebug,$(MAKECMDGOALS)),) +ifneq ($(filter user userdebug eng,$(MAKECMDGOALS)),) $(info ***************************************************************) $(info ***************************************************************) -$(info Don't pass '$(filter eng user userdebug tests,$(MAKECMDGOALS))' on \ +$(info Do not pass '$(filter user userdebug eng tests,$(MAKECMDGOALS))' on \ the make command line.) -# XXX The single quote on this line fixes gvim's syntax highlighting. -# Without which, the rest of this file is impossible to read. $(info Set TARGET_BUILD_VARIANT in buildspec.mk, or use lunch or) $(info choosecombo.) $(info ***************************************************************) @@ -236,16 +270,20 @@ ifneq ($(filter sdk win_sdk sdk_addon,$(MAKECMDGOALS)),) 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 @@ endif # !enable_target_debugging ## eng ## ifeq ($(TARGET_BUILD_VARIANT),eng) -tags_to_install := user debug eng +tags_to_install := debug eng ifneq ($(filter ro.setupwizard.mode=ENABLED, $(call collapse-pairs, $(ADDITIONAL_BUILD_PROPERTIES))),) # Don't require the setup wizard on eng builds ADDITIONAL_BUILD_PROPERTIES := $(filter-out ro.setupwizard.mode=%,\ @@ -305,7 +343,7 @@ endif ## tests ## ifeq ($(TARGET_BUILD_VARIANT),tests) -tags_to_install := user debug eng tests +tags_to_install := debug eng tests endif ## sdk ## @@ -322,7 +360,7 @@ endif # TODO: this should be eng I think. Since the sdk is built from the eng # variant. -tags_to_install := user debug eng +tags_to_install := debug eng ADDITIONAL_BUILD_PROPERTIES += xmpp.auto-presence=true ADDITIONAL_BUILD_PROPERTIES += ro.config.nocheckin=yes else # !sdk @@ -551,42 +589,46 @@ add-required-deps := # ------------------------------------------------------------------- # Figure out our module sets. - +# # Of the modules defined by the component makefiles, # determine what we actually want to build. -Default_MODULES := $(sort $(ALL_DEFAULT_INSTALLED_MODULES) \ - $(CUSTOM_MODULES)) -# TODO: Remove the 3 places in the tree that use -# ALL_DEFAULT_INSTALLED_MODULES and get rid of it from this list. ifdef FULL_BUILD # The base list of modules to build for this product is specified # by the appropriate product definition file, which was included # by product_config.make. - user_PACKAGES := $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_PACKAGES) - $(call expand-required-modules,user_PACKAGES,$(user_PACKAGES)) - user_PACKAGES := $(call module-installed-files, $(user_PACKAGES)) + product_MODULES := $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_PACKAGES) + $(call expand-required-modules,product_MODULES,$(product_MODULES)) + product_FILES := $(call module-installed-files, $(product_MODULES)) + ifeq (0,1) + $(info product_FILES for $(TARGET_DEVICE) ($(INTERNAL_PRODUCT)):) + $(foreach p,$(product_FILES),$(info : $(p))) + $(error done) + endif else # We're not doing a full build, and are probably only including # a subset of the module makefiles. Don't try to build any modules # requested by the product, because we probably won't have rules # to build them. - user_PACKAGES := + product_FILES := endif -# Use tags to get the non-APPS user modules. Use the product -# definition files to get the APPS user modules. -user_MODULES := $(sort $(call get-tagged-modules,user shell_$(TARGET_SHELL))) -user_MODULES := $(user_MODULES) $(user_PACKAGES) -eng_MODULES := $(sort $(call get-tagged-modules,eng)) +# When modules are tagged with debug eng or tests, they are installed +# for those variants regardless of what the product spec says. debug_MODULES := $(sort $(call get-tagged-modules,debug)) +eng_MODULES := $(sort $(call get-tagged-modules,eng)) tests_MODULES := $(sort $(call get-tagged-modules,tests)) -ifeq ($(strip $(tags_to_install)),) -$(error ASSERTION FAILED: tags_to_install should not be empty) -endif -modules_to_install := $(sort $(Default_MODULES) \ - $(foreach tag,$(tags_to_install),$($(tag)_MODULES))) +# TODO: Remove the 3 places in the tree that use ALL_DEFAULT_INSTALLED_MODULES +# and get rid of it from this list. +# TODO: The shell is chosen by magic. Do we still need this? +modules_to_install := $(sort \ + $(ALL_DEFAULT_INSTALLED_MODULES) \ + $(product_FILES) \ + $(foreach tag,$(tags_to_install),$($(tag)_MODULES)) \ + $(call get-tagged-modules, shell_$(TARGET_SHELL)) \ + $(CUSTOM_MODULES) \ + ) # Some packages may override others using LOCAL_OVERRIDES_PACKAGES. # Filter out (do not install) any overridden packages. @@ -617,9 +659,11 @@ ifdef is_sdk_build # Ensure every module listed in PRODUCT_PACKAGES gets something installed $(foreach m, $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_PACKAGES), \ $(if $(strip $(ALL_MODULES.$(m).INSTALLED)),,\ - $(error Module '$(m)' in PRODUCT_PACKAGES has nothing to install!))) + $(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 @@ ALL_DEFAULT_INSTALLED_MODULES := endif # dont_bother + # These are additional goals that we build, in order to make sure that there # is as little code as possible in the tree that doesn't build. modules_to_check := $(foreach m,$(ALL_MODULES),$(ALL_MODULES.$(m).CHECKED)) @@ -831,3 +876,7 @@ modules: .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 @@ $(dump-products) $(error done) endif +ifeq (a,b) +$(info PRODUCTS -----------) +$(foreach product, $(PRODUCTS), $(info $(PRODUCTS.$(product).PRODUCT_NAME)))# $(product))) +$(error stop) +endif + # Convert a short name like "sooner" into the path to the product # file defining that product. # 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 @@ ifneq ($(strip $(LOCAL_MODULE_STEM)$(LOCAL_BUILT_MODULE_STEM)),) $(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 @@ ifneq ($(strip $(LOCAL_MODULE_STEM)$(LOCAL_BUILT_MODULE_STEM)),) $(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/cts.mk b/core/tasks/cts.mk index 4f624d8..108e30b 100644 --- a/core/tasks/cts.mk +++ b/core/tasks/cts.mk @@ -25,7 +25,7 @@ CTS_TF_JAR := $(HOST_OUT_JAVA_LIBRARIES)/cts-tradefed.jar CTS_TF_EXEC_PATH := $(HOST_OUT_EXECUTABLES)/cts-tradefed CTS_TF_README_PATH := $(cts_tools_src_dir)/tradefed-host/README -VMTESTSTF_INTERMEDIATES :=$(call intermediates-dir-for,EXECUTABLES,vm-tests-tf,1,) +VMTESTSTF_INTERMEDIATES :=$(call intermediates-dir-for,JAVA_LIBRARIES,vm-tests-tf,HOST) VMTESTSTF_JAR := $(VMTESTSTF_INTERMEDIATES)/android.core.vm-tests-tf.jar CTS_CORE_CASE_LIST := \ 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. # +# 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 + +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 := $(products_pdf:%.pdf=%.dot) +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): - @echo Product graph DOT: $@ +$(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) \ + > $@ + +# 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)' >> $$@ -# 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)\";) \ +$(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..826601a 100644 --- a/core/version_defaults.mk +++ b/core/version_defaults.mk @@ -41,7 +41,7 @@ ifeq "" "$(PLATFORM_VERSION)" # 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.1.2.3.4.5.6.7.8.9 endif ifeq "" "$(PLATFORM_SDK_VERSION)" @@ -59,7 +59,7 @@ endif 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..4a1321a 100644 --- a/envsetup.sh +++ b/envsetup.sh @@ -118,10 +118,12 @@ function setpaths() 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 @@ function setpaths() 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 set_sequence_number() 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 @@ function add_lunch_combo() 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 @@ function gdbclient() 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 @@ -778,7 +784,7 @@ function gdbclient() fi echo >|"$OUT_ROOT/gdbclient.cmds" "set solib-absolute-prefix $OUT_SYMBOLS" - echo >>"$OUT_ROOT/gdbclient.cmds" "set solib-search-path $OUT_SO_SYMBOLS:$OUT_SO_SYMBOLS/hw:$OUT_SO_SYMBOLS/ssl/engines" + echo >>"$OUT_ROOT/gdbclient.cmds" "set solib-search-path $OUT_SO_SYMBOLS:$OUT_SO_SYMBOLS/hw:$OUT_SO_SYMBOLS/ssl/engines:$OUT_SO_SYMBOLS/drm:$OUT_SO_SYMBOLS/egl:$OUT_SO_SYMBOLS/soundfx" echo >>"$OUT_ROOT/gdbclient.cmds" "target remote $PORT" echo >>"$OUT_ROOT/gdbclient.cmds" "" @@ -805,6 +811,11 @@ case `uname -s` in ;; 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 @@ function tracedmdump() 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 @@ USE_CAMERA_STUB := true # 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_BOOTLOADER := true 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 @@ BOARD_USES_GENERIC_AUDIO := true # 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 @@ BOARD_SYSTEMIMAGE_PARTITION_SIZE := 268435456 # 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 @@ PRODUCT_MAKEFILES := \ $(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 b7934b3..87872d6 100644 --- a/target/product/core.mk +++ b/target/product/core.mk @@ -22,7 +22,7 @@ PRODUCT_PROPERTY_OVERRIDES := \ ro.config.notification_sound=OnTheHunt.ogg \ ro.config.alarm_alert=Alarm_Classic.ogg -PRODUCT_PACKAGES := \ +PRODUCT_PACKAGES += \ ApplicationsProvider \ BackupRestoreConfirmation \ Browser \ @@ -120,7 +120,12 @@ PRODUCT_PACKAGES := \ 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 \ @@ -139,5 +144,20 @@ ifeq ($(WITH_HOST_DALVIK),true) 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 @@ PRODUCT_PACKAGES := \ 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 @@ PRODUCT_PROPERTY_OVERRIDES += \ ro.config.notification_sound=OnTheHunt.ogg \ ro.config.alarm_alert=Alarm_Classic.ogg +# Please keep this list sorted alphabetically PRODUCT_PACKAGES += \ ApplicationsProvider \ ContactsProvider \ @@ -63,6 +64,8 @@ PRODUCT_PACKAGES += \ TelephonyProvider \ UserDictionaryProvider \ apache-xml \ + audio \ + bluetoothd \ bouncycastle \ bu \ cacerts \ @@ -80,6 +83,7 @@ PRODUCT_PACKAGES += \ dx \ ext \ framework-res \ + hciattach \ hprof-conv \ icu.dat \ installd \ @@ -133,11 +137,15 @@ PRODUCT_PACKAGES += \ libwebrtc_audio_preprocessing \ libwilhelm \ libz \ + lint \ mdnsd \ + network \ + pand \ requestsync \ screencap \ + sdptool \ sensorservice \ - lint + wpa_supplicant PRODUCT_COPY_FILES += \ system/core/rootdir/init.usb.rc:root/init.usb.rc \ @@ -202,6 +210,7 @@ PRODUCT_PROPERTY_OVERRIDES += \ ro.config.ringtone=Ring_Synth_04.ogg \ ro.config.notification_sound=pixiedust.ogg +$(call inherit-product, $(SRC_TARGET_DIR)/product/base.mk) $(call inherit-product-if-exists, frameworks/base/data/keyboards/keyboards.mk) $(call inherit-product-if-exists, frameworks/base/data/fonts/fonts.mk) $(call inherit-product-if-exists, frameworks/base/data/sounds/AudioPackage5.mk) 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 @@ PRODUCT_COPY_FILES := \ 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 @@ copy_file(const string& src, const string& dst) 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 @@ strip_file(const string& path) 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 @@ function do_builds do rm -rf $TEST_BUILD_DIR/$PREFIX-$1 make PRODUCT-$(echo $1 | sed "s/-.*//" )-installclean - make -j6 PRODUCT-$1 dist DIST_DIR=$TEST_BUILD_DIR/$PREFIX-$1 + make -j16 PRODUCT-$1 dist DIST_DIR=$TEST_BUILD_DIR/$PREFIX-$1 if [ $? -ne 0 ] ; then echo FAILED return 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/findleaves.py b/tools/findleaves.py index 52c4d9f..3a9e508 100755 --- a/tools/findleaves.py +++ b/tools/findleaves.py @@ -28,7 +28,7 @@ def perform_find(mindepth, prune, dirlist, filename): pruneleaves = set(map(lambda x: os.path.split(x)[1], prune)) for rootdir in dirlist: rootdepth = rootdir.count("/") - for root, dirs, files in os.walk(rootdir): + for root, dirs, files in os.walk(rootdir, followlinks=True): # prune check_prune = False for d in dirs: 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 @@ include $(CLEAR_VARS) LOCAL_SRC_FILES := fs_config.c LOCAL_MODULE := fs_config LOCAL_FORCE_STATIC_EXECUTABLE := true -LOCAL_MODULE_TAGS := eng include $(BUILD_HOST_EXECUTABLE) 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) diff --git a/tools/zipalign/Android.mk b/tools/zipalign/Android.mk index 9763bd2..089c68b 100644 --- a/tools/zipalign/Android.mk +++ b/tools/zipalign/Android.mk @@ -28,6 +28,10 @@ else LOCAL_LDLIBS += -lz endif +ifneq ($(strip $(BUILD_HOST_static)),) +LOCAL_LDLIBS += -lpthread +endif # BUILD_HOST_static + LOCAL_MODULE := zipalign include $(BUILD_HOST_EXECUTABLE) diff --git a/tools/zipalign/ZipAlign.cpp b/tools/zipalign/ZipAlign.cpp index c2d8159..8b2d1af 100644 --- a/tools/zipalign/ZipAlign.cpp +++ b/tools/zipalign/ZipAlign.cpp @@ -125,7 +125,7 @@ static int process(const char* inFileName, const char* outFileName, ZipFile::kOpenReadWrite|ZipFile::kOpenCreate|ZipFile::kOpenTruncate) != NO_ERROR) { - fprintf(stderr, "Unable to open '%s' as zip archive\n", inFileName); + fprintf(stderr, "Unable to open '%s' as zip archive\n", outFileName); return 1; } |