2c86bfd285
The WebKit library link line is exceeding 128KB on sim-eng builds. The path to sim-eng object files is slightly longer than device builds because the object files live under the "host" directory. This change truncates the "product" directory name to "pr", reducing the command line by a few KB. This only affects sim-eng builds. The real fix will need be to webkit (see internal bug 1917987), which will eventually start failing on device builds if it continues to grow.
337 lines
11 KiB
Makefile
337 lines
11 KiB
Makefile
# Variables we check:
|
|
# HOST_BUILD_TYPE = { release debug }
|
|
# TARGET_SIMULATOR = { true <null> }
|
|
# TARGET_BUILD_TYPE = { release debug }
|
|
# and we output a bunch of variables, see the case statement at
|
|
# the bottom for the full list
|
|
# OUT_DIR is also set to "out" if it's not already set.
|
|
# this allows you to set it to somewhere else if you like
|
|
|
|
# Set up version information.
|
|
include $(BUILD_SYSTEM)/version_defaults.mk
|
|
|
|
# ---------------------------------------------------------------
|
|
# If you update the build system such that the environment setup
|
|
# or buildspec.mk need to be updated, increment this number, and
|
|
# people who haven't re-run those will have to do so before they
|
|
# can build. Make sure to also update the corresponding value in
|
|
# buildspec.mk.default and envsetup.sh.
|
|
CORRECT_BUILD_ENV_SEQUENCE_NUMBER := 9
|
|
|
|
# ---------------------------------------------------------------
|
|
# The product defaults to generic on hardware and sim on sim
|
|
# NOTE: This will be overridden in product_config.mk if make
|
|
# was invoked with a PRODUCT-xxx-yyy goal.
|
|
ifeq ($(TARGET_PRODUCT),)
|
|
ifeq ($(TARGET_SIMULATOR),true)
|
|
TARGET_PRODUCT := sim
|
|
else
|
|
TARGET_PRODUCT := generic
|
|
endif
|
|
endif
|
|
|
|
|
|
# the variant -- the set of files that are included for a build
|
|
ifeq ($(strip $(TARGET_BUILD_VARIANT)),)
|
|
TARGET_BUILD_VARIANT := eng
|
|
endif
|
|
|
|
# Read the product specs so we an get TARGET_DEVICE and other
|
|
# 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))
|
|
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)
|
|
endif
|
|
|
|
|
|
|
|
# ---------------------------------------------------------------
|
|
# Set up configuration for host machine. We don't do cross-
|
|
# compiles except for arm, so the HOST is whatever we are
|
|
# running on
|
|
|
|
UNAME := $(shell uname -sm)
|
|
|
|
# HOST_OS
|
|
ifneq (,$(findstring Linux,$(UNAME)))
|
|
HOST_OS := linux
|
|
endif
|
|
ifneq (,$(findstring Darwin,$(UNAME)))
|
|
HOST_OS := darwin
|
|
endif
|
|
ifneq (,$(findstring Macintosh,$(UNAME)))
|
|
HOST_OS := darwin
|
|
endif
|
|
ifneq (,$(findstring CYGWIN,$(UNAME)))
|
|
HOST_OS := windows
|
|
endif
|
|
ifneq ($(USE_MINGW),)
|
|
HOST_OS := windows
|
|
endif
|
|
|
|
ifeq ($(HOST_OS),)
|
|
$(error Unable to determine HOST_OS from uname -sm: $(UNAME)!)
|
|
endif
|
|
|
|
|
|
# HOST_ARCH
|
|
ifneq (,$(findstring 86,$(UNAME)))
|
|
HOST_ARCH := x86
|
|
endif
|
|
|
|
ifneq (,$(findstring Power,$(UNAME)))
|
|
HOST_ARCH := ppc
|
|
endif
|
|
|
|
ifeq ($(HOST_ARCH),)
|
|
$(error Unable to determine HOST_ARCH from uname -sm: $(UNAME)!)
|
|
endif
|
|
|
|
# the host build defaults to release, and it must be release or debug
|
|
ifeq ($(HOST_BUILD_TYPE),)
|
|
HOST_BUILD_TYPE := release
|
|
endif
|
|
|
|
ifneq ($(HOST_BUILD_TYPE),release)
|
|
ifneq ($(HOST_BUILD_TYPE),debug)
|
|
$(error HOST_BUILD_TYPE must be either release or debug, not '$(HOST_BUILD_TYPE)')
|
|
endif
|
|
endif
|
|
|
|
# This is the standard way to name a directory containing prebuilt host
|
|
# objects. E.g., prebuilt/$(HOST_PREBUILT_TAG)/cc
|
|
ifeq ($(HOST_OS),windows)
|
|
HOST_PREBUILT_TAG := windows
|
|
else
|
|
HOST_PREBUILT_TAG := $(HOST_OS)-$(HOST_ARCH)
|
|
endif
|
|
|
|
|
|
# ---------------------------------------------------------------
|
|
# Set up configuration for target machine.
|
|
# The following must be set:
|
|
# TARGET_OS = { linux }
|
|
# TARGET_ARCH = { arm | x86 }
|
|
|
|
|
|
# if we're build the simulator, HOST_* is TARGET_* (except for BUILD_TYPE)
|
|
# otherwise it's <arch>-linux
|
|
ifeq ($(TARGET_SIMULATOR),true)
|
|
ifneq ($(HOST_OS),linux)
|
|
$(error TARGET_SIMULATOR=true is only supported under Linux)
|
|
endif
|
|
TARGET_ARCH := $(HOST_ARCH)
|
|
TARGET_OS := $(HOST_OS)
|
|
else
|
|
ifeq ($(TARGET_ARCH),)
|
|
TARGET_ARCH := arm
|
|
endif
|
|
TARGET_OS := linux
|
|
endif
|
|
|
|
# the target build type defaults to release
|
|
ifneq ($(TARGET_BUILD_TYPE),debug)
|
|
TARGET_BUILD_TYPE := release
|
|
endif
|
|
|
|
# This is the standard way to name a directory containing prebuilt target
|
|
# objects. E.g., prebuilt/$(TARGET_PREBUILT_TAG)/libc.so
|
|
ifeq ($(TARGET_SIMULATOR),true)
|
|
TARGET_PREBUILT_TAG := $(TARGET_OS)-$(TARGET_ARCH)
|
|
else
|
|
TARGET_PREBUILT_TAG := android-$(TARGET_ARCH)
|
|
endif
|
|
|
|
# ---------------------------------------------------------------
|
|
# figure out the output directories
|
|
|
|
ifeq (,$(strip $(OUT_DIR)))
|
|
OUT_DIR := $(TOPDIR)out
|
|
endif
|
|
|
|
DEBUG_OUT_DIR := $(OUT_DIR)/debug
|
|
|
|
# Move the host or target under the debug/ directory
|
|
# if necessary.
|
|
TARGET_OUT_ROOT_release := $(OUT_DIR)/target
|
|
TARGET_OUT_ROOT_debug := $(DEBUG_OUT_DIR)/target
|
|
TARGET_OUT_ROOT := $(TARGET_OUT_ROOT_$(TARGET_BUILD_TYPE))
|
|
|
|
HOST_OUT_ROOT_release := $(OUT_DIR)/host
|
|
HOST_OUT_ROOT_debug := $(DEBUG_OUT_DIR)/host
|
|
HOST_OUT_ROOT := $(HOST_OUT_ROOT_$(HOST_BUILD_TYPE))
|
|
|
|
HOST_OUT_release := $(HOST_OUT_ROOT_release)/$(HOST_OS)-$(HOST_ARCH)
|
|
HOST_OUT_debug := $(HOST_OUT_ROOT_debug)/$(HOST_OS)-$(HOST_ARCH)
|
|
HOST_OUT := $(HOST_OUT_$(HOST_BUILD_TYPE))
|
|
|
|
ifeq ($(TARGET_SIMULATOR),true)
|
|
# Any arch- or os-specific parts of the simulator (everything
|
|
# under product/) are actually host-dependent.
|
|
# But, the debug type is controlled by TARGET_BUILD_TYPE and not
|
|
# HOST_BUILD_TYPE.
|
|
TARGET_PRODUCT_OUT_ROOT := $(HOST_OUT_$(TARGET_BUILD_TYPE))/pr
|
|
else
|
|
TARGET_PRODUCT_OUT_ROOT := $(TARGET_OUT_ROOT)/product
|
|
endif
|
|
|
|
TARGET_COMMON_OUT_ROOT := $(TARGET_OUT_ROOT)/common
|
|
HOST_COMMON_OUT_ROOT := $(HOST_OUT_ROOT)/common
|
|
|
|
PRODUCT_OUT := $(TARGET_PRODUCT_OUT_ROOT)/$(TARGET_DEVICE)
|
|
|
|
OUT_DOCS := $(TARGET_COMMON_OUT_ROOT)/docs
|
|
|
|
HOST_OUT_EXECUTABLES:= $(HOST_OUT)/bin
|
|
HOST_OUT_SHARED_LIBRARIES:= $(HOST_OUT)/lib
|
|
HOST_OUT_JAVA_LIBRARIES:= $(HOST_OUT)/framework
|
|
HOST_OUT_SDK_ADDON := $(HOST_OUT)/sdk_addon
|
|
|
|
HOST_OUT_INTERMEDIATES := $(HOST_OUT)/obj
|
|
HOST_OUT_HEADERS:= $(HOST_OUT_INTERMEDIATES)/include
|
|
HOST_OUT_INTERMEDIATE_LIBRARIES := $(HOST_OUT_INTERMEDIATES)/lib
|
|
HOST_OUT_STATIC_LIBRARIES := $(HOST_OUT_INTERMEDIATE_LIBRARIES)
|
|
HOST_OUT_NOTICE_FILES:=$(HOST_OUT_INTERMEDIATES)/NOTICE_FILES
|
|
HOST_OUT_COMMON_INTERMEDIATES := $(HOST_COMMON_OUT_ROOT)/obj
|
|
|
|
TARGET_OUT_INTERMEDIATES := $(PRODUCT_OUT)/obj
|
|
TARGET_OUT_HEADERS:= $(TARGET_OUT_INTERMEDIATES)/include
|
|
TARGET_OUT_INTERMEDIATE_LIBRARIES := $(TARGET_OUT_INTERMEDIATES)/lib
|
|
TARGET_OUT_COMMON_INTERMEDIATES := $(TARGET_COMMON_OUT_ROOT)/obj
|
|
|
|
TARGET_OUT := $(PRODUCT_OUT)/system
|
|
TARGET_OUT_EXECUTABLES:= $(TARGET_OUT)/bin
|
|
TARGET_OUT_OPTIONAL_EXECUTABLES:= $(TARGET_OUT)/xbin
|
|
TARGET_OUT_SHARED_LIBRARIES:= $(TARGET_OUT)/lib
|
|
TARGET_OUT_JAVA_LIBRARIES:= $(TARGET_OUT)/framework
|
|
TARGET_OUT_APPS:= $(TARGET_OUT)/app
|
|
TARGET_OUT_KEYLAYOUT := $(TARGET_OUT)/usr/keylayout
|
|
TARGET_OUT_KEYCHARS := $(TARGET_OUT)/usr/keychars
|
|
TARGET_OUT_ETC := $(TARGET_OUT)/etc
|
|
TARGET_OUT_STATIC_LIBRARIES:= $(TARGET_OUT_INTERMEDIATES)/lib
|
|
TARGET_OUT_NOTICE_FILES:=$(TARGET_OUT_INTERMEDIATES)/NOTICE_FILES
|
|
|
|
TARGET_OUT_DATA := $(PRODUCT_OUT)/data
|
|
TARGET_OUT_DATA_EXECUTABLES:= $(TARGET_OUT_EXECUTABLES)
|
|
TARGET_OUT_DATA_SHARED_LIBRARIES:= $(TARGET_OUT_SHARED_LIBRARIES)
|
|
TARGET_OUT_DATA_JAVA_LIBRARIES:= $(TARGET_OUT_JAVA_LIBRARIES)
|
|
TARGET_OUT_DATA_APPS:= $(TARGET_OUT_DATA)/app
|
|
TARGET_OUT_DATA_KEYLAYOUT := $(TARGET_OUT_KEYLAYOUT)
|
|
TARGET_OUT_DATA_KEYCHARS := $(TARGET_OUT_KEYCHARS)
|
|
TARGET_OUT_DATA_ETC := $(TARGET_OUT_ETC)
|
|
TARGET_OUT_DATA_STATIC_LIBRARIES:= $(TARGET_OUT_STATIC_LIBRARIES)
|
|
|
|
TARGET_OUT_UNSTRIPPED := $(PRODUCT_OUT)/symbols
|
|
TARGET_OUT_EXECUTABLES_UNSTRIPPED := $(TARGET_OUT_UNSTRIPPED)/system/bin
|
|
TARGET_OUT_SHARED_LIBRARIES_UNSTRIPPED := $(TARGET_OUT_UNSTRIPPED)/system/lib
|
|
TARGET_ROOT_OUT_UNSTRIPPED := $(TARGET_OUT_UNSTRIPPED)
|
|
TARGET_ROOT_OUT_SBIN_UNSTRIPPED := $(TARGET_OUT_UNSTRIPPED)/sbin
|
|
TARGET_ROOT_OUT_BIN_UNSTRIPPED := $(TARGET_OUT_UNSTRIPPED)/bin
|
|
|
|
TARGET_ROOT_OUT := $(PRODUCT_OUT)/root
|
|
TARGET_ROOT_OUT_BIN := $(TARGET_ROOT_OUT)/bin
|
|
TARGET_ROOT_OUT_SBIN := $(TARGET_ROOT_OUT)/sbin
|
|
TARGET_ROOT_OUT_ETC := $(TARGET_ROOT_OUT)/etc
|
|
TARGET_ROOT_OUT_USR := $(TARGET_ROOT_OUT)/usr
|
|
|
|
TARGET_RECOVERY_OUT := $(PRODUCT_OUT)/recovery
|
|
TARGET_RECOVERY_ROOT_OUT := $(TARGET_RECOVERY_OUT)/root
|
|
|
|
TARGET_SYSLOADER_OUT := $(PRODUCT_OUT)/sysloader
|
|
TARGET_SYSLOADER_ROOT_OUT := $(TARGET_SYSLOADER_OUT)/root
|
|
TARGET_SYSLOADER_SYSTEM_OUT := $(TARGET_SYSLOADER_OUT)/root/system
|
|
|
|
TARGET_INSTALLER_OUT := $(PRODUCT_OUT)/installer
|
|
TARGET_INSTALLER_DATA_OUT := $(TARGET_INSTALLER_OUT)/data
|
|
TARGET_INSTALLER_ROOT_OUT := $(TARGET_INSTALLER_OUT)/root
|
|
TARGET_INSTALLER_SYSTEM_OUT := $(TARGET_INSTALLER_OUT)/root/system
|
|
|
|
COMMON_MODULE_CLASSES := JAVA_LIBRARIES NOTICE_FILES
|
|
|
|
ifeq (,$(strip $(DIST_DIR)))
|
|
DIST_DIR := $(OUT_DIR)/dist
|
|
endif
|
|
|
|
ifeq ($(PRINT_BUILD_CONFIG),)
|
|
PRINT_BUILD_CONFIG := true
|
|
endif
|
|
|
|
# ---------------------------------------------------------------
|
|
# the setpath shell function in envsetup.sh uses this to figure out
|
|
# what to add to the path given the config we have chosen.
|
|
ifeq ($(CALLED_FROM_SETUP),true)
|
|
|
|
ABP:=$(PWD)/$(HOST_OUT_EXECUTABLES)
|
|
|
|
ifeq ($(TARGET_SIMULATOR),true)
|
|
ABP:=$(ABP):$(TARGET_OUT_EXECUTABLES)
|
|
else
|
|
# this should be copied to HOST_OUT_EXECUTABLES instead
|
|
ABP:=$(ABP):$(PWD)/prebuilt/$(HOST_PREBUILT_TAG)/toolchain/arm-eabi-4.4.0/bin
|
|
endif
|
|
ANDROID_BUILD_PATHS := $(ABP)
|
|
ANDROID_PREBUILTS := prebuilt/$(HOST_PREBUILT_TAG)
|
|
|
|
# The "dumpvar" stuff lets you say something like
|
|
#
|
|
# CALLED_FROM_SETUP=true \
|
|
# make -f config/envsetup.make dumpvar-TARGET_OUT
|
|
# or
|
|
# CALLED_FROM_SETUP=true \
|
|
# make -f config/envsetup.make dumpvar-abs-HOST_OUT_EXECUTABLES
|
|
#
|
|
# The plain (non-abs) version just dumps the value of the named variable.
|
|
# The "abs" version will treat the variable as a path, and dumps an
|
|
# absolute path to it.
|
|
#
|
|
dumpvar_goals := \
|
|
$(strip $(patsubst dumpvar-%,%,$(filter dumpvar-%,$(MAKECMDGOALS))))
|
|
ifdef dumpvar_goals
|
|
|
|
ifneq ($(words $(dumpvar_goals)),1)
|
|
$(error Only one "dumpvar-" goal allowed. Saw "$(MAKECMDGOALS)")
|
|
endif
|
|
|
|
# If the goal is of the form "dumpvar-abs-VARNAME", then
|
|
# treat VARNAME as a path and return the absolute path to it.
|
|
absolute_dumpvar := $(strip $(filter abs-%,$(dumpvar_goals)))
|
|
ifdef absolute_dumpvar
|
|
dumpvar_goals := $(patsubst abs-%,%,$(dumpvar_goals))
|
|
DUMPVAR_VALUE := $(PWD)/$($(dumpvar_goals))
|
|
dumpvar_target := dumpvar-abs-$(dumpvar_goals)
|
|
else
|
|
DUMPVAR_VALUE := $($(dumpvar_goals))
|
|
dumpvar_target := dumpvar-$(dumpvar_goals)
|
|
endif
|
|
|
|
.PHONY: $(dumpvar_target)
|
|
$(dumpvar_target):
|
|
@echo $(DUMPVAR_VALUE)
|
|
|
|
endif # dumpvar_goals
|
|
|
|
ifneq ($(dumpvar_goals),report_config)
|
|
PRINT_BUILD_CONFIG:=
|
|
endif
|
|
|
|
endif # CALLED_FROM_SETUP
|
|
|
|
|
|
ifneq ($(PRINT_BUILD_CONFIG),)
|
|
$(info ============================================)
|
|
$(info PLATFORM_VERSION_CODENAME=$(PLATFORM_VERSION_CODENAME))
|
|
$(info PLATFORM_VERSION=$(PLATFORM_VERSION))
|
|
$(info TARGET_PRODUCT=$(TARGET_PRODUCT))
|
|
$(info TARGET_BUILD_VARIANT=$(TARGET_BUILD_VARIANT))
|
|
$(info TARGET_SIMULATOR=$(TARGET_SIMULATOR))
|
|
$(info TARGET_BUILD_TYPE=$(TARGET_BUILD_TYPE))
|
|
$(info TARGET_ARCH=$(TARGET_ARCH))
|
|
$(info HOST_ARCH=$(HOST_ARCH))
|
|
$(info HOST_OS=$(HOST_OS))
|
|
$(info HOST_BUILD_TYPE=$(HOST_BUILD_TYPE))
|
|
$(info BUILD_ID=$(BUILD_ID))
|
|
$(info ============================================)
|
|
endif
|