diff options
author | Andrew Hsieh <andrewhsieh@google.com> | 2014-01-22 18:21:18 -0800 |
---|---|---|
committer | Andrew Hsieh <andrewhsieh@google.com> | 2014-02-10 15:33:11 +0800 |
commit | 748416e5a7654ce6cfce9f680cf4e7a9728bd6be (patch) | |
tree | f0a969caa134cbce9e90ee08f7550fefe91d624f /toolchains | |
parent | 3f33a98dd64fe5a0c9934ffb8f2fb03eaab91c3d (diff) | |
download | ndk-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.mk | 2 | ||||
-rw-r--r-- | toolchains/arm-linux-androideabi-4.6/setup.mk | 13 | ||||
-rw-r--r-- | toolchains/arm-linux-androideabi-4.8/config.mk | 2 | ||||
-rw-r--r-- | toolchains/arm-linux-androideabi-4.8/setup.mk | 13 | ||||
-rw-r--r-- | toolchains/arm-linux-androideabi-clang3.3/config.mk | 2 | ||||
-rw-r--r-- | toolchains/arm-linux-androideabi-clang3.3/setup.mk | 15 | ||||
-rw-r--r-- | toolchains/arm-linux-androideabi-clang3.4/config.mk | 2 | ||||
-rw-r--r-- | toolchains/arm-linux-androideabi-clang3.4/setup.mk | 15 | ||||
-rw-r--r-- | toolchains/llvm-3.3/setup.mk | 26 | ||||
-rw-r--r-- | toolchains/llvm-3.4/setup.mk | 26 |
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 |