aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--build/core/add-application.mk2
-rw-r--r--build/core/build-binary.mk4
-rw-r--r--build/core/init.mk12
-rw-r--r--build/core/setup-abi.mk2
-rw-r--r--build/core/setup-app.mk2
-rw-r--r--build/core/setup-toolchain.mk6
-rwxr-xr-xbuild/tools/build-compiler-rt.sh16
-rwxr-xr-xbuild/tools/build-cxx-stl.sh21
-rwxr-xr-xbuild/tools/build-device-llvm.sh7
-rwxr-xr-xbuild/tools/build-gcc.sh7
-rwxr-xr-xbuild/tools/build-gnu-libstdc++.sh13
-rwxr-xr-xbuild/tools/build-llvm.sh2
-rw-r--r--build/tools/builder-funcs.sh22
-rw-r--r--build/tools/dev-defaults.sh4
-rwxr-xr-xbuild/tools/make-standalone-toolchain.sh46
-rw-r--r--build/tools/prebuilt-common.sh6
-rwxr-xr-xndk-gdb2
-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
27 files changed, 231 insertions, 59 deletions
diff --git a/build/core/add-application.mk b/build/core/add-application.mk
index f9cf732f1..3b2cf23c5 100644
--- a/build/core/add-application.mk
+++ b/build/core/add-application.mk
@@ -264,7 +264,7 @@ APP_CPPFLAGS := $(strip $(APP_CPPFLAGS))
APP_CXXFLAGS := $(strip $(APP_CXXFLAGS))
APP_RENDERSCRIPT_FLAGS := $(strip $(APP_RENDERSCRIPT_FLAGS))
APP_ASMFLAGS := $(strip $(APP_ASMFLAGS))
-APP_LDFLAGS := $(strip $(APP_LDFLAGS))
+APP_LDFLAGS := $(strip $(APP_LDFLAGS))
# Check that APP_STL is defined. If not, use the default value (system)
# otherwise, check that the name is correct.
diff --git a/build/core/build-binary.mk b/build/core/build-binary.mk
index 36a644b38..313c3cf40 100644
--- a/build/core/build-binary.mk
+++ b/build/core/build-binary.mk
@@ -269,8 +269,8 @@ endif
neon_sources := $(strip $(neon_sources))
ifdef neon_sources
- ifneq ($(TARGET_ARCH_ABI),armeabi-v7a)
- $(call __ndk_info,NEON support is only possible for armeabi-v7a ABI)
+ ifeq ($(filter $(TARGET_ARCH_ABI), armeabi-v7a armeabi-v7a-hard),)
+ $(call __ndk_info,NEON support is only possible for armeabi-v7a ABI and its variant armeabi-v7a-hard)
$(call __ndk_info,Please add checks against TARGET_ARCH_ABI in $(LOCAL_MAKEFILE))
$(call __ndk_error,Aborting)
endif
diff --git a/build/core/init.mk b/build/core/init.mk
index 645894f7f..007f98dc3 100644
--- a/build/core/init.mk
+++ b/build/core/init.mk
@@ -517,12 +517,20 @@ $(call ndk_log,Found max platform level: $(NDK_MAX_PLATFORM_LEVEL))
# the build script to include in each toolchain config.mk
ADD_TOOLCHAIN := $(BUILD_SYSTEM)/add-toolchain.mk
-# the list of known values
-NDK_KNOWN_ABIS := armeabi-v7a armeabi x86 mips
+# the list of known abis and archs
+NDK_KNOWN_DEVICE_ABIS := armeabi-v7a armeabi x86 mips
+NDK_KNOWN_ABIS := $(NDK_KNOWN_DEVICE_ABIS) armeabi-v7a-hard
NDK_KNOWN_ARCHS := arm x86 mips
_archs := $(sort $(strip $(notdir $(wildcard $(NDK_PLATFORMS_ROOT)/android-*/arch-*))))
NDK_FOUND_ARCHS := $(_archs:arch-%=%)
+# the list of abis 'APP_ABI=all' is expanded to
+ifeq ($(_NDK_TESTING_ALL_),yes)
+NDK_APP_ABI_ALL_EXPANDED := $(NDK_KNOWN_ABIS)
+else
+NDK_APP_ABI_ALL_EXPANDED := $(NDK_KNOWN_DEVICE_ABIS)
+endif
+
# the list of all toolchains in this NDK
NDK_ALL_TOOLCHAINS :=
NDK_ALL_ABIS :=
diff --git a/build/core/setup-abi.mk b/build/core/setup-abi.mk
index c3be36a33..e6109a0cf 100644
--- a/build/core/setup-abi.mk
+++ b/build/core/setup-abi.mk
@@ -55,7 +55,7 @@ endif
TARGET_GDB_SETUP := $(TARGET_OUT)/setup.gdb
# RS triple
-ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)
+ifneq ($(filter $(TARGET_ARCH_ABI), armeabi-v7a armeabi-v7a-hard),)
RS_TRIPLE := armv7-none-linux-gnueabi
endif
ifeq ($(TARGET_ARCH_ABI),armeabi)
diff --git a/build/core/setup-app.mk b/build/core/setup-app.mk
index bd126e30b..b009f0959 100644
--- a/build/core/setup-app.mk
+++ b/build/core/setup-app.mk
@@ -58,7 +58,7 @@ endif
# Otherwise, check that we don't have an invalid value here.
#
ifeq ($(NDK_APP_ABI),all)
- NDK_APP_ABI := $(NDK_KNOWN_ABIS)
+ NDK_APP_ABI := $(NDK_APP_ABI_ALL_EXPANDED)
else
# Plug in the unknown
_unknown_abis := $(strip $(filter-out $(NDK_ALL_ABIS),$(NDK_APP_ABI)))
diff --git a/build/core/setup-toolchain.mk b/build/core/setup-toolchain.mk
index 9b15790ce..0526b6c9d 100644
--- a/build/core/setup-toolchain.mk
+++ b/build/core/setup-toolchain.mk
@@ -125,6 +125,12 @@ TARGET_GDBSERVER := $(NDK_ROOT)/prebuilt/android-$(TARGET_ARCH)/gdbserver/gdbser
# compute NDK_APP_DST_DIR as the destination directory for the generated files
NDK_APP_DST_DIR := $(NDK_APP_LIBS_OUT)/$(TARGET_ARCH_ABI)
+# install armeabi-v7a-hard to lib/armeabi-v7a, unless under testing where env. var. _NDK_TESTING_ALL_=yes
+ifneq ($(_NDK_TESTING_ALL_),yes)
+ifeq ($(TARGET_ARCH_ABI),armeabi-v7a-hard)
+NDK_APP_DST_DIR := $(NDK_APP_LIBS_OUT)/armeabi-v7a
+endif
+endif
# Default build commands, can be overriden by the toolchain's setup script
include $(BUILD_SYSTEM)/default-build-commands.mk
diff --git a/build/tools/build-compiler-rt.sh b/build/tools/build-compiler-rt.sh
index 24c90fd79..d72e13a77 100755
--- a/build/tools/build-compiler-rt.sh
+++ b/build/tools/build-compiler-rt.sh
@@ -162,7 +162,7 @@ prepare_compiler_rt_source_for_abi ()
local ABI=$1
local ARCH_SOURCES GENERIC_SOURCES FOUND
- if [ $ABI == "armeabi" -o $ABI == "armeabi-v7a" ]; then
+ if [ $ABI == "armeabi" -o $ABI == "armeabi-v7a" -o $ABI == "armeabi-v7a-hard" ]; then
ARCH_SOURCES="$COMPILER_RT_ARM_SOURCES"
elif [ $ABI == "x86" ]; then
ARCH_SOURCES="$COMPILER_RT_X86_SOURCES"
@@ -211,11 +211,18 @@ build_compiler_rt_libs_for_abi ()
builder_cflags "$COMPILER_RT_CFLAGS"
- if [ $ABI == "armeabi" -o $ABI == "armeabi-v7a" ]; then
+ if [ $ABI == "armeabi" -o $ABI == "armeabi-v7a" -o $ABI == "armeabi-v7a-hard" ]; then
builder_cflags "-D__ARM_EABI__"
+ if [ $ABI == "armeabi-v7a-hard" ]; then
+ builder_cflags "-mhard-float -D_NDK_MATH_NO_SOFTFP=1"
+ fi
fi
builder_ldflags "$COMPILER_RT_LDFLAGS"
+ if [ $ABI == "armeabi-v7a-hard" ]; then
+ builder_cflags "-Wl,--no-warn-mismatch -lm_hard"
+ fi
+
builder_sources $(prepare_compiler_rt_source_for_abi $ABI)
if [ "$TYPE" = "static" ]; then
@@ -223,7 +230,10 @@ build_compiler_rt_libs_for_abi ()
builder_static_library libcompiler_rt_static
else
log "Building $DSTDIR/libcompiler_rt_shared.so"
- builder_ldflags "-lc -lm"
+ builder_ldflags "-lc"
+ if [ $ABI != "armeabi-v7a-hard" ]; then
+ builder_ldflags "-lm"
+ fi
builder_nostdlib_shared_library libcompiler_rt_shared
fi
builder_end
diff --git a/build/tools/build-cxx-stl.sh b/build/tools/build-cxx-stl.sh
index f40e1c45d..562e1cb35 100755
--- a/build/tools/build-cxx-stl.sh
+++ b/build/tools/build-cxx-stl.sh
@@ -427,14 +427,23 @@ build_stl_libs_for_abi ()
local BUILDDIR="$2"
local TYPE="$3"
local DSTDIR="$4"
+ local FLOAT_ABI=""
local DEFAULT_CFLAGS DEFAULT_CXXFLAGS
- local SRC OBJ OBJECTS EXTRA_CXXFLAGS LIB_SUFFIX
+ local SRC OBJ OBJECTS EXTRA_CFLAGS EXTRA_CXXFLAGS EXTRA_LDFLAGS LIB_SUFFIX
mkdir -p "$BUILDDIR"
DSTDIR=$DSTDIR/$CXX_STL_SUBDIR/libs/$ABI
LIB_SUFFIX="$(get_lib_suffix_for_abi $ABI)"
+ EXTRA_CFLAGS=""
+ EXTRA_LDFLAGS=""
+ if [ "$ABI" = "armeabi-v7a-hard" ]; then
+ EXTRA_CFLAGS="-mhard-float -D_NDK_MATH_NO_SOFTFP=1"
+ EXTRA_LDFLAGS="-Wl,--no-warn-mismatch -lm_hard"
+ FLOAT_ABI="hard"
+ fi
+
if [ "$TYPE" = "static" -a -z "$VISIBLE_STATIC" ]; then
EXTRA_CXXFLAGS="$STATIC_CXXFLAGS"
else
@@ -450,11 +459,11 @@ build_stl_libs_for_abi ()
# Always rebuild GAbi++, except for unknown archs.
builder_set_srcdir "$GABIXX_SRCDIR"
builder_reset_cflags DEFAULT_CFLAGS
- builder_cflags "$DEFAULT_CFLAGS $GABIXX_CFLAGS"
+ builder_cflags "$DEFAULT_CFLAGS $GABIXX_CFLAGS $EXTRA_CFLAGS"
builder_reset_cxxflags DEFAULT_CXXFLAGS
builder_cxxflags "$DEFAULT_CXXFLAGS $GABIXX_CXXFLAGS $EXTRA_CXXFLAGS"
- builder_ldflags "$GABIXX_LDFLAGS"
+ builder_ldflags "$GABIXX_LDFLAGS $EXTRA_LDFLAGS"
if [ "$(find_ndk_unknown_archs)" != "$ABI" ]; then
builder_sources $GABIXX_SOURCES
elif [ "$CXX_STL" = "gabi++" ]; then
@@ -468,10 +477,10 @@ build_stl_libs_for_abi ()
if [ "$CXX_STL" != "gabi++" ]; then
builder_set_srcdir "$CXX_STL_SRCDIR"
builder_reset_cflags
- builder_cflags "$DEFAULT_CFLAGS $CXX_STL_CFLAGS"
+ builder_cflags "$DEFAULT_CFLAGS $CXX_STL_CFLAGS $EXTRA_CFLAGS"
builder_reset_cxxflags DEFAULT_CXXFLAGS
builder_cxxflags "$DEFAULT_CXXFLAGS $CXX_STL_CXXFLAGS $EXTRA_CXXFLAGS"
- builder_ldflags "$CXX_STL_LDFLAGS"
+ builder_ldflags "$CXX_STL_LDFLAGS $EXTRA_LDFLAGS"
builder_sources $CXX_STL_SOURCES
fi
@@ -481,7 +490,7 @@ build_stl_libs_for_abi ()
else
log "Building $DSTDIR/${CXX_STL_LIB}_shared${LIB_SUFFIX}"
if [ "$(find_ndk_unknown_archs)" != "$ABI" ]; then
- builder_shared_library ${CXX_STL_LIB}_shared $LIB_SUFFIX
+ builder_shared_library ${CXX_STL_LIB}_shared $LIB_SUFFIX "$FLOAT_ABI"
else
builder_ldflags "-lc -lm"
builder_nostdlib_shared_library ${CXX_STL_LIB}_shared $LIB_SUFFIX # Don't use libgcc
diff --git a/build/tools/build-device-llvm.sh b/build/tools/build-device-llvm.sh
index b9274332b..6fa9b5030 100755
--- a/build/tools/build-device-llvm.sh
+++ b/build/tools/build-device-llvm.sh
@@ -42,7 +42,7 @@ OPTION_OUT_DIR=
register_var_option "--out-dir=<path>" OPTION_OUT_DIR "On-device toolchain will be put at <path>"
OPTION_ABIS=
-register_var_option "--abis=<armeabi,armeabi-v7a,x86,mips>" OPTION_ABIS "Default: $ABIS"
+register_var_option "--abis=<armeabi,armeabi-v7a,x86,mips,armeabi-v7a-hard>" OPTION_ABIS "Default: $ABIS"
OPTION_GCC_VERSION=
register_var_option "--gcc-version=<version>" OPTION_GCC_VERSION "Specify GCC toolchain version [Default: $DEFAULT_GCC_VERSION]"
@@ -167,8 +167,11 @@ for abi in $ABIS; do
# code such as "stmdb sp!,{r0,r1,r2,r3,lr}" which doesn't support thumb1
CFLAGS=$CFLAGS" -march=armv5te -msoft-float"
;;
- armeabi-v7a)
+ armeabi-v7a|armeabi-v7a-hard)
CFLAGS=$CFLAGS" -mthumb -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16"
+ if [ "$arbi" = "armeabi-v7a-hard" ]; then
+ CFLAGS=$CFLAGS" -mhard-float -D_NDK_MATH_NO_SOFTFP=1 -Wl,--no-warn-mismatch -lm_hard"
+ fi
;;
mips)
CFLAGS=$CFLAGS" -fmessage-length=0 -fno-inline-functions-called-once -fgcse-after-reload -frerun-cse-after-loop -frename-registers"
diff --git a/build/tools/build-gcc.sh b/build/tools/build-gcc.sh
index 3443737ac..696b68909 100755
--- a/build/tools/build-gcc.sh
+++ b/build/tools/build-gcc.sh
@@ -426,6 +426,13 @@ unwind_library_for_abi ()
pr-support.o \
unwind-c.o"
;;
+ armeabi-v7a-hard)
+ BASE_DIR="$BUILD_OUT/gcc-$GCC_VERSION/$ABI_CONFIGURE_TARGET/armv7-a/hard/libgcc/"
+ OBJS="unwind-arm.o \
+ libunwind.o \
+ pr-support.o \
+ unwind-c.o"
+ ;;
x86)
BASE_DIR="$BUILD_OUT/gcc-$GCC_VERSION/$ABI_CONFIGURE_TARGET/libgcc/"
if [ "$GCC_VERSION" = "4.6" -o "$GCC_VERSION" = "4.4.3" ]; then
diff --git a/build/tools/build-gnu-libstdc++.sh b/build/tools/build-gnu-libstdc++.sh
index 7cff0e072..4ad05a0f6 100755
--- a/build/tools/build-gnu-libstdc++.sh
+++ b/build/tools/build-gnu-libstdc++.sh
@@ -95,6 +95,7 @@ if [ -z "$OPTION_BUILD_DIR" ]; then
else
BUILD_DIR=$OPTION_BUILD_DIR
fi
+rm -rf "$BUILD_DIR"
mkdir -p "$BUILD_DIR"
fail_panic "Could not create build directory: $BUILD_DIR"
@@ -162,7 +163,7 @@ build_gnustl_for_abi ()
;;
esac
- EXTRA_FLAGS=
+ EXTRA_FLAGS="-ffunction-sections -fdata-sections"
if [ -n "$THUMB" ] ; then
EXTRA_FLAGS="-mthumb"
fi
@@ -187,9 +188,15 @@ build_gnustl_for_abi ()
export LDFLAGS="-L$SYSROOT/usr/lib -lc $EXTRA_FLAGS"
- if [ "$ABI" = "armeabi-v7a" ]; then
- CXXFLAGS=$CXXFLAGS" -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16"
+ if [ "$ABI" = "armeabi-v7a" -o "$ABI" = "armeabi-v7a-hard" ]; then
+ CXXFLAGS=$CXXFLAGS" -march=armv7-a -mfpu=vfpv3-d16"
LDFLAGS=$LDFLAGS" -Wl,--fix-cortex-a8"
+ if [ "$ABI" != "armeabi-v7a-hard" ]; then
+ CXXFLAGS=$CXXFLAGS" -mfloat-abi=softfp"
+ else
+ CXXFLAGS=$CXXFLAGS" -mhard-float -D_NDK_MATH_NO_SOFTFP=1"
+ LDFLAGS=$LDFLAGS" -Wl,--no-warn-mismatch -lm_hard"
+ fi
fi
LIBTYPE_FLAGS=
diff --git a/build/tools/build-llvm.sh b/build/tools/build-llvm.sh
index 7df022ae9..eeaf5a780 100755
--- a/build/tools/build-llvm.sh
+++ b/build/tools/build-llvm.sh
@@ -423,7 +423,7 @@ for ABI in $PREBUILT_ABIS; do
armeabi)
LLVM_TARGET=armv5te-none-linux-androideabi
;;
- armeabi-v7a)
+ armeabi-v7a|armeabi-v7a-hard)
LLVM_TARGET=armv7-none-linux-androideabi
;;
x86)
diff --git a/build/tools/builder-funcs.sh b/build/tools/builder-funcs.sh
index 956975972..ed28bdaf8 100644
--- a/build/tools/builder-funcs.sh
+++ b/build/tools/builder-funcs.sh
@@ -346,12 +346,18 @@ builder_host_static_library ()
builder_shared_library ()
{
- local lib libname suffix
+ local lib libname suffix libm
libname=$1
suffix=$2
+ armeabi_v7a_float_abi=$3
+
if [ -z "$suffix" ]; then
suffix=".so"
fi
+ libm="-lm"
+ if [ "$armeabi_v7a_float_abi" = "hard" ]; then
+ libm="-lm_hard"
+ fi
lib=$_BUILD_DSTDIR/$libname
lib=${lib%%${suffix}}${suffix}
if [ "$_BUILD_MK" ]; then
@@ -371,7 +377,7 @@ builder_shared_library ()
$_BUILD_STATIC_LIBRARIES \
-lgcc \
$_BUILD_SHARED_LIBRARIES \
- -lc -lm \
+ -lc $libm \
$_BUILD_LDFLAGS \
$_BUILD_LDFLAGS_END_SO \
-o $lib
@@ -543,7 +549,7 @@ builder_begin_android ()
armeabi)
LLVM_TRIPLE=armv5te-none-linux-androideabi
;;
- armeabi-v7a)
+ armeabi-v7a|armeabi-v7a-hard)
LLVM_TRIPLE=armv7-none-linux-androideabi
;;
x86)
@@ -588,9 +594,15 @@ builder_begin_android ()
builder_cflags "-mthumb"
fi
;;
- armeabi-v7a)
- builder_cflags "-mthumb -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16"
+ armeabi-v7a|armeabi-v7a-hard)
+ builder_cflags "-mthumb -march=armv7-a -mfpu=vfpv3-d16"
builder_ldflags "-march=armv7-a -Wl,--fix-cortex-a8"
+ if [ "$ABI" != "armeabi-v7a-hard" ]; then
+ builder_cflags "-mfloat-abi=softfp"
+ else
+ builder_cflags "-mhard-float -D_NDK_MATH_NO_SOFTFP=1"
+ builder_ldflags "-Wl,--no-warn-mismatch -lm_hard"
+ fi
;;
esac
}
diff --git a/build/tools/dev-defaults.sh b/build/tools/dev-defaults.sh
index e29a92aaf..e81753b51 100644
--- a/build/tools/dev-defaults.sh
+++ b/build/tools/dev-defaults.sh
@@ -9,7 +9,7 @@
API_LEVELS="3 4 5 8 9 12 13 14 15 16 17 18 19"
# Default ABIs for the target prebuilt binaries.
-PREBUILT_ABIS="armeabi armeabi-v7a x86 mips"
+PREBUILT_ABIS="armeabi armeabi-v7a x86 mips armeabi-v7a-hard"
# Location of the STLport sources, relative to the NDK root directory
STLPORT_SUBDIR=sources/cxx-stl/stlport
@@ -129,7 +129,7 @@ get_default_abis_for_arch ()
local RET
case $1 in
arm)
- RET="armeabi armeabi-v7a"
+ RET="armeabi armeabi-v7a armeabi-v7a-hard"
;;
x86|x86_64|mips)
RET="$1"
diff --git a/build/tools/make-standalone-toolchain.sh b/build/tools/make-standalone-toolchain.sh
index 80dca31e3..aab1418b9 100755
--- a/build/tools/make-standalone-toolchain.sh
+++ b/build/tools/make-standalone-toolchain.sh
@@ -485,37 +485,47 @@ copy_stl_common_headers () {
}
# $1: Source ABI (e.g. 'armeabi')
-# $2: Optional extra ABI variant, or empty (e.g. "", "thumb", "armv7-a/thumb")
+# $2: Optional destination directory, default to empty (e.g. "", "thumb", "armv7-a/thumb")
+# $3: Optional source directory, default to empty (e.g. "", "thumb", "armv7-a/thumb")
+# $4: Optional "yes" (default) or "no" about whether to copy additional header (eg. include/bits)
copy_stl_libs () {
local ABI=$1
- local ABI2=$2
+ local DEST_DIR=$2
+ local SRC_DIR=$3
+ local COPY_ADDITIONAL_HEADER=yes
case $STL in
gnustl)
- # gnustl has thumb version of libraries. Append ABI with basename($ABI2) if $ABI2 contain '/'
- ABI1=$ABI
- if [ "$ABI2" != "${ABI2%%/*}" ] ; then
- ABI1=$ABI/`basename $ABI2`
+ # gnustl has thumb version of libraries. Append ABI with basename($DEST_DIR) if $DEST_DIR contain '/'
+ ABI_SRC_DIR=$ABI
+ if [ -n "$SRC_DIR" ]; then
+ ABI_SRC_DIR=$ABI/$SRC_DIR
+ else
+ if [ "$DEST_DIR" != "${DEST_DIR%%/*}" ] ; then
+ ABI_SRC_DIR=$ABI/`basename $DEST_DIR`
+ fi
+ fi
+ if [ "$COPY_ADDITIONAL_HEADER" != "no" ]; then
+ copy_directory "$GNUSTL_LIBS/$ABI/include/bits" "$ABI_STL_INCLUDE_TARGET/$DEST_DIR/bits"
fi
- copy_directory "$GNUSTL_LIBS/$ABI/include/bits" "$ABI_STL_INCLUDE_TARGET/$ABI2/bits"
- copy_file_list "$GNUSTL_LIBS/$ABI1" "$ABI_STL/lib/$ABI2" "libgnustl_shared.so"
- copy_file_list "$GNUSTL_LIBS/$ABI1" "$ABI_STL/lib/$ABI2" "libsupc++.a"
- cp -p "$GNUSTL_LIBS/$ABI1/libgnustl_static.a" "$ABI_STL/lib/$ABI2/libstdc++.a"
+ copy_file_list "$GNUSTL_LIBS/$ABI_SRC_DIR" "$ABI_STL/lib/$DEST_DIR" "libgnustl_shared.so"
+ copy_file_list "$GNUSTL_LIBS/$ABI_SRC_DIR" "$ABI_STL/lib/$DEST_DIR" "libsupc++.a"
+ cp -p "$GNUSTL_LIBS/$ABI_SRC_DIR/libgnustl_static.a" "$ABI_STL/lib/$DEST_DIR/libstdc++.a"
;;
libcxx|libc++)
- copy_file_list "$COMPILER_RT_LIBS/$ABI" "$ABI_STL/lib/$ABI2" "libcompiler_rt_shared.so" "libcompiler_rt_static.a"
- copy_file_list "$LIBCXX_LIBS/$ABI" "$ABI_STL/lib/$ABI2" "libc++_shared.so"
- cp -p "$LIBCXX_LIBS/$ABI/libc++_static.a" "$ABI_STL/lib/$ABI2/libstdc++.a"
+ copy_file_list "$COMPILER_RT_LIBS/$ABI" "$ABI_STL/lib/$DEST_DIR" "libcompiler_rt_shared.so" "libcompiler_rt_static.a"
+ copy_file_list "$LIBCXX_LIBS/$ABI" "$ABI_STL/lib/$DEST_DIR" "libc++_shared.so"
+ cp -p "$LIBCXX_LIBS/$ABI/libc++_static.a" "$ABI_STL/lib/$DEST_DIR/libstdc++.a"
;;
stlport)
if [ "$ARCH_STL" != "$ARCH" ]; then
tmp_lib_dir=$TMPDIR/stl
$NDK_DIR/build/tools/build-cxx-stl.sh --stl=stlport --out-dir=$tmp_lib_dir --abis=unknown
- cp -p "`ls $tmp_lib_dir/sources/cxx-stl/stlport/libs/*/libstlport_static.a`" "$ABI_STL/lib/$ABI2/libstdc++.a"
- cp -p "`ls $tmp_lib_dir/sources/cxx-stl/stlport/libs/*/libstlport_shared.bc`" "$ABI_STL/lib/$ABI2/libstlport_shared.so"
+ cp -p "`ls $tmp_lib_dir/sources/cxx-stl/stlport/libs/*/libstlport_static.a`" "$ABI_STL/lib/$DEST_DIR/libstdc++.a"
+ cp -p "`ls $tmp_lib_dir/sources/cxx-stl/stlport/libs/*/libstlport_shared.bc`" "$ABI_STL/lib/$DEST_DIR/libstlport_shared.so"
rm -rf $tmp_lib_dir
else
- copy_file_list "$STLPORT_LIBS/$ABI" "$ABI_STL/lib/$ABI2" "libstlport_shared.so"
- cp -p "$STLPORT_LIBS/$ABI/libstlport_static.a" "$ABI_STL/lib/$ABI2/libstdc++.a"
+ copy_file_list "$STLPORT_LIBS/$ABI" "$ABI_STL/lib/$DEST_DIR" "libstlport_shared.so"
+ cp -p "$STLPORT_LIBS/$ABI/libstlport_static.a" "$ABI_STL/lib/$DEST_DIR/libstdc++.a"
fi
;;
*)
@@ -534,6 +544,8 @@ case $ARCH in
copy_stl_libs armeabi "/thumb"
copy_stl_libs armeabi-v7a "armv7-a"
copy_stl_libs armeabi-v7a "armv7-a/thumb"
+ copy_stl_libs armeabi-v7a-hard "armv7-a/hard" "." "no"
+ copy_stl_libs armeabi-v7a-hard "armv7-a/thumb/hard" "thumb" "no"
;;
x86|mips)
copy_stl_libs "$ARCH" ""
diff --git a/build/tools/prebuilt-common.sh b/build/tools/prebuilt-common.sh
index de52ba64f..3341bd798 100644
--- a/build/tools/prebuilt-common.sh
+++ b/build/tools/prebuilt-common.sh
@@ -1237,7 +1237,7 @@ convert_abi_to_arch ()
local RET
local ABI=$1
case $ABI in
- armeabi|armeabi-v7a)
+ armeabi|armeabi-v7a|armeabi-v7a-hard)
RET=arm
;;
x86)
@@ -1250,7 +1250,7 @@ convert_abi_to_arch ()
if [ "$(arch_in_unknown_archs $ABI)" = "yes" ]; then
RET=$ABI
else
- >&2 echo "ERROR: Unsupported ABI name: $ABI, use one of: armeabi, armeabi-v7a or x86 or mips"
+ >&2 echo "ERROR: Unsupported ABI name: $ABI, use one of: armeabi, armeabi-v7a, x86, mips or armeabi-v7a-hard"
exit 1
fi
;;
@@ -1268,7 +1268,7 @@ convert_arch_to_abi ()
local ARCH=$1
case $ARCH in
arm)
- RET=armeabi,armeabi-v7a
+ RET=armeabi,armeabi-v7a,armeabi-v7a-hard
;;
x86)
RET=x86
diff --git a/ndk-gdb b/ndk-gdb
index e25caaddc..1bb42342f 100755
--- a/ndk-gdb
+++ b/ndk-gdb
@@ -506,6 +506,8 @@ if [ "$APP_ABIS" != "${APP_ABIS%%all*}" ] ; then
APP_ABIS_BACK="${APP_ABIS#*all}"
APP_ABIS="${APP_ABIS_FRONT}${ALL_ABIS}${APP_ABIS_BACK}"
fi
+# replace "armeabi-v7a-hard" with "armeabi-v7a"
+APP_ABIS=`echo $APP_ABIS | sed -e 's/armeabi-v7a-hard/armeabi-v7a/g'`
log "ABIs targetted by application: $APP_ABIS"
# Check the ADB command, and that we can connect to the device/emulator
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