aboutsummaryrefslogtreecommitdiff
path: root/toolchains
diff options
context:
space:
mode:
authorAndrew Hsieh <andrewhsieh@google.com>2014-01-22 18:21:18 -0800
committerAndrew Hsieh <andrewhsieh@google.com>2014-02-10 15:33:11 +0800
commit748416e5a7654ce6cfce9f680cf4e7a9728bd6be (patch)
treef0a969caa134cbce9e90ee08f7550fefe91d624f /toolchains
parent3f33a98dd64fe5a0c9934ffb8f2fb03eaab91c3d (diff)
downloadndk-748416e5a7654ce6cfce9f680cf4e7a9728bd6be.tar.gz
Support APP_ABI=armeabi-v7a-hard
Add a new NDK-only ABI armeabi-v7a-hard in order to solve -mfloat-abi=hard issue. 1. Note that this is NDK-only ABI. No known devices support armeabi-v7a-hard, and they can't w/o breaking existing float-abi=softfp code 2. APP_ABI=armeabi-v7a-hard still installs libraries in libs/armeabi-v7a. As a result, armeabi-v7a-hard and armeabi-v7a can't co-exist ("make" will ignore one of the "install"), unless when _NDK_TESTING_ALL_=yes for internal testing (where lib is installed to libs/armeabi-v7a-hard) 3. Both GCC 4.6/4.8 and Clang3.3/3.4 has additional multilib option "-mfloat-abi=hard" to look for libraries in /hard sub-directory. 5be615df32ce970fcccda93cf577e9ce35b1d397 (gcc4.6,4.8) 7e8798057dc5f28b44b5608fd98fff1cba6909a2 (clang3.4) deedd8557b7d82c6931b6942bd39a00127780835 (clang3.3) 4. APP_ABI=all still expand to armeabi,armeabi-v7a,x86,mips Change-Id: I08c26bfa6580c80260185c2fef398848aebd197d
Diffstat (limited to 'toolchains')
-rw-r--r--toolchains/arm-linux-androideabi-4.6/config.mk2
-rw-r--r--toolchains/arm-linux-androideabi-4.6/setup.mk13
-rw-r--r--toolchains/arm-linux-androideabi-4.8/config.mk2
-rw-r--r--toolchains/arm-linux-androideabi-4.8/setup.mk13
-rw-r--r--toolchains/arm-linux-androideabi-clang3.3/config.mk2
-rw-r--r--toolchains/arm-linux-androideabi-clang3.3/setup.mk15
-rw-r--r--toolchains/arm-linux-androideabi-clang3.4/config.mk2
-rw-r--r--toolchains/arm-linux-androideabi-clang3.4/setup.mk15
-rw-r--r--toolchains/llvm-3.3/setup.mk26
-rw-r--r--toolchains/llvm-3.4/setup.mk26
10 files changed, 106 insertions, 10 deletions
diff --git a/toolchains/arm-linux-androideabi-4.6/config.mk b/toolchains/arm-linux-androideabi-4.6/config.mk
index 23b30254c..9f787cd8c 100644
--- a/toolchains/arm-linux-androideabi-4.6/config.mk
+++ b/toolchains/arm-linux-androideabi-4.6/config.mk
@@ -17,4 +17,4 @@
# the real meat is in the setup.mk file adjacent to this one
#
TOOLCHAIN_ARCH := arm
-TOOLCHAIN_ABIS := armeabi armeabi-v7a
+TOOLCHAIN_ABIS := armeabi armeabi-v7a armeabi-v7a-hard
diff --git a/toolchains/arm-linux-androideabi-4.6/setup.mk b/toolchains/arm-linux-androideabi-4.6/setup.mk
index 97f0218a9..cfc687553 100644
--- a/toolchains/arm-linux-androideabi-4.6/setup.mk
+++ b/toolchains/arm-linux-androideabi-4.6/setup.mk
@@ -35,13 +35,20 @@ TARGET_LDFLAGS := -no-canonical-prefixes
TARGET_C_INCLUDES := \
$(SYSROOT_INC)/usr/include
-ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)
+ifneq ($(filter $(TARGET_ARCH_ABI), armeabi-v7a armeabi-v7a-hard),)
TARGET_CFLAGS += -march=armv7-a \
- -mfloat-abi=softfp \
-mfpu=vfpv3-d16
-
TARGET_LDFLAGS += -march=armv7-a \
-Wl,--fix-cortex-a8
+ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)
+ TARGET_CFLAGS += -mfloat-abi=softfp
+else
+ TARGET_CFLAGS += -mhard-float \
+ -D_NDK_MATH_NO_SOFTFP=1
+ TARGET_LDFLAGS += -Wl,--no-warn-mismatch \
+ -lm_hard
+endif
+
else
TARGET_CFLAGS += -march=armv5te \
-mtune=xscale \
diff --git a/toolchains/arm-linux-androideabi-4.8/config.mk b/toolchains/arm-linux-androideabi-4.8/config.mk
index c46dace27..4df6c9516 100644
--- a/toolchains/arm-linux-androideabi-4.8/config.mk
+++ b/toolchains/arm-linux-androideabi-4.8/config.mk
@@ -17,4 +17,4 @@
# the real meat is in the setup.mk file adjacent to this one
#
TOOLCHAIN_ARCH := arm
-TOOLCHAIN_ABIS := armeabi armeabi-v7a
+TOOLCHAIN_ABIS := armeabi armeabi-v7a armeabi-v7a-hard
diff --git a/toolchains/arm-linux-androideabi-4.8/setup.mk b/toolchains/arm-linux-androideabi-4.8/setup.mk
index e20862ae3..61a06cfe9 100644
--- a/toolchains/arm-linux-androideabi-4.8/setup.mk
+++ b/toolchains/arm-linux-androideabi-4.8/setup.mk
@@ -35,13 +35,20 @@ TARGET_LDFLAGS := -no-canonical-prefixes
TARGET_C_INCLUDES := \
$(SYSROOT_INC)/usr/include
-ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)
+ifneq ($(filter $(TARGET_ARCH_ABI), armeabi-v7a armeabi-v7a-hard),)
TARGET_CFLAGS += -march=armv7-a \
- -mfloat-abi=softfp \
-mfpu=vfpv3-d16
-
TARGET_LDFLAGS += -march=armv7-a \
-Wl,--fix-cortex-a8
+ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)
+ TARGET_CFLAGS += -mfloat-abi=softfp
+else
+ TARGET_CFLAGS += -mhard-float \
+ -D_NDK_MATH_NO_SOFTFP=1
+ TARGET_LDFLAGS += -Wl,--no-warn-mismatch \
+ -lm_hard
+endif
+
else
TARGET_CFLAGS += -march=armv5te \
-mtune=xscale \
diff --git a/toolchains/arm-linux-androideabi-clang3.3/config.mk b/toolchains/arm-linux-androideabi-clang3.3/config.mk
index 89f6466a8..fd13c367e 100644
--- a/toolchains/arm-linux-androideabi-clang3.3/config.mk
+++ b/toolchains/arm-linux-androideabi-clang3.3/config.mk
@@ -17,4 +17,4 @@
# the real meat is in the setup.mk file adjacent to this one
#
TOOLCHAIN_ARCH := arm
-TOOLCHAIN_ABIS := armeabi armeabi-v7a
+TOOLCHAIN_ABIS := armeabi armeabi-v7a armeabi-v7a-hard
diff --git a/toolchains/arm-linux-androideabi-clang3.3/setup.mk b/toolchains/arm-linux-androideabi-clang3.3/setup.mk
index 24cd081a6..30d867877 100644
--- a/toolchains/arm-linux-androideabi-clang3.3/setup.mk
+++ b/toolchains/arm-linux-androideabi-clang3.3/setup.mk
@@ -72,6 +72,20 @@ ifneq ($(filter %armeabi-v7a,$(TARGET_ARCH_ABI)),)
TARGET_LDFLAGS += -target $(LLVM_TRIPLE) \
-Wl,--fix-cortex-a8
else
+ifneq ($(filter %armeabi-v7a-hard,$(TARGET_ARCH_ABI)),)
+ LLVM_TRIPLE := armv7-none-linux-androideabi
+
+ TARGET_CFLAGS += -target $(LLVM_TRIPLE) \
+ -march=armv7-a \
+ -mfpu=vfpv3-d16 \
+ -mhard-float \
+ -D_NDK_MATH_NO_SOFTFP=1
+
+ TARGET_LDFLAGS += -target $(LLVM_TRIPLE) \
+ -Wl,--fix-cortex-a8 \
+ -Wl,--no-warn-mismatch \
+ -lm_hard
+else
LLVM_TRIPLE := armv5te-none-linux-androideabi
TARGET_CFLAGS += -target $(LLVM_TRIPLE) \
@@ -81,6 +95,7 @@ else
TARGET_LDFLAGS += -target $(LLVM_TRIPLE)
endif
+endif
TARGET_CFLAGS.neon := -mfpu=neon
diff --git a/toolchains/arm-linux-androideabi-clang3.4/config.mk b/toolchains/arm-linux-androideabi-clang3.4/config.mk
index f427bd426..ef1189498 100644
--- a/toolchains/arm-linux-androideabi-clang3.4/config.mk
+++ b/toolchains/arm-linux-androideabi-clang3.4/config.mk
@@ -17,4 +17,4 @@
# the real meat is in the setup.mk file adjacent to this one
#
TOOLCHAIN_ARCH := arm
-TOOLCHAIN_ABIS := armeabi armeabi-v7a
+TOOLCHAIN_ABIS := armeabi armeabi-v7a armeabi-v7a-hard
diff --git a/toolchains/arm-linux-androideabi-clang3.4/setup.mk b/toolchains/arm-linux-androideabi-clang3.4/setup.mk
index 4aebf2671..f9c351e46 100644
--- a/toolchains/arm-linux-androideabi-clang3.4/setup.mk
+++ b/toolchains/arm-linux-androideabi-clang3.4/setup.mk
@@ -72,6 +72,20 @@ ifneq ($(filter %armeabi-v7a,$(TARGET_ARCH_ABI)),)
TARGET_LDFLAGS += -target $(LLVM_TRIPLE) \
-Wl,--fix-cortex-a8
else
+ifneq ($(filter %armeabi-v7a-hard,$(TARGET_ARCH_ABI)),)
+ LLVM_TRIPLE := armv7-none-linux-androideabi
+
+ TARGET_CFLAGS += -target $(LLVM_TRIPLE) \
+ -march=armv7-a \
+ -mfpu=vfpv3-d16 \
+ -mhard-float \
+ -D_NDK_MATH_NO_SOFTFP=1
+
+ TARGET_LDFLAGS += -target $(LLVM_TRIPLE) \
+ -Wl,--fix-cortex-a8 \
+ -Wl,--no-warn-mismatch \
+ -lm_hard
+else
LLVM_TRIPLE := armv5te-none-linux-androideabi
TARGET_CFLAGS += -target $(LLVM_TRIPLE) \
@@ -81,6 +95,7 @@ else
TARGET_LDFLAGS += -target $(LLVM_TRIPLE)
endif
+endif
TARGET_CFLAGS.neon := -mfpu=neon
diff --git a/toolchains/llvm-3.3/setup.mk b/toolchains/llvm-3.3/setup.mk
index cddcb01d4..f5d7d88a6 100644
--- a/toolchains/llvm-3.3/setup.mk
+++ b/toolchains/llvm-3.3/setup.mk
@@ -38,6 +38,19 @@ cmd-strip = $(TARGET_PREBUILT_ROOT)/bin/arm-linux-androideabi-strip$(HOST_EXEEXT
include $(NDK_ROOT)/toolchains/llvm-3.3/setup-common.mk
else
+ifneq ($(filter %bcarmeabi-v7a-hard,$(TARGET_ARCH_ABI)),)
+SYSROOT_LINK := $(NDK_PLATFORMS_ROOT)/$(TARGET_PLATFORM)/arch-arm
+TARGET_GDBSERVER := $(NDK_ROOT)/prebuilt/android-arm/gdbserver/gdbserver
+TARGET_ARCH_ABI := armeabi-v7a-hard
+TARGET_LDFLAGS += -Wl,-link-native-binary
+NDK_APP_DST_DIR := $(NDK_APP_PROJECT_PATH)/libs/$(TARGET_ARCH_ABI)
+
+TARGET_PREBUILT_ROOT = $(call host-prebuilt-tag,$(NDK_ROOT)/toolchains/arm-linux-androideabi-$(TOOLCHAIN_VERSION))
+cmd-strip = $(TARGET_PREBUILT_ROOT)/bin/arm-linux-androideabi-strip$(HOST_EXEEXT) --strip-unneeded $(call host-path,$1)
+
+include $(NDK_ROOT)/toolchains/llvm-3.3/setup-common.mk
+
+else
ifneq ($(filter %bcarmeabi,$(TARGET_ARCH_ABI)),)
SYSROOT_LINK := $(NDK_PLATFORMS_ROOT)/$(TARGET_PLATFORM)/arch-arm
TARGET_GDBSERVER := $(NDK_ROOT)/prebuilt/android-arm/gdbserver/gdbserver
@@ -89,6 +102,17 @@ TARGET_LDFLAGS += -Wl,@$(NDK_ROOT)/sources/android/libportable/libs/armeabi-v7
include $(NDK_ROOT)/toolchains/arm-linux-androideabi-clang3.3/setup.mk
else
+ifneq ($(filter %armeabi-v7a-hard,$(TARGET_ARCH_ABI)),)
+
+SYSROOT_LINK := $(NDK_PLATFORMS_ROOT)/$(TARGET_PLATFORM)/arch-arm
+TARGET_GDBSERVER := $(NDK_ROOT)/prebuilt/android-arm/gdbserver/gdbserver
+TARGET_ARCH_ABI := armeabi-v7a-hard
+NDK_APP_DST_DIR := $(NDK_APP_PROJECT_PATH)/libs/$(TARGET_ARCH_ABI)
+TARGET_LDLIBS := $(NDK_ROOT)/sources/android/libportable/libs/armeabi-v7a-hard/libportable.a $(TARGET_LDLIBS)
+TARGET_LDFLAGS += -Wl,@$(NDK_ROOT)/sources/android/libportable/libs/armeabi-v7a-hard/libportable.wrap
+include $(NDK_ROOT)/toolchains/arm-linux-androideabi-clang3.3/setup.mk
+
+else
ifneq ($(filter %armeabi,$(TARGET_ARCH_ABI)),)
SYSROOT_LINK := $(NDK_PLATFORMS_ROOT)/$(TARGET_PLATFORM)/arch-arm
@@ -137,3 +161,5 @@ endif
endif
endif
endif
+endif
+endif
diff --git a/toolchains/llvm-3.4/setup.mk b/toolchains/llvm-3.4/setup.mk
index 5594d4e79..664b31f84 100644
--- a/toolchains/llvm-3.4/setup.mk
+++ b/toolchains/llvm-3.4/setup.mk
@@ -38,6 +38,19 @@ cmd-strip = $(TARGET_PREBUILT_ROOT)/bin/arm-linux-androideabi-strip$(HOST_EXEEXT
include $(NDK_ROOT)/toolchains/llvm-3.4/setup-common.mk
else
+ifneq ($(filter %bcarmeabi-v7a-hard,$(TARGET_ARCH_ABI)),)
+SYSROOT_LINK := $(NDK_PLATFORMS_ROOT)/$(TARGET_PLATFORM)/arch-arm
+TARGET_GDBSERVER := $(NDK_ROOT)/prebuilt/android-arm/gdbserver/gdbserver
+TARGET_ARCH_ABI := armeabi-v7a-hard
+TARGET_LDFLAGS += -Wl,-link-native-binary
+NDK_APP_DST_DIR := $(NDK_APP_PROJECT_PATH)/libs/$(TARGET_ARCH_ABI)
+
+TARGET_PREBUILT_ROOT = $(call host-prebuilt-tag,$(NDK_ROOT)/toolchains/arm-linux-androideabi-$(TOOLCHAIN_VERSION))
+cmd-strip = $(TARGET_PREBUILT_ROOT)/bin/arm-linux-androideabi-strip$(HOST_EXEEXT) --strip-unneeded $(call host-path,$1)
+
+include $(NDK_ROOT)/toolchains/llvm-3.4/setup-common.mk
+
+else
ifneq ($(filter %bcarmeabi,$(TARGET_ARCH_ABI)),)
SYSROOT_LINK := $(NDK_PLATFORMS_ROOT)/$(TARGET_PLATFORM)/arch-arm
TARGET_GDBSERVER := $(NDK_ROOT)/prebuilt/android-arm/gdbserver/gdbserver
@@ -89,6 +102,17 @@ TARGET_LDFLAGS += -Wl,@$(NDK_ROOT)/sources/android/libportable/libs/armeabi-v7
include $(NDK_ROOT)/toolchains/arm-linux-androideabi-clang3.4/setup.mk
else
+ifneq ($(filter %armeabi-v7a-hard,$(TARGET_ARCH_ABI)),)
+
+SYSROOT_LINK := $(NDK_PLATFORMS_ROOT)/$(TARGET_PLATFORM)/arch-arm
+TARGET_GDBSERVER := $(NDK_ROOT)/prebuilt/android-arm/gdbserver/gdbserver
+TARGET_ARCH_ABI := armeabi-v7a-hard
+NDK_APP_DST_DIR := $(NDK_APP_PROJECT_PATH)/libs/$(TARGET_ARCH_ABI)
+TARGET_LDLIBS := $(NDK_ROOT)/sources/android/libportable/libs/armeabi-v7a-hard/libportable.a $(TARGET_LDLIBS)
+TARGET_LDFLAGS += -Wl,@$(NDK_ROOT)/sources/android/libportable/libs/armeabi-v7a-hard/libportable.wrap
+include $(NDK_ROOT)/toolchains/arm-linux-androideabi-clang3.4/setup.mk
+
+else
ifneq ($(filter %armeabi,$(TARGET_ARCH_ABI)),)
SYSROOT_LINK := $(NDK_PLATFORMS_ROOT)/$(TARGET_PLATFORM)/arch-arm
@@ -137,3 +161,5 @@ endif
endif
endif
endif
+endif
+endif