blob: 087ce79024ef424b2b956b1f7d1b15a92af1a1ec [file] [log] [blame]
# 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)
# TODO: Increment this to 1000 for long test runs. For the simple unit test
# suite, keep this just over 100
#
COUNT=110
# Generate all our source files
NUM=0
SRCDIR=$PROGDIR/jni
rm -rf "$SRCDIR" && mkdir -p "$SRCDIR"
if [ $? != 0 ]; then
echo "ERROR: Could not create temporary source directory: $SRCDIR"
exit 1
fi
CLEAN_FILES=
generate_source_files ()
{
# Generate all temporary source files we need
local NUM=0
while [ $NUM -lt $COUNT ]; do
SRCFILE=$SRCDIR/foo$NUM.c
cat > $SRCFILE <<EOF
int foo$NUM (int x)
{
return x + 1;
}
EOF
NUM=$(( $NUM + 1 ))
CLEAN_FILES=$CLEAN_FILES" $SRCFILE"
done
}
generate_main_file ()
{
cat > $SRCDIR/main.c <<EOF
#include <stdio.h>
EOF
NUM=0
while [ $NUM -lt $COUNT ]; do
cat >> $SRCDIR/main.c <<EOF
extern int foo$NUM (int);
EOF
NUM=$(( $NUM + 1 ))
done
cat >> $SRCDIR/main.c <<EOF
int main(void)
{
int x = 0;
EOF
NUM=0
while [ $NUM -lt $COUNT ]; do
cat >> $SRCDIR/main.c <<EOF
x = foo$NUM(x);
EOF
NUM=$(( $NUM + 1 ))
done
cat >> $SRCDIR/main.c <<EOF
return 0;
}
EOF
CLEAN_FILES=$CLEAN_FILES" $SRCDIR/main.c"
}
generate_build_file ()
{
local NUM
# Generate the Android.mk
cat > $SRCDIR/Android.mk <<EOF
# Auto-generated - do not edit
LOCAL_PATH := \$(call my-dir)
EOF
# First, build a huge static library with all the files
cat >> $SRCDIR/Android.mk <<EOF
include \$(CLEAR_VARS)
LOCAL_MODULE := libfoo_big
EOF
NUM=0
while [ $NUM -lt $COUNT ]; do
cat >> $SRCDIR/Android.mk <<EOF
LOCAL_SRC_FILES += foo$NUM.c
EOF
NUM=$(( $NUM + 1 ))
done
cat >> $SRCDIR/Android.mk <<EOF
LOCAL_SHORT_COMMANDS := true
include \$(BUILD_SHARED_LIBRARY)
EOF
# Second, generate a large number of static libraries
# Then an executable that use them all
NUM=0
while [ $NUM -lt $COUNT ]; do
cat >> $SRCDIR/Android.mk <<EOF
include \$(CLEAR_VARS)
LOCAL_MODULE := foo$NUM
LOCAL_SRC_FILES := foo$NUM.c
include \$(BUILD_STATIC_LIBRARY)
EOF
NUM=$(( $NUM + 1 ))
done
cat >> $SRCDIR/Android.mk <<EOF
include \$(CLEAR_VARS)
LOCAL_MODULE := test_linker_options_list
LOCAL_SRC_FILES := main.c
EOF
NUM=0
while [ $NUM -lt $COUNT ]; do
cat >> $SRCDIR/Android.mk <<EOF
LOCAL_WHOLE_STATIC_LIBRARIES += foo$NUM
EOF
NUM=$(( $NUM + 1 ))
done
cat >> $SRCDIR/Android.mk <<EOF
#LOCAL_SHORT_COMMANDS := true
include \$(BUILD_EXECUTABLE)
EOF
CLEAN_FILES=$CLEAN_FILES" $SRCDIR/Android.mk"
}
generate_source_files &&
generate_main_file &&
generate_build_file
if [ $? != 0 ]; then
echo "ERROR: Could not generate files for this test!"
exit 1
fi
# Now run the build
$NDK/ndk-build -C "$PROGDIR" "$@"
RET=$?
# Clean everything we generated
rm -f $CLEAN_FILES
rm -rf "$PROGDIR/obj" "$PROGDIR/libs"
rm -rf jni
# Exit
exit $RET