diff options
Diffstat (limited to 'core/envsetup.mk')
-rw-r--r-- | core/envsetup.mk | 278 |
1 files changed, 278 insertions, 0 deletions
diff --git a/core/envsetup.mk b/core/envsetup.mk new file mode 100644 index 0000000..14ceef0 --- /dev/null +++ b/core/envsetup.mk @@ -0,0 +1,278 @@ +# 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 + +# --------------------------------------------------------------- +# 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 := 8 + + +# --------------------------------------------------------------- +# 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 } +# TARGET_ARCH==arm means that it's not the simulator, and the others +# mean it is the simulator. + +# if we're build the simulator, HOST_* is TARGET_* (except for BUILD_TYPE) +# otherwise it's arm-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 +TARGET_ARCH := arm +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 + +# the product defaults to sooner on ARM and nothing on sim +ifeq ($(TARGET_PRODUCT),) +ifeq ($(TARGET_SIMULATOR),true) +TARGET_PRODUCT := sim +else +TARGET_PRODUCT := sooner +endif +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))/product +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_PRODUCT) + +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_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 + +COMMON_MODULE_CLASSES := JAVA_LIBRARIES NOTICE_FILES + +ifeq (,$(strip $(DIST_DIR))) + DIST_DIR := $(OUT_DIR)/dist +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.2.1/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 + +endif # CALLED_FROM_SETUP |