Load compiler environment for a second arch.

This is the first step to build 32-bit libraries in a 64-bit product.
It will work like this:
1) In the product's BoardConfig.mk, define:
TARGET_2ND_ARCH, TARGET_2ND_ARCH_VARIANT, TARGET_2ND_CPU_VARIANT.
The build system uses those variables to set up an additional compiler
environment for the second arch.

2) When parsing Android.mks, the build system sets up rules to build a
module for both the 1st arch and the 2nd arch, unless it's explicitly
asked to skip so.
Android.mk will be adapted if there is additional rule of generating
source files.
The build system will accept arch-specific LOCAL_ variables, such as
LOCAL_CFLAGS_arm, LOCAL_CFLAGS_armv7-a-neon, LOCAL_CFLAGS_cortex-a15,
LOCAL_CFLAGS_aarch64 etc. Modules use such variables to set up build for
various archs at the same time.

3) Install binary of the 2nd arch by adding "<module_name>:32" to
PRODUCT_PACKAGES. All 2nd-arch libraries linked in by "<module_name>:32"
will be installed automatically.

Bug: 11654773
Change-Id: I2df63cd5463a07bf5358bee2a109f8fb9590fe30

Conflicts:
	core/combo/TARGET_linux-arm.mk
This commit is contained in:
Ying Wang
2013-12-27 11:09:36 -08:00
parent d5227a833c
commit 1d274d2686
11 changed files with 143 additions and 104 deletions

View File

