Merge "Build GCC which always enable --eh-frame-hdr"
diff --git a/build/tools/build-gcc.sh b/build/tools/build-gcc.sh
index f98601e..d6c2ad5 100755
--- a/build/tools/build-gcc.sh
+++ b/build/tools/build-gcc.sh
@@ -141,13 +141,11 @@
set_parameters $PARAMETERS
# Disable x86_64 build for toolchains older than 4.7
-# x86_64-* targets are available on 64-bit host only
case "$TOOLCHAIN" in
x86_64-4.4.3|x86_64-4.6)
echo "ERROR: x86_64 toolchain is enabled in 4.7+. Please try to build newer version."
exit 1
;;
- x86_64-*) do_try64_option ;;
esac
prepare_target_build
@@ -324,8 +322,6 @@
;;
*-4.4.3)
;;
- x86_64-4.7) # x32 support is included into gold 2.23, but 4.7 is based on 2.22, so stick it to bsd.
- ;;
*)
EXTRA_CONFIG_FLAGS=$EXTRA_CONFIG_FLAGS" --enable-gold=default"
;;
diff --git a/build/tools/build-on-device-toolchain.sh b/build/tools/build-on-device-toolchain.sh
new file mode 100755
index 0000000..8c2a106
--- /dev/null
+++ b/build/tools/build-on-device-toolchain.sh
@@ -0,0 +1,124 @@
+#!/bin/sh
+#
+# Copyright (C) 2013 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# Rebuild all on-device toolchain for le32 target
+#
+
+PROGDIR=$(dirname $0)
+. $PROGDIR/prebuilt-common.sh
+
+NDK_DIR=$ANDROID_NDK_ROOT
+register_var_option "--ndk-dir=<path>" NDK_DIR "NDK installation directory"
+
+BUILD_DIR=/tmp/ndk-$USER/build
+register_var_option "--build-dir=<path>" BUILD_DIR "Specify temporary build dir."
+
+OUT_DIR=/tmp/ndk-$USER/out
+register_var_option "--out-dir=<path>" OUT_DIR "Specify output directory directly."
+
+ABI=armeabi-v7a
+register_var_option "--abi=<target>" ABI "List which emulator target you use"
+
+NO_SYNC=
+do_no_sync_option () { NO_SYNC=yes; }
+register_option "--no-sync" do_no_sync_option "Do not push sysroot to device /data/local/tmp/"
+
+TESTING=
+do_testing_option () { TESTING=yes; }
+register_option "--testing" do_testing_option "Copy each c++ libraries for (even for GPL stuff)"
+
+register_jobs_option
+
+PROGRAM_PARAMETERS="<toolchain-src-dir>"
+PROGRAM_DESCRIPTION=\
+"This script can be used to copy all components that on-device compilation needs.
+Also, it will compile on-device LLVM-related toolchain."
+
+extract_parameters "$@"
+
+# Check toolchain source path
+SRC_DIR="$PARAMETERS"
+check_toolchain_src_dir "$SRC_DIR"
+BUILDTOOLS=$ANDROID_NDK_ROOT/build/tools
+rm -rf $BUILD_DIR; mkdir -p $BUILD_DIR
+mkdir -p $OUT_DIR
+
+
+FLAGS=
+if [ "$VERBOSE" = "yes" ]; then
+ FLAGS=$FLAGS" --verbose"
+fi
+if [ "$VERBOSE2" = "yes" ]; then
+ FLAGS=$FLAGS" --verbose"
+fi
+FLAGS="$FLAGS -j$NUM_JOBS"
+TMP_OUT_DIR=/tmp/ndk-$USER/on_device_out
+FLAGS="$FLAGS --out-dir=$TMP_OUT_DIR"
+ARCH="$(convert_abi_to_arch $ABI)"
+GCC_TOOLCHAIN_VERSION=`cat $NDK_DIR/toolchains/llvm-$DEFAULT_LLVM_VERSION/setup.mk | grep '^TOOLCHAIN_VERSION' | awk '{print $3'}`
+
+SYSROOT=$NDK_DIR/$(get_default_platform_sysroot_for_arch $ARCH)
+OUT_SYSROOT=$OUT_DIR
+
+mkdir -p $OUT_SYSROOT/usr/bin
+mkdir -p $OUT_SYSROOT/usr/lib
+
+dump "Copy platform CRT files..."
+cp -r $SYSROOT/usr/lib/crtbegin_dynamic.o $OUT_SYSROOT/usr/lib
+cp -r $SYSROOT/usr/lib/crtbegin_so.o $OUT_SYSROOT/usr/lib
+cp -r $SYSROOT/usr/lib/crtend_android.o $OUT_SYSROOT/usr/lib
+cp -r $SYSROOT/usr/lib/crtend_so.o $OUT_SYSROOT/usr/lib
+
+dump "Copy $ABI gabi++ library"
+cp -f $NDK_DIR/$GABIXX_SUBDIR/libs/$ABI/libgabi++_shared.so $OUT_SYSROOT/usr/lib
+
+dump "Copy $ABI libportable library"
+cp -f $NDK_DIR/$LIBPORTABLE_SUBDIR/libs/$ABI/libportable.a $OUT_SYSROOT/usr/lib
+cp -f $NDK_DIR/$LIBPORTABLE_SUBDIR/libs/$ABI/libportable.wrap $OUT_SYSROOT/usr/lib
+
+dump "Copy $ABI libportable library"
+cp -f $NDK_DIR/$COMPILER_RT_SUBDIR/libs/$ABI/libcompiler_rt_static.a $OUT_SYSROOT/usr/lib
+
+if [ "$TESTING" = "yes" ]; then
+ dump "Copy stuff for testing"
+ cp -f $NDK_DIR/$GNUSTL_SUBDIR/$GCC_TOOLCHAIN_VERSION/libs/$ABI/libsupc++.a $OUT_SYSROOT/usr/lib
+ cp -f $NDK_DIR/$GNUSTL_SUBDIR/$GCC_TOOLCHAIN_VERSION/libs/$ABI/libgnustl_static.a $OUT_SYSROOT/usr/lib
+ cp -f $NDK_DIR/$GNUSTL_SUBDIR/$GCC_TOOLCHAIN_VERSION/libs/$ABI/libgnustl_shared.so $OUT_SYSROOT/usr/lib
+
+ cp -f $NDK_DIR/$STLPORT_SUBDIR/libs/$ABI/libstlport_static.a $OUT_SYSROOT/usr/lib
+ cp -f $NDK_DIR/$STLPORT_SUBDIR/libs/$ABI/libstlport_shared.so $OUT_SYSROOT/usr/lib
+
+ cp -f $NDK_DIR/$GABIXX_SUBDIR/libs/$ABI/libgabi++_static.a $OUT_SYSROOT/usr/lib
+ cp -f $NDK_DIR/$GABIXX_SUBDIR/libs/$ABI/libgabi++_shared.so $OUT_SYSROOT/usr/lib
+fi
+
+
+dump "Build $ARCH LLVM toolchain..."
+run $BUILDTOOLS/build-device-llvm.sh $FLAGS --arch=$ARCH --gcc-version=$GCC_TOOLCHAIN_VERSION $SRC_DIR $NDK_DIR
+fail_panic "Could not build le32 LLVM toolchain!"
+mv -f $TMP_OUT_DIR/$ARCH/lib*.so $OUT_SYSROOT/usr/lib
+mv -f $TMP_OUT_DIR/$ARCH/* $OUT_SYSROOT/usr/bin
+
+
+if [ "$NO_SYNC" != "yes" ]; then
+ dump "Push on-device $ABI toolchain sysroot to /data/local/tmp/"
+ run adb shell rm -rf /data/local/tmp/*
+ run adb push $OUT_SYSROOT /data/local/tmp/
+ fail_panic "Could not push sysroot!"
+fi
+
+dump "Done."
+exit 0
diff --git a/build/tools/dev-cleanup.sh b/build/tools/dev-cleanup.sh
index b13fdb1..71df0c0 100755
--- a/build/tools/dev-cleanup.sh
+++ b/build/tools/dev-cleanup.sh
@@ -45,6 +45,7 @@
rm -rf $DIR/$GNUSTL_SUBDIR/$VERSION
done
rm -rf $DIR/$LIBPORTABLE_SUBDIR
+rm -rf $DIR/$COMPILER_RT_SUBDIR
rm -f $DIR/ndk-stack*
rm -f $DIR/ndk-depends*
diff --git a/build/tools/dev-defaults.sh b/build/tools/dev-defaults.sh
index 1a25080..4861b6b 100644
--- a/build/tools/dev-defaults.sh
+++ b/build/tools/dev-defaults.sh
@@ -203,7 +203,7 @@
case $1 in
mipsel-*-4.4.3|*-4.6) echo "$DEFAULT_BINUTILS_VERSION";;
*-4.4.3) echo "2.19";;
- x86*-4.7) echo "2.23";;
+ x86*-4.7) echo "2.23";; # Use 2.23 to get x32 support in ld.gold
*-4.7) echo "2.22";;
*) echo "2.23";;
esac
diff --git a/build/tools/make-standalone-toolchain.sh b/build/tools/make-standalone-toolchain.sh
index 9f7f714..378502e 100755
--- a/build/tools/make-standalone-toolchain.sh
+++ b/build/tools/make-standalone-toolchain.sh
@@ -85,6 +85,7 @@
ARCH=arm
;;
esac
+ ARCH_INC=$ARCH
log "Auto-config: --arch=$ARCH"
else
ARCH_INC=$ARCH
@@ -301,18 +302,21 @@
arm) # NOte: -target may change by clang based on the
# presence of subsequent -march=armv7-a and/or -mthumb
LLVM_TARGET=armv5te-none-linux-androideabi
+ TOOLCHAIN_PREFIX=$DEFAULT_ARCH_TOOLCHAIN_PREFIX_arm
;;
x86)
LLVM_TARGET=i686-none-linux-android
+ TOOLCHAIN_PREFIX=$DEFAULT_ARCH_TOOLCHAIN_PREFIX_x86
;;
mips)
LLVM_TARGET=mipsel-none-linux-android
+ TOOLCHAIN_PREFIX=$DEFAULT_ARCH_TOOLCHAIN_PREFIX_mips
;;
*)
dump "ERROR: Unsupported NDK architecture!"
esac
# Need to remove '.' from LLVM_VERSION when constructing new clang name,
- # otherwise clang3.1++ may still compile *.c code as C, not C++, which
+ # otherwise clang3.3++ may still compile *.c code as C, not C++, which
# is not consistent with g++
LLVM_VERSION_WITHOUT_DOT=$(echo "$LLVM_VERSION" | sed -e "s!\.!!")
mv "$TMPDIR/bin/clang${HOST_EXE}" "$TMPDIR/bin/clang${LLVM_VERSION_WITHOUT_DOT}${HOST_EXE}"
@@ -351,6 +355,8 @@
fi
EOF
chmod 0755 "$TMPDIR/bin/clang" "$TMPDIR/bin/clang++"
+ cp -a "$TMPDIR/bin/clang" "$TMPDIR/bin/$TOOLCHAIN_PREFIX-clang"
+ cp -a "$TMPDIR/bin/clang++" "$TMPDIR/bin/$TOOLCHAIN_PREFIX-clang++"
if [ -n "$HOST_EXE" ] ; then
cat > "$TMPDIR/bin/clang.cmd" <<EOF
@@ -379,6 +385,8 @@
if ERRORLEVEL 1 exit /b 1
:done
EOF
+ cp -a "$TMPDIR/bin/clang.cmd" "$TMPDIR/bin/$TOOLCHAIN_PREFIX-clang.cmd"
+ cp -a "$TMPDIR/bin/clang++.cmd" "$TMPDIR/bin/$TOOLCHAIN_PREFIX-clang++.cmd"
fi
fi
@@ -440,10 +448,11 @@
;;
stlport)
if [ "$ARCH_INC" != "$ARCH" ]; then
- tmp_lib_dir=`mktemp -d`
+ 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.so`" "$ABI_STL/lib/$ABI2/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"
diff --git a/build/tools/prebuilt-common.sh b/build/tools/prebuilt-common.sh
index 379268e..2138372 100644
--- a/build/tools/prebuilt-common.sh
+++ b/build/tools/prebuilt-common.sh
@@ -766,7 +766,7 @@
DST_PREFIX="$NDK_CCACHE $DST_PREFIX"
fi
$NDK_BUILDTOOLS_PATH/gen-toolchain-wrapper.sh --src-prefix=$BINPREFIX --dst-prefix="$DST_PREFIX" "$CROSS_WRAP_DIR" \
- --cflags="$HOST_CFLAGS" --cxxflags="$HOST_CFLAGS" --ldflags="HOST_LDFLAGS"
+ --cflags="$HOST_CFLAGS" --cxxflags="$HOST_CFLAGS" --ldflags="$HOST_LDFLAGS"
# generate wrappers for BUILD toolchain
# this is required for mingw/darwin build to avoid tools canadian cross configuration issues
# 32-bit BUILD toolchain
diff --git a/build/tools/toolchain-patches/gcc/0006-Disable-libstdc-versioning.patch b/build/tools/toolchain-patches/gcc/0006-Disable-libstdc-versioning.patch
index d89fd14..0f6f242 100644
--- a/build/tools/toolchain-patches/gcc/0006-Disable-libstdc-versioning.patch
+++ b/build/tools/toolchain-patches/gcc/0006-Disable-libstdc-versioning.patch
@@ -62,7 +62,7 @@
index 69001b4..e875539 100644
--- a/gcc-4.8/libstdc++-v3/src/Makefile.in
+++ b/gcc-4.8/libstdc++-v3/src/Makefile.in
-@@ -336,7 +336,7 @@ AM_CPPFLAGS = $(GLIBCXX_INCLUDES)
+@@ -335,7 +335,7 @@ AM_CPPFLAGS = $(GLIBCXX_INCLUDES)
SUBDIRS = c++98 c++11
# Cross compiler support.
@@ -71,7 +71,7 @@
@GLIBCXX_LDBL_COMPAT_FALSE@ldbl_compat_sources =
@GLIBCXX_LDBL_COMPAT_TRUE@ldbl_compat_sources = compatibility-ldbl.cc
parallel_compat_sources = \
-@@ -543,6 +543,9 @@ clean-toolexeclibLTLIBRARIES:
+@@ -544,6 +544,9 @@ clean-toolexeclibLTLIBRARIES:
libstdc++.la: $(libstdc___la_OBJECTS) $(libstdc___la_DEPENDENCIES)
$(libstdc___la_LINK) -rpath $(toolexeclibdir) $(libstdc___la_OBJECTS) $(libstdc___la_LIBADD) $(LIBS)
diff --git a/build/tools/toolchain-patches/mclinker/0005-Fixed-darwin-ld.mcld-GNU-m-emulation-fail.patch b/build/tools/toolchain-patches/mclinker/0005-Fixed-darwin-ld.mcld-GNU-m-emulation-fail.patch
index 1b184b6..aff63e9 100644
--- a/build/tools/toolchain-patches/mclinker/0005-Fixed-darwin-ld.mcld-GNU-m-emulation-fail.patch
+++ b/build/tools/toolchain-patches/mclinker/0005-Fixed-darwin-ld.mcld-GNU-m-emulation-fail.patch
@@ -15,7 +15,7 @@
index b5152e6..f7ddd90 100644
--- a/tools/llvm-mcld/llvm-mcld.cpp
+++ b/tools/llvm-mcld/llvm-mcld.cpp
-@@ -1016,12 +1016,12 @@ static Triple ParseEmulation(const std::string& pEmulation)
+@@ -1018,12 +1018,12 @@ static Triple ParseEmulation(const std::string& pEmulation)
{
Triple result = StringSwitch<Triple>(pEmulation)
.Case("armelf_linux_eabi", Triple("arm", "", "linux", "gnueabi"))
diff --git a/find-win-host.cmd b/find-win-host.cmd
index ad7212f..2149b25 100644
--- a/find-win-host.cmd
+++ b/find-win-host.cmd
@@ -1,4 +1,4 @@
-rem @echo off
+@echo off
rem This is a Windows cmd.exe script used to find windows host name.
rem %1 is the env. var to set to the windows host name.
diff --git a/sources/cxx-stl/llvm-libc++/libcxx/test/testit_android b/sources/cxx-stl/llvm-libc++/libcxx/test/testit_android
index 880ae44..7963a35 100755
--- a/sources/cxx-stl/llvm-libc++/libcxx/test/testit_android
+++ b/sources/cxx-stl/llvm-libc++/libcxx/test/testit_android
@@ -220,12 +220,16 @@
then
SOURCE_LIB="-L$LIBCXX_LIBS"
fi
+if [ -z "$ADB" ]
+then
+ ADB=adb
+fi
if [ "$DO_STATIC" ]; then
# Statically link to ensure the executable can be run easily through ADB
LIBS=-lc++_static
else
- run2 adb push $LIBCXX_LIBS/libc++_shared.so /data/local/tmp 2>/dev/null
+ run2 $ADB push $LIBCXX_LIBS/libc++_shared.so /data/local/tmp 2>/dev/null
if [ $? != 0 ]; then
echo "ERROR: Can't push shared libc++ to target device!"
exit 1
@@ -258,9 +262,9 @@
# Run the command, while storing the standard output to CMD_OUT
# and appending the exit code as the last line.
if [ "$VERBOSE" -gt 2 ]; then
- echo "COMMAND: adb shell $@"
+ echo "COMMAND: $ADB shell $@"
fi
- adb shell "$@ ; echo \$?" | sed -e 's![[:cntrl:]]!!g' > $CMD_OUT 2>&1
+ $ADB shell "$@ ; echo \$?" | sed -e 's![[:cntrl:]]!!g' > $CMD_OUT 2>&1
# Get last line in log, which contains the exit code from the command
RET=$(sed -e '$!d' $CMD_OUT)
# Get output, which corresponds to everything except the last line
@@ -281,7 +285,7 @@
EXECUTABLE_BASENAME=$(basename "$EXECUTABLE")
shift
TARGET_PATH=/data/local/tmp
- run2 adb push $EXECUTABLE $TARGET_PATH/$EXECUTABLE_BASENAME 2>/dev/null &&
+ run2 $ADB push $EXECUTABLE $TARGET_PATH/$EXECUTABLE_BASENAME 2>/dev/null &&
adb_shell "LD_LIBRARY_PATH=$TARGET_PATH; cd $TARGET_PATH; ./$EXECUTABLE_BASENAME"
}
diff --git a/tests/run-tests.sh b/tests/run-tests.sh
index 125cf3a..2a1a625 100755
--- a/tests/run-tests.sh
+++ b/tests/run-tests.sh
@@ -382,7 +382,7 @@
WINE=wine12
;;
*)
- WINE=wine15
+ WINE=wine17
NDK_BUILD_FLAGS="" # make.exe -B hangs in wine > 1.2.x
if [ "$NDK_TOOLCHAIN_VERSION" != "4.4.3" ] ; then
APP_LDFLAGS="$APP_LDFLAGS -fuse-ld=mcld" # 64-bit ld.gold can't run in any wine!