1f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner#!/bin/sh 2f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner# //===--------------------------- testit ---------------------------------===// 3f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner# // 4f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner# // The LLVM Compiler Infrastructure 5f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner# // 6f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner# // This file is distributed under the University of Illinois Open Source 7f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner# // License. See LICENSE.TXT for details. 8f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner# // 9f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner# //===--------------------------------------------------------------------===// 10f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner 11f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turnercurrentpath=`pwd` 12f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turnerorigpath=$currentpath 13f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turnercurrentdir=`basename $currentpath` 14f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turnerwhile [ $currentdir != "test" ]; do 15ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner if [ $currentdir = "/" ] 16f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner then 17f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner echo "current directory must be in or under \"test\"." 18f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner exit 1 19f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner fi 20f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner cd .. 21f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner currentpath=`pwd` 22f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner currentdir=`basename $currentpath` 23f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turnerdone 24f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner 25f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turnercd .. 26f27a2b381b327ca3995b580531c164248f99a072David 'Digit' TurnerLIBCXX_ROOT=`pwd` 27f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turnercd $origpath 28f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner 29f27a2b381b327ca3995b580531c164248f99a072David 'Digit' TurnerVERBOSE=1 30f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner 31f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turnerrun () { 32f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner if [ "$VERBOSE" -gt 1 ]; then 33f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner echo "COMMAND: $@" 34f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner fi 35f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner case $VERBOSE in 36f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner 0|1) 37f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner # Hide command output and errors. 38f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner "$@" >/dev/null 2>&1 39f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner ;; 40f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner 2) 41f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner # Only hide command output 42f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner "$@" >/dev/null 43f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner ;; 44f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner *) 45f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner # Show command output and errors. 46f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner "$@" 47f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner ;; 48f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner esac 49f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner} 50f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner 51f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turnerrun2 () { 52f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner if [ "$VERBOSE" -gt 2 ]; then 53f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner echo "COMMAND: $@" 54f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner fi 55f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner case $VERBOSE in 56f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner 0|1) 57f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner # Hide command output and errors. 58f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner "$@" >/dev/null 2>&1 59f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner ;; 60f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner 2) 61f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner # Only hide command output 62f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner "$@" >/dev/null 63f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner ;; 64f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner *) 65f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner # Show command output and errors. 66f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner "$@" 67f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner ;; 68f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner esac 69f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner} 70f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner 71f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner# The list of valid target abis supported by this script. 72f27a2b381b327ca3995b580531c164248f99a072David 'Digit' TurnerVALID_ABIS="armeabi armeabi-v7a x86 mips" 73f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner 74dfc911962c33f546a74e3ec45b48ce4c7b9d56ecAndrew HsiehHOST_OS=`uname -s` 75dfc911962c33f546a74e3ec45b48ce4c7b9d56ecAndrew Hsiehif [ "$HOST_OS" = "Darwin" ]; then 76dfc911962c33f546a74e3ec45b48ce4c7b9d56ecAndrew Hsieh # darwin doesn't have readelf. hard-code a known one 77dfc911962c33f546a74e3ec45b48ce4c7b9d56ecAndrew Hsieh READELF=../../../../../toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/arm-linux-androideabi-readelf 78dfc911962c33f546a74e3ec45b48ce4c7b9d56ecAndrew Hsiehelse 79dfc911962c33f546a74e3ec45b48ce4c7b9d56ecAndrew Hsieh READELF=readelf 80dfc911962c33f546a74e3ec45b48ce4c7b9d56ecAndrew Hsiehfi 81dfc911962c33f546a74e3ec45b48ce4c7b9d56ecAndrew Hsieh 82f27a2b381b327ca3995b580531c164248f99a072David 'Digit' TurnerDO_HELP= 83f27a2b381b327ca3995b580531c164248f99a072David 'Digit' TurnerDO_STATIC= 84f27a2b381b327ca3995b580531c164248f99a072David 'Digit' TurnerTARGET_ABI= 85f27a2b381b327ca3995b580531c164248f99a072David 'Digit' TurnerTARGET_ARCH= 867670977319d537cb30ed322897022f649b1bd1f9Andrew Hsiehif [ -z "$TARGET_TEST_SUBDIR" ]; then 877670977319d537cb30ed322897022f649b1bd1f9Andrew Hsieh TARGET_TEST_SUBDIR="libcxx" 887670977319d537cb30ed322897022f649b1bd1f9Andrew Hsiehfi 897670977319d537cb30ed322897022f649b1bd1f9Andrew HsiehTARGET_PATH=/data/local/tmp/$TARGET_TEST_SUBDIR 90f27a2b381b327ca3995b580531c164248f99a072David 'Digit' TurnerCXX= 910b823f8d0398235dc1780f6a989e91adeac769ebAndrew HsiehWITH_COMPILER_RT= 927670977319d537cb30ed322897022f649b1bd1f9Andrew HsiehLIBCXX_NEEDS_COMPILER_RT= 93f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turnerfor OPT; do 94f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner case $OPT in 95f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner --help|-?) 96f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner DO_HELP=true 97f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner ;; 98f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner --abi=*) 99f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner TARGET_ABI=${OPT##--abi=} 100f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner ;; 101f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner --static) 102f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner DO_STATIC=true 103f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner ;; 1046eac0e4b1c6d8a50320cb6fce05559619c9e198fAndrew Hsieh --shared) 1056eac0e4b1c6d8a50320cb6fce05559619c9e198fAndrew Hsieh DO_STATIC= 1066eac0e4b1c6d8a50320cb6fce05559619c9e198fAndrew Hsieh ;; 107f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner --cxx=*) 108f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner CXX=${OPT##--cxx=} 109f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner ;; 110f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner --verbose) 111f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner VERBOSE=$(( $VERBOSE + 1 )) 112f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner ;; 1130b823f8d0398235dc1780f6a989e91adeac769ebAndrew Hsieh --with-compiler-rt) 1140b823f8d0398235dc1780f6a989e91adeac769ebAndrew Hsieh WITH_COMPILER_RT=yes 1150b823f8d0398235dc1780f6a989e91adeac769ebAndrew Hsieh ;; 116f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner -*) 117f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner echo "Unknown option: $OPT. See --help." 118f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner exit 1 119f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner ;; 120f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner *) 121f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner echo "This script doesn't take parameters. See --help." 122f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner exit 1 123f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner ;; 124f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner esac 125f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turnerdone 126f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner 127f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turnerif [ "$DO_HELP" ]; then 128f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner echo \ 129f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner"Usage: $(basename $0) [options] 130f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner 131f27a2b381b327ca3995b580531c164248f99a072David 'Digit' TurnerThis script is used to run the libc++ test suite for Android. 132f27a2b381b327ca3995b580531c164248f99a072David 'Digit' TurnerYou will need the following things: 133f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner 134f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner - The prebuild libc++ libraries in your NDK install. 135f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner - A prebuilt Android toolchain in your path. 136f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner - The 'adb' tool in your path. 137f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner - An Android device connected to ADB. 138f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner 139f27a2b381b327ca3995b580531c164248f99a072David 'Digit' TurnerThe toolchain and device must match your target ABI. For example, if 140f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turneryou use --abi=armeabi-v7a, your device must run ARMv7-A Android binaries, 141f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turnerand arm-linux-androideabi-g++ will be used to compile all tests, unless 142f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turneryou use --cxx=<command> to override it. 143f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner 144f27a2b381b327ca3995b580531c164248f99a072David 'Digit' TurnerValid options: 145f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner --help|-? Display this message. 146f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner --abi=<name> Specify target ABI. Use --abi=list for list. 147f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner --static Link against static libc++ library. 148f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner --cxx=<program> Override C++ compiler/linker. 149f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner --verbose Increase verbosity. 150f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner" 151f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner exit 0 152f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turnerfi 153f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner 154f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner# Check target ABI. 155f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turnerif [ "$TARGET_ABI" = "list" ]; then 156f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner echo "List of valid target ABIs:" 157f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner for ABI in $VALID_ABIS; do 158f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner printf " %s" $ABI 159f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner done 160f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner printf "\n" 161f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner exit 0 162f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turnerfi 163f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner 164f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turnerif [ -z "$TARGET_ABI" ]; then 165f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner echo "ERROR: Please specify a target ABI (--abi=<name>)." 166f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner exit 1 167f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turnerfi 168f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner 169f27a2b381b327ca3995b580531c164248f99a072David 'Digit' TurnerFOUND_ABI= 170f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turnerfor ABI in $VALID_ABIS; do 171f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner if [ "$ABI" = "$TARGET_ABI" ]; then 172f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner FOUND_ABI=true 173f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner break 174f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner fi 175f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turnerdone 176f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner 177f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turnerif [ -z "$FOUND_ABI" ]; then 178f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner echo "ERROR: Invalid abi '$TARGET_ABI'. Must be one of: $VALID_ABIS" 179f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner exit 1 180f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turnerfi 181f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner 182f27a2b381b327ca3995b580531c164248f99a072David 'Digit' TurnerLIBCXX_LIBS=$(cd $LIBCXX_ROOT/.. && pwd)/libs/$TARGET_ABI 183f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turnerfor LIB in libc++_static.a libc++_shared.so; do 184f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner if [ ! -f "$LIBCXX_LIBS/$LIB" ]; then 185f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner echo "ERROR: Missing prebuilt library: $LIBCXX_LIBS/$LIB" 186f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner echo "Please run: build/tools/build-cxx-stl.sh --stl=libc++" 187f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner exit 1 188f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner fi 189f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turnerdone 190f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner 191917347ec4e6c220e8750ae51462efdd461f45c6eAndrew HsiehLIBCOMPILER_RT_LIBS=$(cd "$LIBCXX_ROOT"/../../../android/compiler-rt && pwd)/libs/$TARGET_ABI 192dfc911962c33f546a74e3ec45b48ce4c7b9d56ecAndrew Hsieh$READELF -d "$LIBCXX_LIBS/libc++_shared.so" | grep NEEDED | grep -q compiler_rt 1937670977319d537cb30ed322897022f649b1bd1f9Andrew Hsiehif [ $? = 0 ]; then 1947670977319d537cb30ed322897022f649b1bd1f9Andrew Hsieh LIBCXX_NEEDS_COMPILER_RT=yes 1957670977319d537cb30ed322897022f649b1bd1f9Andrew Hsiehfi 1967670977319d537cb30ed322897022f649b1bd1f9Andrew Hsieh 1977670977319d537cb30ed322897022f649b1bd1f9Andrew Hsiehif [ "$WITH_COMPILER_RT" = "yes" -o "$LIBCXX_NEEDS_COMPILER_RT" = "yes" ]; then 1980b823f8d0398235dc1780f6a989e91adeac769ebAndrew Hsieh for LIB in libcompiler_rt_static.a libcompiler_rt_shared.so; do 1990b823f8d0398235dc1780f6a989e91adeac769ebAndrew Hsieh if [ ! -f "$LIBCOMPILER_RT_LIBS/$LIB" ]; then 2000b823f8d0398235dc1780f6a989e91adeac769ebAndrew Hsieh echo "ERROR: Missing prebuilt library: $LIBCOMPILER_RT_LIBS/$LIB" 2010b823f8d0398235dc1780f6a989e91adeac769ebAndrew Hsieh echo "Please run: build/tools/build-compiler-rt.sh --ndk-dir=$NDK \ 202917347ec4e6c220e8750ae51462efdd461f45c6eAndrew Hsieh--src-dir=/tmp/ndk-$USER/src/llvm-3.3/compiler-rt --llvm-version=3.3" 2030b823f8d0398235dc1780f6a989e91adeac769ebAndrew Hsieh exit 1 2040b823f8d0398235dc1780f6a989e91adeac769ebAndrew Hsieh fi 2050b823f8d0398235dc1780f6a989e91adeac769ebAndrew Hsieh done 2060b823f8d0398235dc1780f6a989e91adeac769ebAndrew Hsiehfi 207917347ec4e6c220e8750ae51462efdd461f45c6eAndrew Hsieh 208f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner# Check or detect C++ toolchain. 209f27a2b381b327ca3995b580531c164248f99a072David 'Digit' TurnerTOOLCHAIN_CFLAGS= 210f27a2b381b327ca3995b580531c164248f99a072David 'Digit' TurnerTOOLCHAIN_LDFLAGS= 211f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turnerif [ -z "$TOOLCHAIN_PREFIX" ]; then 2124a6fe28b54934bead656146e2571f64f4530be5bAndrew Hsieh # Compute 213f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner case $TARGET_ABI in 214f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner armeabi) 215f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner TOOLCHAIN_PREFIX=arm-linux-androideabi 216917347ec4e6c220e8750ae51462efdd461f45c6eAndrew Hsieh TOOLCHAIN_CFLAGS="-mthumb" 217917347ec4e6c220e8750ae51462efdd461f45c6eAndrew Hsieh TOOLCHAIN_LDFLAGS="-mthumb" 218f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner ;; 219f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner armeabi-v7a) 220f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner TOOLCHAIN_PREFIX=arm-linux-androideabi 221917347ec4e6c220e8750ae51462efdd461f45c6eAndrew Hsieh TOOLCHAIN_CFLAGS="-march=armv7-a -mthumb -mfpu=vfpv3-d16" 222917347ec4e6c220e8750ae51462efdd461f45c6eAndrew Hsieh TOOLCHAIN_LDFLAGS="-march=armv7-a -mthumb -Wl,--fix-cortex-a8" 223f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner ;; 2248654c21c31811a2c1caeac75b74325b02dc00c8cAndrew Hsieh armeabi-v7a-hard) 2258654c21c31811a2c1caeac75b74325b02dc00c8cAndrew Hsieh TOOLCHAIN_PREFIX=arm-linux-androideabi 2268654c21c31811a2c1caeac75b74325b02dc00c8cAndrew Hsieh TOOLCHAIN_CFLAGS="-march=armv7-a -mthumb -mfpu=vfpv3-d16 -mhard-float -D_NDK_MATH_NO_SOFTFP=1" 2278654c21c31811a2c1caeac75b74325b02dc00c8cAndrew Hsieh TOOLCHAIN_LDFLAGS="-march=armv7-a -mthumb -Wl,--fix-cortex-a8 -Wl,--no-warn-mismatch -lm_hard" 2288654c21c31811a2c1caeac75b74325b02dc00c8cAndrew Hsieh ;; 229f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner x86) 230f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner TOOLCHAIN_PREFIX=i686-linux-android 231f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner ;; 232f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner mips) 233f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner TOOLCHAIN_PREFIX=mipsel-linux-android 234f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner ;; 235f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner *) 236f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner echo "ERROR: Unknown ABI '$ABI'" 237f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner exit 1 238f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner ;; 239f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner esac 240da5b11a42de8efb020db413a6d0e79a895dc886fDavid 'Digit' Turner if [ -z "$CXX" ]; then 241da5b11a42de8efb020db413a6d0e79a895dc886fDavid 'Digit' Turner CXX=$TOOLCHAIN_PREFIX-g++ 242da5b11a42de8efb020db413a6d0e79a895dc886fDavid 'Digit' Turner fi 243f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turnerfi 244f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner 245f27a2b381b327ca3995b580531c164248f99a072David 'Digit' TurnerREAL_CXX=$(which "$CXX" 2>/dev/null) 246f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turnerif [ -z "$REAL_CXX" ]; then 247f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner echo "ERROR: Missing C++ compiler: $CXX" 248f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner exit 1 249f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turnerfi 250f27a2b381b327ca3995b580531c164248f99a072David 'Digit' TurnerCC=$CXX 251f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner 252f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turnerif [ -z "$OPTIONS" ] 253f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turnerthen 2544a6fe28b54934bead656146e2571f64f4530be5bAndrew Hsieh # Note that some tests use assert() to check condition but -O2 defines assert() to nothing, 2554a6fe28b54934bead656146e2571f64f4530be5bAndrew Hsieh # unless we specify -UNDEBUG to bring assert() back. 256d5161ea3a36c528d595b3dc87ec9ae866b0eb733Andrew Hsieh OPTIONS="--std=c++11 -O2 -g -funwind-tables -UNDEBUG" 257667dbb41059198b4039b1e6b40028a11d880ea16Andrew Hsieh if [ "$CXX" != "${CXX%clang++*}" ] ; then 2586db73059bfc7830f10a291d4b666f8ed21b775a8Andrew Hsieh OPTIONS="$OPTIONS" # clang3.5 doesn't accept the following: -mllvm -arm-enable-ehabi-descriptors -mllvm -arm-enable-ehabi" 259d5161ea3a36c528d595b3dc87ec9ae866b0eb733Andrew Hsieh else 260d5161ea3a36c528d595b3dc87ec9ae866b0eb733Andrew Hsieh # Some libc++ implementation (eg. list) break TBAA! 261d5161ea3a36c528d595b3dc87ec9ae866b0eb733Andrew Hsieh OPTIONS="$OPTIONS -fno-strict-aliasing" 2624a6fe28b54934bead656146e2571f64f4530be5bAndrew Hsieh fi 263f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turnerfi 264667dbb41059198b4039b1e6b40028a11d880ea16Andrew Hsieh 265917347ec4e6c220e8750ae51462efdd461f45c6eAndrew HsiehOPTIONS="$OPTIONS $TOOLCHAIN_CFLAGS $TOOLCHAIN_LDFLAGS" 266f27a2b381b327ca3995b580531c164248f99a072David 'Digit' TurnerOPTIONS="$OPTIONS -I$LIBCXX_ROOT/test/support" 2676eac0e4b1c6d8a50320cb6fce05559619c9e198fAndrew Hsieh# llvm-libc++/libcxx/test/lit.cfg line #278 defineds the following for testing only on Linux 268917347ec4e6c220e8750ae51462efdd461f45c6eAndrew HsiehOPTIONS="$OPTIONS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS" 269f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner 270d0722199c3b7497f9211924cb5807a564cf5e39cAndrew Hsiehif [ -z "$ADB" ] 271d0722199c3b7497f9211924cb5807a564cf5e39cAndrew Hsiehthen 272917347ec4e6c220e8750ae51462efdd461f45c6eAndrew Hsieh ADB=adb 273d0722199c3b7497f9211924cb5807a564cf5e39cAndrew Hsiehfi 274f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner 275f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner# Run a shell command through ADB, return its status. 2764a6fe28b54934bead656146e2571f64f4530be5bAndrew Hsieh# Variable ERR contains output if $RET is non-zero 277f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turneradb_shell () { 278f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner # We need a temporary file to store the output of our command 2794a6fe28b54934bead656146e2571f64f4530be5bAndrew Hsieh local CMD_OUT RET 2804a6fe28b54934bead656146e2571f64f4530be5bAndrew Hsieh ERR= 281f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner CMD_OUT=$(mktemp /tmp/testit_android-cmdout-XXXXXX) 282f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner # Run the command, while storing the standard output to CMD_OUT 283f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner # and appending the exit code as the last line. 284f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner if [ "$VERBOSE" -gt 2 ]; then 285d0722199c3b7497f9211924cb5807a564cf5e39cAndrew Hsieh echo "COMMAND: $ADB shell $@" 286f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner fi 287d0722199c3b7497f9211924cb5807a564cf5e39cAndrew Hsieh $ADB shell "$@ ; echo \$?" | sed -e 's![[:cntrl:]]!!g' > $CMD_OUT 2>&1 288f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner # Get last line in log, which contains the exit code from the command 289f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner RET=$(sed -e '$!d' $CMD_OUT) 290f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner # Get output, which corresponds to everything except the last line 291f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner OUT=$(sed -e '$d' $CMD_OUT) 2924a6fe28b54934bead656146e2571f64f4530be5bAndrew Hsieh if [ "$RET" != "0" ]; then 2934a6fe28b54934bead656146e2571f64f4530be5bAndrew Hsieh ERR=$OUT 2944a6fe28b54934bead656146e2571f64f4530be5bAndrew Hsieh fi 295f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner if [ "$VERBOSE" -gt 2 ]; then 296f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner printf "%s" "$OUT" 297f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner fi 2984a6fe28b54934bead656146e2571f64f4530be5bAndrew Hsieh rm -f $CMD_OUT 299f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner return $RET 300f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner} 301f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner 302917347ec4e6c220e8750ae51462efdd461f45c6eAndrew Hsieh# Push a given file through ADB. 303917347ec4e6c220e8750ae51462efdd461f45c6eAndrew Hsieh# $1: File path 304917347ec4e6c220e8750ae51462efdd461f45c6eAndrew Hsiehadb_push () { 305917347ec4e6c220e8750ae51462efdd461f45c6eAndrew Hsieh local FILE=$1 306917347ec4e6c220e8750ae51462efdd461f45c6eAndrew Hsieh local FILE_BASENAME=$(basename "$FILE") 307917347ec4e6c220e8750ae51462efdd461f45c6eAndrew Hsieh run2 $ADB push $FILE $TARGET_PATH/$FILE_BASENAME 2>/dev/null 308917347ec4e6c220e8750ae51462efdd461f45c6eAndrew Hsieh} 309917347ec4e6c220e8750ae51462efdd461f45c6eAndrew Hsieh 310f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner# Run a given executable through ADB. 311f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner# $1: Executable path 312f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turneradb_run () { 313917347ec4e6c220e8750ae51462efdd461f45c6eAndrew Hsieh local EXECUTABLE=$1 314917347ec4e6c220e8750ae51462efdd461f45c6eAndrew Hsieh local EXECUTABLE_BASENAME=$(basename "$EXECUTABLE") 3154a6fe28b54934bead656146e2571f64f4530be5bAndrew Hsieh run2 $ADB push $EXECUTABLE $TARGET_PATH/$EXECUTABLE_BASENAME 2>/dev/null 3164a6fe28b54934bead656146e2571f64f4530be5bAndrew Hsieh if [ "$?" != 0 ]; then 3174a6fe28b54934bead656146e2571f64f4530be5bAndrew Hsieh return 1; 3184a6fe28b54934bead656146e2571f64f4530be5bAndrew Hsieh fi 3194a6fe28b54934bead656146e2571f64f4530be5bAndrew Hsieh # Retry up to 10 times if fail is due to "Text file busy" 3204a6fe28b54934bead656146e2571f64f4530be5bAndrew Hsieh for i in 1 2 3 4 5 6 7 8 9 10; do 3214a6fe28b54934bead656146e2571f64f4530be5bAndrew Hsieh adb_shell "LD_LIBRARY_PATH=$TARGET_PATH; cd $TARGET_PATH; ./$EXECUTABLE_BASENAME" 3224a6fe28b54934bead656146e2571f64f4530be5bAndrew Hsieh if [ "$?" = "0" ]; then 3234a6fe28b54934bead656146e2571f64f4530be5bAndrew Hsieh return 0 3244a6fe28b54934bead656146e2571f64f4530be5bAndrew Hsieh fi 3254a6fe28b54934bead656146e2571f64f4530be5bAndrew Hsieh if ! $(echo $ERR | grep -iq "Text file busy"); then 3264a6fe28b54934bead656146e2571f64f4530be5bAndrew Hsieh if [ "$i" != "1" ]; then 3275092c9020f6482298676951ac70a43530104d44eAndrew Hsieh # Dump error message to help diagnostics 3284a6fe28b54934bead656146e2571f64f4530be5bAndrew Hsieh echo "ERR=$ERR" 3294a6fe28b54934bead656146e2571f64f4530be5bAndrew Hsieh fi 3304a6fe28b54934bead656146e2571f64f4530be5bAndrew Hsieh break; 3314a6fe28b54934bead656146e2571f64f4530be5bAndrew Hsieh fi 3324a6fe28b54934bead656146e2571f64f4530be5bAndrew Hsieh echo "Text file busy. Re-try $i" 3334a6fe28b54934bead656146e2571f64f4530be5bAndrew Hsieh sleep 1 3344a6fe28b54934bead656146e2571f64f4530be5bAndrew Hsieh run2 $ADB push $EXECUTABLE $TARGET_PATH/$EXECUTABLE_BASENAME 2>/dev/null 3354a6fe28b54934bead656146e2571f64f4530be5bAndrew Hsieh sleep 2 # try again 3364a6fe28b54934bead656146e2571f64f4530be5bAndrew Hsieh done 3374a6fe28b54934bead656146e2571f64f4530be5bAndrew Hsieh return 1 338f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner} 339f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner 340917347ec4e6c220e8750ae51462efdd461f45c6eAndrew Hsiehadb_shell "rm -rf $TARGET_PATH" 341917347ec4e6c220e8750ae51462efdd461f45c6eAndrew Hsiehadb_shell "mkdir -p $TARGET_PATH" 342917347ec4e6c220e8750ae51462efdd461f45c6eAndrew Hsieh 343917347ec4e6c220e8750ae51462efdd461f45c6eAndrew Hsiehif [ "$DO_STATIC" ]; then 344917347ec4e6c220e8750ae51462efdd461f45c6eAndrew Hsieh # Statically link to ensure the executable can be run easily through ADB 3456eac0e4b1c6d8a50320cb6fce05559619c9e198fAndrew Hsieh # Note that in standalone toolchain libc++_static is renamed to libstdc++, and 3466eac0e4b1c6d8a50320cb6fce05559619c9e198fAndrew Hsieh # compiler adds -lstdc++ implicitly 3470b823f8d0398235dc1780f6a989e91adeac769ebAndrew Hsieh if [ "$WITH_COMPILER_RT" = "yes" ]; then 3487670977319d537cb30ed322897022f649b1bd1f9Andrew Hsieh LIBS="-nodefaultlibs -lstdc++ -latomic -ldl -lm -lc -lcompiler_rt_static" 3490b823f8d0398235dc1780f6a989e91adeac769ebAndrew Hsieh else 3500b823f8d0398235dc1780f6a989e91adeac769ebAndrew Hsieh LIBS="-latomic" 3510b823f8d0398235dc1780f6a989e91adeac769ebAndrew Hsieh fi 352917347ec4e6c220e8750ae51462efdd461f45c6eAndrew Hsiehelse 353917347ec4e6c220e8750ae51462efdd461f45c6eAndrew Hsieh run2 $ADB push $LIBCXX_LIBS/libc++_shared.so $TARGET_PATH 2>/dev/null 354917347ec4e6c220e8750ae51462efdd461f45c6eAndrew Hsieh if [ $? != 0 ]; then 355917347ec4e6c220e8750ae51462efdd461f45c6eAndrew Hsieh echo "ERROR: Can't push shared libc++ to target device!" 356917347ec4e6c220e8750ae51462efdd461f45c6eAndrew Hsieh exit 1 357917347ec4e6c220e8750ae51462efdd461f45c6eAndrew Hsieh fi 3587670977319d537cb30ed322897022f649b1bd1f9Andrew Hsieh 3597670977319d537cb30ed322897022f649b1bd1f9Andrew Hsieh if [ "$WITH_COMPILER_RT" = "yes" -o "$LIBCXX_NEEDS_COMPILER_RT" = "yes" ]; then 3600b823f8d0398235dc1780f6a989e91adeac769ebAndrew Hsieh run2 $ADB push $LIBCOMPILER_RT_LIBS/libcompiler_rt_shared.so $TARGET_PATH 2>/dev/null 3610b823f8d0398235dc1780f6a989e91adeac769ebAndrew Hsieh if [ $? != 0 ]; then 3620b823f8d0398235dc1780f6a989e91adeac769ebAndrew Hsieh echo "ERROR: Can't push shared libcompiler_rt to target device!" 3630b823f8d0398235dc1780f6a989e91adeac769ebAndrew Hsieh exit 1 3640b823f8d0398235dc1780f6a989e91adeac769ebAndrew Hsieh fi 3657670977319d537cb30ed322897022f649b1bd1f9Andrew Hsieh fi 3667670977319d537cb30ed322897022f649b1bd1f9Andrew Hsieh 3677670977319d537cb30ed322897022f649b1bd1f9Andrew Hsieh if [ "$WITH_COMPILER_RT" = "yes" ]; then 36894203c4b6f7ec3a9a3e25a22bc1171900eba2b15Albert J. Wong LIBS="-nodefaultlibs -lc++_shared -latomic -ldl -lm -lc -lcompiler_rt_shared" 3690b823f8d0398235dc1780f6a989e91adeac769ebAndrew Hsieh else 3700b823f8d0398235dc1780f6a989e91adeac769ebAndrew Hsieh LIBS="-lc++_shared -latomic" 371917347ec4e6c220e8750ae51462efdd461f45c6eAndrew Hsieh fi 372917347ec4e6c220e8750ae51462efdd461f45c6eAndrew Hsiehfi 373917347ec4e6c220e8750ae51462efdd461f45c6eAndrew Hsieh 374917347ec4e6c220e8750ae51462efdd461f45c6eAndrew Hsiehcase $TRIPLE in 375917347ec4e6c220e8750ae51462efdd461f45c6eAndrew Hsieh *-*-mingw* | *-*-cygwin* | *-*-win*) 376917347ec4e6c220e8750ae51462efdd461f45c6eAndrew Hsieh TEST_EXE=test.exe 377917347ec4e6c220e8750ae51462efdd461f45c6eAndrew Hsieh ;; 378917347ec4e6c220e8750ae51462efdd461f45c6eAndrew Hsieh *) 379917347ec4e6c220e8750ae51462efdd461f45c6eAndrew Hsieh TEST_EXE=a.out 380917347ec4e6c220e8750ae51462efdd461f45c6eAndrew Hsieh ;; 381917347ec4e6c220e8750ae51462efdd461f45c6eAndrew Hsiehesac 382917347ec4e6c220e8750ae51462efdd461f45c6eAndrew Hsieh 383917347ec4e6c220e8750ae51462efdd461f45c6eAndrew HsiehTEST_EXE=/tmp/testit_android-$USER-$$-$TEST_EXE 384917347ec4e6c220e8750ae51462efdd461f45c6eAndrew Hsieh 385917347ec4e6c220e8750ae51462efdd461f45c6eAndrew HsiehFAIL=0 386917347ec4e6c220e8750ae51462efdd461f45c6eAndrew HsiehPASS=0 387917347ec4e6c220e8750ae51462efdd461f45c6eAndrew HsiehUNIMPLEMENTED=0 388917347ec4e6c220e8750ae51462efdd461f45c6eAndrew HsiehIMPLEMENTED_FAIL=0 389917347ec4e6c220e8750ae51462efdd461f45c6eAndrew HsiehIMPLEMENTED_PASS=0 390917347ec4e6c220e8750ae51462efdd461f45c6eAndrew Hsieh 3914a6fe28b54934bead656146e2571f64f4530be5bAndrew Hsieh# Run tests in current directory, recursively 3924a6fe28b54934bead656146e2571f64f4530be5bAndrew Hsieh# 3934a6fe28b54934bead656146e2571f64f4530be5bAndrew Hsieh# Note that file path containing EQ are symlink to the existing tests whose path contain '=', 3944a6fe28b54934bead656146e2571f64f4530be5bAndrew Hsieh# to workaround an issue in ndk-build which doesn't handle LOCAL_SRC_FILES with '='. 3954a6fe28b54934bead656146e2571f64f4530be5bAndrew Hsieh# See tests/device/test-libc++-static-full/jni/Android.mk We need to filter out path containing 3964a6fe28b54934bead656146e2571f64f4530be5bAndrew Hsieh# EQ such that we don't run same tests twice 3974a6fe28b54934bead656146e2571f64f4530be5bAndrew Hsieh# 3984a6fe28b54934bead656146e2571f64f4530be5bAndrew Hsieh# An alternative is to do "find . -type f", but this doesn't work in NDK windows package 3994a6fe28b54934bead656146e2571f64f4530be5bAndrew Hsieh# where zip turns symlink into physical file it points to. 4004a6fe28b54934bead656146e2571f64f4530be5bAndrew Hsieh# 4014a6fe28b54934bead656146e2571f64f4530be5bAndrew Hsieh# We also sort the test to make the test report comparable to previous test 4024a6fe28b54934bead656146e2571f64f4530be5bAndrew Hsieh# 4034a6fe28b54934bead656146e2571f64f4530be5bAndrew Hsieh 404f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turnerafunc() { 405f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner fail=0 406f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner pass=0 407f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner if (ls *.fail.cpp > /dev/null 2>&1) 408f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner then 4094a6fe28b54934bead656146e2571f64f4530be5bAndrew Hsieh for FILE in $(ls *.fail.cpp | tr ' ' '\n' | grep -v EQ | sort); do 410f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner if run $CC $OPTIONS $HEADER_INCLUDE $SOURCE_LIB $FILE $LIBS -o $TEST_EXE > /dev/null 2>&1 411f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner then 412f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner rm $TEST_EXE 413f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner echo "$FILE should not compile" 414f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner fail=$(($fail+1)) 415f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner else 416f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner pass=$(($pass+1)) 417f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner fi 418f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner done 419f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner fi 420f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner 421f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner if (ls *.pass.cpp > /dev/null 2>&1) 422f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner then 423917347ec4e6c220e8750ae51462efdd461f45c6eAndrew Hsieh if (ls *.dat > /dev/null 2>&1) 424917347ec4e6c220e8750ae51462efdd461f45c6eAndrew Hsieh then 4254a6fe28b54934bead656146e2571f64f4530be5bAndrew Hsieh adb_shell "rm -f $TARGET_PATH/*.dat" 4264a6fe28b54934bead656146e2571f64f4530be5bAndrew Hsieh for FILE in $(ls *.dat | tr ' ' '\n' | grep -v EQ | sort); do 427917347ec4e6c220e8750ae51462efdd461f45c6eAndrew Hsieh if [ "$VERBOSE" -gt 1 ]; then 428917347ec4e6c220e8750ae51462efdd461f45c6eAndrew Hsieh echo "Pushing data: " $FILE 429917347ec4e6c220e8750ae51462efdd461f45c6eAndrew Hsieh fi 430917347ec4e6c220e8750ae51462efdd461f45c6eAndrew Hsieh adb_push $FILE 431917347ec4e6c220e8750ae51462efdd461f45c6eAndrew Hsieh if [ $? != 0 ]; then 432917347ec4e6c220e8750ae51462efdd461f45c6eAndrew Hsieh echo "Failed to push file $FILE" 433917347ec4e6c220e8750ae51462efdd461f45c6eAndrew Hsieh fi 434917347ec4e6c220e8750ae51462efdd461f45c6eAndrew Hsieh done 435917347ec4e6c220e8750ae51462efdd461f45c6eAndrew Hsieh fi 4364a6fe28b54934bead656146e2571f64f4530be5bAndrew Hsieh for FILE in $(ls *.pass.cpp | tr ' ' '\n' | grep -v EQ | sort); do 437f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner if [ "$VERBOSE" -gt 1 ]; then 438f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner echo "Running test: " $FILE 439f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner fi 440da5b11a42de8efb020db413a6d0e79a895dc886fDavid 'Digit' Turner COMMAND="( cd $(pwd) && $CC $OPTIONS $HEADER_INCLUDE $SOURCE_LIB $FILE $LIBS )" 441f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner if run $CC $OPTIONS $HEADER_INCLUDE $SOURCE_LIB $FILE $LIBS -o $TEST_EXE 442f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner then 443f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner if adb_run $TEST_EXE 444f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner then 445f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner rm $TEST_EXE 446f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner pass=$(($pass+1)) 447f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner else 448f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner echo "`pwd`/$FILE failed at run time" 449917347ec4e6c220e8750ae51462efdd461f45c6eAndrew Hsieh echo "Compile line was: $COMMAND # run-time" 450f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner fail=$(($fail+1)) 451f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner rm $TEST_EXE 452f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner fi 453f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner else 454f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner echo "`pwd`/$FILE failed to compile" 455917347ec4e6c220e8750ae51462efdd461f45c6eAndrew Hsieh echo "Compile line was: $COMMAND # compile-time" 456f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner fail=$(($fail+1)) 457f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner fi 458f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner done 459f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner fi 460f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner 461f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner if [ $fail -gt 0 ] 462f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner then 463f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner echo "failed $fail tests in `pwd`" 464f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner IMPLEMENTED_FAIL=$(($IMPLEMENTED_FAIL+1)) 465f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner fi 466f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner if [ $pass -gt 0 ] 467f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner then 468f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner echo "passed $pass tests in `pwd`" 469f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner if [ $fail -eq 0 ] 470f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner then 471f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner IMPLEMENTED_PASS=$((IMPLEMENTED_PASS+1)) 472f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner fi 473f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner fi 474f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner if [ $fail -eq 0 -a $pass -eq 0 ] 475f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner then 476f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner echo "not implemented: `pwd`" 477f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner UNIMPLEMENTED=$(($UNIMPLEMENTED+1)) 478f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner fi 479f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner 480f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner FAIL=$(($FAIL+$fail)) 481f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner PASS=$(($PASS+$pass)) 482f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner 4834a6fe28b54934bead656146e2571f64f4530be5bAndrew Hsieh for FILE in $(ls | tr ' ' '\n' | grep -v EQ | sort) 484f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner do 485f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner if [ -d "$FILE" ]; 486f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner then 487f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner cd $FILE 488f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner afunc 489f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner cd .. 490f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner fi 491f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner done 492f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner} 493f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner 494f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turnerafunc 495f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner 496f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turnerecho "****************************************************" 497f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turnerecho "Results for `pwd`:" 498f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turnerecho "using `$CC --version`" 499f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turnerecho "with $OPTIONS $HEADER_INCLUDE $SOURCE_LIB" 500f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turnerecho "----------------------------------------------------" 501f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turnerecho "sections without tests : $UNIMPLEMENTED" 502f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turnerecho "sections with failures : $IMPLEMENTED_FAIL" 503f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turnerecho "sections without failures: $IMPLEMENTED_PASS" 504f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turnerecho " + ----" 505f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turnerecho "total number of sections : $(($UNIMPLEMENTED+$IMPLEMENTED_FAIL+$IMPLEMENTED_PASS))" 506f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turnerecho "----------------------------------------------------" 507f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turnerecho "number of tests failed : $FAIL" 508f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turnerecho "number of tests passed : $PASS" 509f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turnerecho " + ----" 510f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turnerecho "total number of tests : $(($FAIL+$PASS))" 511f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turnerecho "****************************************************" 512f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turner 513f27a2b381b327ca3995b580531c164248f99a072David 'Digit' Turnerexit $FAIL 514