@@ -30,51 +30,51 @@
# include defines, and compiler settings for the given architecture # include defines, and compiler settings for the given architecture
# version. # version.
# #
ifeq ($(strip $(TARGET_ARCH_VARIANT)),) ifeq ($(strip $(TARGET_$(combo_2nd_arch_prefix)ARCH_VARIANT)),)
TARGET_ARCH_VARIANT := armv5te TARGET_$(combo_2nd_arch_prefix)ARCH_VARIANT := armv5te
endif endif
ifeq ($(strip $(TARGET_GCC_VERSION_EXP)),) ifeq ($(strip $(TARGET_GCC_VERSION_EXP)),)
TARGET_GCC_VERSION := 4.8 $(combo_2nd_arch_prefix)TARGET_GCC_VERSION := 4.8
else else
TARGET_GCC_VERSION := $(TARGET_GCC_VERSION_EXP) $(combo_2nd_arch_prefix)TARGET_GCC_VERSION := $(TARGET_GCC_VERSION_EXP)
endif endif
TARGET_ARCH_SPECIFIC_MAKEFILE := $(BUILD_COMBOS)/arch/$(TARGET_ARCH)/$(TARGET_ARCH_VARIANT).mk TARGET_ARCH_SPECIFIC_MAKEFILE := $(BUILD_COMBOS)/arch/$(TARGET_$(combo_2nd_arch_prefix)ARCH)/$(TARGET_$(combo_2nd_arch_prefix)ARCH_VARIANT).mk
ifeq ($(strip $(wildcard $(TARGET_ARCH_SPECIFIC_MAKEFILE))),) ifeq ($(strip $(wildcard $(TARGET_ARCH_SPECIFIC_MAKEFILE))),)
$(error Unknown ARM architecture version: $(TARGET_ARCH_VARIANT)) $(error Unknown ARM architecture version: $(TARGET_$(combo_2nd_arch_prefix)ARCH_VARIANT))
endif endif
include $(TARGET_ARCH_SPECIFIC_MAKEFILE) include $(TARGET_ARCH_SPECIFIC_MAKEFILE)
# You can set TARGET_TOOLS_PREFIX to get gcc from somewhere else # You can set TARGET_TOOLS_PREFIX to get gcc from somewhere else
ifeq ($(strip $(TARGET_TOOLS_PREFIX)),) ifeq ($(strip $($(combo_2nd_arch_prefix)TARGET_TOOLS_PREFIX)),)
TARGET_TOOLCHAIN_ROOT := prebuilts/gcc/$(HOST_PREBUILT_TAG)/arm/arm-linux-androideabi-$(TARGET_GCC_VERSION) $(combo_2nd_arch_prefix)TARGET_TOOLCHAIN_ROOT := prebuilts/gcc/$(HOST_PREBUILT_TAG)/arm/arm-linux-androideabi-$($(combo_2nd_arch_prefix)TARGET_GCC_VERSION)
TARGET_TOOLS_PREFIX := $(TARGET_TOOLCHAIN_ROOT)/bin/arm-linux-androideabi- $(combo_2nd_arch_prefix)TARGET_TOOLS_PREFIX := $($(combo_2nd_arch_prefix)TARGET_TOOLCHAIN_ROOT)/bin/arm-linux-androideabi-
endif endif
TARGET_CC := $(TARGET_TOOLS_PREFIX)gcc$(HOST_EXECUTABLE_SUFFIX) $(combo_2nd_arch_prefix)TARGET_CC := $($(combo_2nd_arch_prefix)TARGET_TOOLS_PREFIX)gcc$(HOST_EXECUTABLE_SUFFIX)
TARGET_CXX := $(TARGET_TOOLS_PREFIX)g++$(HOST_EXECUTABLE_SUFFIX) $(combo_2nd_arch_prefix)TARGET_CXX := $($(combo_2nd_arch_prefix)TARGET_TOOLS_PREFIX)g++$(HOST_EXECUTABLE_SUFFIX)
TARGET_AR := $(TARGET_TOOLS_PREFIX)ar$(HOST_EXECUTABLE_SUFFIX) $(combo_2nd_arch_prefix)TARGET_AR := $($(combo_2nd_arch_prefix)TARGET_TOOLS_PREFIX)ar$(HOST_EXECUTABLE_SUFFIX)
TARGET_OBJCOPY := $(TARGET_TOOLS_PREFIX)objcopy$(HOST_EXECUTABLE_SUFFIX) $(combo_2nd_arch_prefix)TARGET_OBJCOPY := $($(combo_2nd_arch_prefix)TARGET_TOOLS_PREFIX)objcopy$(HOST_EXECUTABLE_SUFFIX)
TARGET_LD := $(TARGET_TOOLS_PREFIX)ld$(HOST_EXECUTABLE_SUFFIX) $(combo_2nd_arch_prefix)TARGET_LD := $($(combo_2nd_arch_prefix)TARGET_TOOLS_PREFIX)ld$(HOST_EXECUTABLE_SUFFIX)
TARGET_STRIP := $(TARGET_TOOLS_PREFIX)strip$(HOST_EXECUTABLE_SUFFIX) $(combo_2nd_arch_prefix)TARGET_STRIP := $($(combo_2nd_arch_prefix)TARGET_TOOLS_PREFIX)strip$(HOST_EXECUTABLE_SUFFIX)
ifeq ($(TARGET_BUILD_VARIANT),user) ifeq ($(TARGET_BUILD_VARIANT),user)
TARGET_STRIP_COMMAND = $(TARGET_STRIP) --strip-all $< -o $@ $(combo_2nd_arch_prefix)TARGET_STRIP_COMMAND = $(PRIVATE_STRIP) --strip-all $< -o $@
else else
TARGET_STRIP_COMMAND = $(TARGET_STRIP) --strip-all $< -o $@ && \ $(combo_2nd_arch_prefix)TARGET_STRIP_COMMAND = $(PRIVATE_STRIP) --strip-all $< -o $@ && \
$(TARGET_OBJCOPY) --add-gnu-debuglink=$< $@ $(PRIVATE_OBJCOPY) --add-gnu-debuglink=$< $@
endif endif
TARGET_NO_UNDEFINED_LDFLAGS := -Wl,--no-undefined $(combo_2nd_arch_prefix)TARGET_NO_UNDEFINED_LDFLAGS := -Wl,--no-undefined
TARGET_arm_CFLAGS := -O2 \ $(combo_2nd_arch_prefix)TARGET_arm_CFLAGS := -O2 \
-fomit-frame-pointer \ -fomit-frame-pointer \
-fstrict-aliasing \ -fstrict-aliasing \
-funswitch-loops -funswitch-loops
# Modules can choose to compile some source as thumb. # Modules can choose to compile some source as thumb.
TARGET_thumb_CFLAGS := -mthumb \ $(combo_2nd_arch_prefix)TARGET_thumb_CFLAGS := -mthumb \
-Os \ -Os \
-fomit-frame-pointer \ -fomit-frame-pointer \
-fno-strict-aliasing -fno-strict-aliasing
@@ -89,13 +89,13 @@ TARGET_thumb_CFLAGS := -mthumb \
# with -mlong-calls. When built at -O0, those libraries are # with -mlong-calls. When built at -O0, those libraries are
# too big for a thumb "BL <label>" to go from one end to the other. # too big for a thumb "BL <label>" to go from one end to the other.
ifeq ($(FORCE_ARM_DEBUGGING),true) ifeq ($(FORCE_ARM_DEBUGGING),true)
TARGET_arm_CFLAGS += -fno-omit-frame-pointer -fno-strict-aliasing $(combo_2nd_arch_prefix)TARGET_arm_CFLAGS += -fno-omit-frame-pointer -fno-strict-aliasing
TARGET_thumb_CFLAGS += -marm -fno-omit-frame-pointer $(combo_2nd_arch_prefix)TARGET_thumb_CFLAGS += -marm -fno-omit-frame-pointer
endif endif
android_config_h := $(call select-android-config-h,linux-arm) android_config_h := $(call select-android-config-h,linux-arm)
TARGET_GLOBAL_CFLAGS += \ $(combo_2nd_arch_prefix)TARGET_GLOBAL_CFLAGS += \
-msoft-float -fpic -fPIE \ -msoft-float -fpic -fPIE \
-ffunction-sections \ -ffunction-sections \
-fdata-sections \ -fdata-sections \
@@ -113,8 +113,8 @@ TARGET_GLOBAL_CFLAGS += \
# "-Wall -Werror" due to a commom idiom "ALOGV(mesg)" where ALOGV is turned # "-Wall -Werror" due to a commom idiom "ALOGV(mesg)" where ALOGV is turned
# into no-op in some builds while mesg is defined earlier. So we explicitly # into no-op in some builds while mesg is defined earlier. So we explicitly
# disable "-Wunused-but-set-variable" here. # disable "-Wunused-but-set-variable" here.
ifneq ($(filter 4.6 4.6.% 4.7 4.7.% 4.8, $(TARGET_GCC_VERSION)),) ifneq ($(filter 4.6 4.6.% 4.7 4.7.% 4.8, $($(combo_2nd_arch_prefix)TARGET_GCC_VERSION)),)
TARGET_GLOBAL_CFLAGS += -Wno-unused-but-set-variable -fno-builtin-sin \ $(combo_2nd_arch_prefix)TARGET_GLOBAL_CFLAGS += -Wno-unused-but-set-variable -fno-builtin-sin \
-fno-strict-volatile-bitfields -fno-strict-volatile-bitfields
endif endif
@@ -126,9 +126,9 @@ endif
# in their exported C++ functions). Also, GCC 4.5 has already # in their exported C++ functions). Also, GCC 4.5 has already
# removed the warning from the compiler. # removed the warning from the compiler.
# #
TARGET_GLOBAL_CFLAGS += -Wno-psabi $(combo_2nd_arch_prefix)TARGET_GLOBAL_CFLAGS += -Wno-psabi
TARGET_GLOBAL_LDFLAGS += \ $(combo_2nd_arch_prefix)TARGET_GLOBAL_LDFLAGS += \
-Wl,-z,noexecstack \ -Wl,-z,noexecstack \
-Wl,-z,relro \ -Wl,-z,relro \
-Wl,-z,now \ -Wl,-z,now \
@@ -137,12 +137,12 @@ TARGET_GLOBAL_LDFLAGS += \
-Wl,--icf=safe \ -Wl,--icf=safe \
$(arch_variant_ldflags) $(arch_variant_ldflags)
TARGET_GLOBAL_CFLAGS += -mthumb-interwork $(combo_2nd_arch_prefix)TARGET_GLOBAL_CFLAGS += -mthumb-interwork
TARGET_GLOBAL_CPPFLAGS += -fvisibility-inlines-hidden $(combo_2nd_arch_prefix)TARGET_GLOBAL_CPPFLAGS += -fvisibility-inlines-hidden
# More flags/options can be added here # More flags/options can be added here
TARGET_RELEASE_CFLAGS := \ $(combo_2nd_arch_prefix)TARGET_RELEASE_CFLAGS := \
-DNDEBUG \ -DNDEBUG \
-g \ -g \
-Wstrict-aliasing=2 \ -Wstrict-aliasing=2 \
@@ -157,40 +157,41 @@ libthread_db_root := bionic/libthread_db
## on some hosts, the target cross-compiler is not available so do not run this command ## on some hosts, the target cross-compiler is not available so do not run this command
ifneq ($(wildcard $(TARGET_CC)),) ifneq ($(wildcard $($(combo_2nd_arch_prefix)TARGET_CC)),)
# We compile with the global cflags to ensure that # We compile with the global cflags to ensure that
# any flags which affect libgcc are correctly taken # any flags which affect libgcc are correctly taken
# into account. # into account.
TARGET_LIBGCC := $(shell $(TARGET_CC) $(TARGET_GLOBAL_CFLAGS) -print-libgcc-file-name) $(combo_2nd_arch_prefix)TARGET_LIBGCC := $(shell $($(combo_2nd_arch_prefix)TARGET_CC) \
target_libgcov := $(shell $(TARGET_CC) $(TARGET_GLOBAL_CFLAGS) \ $($(combo_2nd_arch_prefix)TARGET_GLOBAL_CFLAGS) -print-libgcc-file-name)
target_libgcov := $(shell $($(combo_2nd_arch_prefix)TARGET_CC) $($(combo_2nd_arch_prefix)TARGET_GLOBAL_CFLAGS) \
-print-file-name=libgcov.a) -print-file-name=libgcov.a)
endif endif
# Define FDO (Feedback Directed Optimization) options. # Define FDO (Feedback Directed Optimization) options.
TARGET_FDO_CFLAGS:= $(combo_2nd_arch_prefix)TARGET_FDO_CFLAGS:=
TARGET_FDO_LIB:= $(combo_2nd_arch_prefix)TARGET_FDO_LIB:=
ifneq ($(strip $(BUILD_FDO_INSTRUMENT)),) ifneq ($(strip $(BUILD_FDO_INSTRUMENT)),)
# Set BUILD_FDO_INSTRUMENT=true to turn on FDO instrumentation. # Set BUILD_FDO_INSTRUMENT=true to turn on FDO instrumentation.
# The profile will be generated on /data/local/tmp/profile on the device. # The profile will be generated on /data/local/tmp/profile on the device.
TARGET_FDO_CFLAGS := -fprofile-generate=/data/local/tmp/profile -DANDROID_FDO $(combo_2nd_arch_prefix)TARGET_FDO_CFLAGS := -fprofile-generate=/data/local/tmp/profile -DANDROID_FDO
TARGET_FDO_LIB := $(target_libgcov) $(combo_2nd_arch_prefix)TARGET_FDO_LIB := $(target_libgcov)
else else
# If BUILD_FDO_INSTRUMENT is turned off, then consider doing the FDO optimizations. # 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. # Set TARGET_FDO_PROFILE_PATH to set a custom profile directory for your build.
ifeq ($(strip $(TARGET_FDO_PROFILE_PATH)),) ifeq ($(strip $(TARGET_FDO_PROFILE_PATH)),)
TARGET_FDO_PROFILE_PATH := fdo/profiles/$(TARGET_ARCH)/$(TARGET_ARCH_VARIANT) $(combo_2nd_arch_prefix)TARGET_FDO_PROFILE_PATH := fdo/profiles/$(TARGET_$(combo_2nd_arch_prefix)ARCH)/$(TARGET_$(combo_2nd_arch_prefix)ARCH_VARIANT)
else else
ifeq ($(strip $(wildcard $(TARGET_FDO_PROFILE_PATH))),) ifeq ($(strip $(wildcard $($(combo_2nd_arch_prefix)TARGET_FDO_PROFILE_PATH))),)
$(warning Custom TARGET_FDO_PROFILE_PATH supplied, but directory does not exist. Turn off FDO.) $(warning Custom $(combo_2nd_arch_prefix)TARGET_FDO_PROFILE_PATH supplied, but directory does not exist. Turn off FDO.)
endif endif
endif endif
# If the FDO profile directory can't be found, then FDO is off. # If the FDO profile directory can't be found, then FDO is off.
ifneq ($(strip $(wildcard $(TARGET_FDO_PROFILE_PATH))),) ifneq ($(strip $(wildcard $($(combo_2nd_arch_prefix)TARGET_FDO_PROFILE_PATH))),)
TARGET_FDO_CFLAGS := -fprofile-use=$(TARGET_FDO_PROFILE_PATH) -DANDROID_FDO $(combo_2nd_arch_prefix)TARGET_FDO_CFLAGS := -fprofile-use=$($(combo_2nd_arch_prefix)TARGET_FDO_PROFILE_PATH) -DANDROID_FDO
TARGET_FDO_LIB := $(target_libgcov) $(combo_2nd_arch_prefix)TARGET_FDO_LIB := $(target_libgcov)
endif endif
endif endif
@@ -199,7 +200,7 @@ KERNEL_HEADERS_COMMON := $(libc_root)/kernel/uapi
KERNEL_HEADERS_ARCH := $(libc_root)/kernel/uapi/asm-$(TARGET_ARCH) KERNEL_HEADERS_ARCH := $(libc_root)/kernel/uapi/asm-$(TARGET_ARCH)
KERNEL_HEADERS := $(KERNEL_HEADERS_COMMON) $(KERNEL_HEADERS_ARCH) KERNEL_HEADERS := $(KERNEL_HEADERS_COMMON) $(KERNEL_HEADERS_ARCH)
TARGET_C_INCLUDES := \ $(combo_2nd_arch_prefix)TARGET_C_INCLUDES := \
$(libc_root)/arch-arm/include \ $(libc_root)/arch-arm/include \
$(libc_root)/include \ $(libc_root)/include \
$(libstdc++_root)/include \ $(libstdc++_root)/include \
@@ -208,20 +209,20 @@ TARGET_C_INCLUDES := \
$(libm_root)/include/arm \ $(libm_root)/include/arm \
$(libthread_db_root)/include $(libthread_db_root)/include
TARGET_CRTBEGIN_STATIC_O := $(TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbegin_static.o $(combo_2nd_arch_prefix)TARGET_CRTBEGIN_STATIC_O := $($(combo_2nd_arch_prefix)TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbegin_static.o
TARGET_CRTBEGIN_DYNAMIC_O := $(TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbegin_dynamic.o $(combo_2nd_arch_prefix)TARGET_CRTBEGIN_DYNAMIC_O := $($(combo_2nd_arch_prefix)TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbegin_dynamic.o
TARGET_CRTEND_O := $(TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtend_android.o $(combo_2nd_arch_prefix)TARGET_CRTEND_O := $($(combo_2nd_arch_prefix)TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtend_android.o
TARGET_CRTBEGIN_SO_O := $(TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbegin_so.o $(combo_2nd_arch_prefix)TARGET_CRTBEGIN_SO_O := $($(combo_2nd_arch_prefix)TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbegin_so.o
TARGET_CRTEND_SO_O := $(TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtend_so.o $(combo_2nd_arch_prefix)TARGET_CRTEND_SO_O := $($(combo_2nd_arch_prefix)TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtend_so.o
TARGET_STRIP_MODULE:=true $(combo_2nd_arch_prefix)TARGET_STRIP_MODULE:=true
TARGET_DEFAULT_SYSTEM_SHARED_LIBRARIES := libc libstdc++ libm $(combo_2nd_arch_prefix)TARGET_DEFAULT_SYSTEM_SHARED_LIBRARIES := libc libstdc++ libm
TARGET_CUSTOM_LD_COMMAND := true $(combo_2nd_arch_prefix)TARGET_CUSTOM_LD_COMMAND := true
define transform-o-to-shared-lib-inner define $(combo_2nd_arch_prefix)transform-o-to-shared-lib-inner
$(hide) $(PRIVATE_CXX) \ $(hide) $(PRIVATE_CXX) \
-nostdlib -Wl,-soname,$(notdir $@) \ -nostdlib -Wl,-soname,$(notdir $@) \
-Wl,--gc-sections \ -Wl,--gc-sections \
@@ -245,7 +246,7 @@ $(hide) $(PRIVATE_CXX) \
$(if $(filter true,$(PRIVATE_NO_CRT)),,$(PRIVATE_TARGET_CRTEND_SO_O)) $(if $(filter true,$(PRIVATE_NO_CRT)),,$(PRIVATE_TARGET_CRTEND_SO_O))
endef endef
define transform-o-to-executable-inner define $(combo_2nd_arch_prefix)transform-o-to-executable-inner
$(hide) $(PRIVATE_CXX) -nostdlib -Bdynamic -fPIE -pie \ $(hide) $(PRIVATE_CXX) -nostdlib -Bdynamic -fPIE -pie \
-Wl,-dynamic-linker,/system/bin/linker \ -Wl,-dynamic-linker,/system/bin/linker \
-Wl,--gc-sections \ -Wl,--gc-sections \
@@ -270,7 +271,7 @@ $(hide) $(PRIVATE_CXX) -nostdlib -Bdynamic -fPIE -pie \
$(if $(filter true,$(PRIVATE_NO_CRT)),,$(PRIVATE_TARGET_CRTEND_O)) $(if $(filter true,$(PRIVATE_NO_CRT)),,$(PRIVATE_TARGET_CRTEND_O))
endef endef
define transform-o-to-static-executable-inner define $(combo_2nd_arch_prefix)transform-o-to-static-executable-inner
$(hide) $(PRIVATE_CXX) -nostdlib -Bstatic \ $(hide) $(PRIVATE_CXX) -nostdlib -Bstatic \
-Wl,--gc-sections \ -Wl,--gc-sections \
-o $@ \ -o $@ \

View File

@@ -65,10 +65,10 @@ TARGET_OBJCOPY := $(TARGET_TOOLS_PREFIX)objcopy$(HOST_EXECUTABLE_SUFFIX)
TARGET_LD := $(TARGET_TOOLS_PREFIX)ld$(HOST_EXECUTABLE_SUFFIX) TARGET_LD := $(TARGET_TOOLS_PREFIX)ld$(HOST_EXECUTABLE_SUFFIX)
TARGET_STRIP := $(TARGET_TOOLS_PREFIX)strip$(HOST_EXECUTABLE_SUFFIX) TARGET_STRIP := $(TARGET_TOOLS_PREFIX)strip$(HOST_EXECUTABLE_SUFFIX)
ifeq ($(TARGET_BUILD_VARIANT),user) ifeq ($(TARGET_BUILD_VARIANT),user)
TARGET_STRIP_COMMAND = $(TARGET_STRIP) --strip-all $< -o $@ TARGET_STRIP_COMMAND = $(PRIVATE_STRIP) --strip-all $< -o $@
else else
TARGET_STRIP_COMMAND = $(TARGET_STRIP) --strip-all $< -o $@ && \ TARGET_STRIP_COMMAND = $(PRIVATE_STRIP) --strip-all $< -o $@ && \
$(TARGET_OBJCOPY) --add-gnu-debuglink=$< $@ $(PRIVATE_OBJCOPY) --add-gnu-debuglink=$< $@
endif endif
TARGET_NO_UNDEFINED_LDFLAGS := -Wl,--no-undefined TARGET_NO_UNDEFINED_LDFLAGS := -Wl,--no-undefined

View File

@@ -60,10 +60,10 @@ TARGET_OBJCOPY := $(TARGET_TOOLS_PREFIX)objcopy$(HOST_EXECUTABLE_SUFFIX)
TARGET_LD := $(TARGET_TOOLS_PREFIX)ld$(HOST_EXECUTABLE_SUFFIX) TARGET_LD := $(TARGET_TOOLS_PREFIX)ld$(HOST_EXECUTABLE_SUFFIX)
TARGET_STRIP := $(TARGET_TOOLS_PREFIX)strip$(HOST_EXECUTABLE_SUFFIX) TARGET_STRIP := $(TARGET_TOOLS_PREFIX)strip$(HOST_EXECUTABLE_SUFFIX)
ifeq ($(TARGET_BUILD_VARIANT),user) ifeq ($(TARGET_BUILD_VARIANT),user)
TARGET_STRIP_COMMAND = $(TARGET_STRIP) --strip-all $< -o $@ TARGET_STRIP_COMMAND = $(PRIVATE_STRIP) --strip-all $< -o $@
else else
TARGET_STRIP_COMMAND = $(TARGET_STRIP) --strip-all $< -o $@ && \ TARGET_STRIP_COMMAND = $(PRIVATE_STRIP) --strip-all $< -o $@ && \
$(TARGET_OBJCOPY) --add-gnu-debuglink=$< $@ $(PRIVATE_OBJCOPY) --add-gnu-debuglink=$< $@
endif endif
TARGET_NO_UNDEFINED_LDFLAGS := -Wl,--no-undefined TARGET_NO_UNDEFINED_LDFLAGS := -Wl,--no-undefined

View File

@@ -54,10 +54,10 @@ TARGET_LD := $(TARGET_TOOLS_PREFIX)ld$(HOST_EXECUTABLE_SUFFIX)
TARGET_STRIP := $(TARGET_TOOLS_PREFIX)strip$(HOST_EXECUTABLE_SUFFIX) TARGET_STRIP := $(TARGET_TOOLS_PREFIX)strip$(HOST_EXECUTABLE_SUFFIX)
ifeq ($(TARGET_BUILD_VARIANT),user) ifeq ($(TARGET_BUILD_VARIANT),user)
TARGET_STRIP_COMMAND = $(TARGET_STRIP) --strip-debug $< -o $@ TARGET_STRIP_COMMAND = $(PRIVATE_STRIP) --strip-debug $< -o $@
else else
TARGET_STRIP_COMMAND = $(TARGET_STRIP) --strip-debug $< -o $@ && \ TARGET_STRIP_COMMAND = $(PRIVATE_STRIP) --strip-debug $< -o $@ && \
$(TARGET_OBJCOPY) --add-gnu-debuglink=$< $@ $(PRIVATE_OBJCOPY) --add-gnu-debuglink=$< $@
endif endif
ifneq ($(wildcard $(TARGET_CC)),) ifneq ($(wildcard $(TARGET_CC)),)

View File

@@ -56,10 +56,10 @@ TARGET_LD := $(TARGET_TOOLS_PREFIX)ld$(HOST_EXECUTABLE_SUFFIX)
TARGET_STRIP := $(TARGET_TOOLS_PREFIX)strip$(HOST_EXECUTABLE_SUFFIX) TARGET_STRIP := $(TARGET_TOOLS_PREFIX)strip$(HOST_EXECUTABLE_SUFFIX)
ifeq ($(TARGET_BUILD_VARIANT),user) ifeq ($(TARGET_BUILD_VARIANT),user)
TARGET_STRIP_COMMAND = $(TARGET_STRIP) --strip-debug $< -o $@ TARGET_STRIP_COMMAND = $(PRIVATE_STRIP) --strip-debug $< -o $@
else else
TARGET_STRIP_COMMAND = $(TARGET_STRIP) --strip-debug $< -o $@ && \ TARGET_STRIP_COMMAND = $(PRIVATE_STRIP) --strip-debug $< -o $@ && \
$(TARGET_OBJCOPY) --add-gnu-debuglink=$< $@ $(PRIVATE_OBJCOPY) --add-gnu-debuglink=$< $@
endif endif
ifneq ($(wildcard $(TARGET_CC)),) ifneq ($(wildcard $(TARGET_CC)),)

View File

@@ -1,10 +1,10 @@
# Configuration for Linux on ARM. # Configuration for Linux on ARM.
# Generating binaries for the ARMv7-a architecture and higher with NEON # Generating binaries for the ARMv7-a architecture and higher with NEON
# #
ARCH_ARM_HAVE_ARMV7A := true $(combo_2nd_arch_prefix)ARCH_ARM_HAVE_ARMV7A := true
ARCH_ARM_HAVE_VFP := true $(combo_2nd_arch_prefix)ARCH_ARM_HAVE_VFP := true
ARCH_ARM_HAVE_VFP_D32 := true $(combo_2nd_arch_prefix)ARCH_ARM_HAVE_VFP_D32 := true
ARCH_ARM_HAVE_NEON := true $(combo_2nd_arch_prefix)ARCH_ARM_HAVE_NEON := true
ifeq ($(TARGET_CPU_VARIANT),$(filter $(TARGET_CPU_VARIANT),cortex-a15 krait)) ifeq ($(TARGET_CPU_VARIANT),$(filter $(TARGET_CPU_VARIANT),cortex-a15 krait))
arch_variant_cflags := -mcpu=cortex-a15 arch_variant_cflags := -mcpu=cortex-a15

View File

@@ -1,8 +1,8 @@
# Configuration for Linux on ARM. # Configuration for Linux on ARM.
# Generating binaries for the ARMv7-a architecture and higher # Generating binaries for the ARMv7-a architecture and higher
# #
ARCH_ARM_HAVE_ARMV7A := true $(combo_2nd_arch_prefix)ARCH_ARM_HAVE_ARMV7A := true
ARCH_ARM_HAVE_VFP := true $(combo_2nd_arch_prefix)ARCH_ARM_HAVE_VFP := true
# Note: Hard coding the 'tune' value here is probably not ideal, # Note: Hard coding the 'tune' value here is probably not ideal,
# and a better solution should be found in the future. # and a better solution should be found in the future.

View File

@@ -18,43 +18,51 @@
# #
# Inputs: # Inputs:
# combo_target -- prefix for final variables (HOST_ or TARGET_) # combo_target -- prefix for final variables (HOST_ or TARGET_)
# combo_2nd_arch_prefix -- it's defined if this is loaded for TARGET_2ND_ARCH.
# #
# Build a target string like "linux-arm" or "darwin-x86". # Build a target string like "linux-arm" or "darwin-x86".
ifdef combo_2nd_arch_prefix
combo_os_arch := $($(combo_target)OS)-$(TARGET_2ND_ARCH)
else
combo_os_arch := $($(combo_target)OS)-$($(combo_target)ARCH) combo_os_arch := $($(combo_target)OS)-$($(combo_target)ARCH)
endif
combo_var_prefix := $(combo_2nd_arch_prefix)$(combo_target)
# Set reasonable defaults for the various variables # Set reasonable defaults for the various variables
$(combo_target)CC := $(CC) $(combo_var_prefix)CC := $(CC)
$(combo_target)CXX := $(CXX) $(combo_var_prefix)CXX := $(CXX)
$(combo_target)AR := $(AR) $(combo_var_prefix)AR := $(AR)
$(combo_target)STRIP := $(STRIP) $(combo_var_prefix)STRIP := $(STRIP)
$(combo_target)BINDER_MINI := 0 $(combo_var_prefix)BINDER_MINI := 0
$(combo_target)HAVE_EXCEPTIONS := 0 $(combo_var_prefix)HAVE_EXCEPTIONS := 0
$(combo_target)HAVE_UNIX_FILE_PATH := 1 $(combo_var_prefix)HAVE_UNIX_FILE_PATH := 1
$(combo_target)HAVE_WINDOWS_FILE_PATH := 0 $(combo_var_prefix)HAVE_WINDOWS_FILE_PATH := 0
$(combo_target)HAVE_RTTI := 1 $(combo_var_prefix)HAVE_RTTI := 1
$(combo_target)HAVE_CALL_STACKS := 1 $(combo_var_prefix)HAVE_CALL_STACKS := 1
$(combo_target)HAVE_64BIT_IO := 1 $(combo_var_prefix)HAVE_64BIT_IO := 1
$(combo_target)HAVE_CLOCK_TIMERS := 1 $(combo_var_prefix)HAVE_CLOCK_TIMERS := 1
$(combo_target)HAVE_PTHREAD_RWLOCK := 1 $(combo_var_prefix)HAVE_PTHREAD_RWLOCK := 1
$(combo_target)HAVE_STRNLEN := 1 $(combo_var_prefix)HAVE_STRNLEN := 1
$(combo_target)HAVE_STRERROR_R_STRRET := 1 $(combo_var_prefix)HAVE_STRERROR_R_STRRET := 1
$(combo_target)HAVE_STRLCPY := 0 $(combo_var_prefix)HAVE_STRLCPY := 0
$(combo_target)HAVE_STRLCAT := 0 $(combo_var_prefix)HAVE_STRLCAT := 0
$(combo_target)HAVE_KERNEL_MODULES := 0 $(combo_var_prefix)HAVE_KERNEL_MODULES := 0
$(combo_target)GLOBAL_CFLAGS := -fno-exceptions -Wno-multichar $(combo_var_prefix)GLOBAL_CFLAGS := -fno-exceptions -Wno-multichar
$(combo_target)RELEASE_CFLAGS := -O2 -g -fno-strict-aliasing $(combo_var_prefix)RELEASE_CFLAGS := -O2 -g -fno-strict-aliasing
$(combo_target)GLOBAL_LDFLAGS := $(combo_var_prefix)GLOBAL_CPPFLAGS :=
$(combo_target)GLOBAL_ARFLAGS := crsPD $(combo_var_prefix)GLOBAL_LDFLAGS :=
$(combo_var_prefix)GLOBAL_ARFLAGS := crsPD
$(combo_target)EXECUTABLE_SUFFIX := $(combo_var_prefix)EXECUTABLE_SUFFIX :=
$(combo_target)SHLIB_SUFFIX := .so $(combo_var_prefix)SHLIB_SUFFIX := .so
$(combo_target)JNILIB_SUFFIX := $($(combo_target)SHLIB_SUFFIX) $(combo_var_prefix)JNILIB_SUFFIX := $($(combo_var_prefix)SHLIB_SUFFIX)
$(combo_target)STATIC_LIB_SUFFIX := .a $(combo_var_prefix)STATIC_LIB_SUFFIX := .a
# Now include the combo for this specific target. # Now include the combo for this specific target.
include $(BUILD_COMBOS)/$(combo_target)$(combo_os_arch).mk include $(BUILD_COMBOS)/$(combo_target)$(combo_os_arch).mk
@@ -88,11 +96,11 @@ ifneq ($(USE_CCACHE),)
ccache := $(strip $(wildcard $(ccache))) ccache := $(strip $(wildcard $(ccache)))
ifdef ccache ifdef ccache
# prepend ccache if necessary # prepend ccache if necessary
ifneq ($(ccache),$(firstword $($(combo_target)CC))) ifneq ($(ccache),$(firstword $($(combo_var_prefix)CC)))
$(combo_target)CC := $(ccache) $($(combo_target)CC) $(combo_var_prefix)CC := $(ccache) $($(combo_var_prefix)CC)
endif endif
ifneq ($(ccache),$(firstword $($(combo_target)CXX))) ifneq ($(ccache),$(firstword $($(combo_var_prefix)CXX)))
$(combo_target)CXX := $(ccache) $($(combo_target)CXX) $(combo_var_prefix)CXX := $(ccache) $($(combo_var_prefix)CXX)
endif endif
ccache = ccache =
endif endif

View File

@@ -208,14 +208,23 @@ build/core/combo/include/arch/$(1)/AndroidConfig.h
endef endef
combo_target := HOST_ combo_target := HOST_
combo_2nd_arch_prefix :=
include $(BUILD_SYSTEM)/combo/select.mk include $(BUILD_SYSTEM)/combo/select.mk
# on windows, the tools have .exe at the end, and we depend on the # on windows, the tools have .exe at the end, and we depend on the
# host config stuff being done first # host config stuff being done first
combo_target := TARGET_ combo_target := TARGET_
combo_2nd_arch_prefix :=
include $(BUILD_SYSTEM)/combo/select.mk include $(BUILD_SYSTEM)/combo/select.mk
# Load the 2nd target arch if it's needed.
ifdef TARGET_2ND_ARCH
combo_target := TARGET_
combo_2nd_arch_prefix := $(TARGET_2ND_ARCH_VAR_PREFIX)
include $(BUILD_SYSTEM)/combo/select.mk
endif
# Compute TARGET_TOOLCHAIN_ROOT from TARGET_TOOLS_PREFIX # Compute TARGET_TOOLCHAIN_ROOT from TARGET_TOOLS_PREFIX
# if only TARGET_TOOLS_PREFIX is passed to the make command. # if only TARGET_TOOLS_PREFIX is passed to the make command.
ifndef TARGET_TOOLCHAIN_ROOT ifndef TARGET_TOOLCHAIN_ROOT
@@ -422,6 +431,19 @@ HOST_GLOBAL_CPPFLAGS += $(HOST_RELEASE_CPPFLAGS)
TARGET_GLOBAL_CFLAGS += $(TARGET_RELEASE_CFLAGS) TARGET_GLOBAL_CFLAGS += $(TARGET_RELEASE_CFLAGS)
TARGET_GLOBAL_CPPFLAGS += $(TARGET_RELEASE_CPPFLAGS) TARGET_GLOBAL_CPPFLAGS += $(TARGET_RELEASE_CPPFLAGS)
ifdef TARGET_2ND_ARCH
$(combo_2nd_arch_prefix)TARGET_GLOBAL_CFLAGS += $(COMMON_GLOBAL_CFLAGS)
$(combo_2nd_arch_prefix)TARGET_RELEASE_CFLAGS += $(COMMON_RELEASE_CFLAGS)
$(combo_2nd_arch_prefix)TARGET_GLOBAL_CPPFLAGS += $(COMMON_GLOBAL_CPPFLAGS)
$(combo_2nd_arch_prefix)TARGET_RELEASE_CPPFLAGS += $(COMMON_RELEASE_CPPFLAGS)
$(combo_2nd_arch_prefix)TARGET_GLOBAL_LD_DIRS += -L$($(combo_2nd_arch_prefix)TARGET_OUT_INTERMEDIATE_LIBRARIES)
$(combo_2nd_arch_prefix)TARGET_PROJECT_INCLUDES := $(TARGET_PROJECT_INCLUDES)
$(combo_2nd_arch_prefix)TARGET_GLOBAL_CFLAGS += $(TARGET_ERROR_FLAGS)
$(combo_2nd_arch_prefix)TARGET_GLOBAL_CPPFLAGS += $(TARGET_ERROR_FLAGS)
$(combo_2nd_arch_prefix)TARGET_GLOBAL_CFLAGS += $($(combo_2nd_arch_prefix)TARGET_RELEASE_CFLAGS)
$(combo_2nd_arch_prefix)TARGET_GLOBAL_CPPFLAGS += $($(combo_2nd_arch_prefix)TARGET_RELEASE_CPPFLAGS)
endif
# allow overriding default Java libraries on a per-target basis # allow overriding default Java libraries on a per-target basis
ifeq ($(TARGET_DEFAULT_JAVA_LIBRARIES),) ifeq ($(TARGET_DEFAULT_JAVA_LIBRARIES),)
TARGET_DEFAULT_JAVA_LIBRARIES := core core-junit ext framework framework2 TARGET_DEFAULT_JAVA_LIBRARIES := core core-junit ext framework framework2

View File

@@ -106,6 +106,8 @@ endif
ifeq ($(LOCAL_STRIP_MODULE),true) ifeq ($(LOCAL_STRIP_MODULE),true)
# Strip the binary # Strip the binary
$(strip_output): PRIVATE_STRIP := $(TARGET_STRIP)
$(strip_output): PRIVATE_OBJCOPY := $(TARGET_OBJCOPY)
$(strip_output): $(strip_input) | $(TARGET_STRIP) $(strip_output): $(strip_input) | $(TARGET_STRIP)
$(transform-to-stripped) $(transform-to-stripped)
else else

View File

@@ -232,6 +232,12 @@ TARGET_OUT_ETC := $(TARGET_OUT)/etc
TARGET_OUT_NOTICE_FILES := $(TARGET_OUT_INTERMEDIATES)/NOTICE_FILES TARGET_OUT_NOTICE_FILES := $(TARGET_OUT_INTERMEDIATES)/NOTICE_FILES
TARGET_OUT_FAKE := $(PRODUCT_OUT)/fake_packages TARGET_OUT_FAKE := $(PRODUCT_OUT)/fake_packages
# Out for TARGET_2ND_ARCH
TARGET_2ND_ARCH_VAR_PREFIX := 2ND_
$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_INTERMEDIATES := $(PRODUCT_OUT)/obj_$(TARGET_2ND_ARCH)
$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_INTERMEDIATE_LIBRARIES := $($(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_INTERMEDIATES)/lib
$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_SHARED_LIBRARIES := $(TARGET_OUT)/lib
TARGET_OUT_DATA := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_DATA) TARGET_OUT_DATA := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_DATA)
TARGET_OUT_DATA_EXECUTABLES := $(TARGET_OUT_EXECUTABLES) TARGET_OUT_DATA_EXECUTABLES := $(TARGET_OUT_EXECUTABLES)
TARGET_OUT_DATA_SHARED_LIBRARIES := $(TARGET_OUT_SHARED_LIBRARIES) TARGET_OUT_DATA_SHARED_LIBRARIES := $(TARGET_OUT_SHARED_LIBRARIES)