# Check if ARM compiler optimize GOT using GOT_PREL as much
# as possible, and turn instruction sequence of SkAlphaMulQ()
#
#	ldr	r3, .L2
#	ldr	r2, .L2+4
#   .LPIC0:
#	add	r3, pc, r3
#	ldr	r3, [r3, r2]
#	ldr	r3, [r3]
#	and	r2, r3, r0, lsr #8
#	....
#   .L2:
#	.word	_GLOBAL_OFFSET_TABLE_-(.LPIC0+8)
#	.word	gMask_00FF00FF(GOT)
#
# into
#
#	ldr	r2, .L2
#   .LPIC1:
#	ldr	r2, [pc, r2]
#	ldr	r3, [r2, #0]
#	and	r2, r3, r0, lsr #8
#	....
#   .L2:
#	.word	gMask_00FF00FF(GOT_PREL)+(.-(.LPIC1+8))
#

fail_panic ()
{
    if [ $? != 0 ] ; then
        echo "ERROR: $@"
        exit 1
    fi
}

for opt do
    optarg=`expr "x$opt" : 'x[^=]*=\(.*\)'`
    case "$opt" in
    APP_ABI=*)
        APP_ABI=$optarg
        ;;
    esac
done

if [ -z "$APP_ABI" -o "$APP_ABI" = "all" ]; then
    APP_ABI="armeabi-v7a"
fi

# Only test for armeabi-v7a
if [ "$APP_ABI" != "${APP_ABI%%armeabi*}" ]; then
    APP_ABI=`echo $APP_ABI | tr ',' ' '`
    for ABI in $APP_ABI; do
        $NDK/ndk-build -B APP_ABI=$ABI APP_CFLAGS=-save-temps
        fail_panic "can't compile for APP_ABI=$ABI"
        fgrep -q "(GOT_PREL)" SkAlphaMulQ.s
        fail_panic "Fail to optimize GOT access with GOT_PREL, ABI=$ABI."
    done
fi

rm -rf libs obj SkAlphaMulQ.*
