Bash程序  |  65行  |  1.69 KB

# Special script used to check that LOCAL_SHORT_COMMANDS works
# correctly even when using a very large number of source files
# when building a static or shared library.
#
# We're going to auto-generate all the files we need in a
# temporary directory, because that's how we roll.
#

PROGDIR=$(dirname $0)
PROGDIR=$(cd "$PROGDIR" && pwd)

# Clean generated binaries
rm -rf "$PROGDIR/obj" "$PROGDIR/libs"

# Now run the build
if [ -z "$APP_ABI" ]; then
    for OPT; do
        case $OPT in
            APP_ABI=*)
                APP_ABI=${OPT##APP_ABI=}
                ;;
        esac
    done
    $NDK/ndk-build -C "$PROGDIR" "$@"
    RET=$?
else
    $NDK/ndk-build -C "$PROGDIR" "$@" APP_ABI="$APP_ABI"
    RET=$?
fi

# find objdump. Any arch's objdump can do "-s -j".  We just need to find one
# from $NDK/toolchains because MacOSX doesn't have that by default.
get_build_var ()
{
    if [ -z "$APP_ABI" ]; then
        make --no-print-dir -f $NDK/build/core/build-local.mk DUMP_$1 | tail -1
    else
        make --no-print-dir -f $NDK/build/core/build-local.mk DUMP_$1 APP_ABI="$APP_ABI" | tail -1
    fi
}

TOOLCHAIN_PREFIX=`get_build_var TOOLCHAIN_PREFIX`
OBJDUMP=${TOOLCHAIN_PREFIX}objdump

# check if linker.list is empty
ALL_SO=`find libs -name "*.so"`
for SO in $ALL_SO; do
    NUM_LINE=`$OBJDUMP -s -j.rodata $SO | wc -l | tr -d ' '`
    if [ "$NUM_LINE" != "7" ]; then
        echo "ERROR: Fail to merge string literals!"
        exit 1
    fi
    NUM_ABCD=`$OBJDUMP -s -j.rodata $SO | grep abcd | wc -l | tr -d ' '`
    if [ "$NUM_ABCD" != "2" ]; then
        echo "ERROR: abcd should appear exactly twice!"
        exit 1
    fi
done

# Clean generated binaries
rm -rf "$PROGDIR/obj" "$PROGDIR/libs"

# Exit
exit $RET