From 748416e5a7654ce6cfce9f680cf4e7a9728bd6be Mon Sep 17 00:00:00 2001 From: Andrew Hsieh Date: Wed, 22 Jan 2014 18:21:18 -0800 Subject: 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 --- toolchains/arm-linux-androideabi-4.6/config.mk | 2 +- toolchains/arm-linux-androideabi-4.6/setup.mk | 13 ++++++++--- toolchains/arm-linux-androideabi-4.8/config.mk | 2 +- toolchains/arm-linux-androideabi-4.8/setup.mk | 13 ++++++++--- .../arm-linux-androideabi-clang3.3/config.mk | 2 +- toolchains/arm-linux-androideabi-clang3.3/setup.mk | 15 +++++++++++++ .../arm-linux-androideabi-clang3.4/config.mk | 2 +- toolchains/arm-linux-androideabi-clang3.4/setup.mk | 15 +++++++++++++ toolchains/llvm-3.3/setup.mk | 26 ++++++++++++++++++++++ toolchains/llvm-3.4/setup.mk | 26 ++++++++++++++++++++++ 10 files changed, 106 insertions(+), 10 deletions(-) (limited to 'toolchains') 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 @@ -71,6 +71,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 @@ -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 @@ -71,6 +71,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 @@ -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 @@ -37,6 +37,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 @@ -88,6 +101,17 @@ TARGET_LDLIBS := $(NDK_ROOT)/sources/android/libportable/libs/armeabi-v7a/lib TARGET_LDFLAGS += -Wl,@$(NDK_ROOT)/sources/android/libportable/libs/armeabi-v7a/libportable.wrap 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)),) @@ -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 @@ -37,6 +37,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 @@ -88,6 +101,17 @@ TARGET_LDLIBS := $(NDK_ROOT)/sources/android/libportable/libs/armeabi-v7a/lib TARGET_LDFLAGS += -Wl,@$(NDK_ROOT)/sources/android/libportable/libs/armeabi-v7a/libportable.wrap 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)),) @@ -137,3 +161,5 @@ endif endif endif endif +endif +endif -- cgit v1.2.3