diff options
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 @@ -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 |