Merge "Add a new test to check exceptions with GAbi++"
diff --git a/build/core/ndk-common.sh b/build/core/ndk-common.sh
index 1048053..974f934 100644
--- a/build/core/ndk-common.sh
+++ b/build/core/ndk-common.sh
@@ -270,8 +270,10 @@
# "uname -m" reports i386 on Snow Leopard even though its architecture is
# 64-bit. In order to use it to build 64-bit toolchains we need to fix the
# reporting anomoly here.
- if [ "$HOST_OS" = darwin -a "`uname -r`" = 10.8.0 ] ; then
- HOST_ARCH=x86_64
+ if [ "$HOST_OS" = darwin ] ; then
+ if ! echo __LP64__ | (CCOPTS= gcc -E - 2>/dev/null) | grep -q __LP64__ ; then
+ HOST_ARCH=x86_64
+ fi
fi
;;
amd64) HOST_ARCH=x86_64
diff --git a/build/tools/make-standalone-toolchain.sh b/build/tools/make-standalone-toolchain.sh
index 25413a0..d96cf36 100755
--- a/build/tools/make-standalone-toolchain.sh
+++ b/build/tools/make-standalone-toolchain.sh
@@ -194,9 +194,9 @@
# Copy the clang/llvm toolchain prebuilt binaries
run copy_directory "$LLVM_TOOLCHAIN_PATH" "$TMPDIR"
- # Move clang and clang++ to clang-LLVM_VERSION/++, then create scripts
- # linking them with predefined -target flag. This is to make clang/++
- # easier drop-in replacement for gcc/++ in NDK standalone mode.
+ # Move clang and clang++ to clang${LLVM_VERSION} and clang${LLVM_VERSION}++,
+ # then create scripts linking them with predefined -target flag. This is to
+ # make clang/++ easier drop-in replacement for gcc/++ in NDK standalone mode.
# Note that the file name of "clang" isn't important, and the trailing
# "++" tells clang to compile in C++ mode
LLVM_TARGET=
@@ -218,9 +218,15 @@
# otherwise clang3.1++ 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" "$TMPDIR/bin/clang$LLVM_VERSION_WITHOUT_DOT"
- rm "$TMPDIR/bin/clang++"
- ln -s "clang$LLVM_VERSION_WITHOUT_DOT" "$TMPDIR/bin/clang$LLVM_VERSION_WITHOUT_DOT++"
+ mv "$TMPDIR/bin/clang${HOST_EXE}" "$TMPDIR/bin/clang${LLVM_VERSION_WITHOUT_DOT}${HOST_EXE}"
+ if [ -h "$TMPDIR/bin/clang++${HOST_EXE}" ] ; then
+ ## clang++ is a link to clang. Remove it and reconstruct
+ rm "$TMPDIR/bin/clang++${HOST_EXE}"
+ ln -s "clang${LLVM_VERSION_WITHOUT_DOT}${HOST_EXE}" "$TMPDIR/bin/clang${LLVM_VERSION_WITHOUT_DOT}++${HOST_EXE}"
+ else
+ mv "$TMPDIR/bin/clang++${HOST_EXE}" "$TMPDIR/bin/clang$LLVM_VERSION_WITHOUT_DOT++${HOST_EXE}"
+ fi
+
cat > "$TMPDIR/bin/clang" <<EOF
\`dirname \$0\`/clang$LLVM_VERSION_WITHOUT_DOT -target $LLVM_TARGET "\$@"
EOF
@@ -228,6 +234,15 @@
\`dirname \$0\`/clang$LLVM_VERSION_WITHOUT_DOT++ -target $LLVM_TARGET "\$@"
EOF
chmod 0755 "$TMPDIR/bin/clang" "$TMPDIR/bin/clang++"
+
+ if [ -n "$HOST_EXE" ] ; then
+ cat > "$TMPDIR/bin/clang.cmd" <<EOF
+%~dp0\\clang${LLVM_VERSION_WITHOUT_DOT}${HOST_EXE} -target $LLVM_TARGET %*
+EOF
+ cat > "$TMPDIR/bin/clang++.cmd" <<EOF
+%~dp0\\clang${LLVM_VERSION_WITHOUT_DOT}++${HOST_EXE} -target $LLVM_TARGET %*
+EOF
+ fi
fi
dump "Copying sysroot headers and libraries..."
diff --git a/build/tools/prebuilt-common.sh b/build/tools/prebuilt-common.sh
index 8577279..b5ff14e 100644
--- a/build/tools/prebuilt-common.sh
+++ b/build/tools/prebuilt-common.sh
@@ -728,17 +728,19 @@
# We only do this if the CC variable is not defined to a given value
# and the --mingw or --try-64 options are not used.
#
- if [ "$HOST_OS" = "linux" -a -z "$CC" -a "$MINGW" != "yes" ]; then
- if [ "$TRY64" != "yes" ]; then
- LEGACY_PREFIX=i686
- else
- LEGACY_PREFIX=x86_64
+ if [ -z "$CC" -a "$MINGW" != "yes" ]; then
+ LEGACY_TOOLCHAIN_DIR=
+ if [ "$HOST_OS" = "linux" ]; then
+ LEGACY_TOOLCHAIN_DIR="$ANDROID_NDK_ROOT/../prebuilts/tools/gcc-sdk"
+ LEGACY_TOOLCHAIN_PREFIX="$LEGACY_TOOLCHAIN_DIR/"
+ elif [ "$HOST_OS" = "darwin" ]; then
+ LEGACY_TOOLCHAIN_DIR="$ANDROID_NDK_ROOT/../prebuilts/gcc/darwin-x86/host/i686-apple-darwin-4.2.1/bin"
+ LEGACY_TOOLCHAIN_PREFIX="$LEGACY_TOOLCHAIN_DIR/i686-apple-darwin10-"
fi
- LEGACY_TOOLCHAIN_DIR="$ANDROID_NDK_ROOT/../prebuilts/tools/gcc-sdk"
if [ -d "$LEGACY_TOOLCHAIN_DIR" ] ; then
- log "Forcing generation of Linux binaries with legacy $LEGACY_PREFIX toolchain"
- CC="$LEGACY_TOOLCHAIN_DIR/gcc"
- CXX="$LEGACY_TOOLCHAIN_DIR/g++"
+ log "Forcing generation of $HOST_OS binaries with legacy toolchain"
+ CC="${LEGACY_TOOLCHAIN_PREFIX}gcc"
+ CXX="${LEGACY_TOOLCHAIN_PREFIX}g++"
fi
fi
@@ -748,11 +750,7 @@
STRIP=${STRIP:-strip}
case $HOST_TAG in
darwin-*)
- # Try to build with Tiger SDK if available
- if check_darwin_sdk /Developer/SDKs/MacOSX10.4.sdku 10.4; then
- log "Generating Tiger-compatible binaries!"
- # Otherwise with Leopard SDK
- elif check_darwin_sdk /Developer/SDKs/MacOSX10.5.sdk 10.5; then
+ if check_darwin_sdk /Developer/SDKs/MacOSX10.5.sdk 10.5; then
log "Generating Leopard-compatible binaries!"
else
local version=`sw_vers -productVersion`
@@ -777,7 +775,6 @@
int test_array[1-2*(sizeof(void*) != 4)];
EOF
log_n "Checking whether the compiler generates 32-bit binaries..."
- HOST_BITS=32
log2 $CC $HOST_CFLAGS -c -o $TMPO $TMPC
$NDK_CCACHE $CC $HOST_CFLAGS -c -o $TMPO $TMPC >$TMPL 2>&1
if [ $? != 0 ] ; then
@@ -788,15 +785,18 @@
# will not work well with the GCC toolchain scripts.
CC="$CC -m32"
CXX="$CXX -m32"
- else
- HOST_BITS=64
fi
else
log "yes"
+ if [ "$TRY64" = "yes" ]; then
+ CC="$CC -m64"
+ CXX="$CXX -m64"
+ fi
fi
- # For now, we only support building 32-bit binaries anyway
- if [ "$TRY64" != "yes" ]; then
+ if [ "$TRY64" = "yes" ]; then
+ HOST_BITS=64
+ else
force_32bit_binaries # to modify HOST_TAG and others
HOST_BITS=32
fi
diff --git a/sources/android/cpufeatures/cpu-features.c b/sources/android/cpufeatures/cpu-features.c
index 2eb417f..02ea74f 100644
--- a/sources/android/cpufeatures/cpu-features.c
+++ b/sources/android/cpufeatures/cpu-features.c
@@ -28,7 +28,7 @@
/* ChangeLog for this library:
*
- * NDK r??: Add new ARM CPU features: VFPv2, VFP_D32, VFP_FP16,
+ * NDK r8c: Add new ARM CPU features: VFPv2, VFP_D32, VFP_FP16,
* VFP_FMA, NEON_FMA, IDIV_ARM, IDIV_THUMB2 and iWMMXt.
*
* Rewrite the code to parse /proc/self/auxv instead of
@@ -96,7 +96,7 @@
__asm__ __volatile__ ( \
"push %%ebx\n"
"cpuid\n" \
- "mov %1, %%ebx\n"
+ "mov %%ebx, %1\n"
"pop %%ebx\n"
: "=a" (a), "=r" (b), "=c" (c), "=d" (d) \
: "a" (func) \
diff --git a/tests/build/issue39824-__BYTE_ORDER/BROKEN_BUILD b/tests/build/issue39824-__BYTE_ORDER/BROKEN_BUILD
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tests/build/issue39824-__BYTE_ORDER/BROKEN_BUILD
diff --git a/tests/build/issue39824-__BYTE_ORDER/jni/Android.mk b/tests/build/issue39824-__BYTE_ORDER/jni/Android.mk
new file mode 100644
index 0000000..9bd21ad
--- /dev/null
+++ b/tests/build/issue39824-__BYTE_ORDER/jni/Android.mk
@@ -0,0 +1,7 @@
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := issue39824-__BYTE_ORDER
+LOCAL_SRC_FILES := issue39824-__BYTE_ORDER.c
+include $(BUILD_EXECUTABLE)
+
diff --git a/tests/build/issue39824-__BYTE_ORDER/jni/Application.mk b/tests/build/issue39824-__BYTE_ORDER/jni/Application.mk
new file mode 100644
index 0000000..a252a72
--- /dev/null
+++ b/tests/build/issue39824-__BYTE_ORDER/jni/Application.mk
@@ -0,0 +1 @@
+APP_ABI := all
diff --git a/tests/build/issue39824-__BYTE_ORDER/jni/issue39824-__BYTE_ORDER.c b/tests/build/issue39824-__BYTE_ORDER/jni/issue39824-__BYTE_ORDER.c
new file mode 100644
index 0000000..06e9cdb
--- /dev/null
+++ b/tests/build/issue39824-__BYTE_ORDER/jni/issue39824-__BYTE_ORDER.c
@@ -0,0 +1,6 @@
+#include <sys/endian.h>
+
+int main()
+{
+ return 0 * __BYTE_ORDER;
+}
diff --git a/tests/build/issue39983-PAGE_SIZE/jni/Android.mk b/tests/build/issue39983-PAGE_SIZE/jni/Android.mk
new file mode 100644
index 0000000..712f588
--- /dev/null
+++ b/tests/build/issue39983-PAGE_SIZE/jni/Android.mk
@@ -0,0 +1,7 @@
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := issue39983-PAGE_SIZE
+LOCAL_SRC_FILES := issue39983-PAGE_SIZE.c
+include $(BUILD_EXECUTABLE)
+
diff --git a/tests/build/issue39983-PAGE_SIZE/jni/Application.mk b/tests/build/issue39983-PAGE_SIZE/jni/Application.mk
new file mode 100644
index 0000000..a252a72
--- /dev/null
+++ b/tests/build/issue39983-PAGE_SIZE/jni/Application.mk
@@ -0,0 +1 @@
+APP_ABI := all
diff --git a/tests/build/issue39983-PAGE_SIZE/jni/issue39983-PAGE_SIZE.c b/tests/build/issue39983-PAGE_SIZE/jni/issue39983-PAGE_SIZE.c
new file mode 100644
index 0000000..65de46e
--- /dev/null
+++ b/tests/build/issue39983-PAGE_SIZE/jni/issue39983-PAGE_SIZE.c
@@ -0,0 +1,6 @@
+#include <pthread.h>
+
+int main()
+{
+ return 0 * PTHREAD_STACK_MIN;
+}