build-scripts/androidbuild.sh
author Sam Lantinga
Tue, 10 Jan 2017 08:54:33 -0800
changeset 10806 36f40b8cc979
parent 10200 c678dcec4f44
child 11647 5816b27073a4
permissions -rwxr-xr-x
Fixed bugs 2570, 3145, improved OpenGL ES context support on Windows and X11

Mark Callow

The attached patch does the following for the X11 and Windows platforms, the only ones where SDL attempts to use context_create_es_profile:

- Adds SDL_HINT_OPENGL_ES_DRIVER by which the application can
say to use the OpenGL ES driver & EGL rather than the Open GL
driver. (For bug #2570)
- Adds code to {WIN,X11}_GL_InitExtensions to determine the maximum
OpenGL ES version supported by the OpenGL driver (for bug #3145)
- Modifies the test that determines whether to use the OpenGL
driver or the real OpenGL ES driver to take into account the
hint, the requested and supported ES version and whether ES 1.X
is being requested. (For bug #2570 & bug #3145)
- Enables the testgles2 test for __WINDOWS__ and __LINUX__ and adds
the test to the VisualC projects.

With the fix in place I have run testdraw2, testgl and testgles2 without any issues and have run my own apps that use OpenGL, OpenGL ES 3 and OpenGL ES 1.1.
gabomdq@7793
     1
#!/bin/bash
gabomdq@7793
     2
gabomdq@7793
     3
SOURCES=()
gabomdq@7793
     4
MKSOURCES=""
gabomdq@7793
     5
CURDIR=`pwd -P`
gabomdq@7793
     6
gabomdq@7793
     7
# Fetch sources
gabomdq@7793
     8
if [[ $# -ge 2 ]]; then
gabomdq@7793
     9
    for src in ${@:2}
gabomdq@7793
    10
    do
gabomdq@7793
    11
        SOURCES+=($src)
gabomdq@7793
    12
        MKSOURCES="$MKSOURCES $(basename $src)"
gabomdq@7793
    13
    done
gabomdq@7793
    14
else
gabomdq@7793
    15
    if [ -n "$1" ]; then
gabomdq@7793
    16
        while read src
gabomdq@7793
    17
        do
gabomdq@7793
    18
            SOURCES+=($src)
gabomdq@7793
    19
            MKSOURCES="$MKSOURCES $(basename $src)"
gabomdq@7793
    20
        done
gabomdq@7793
    21
    fi
gabomdq@7793
    22
fi
gabomdq@7793
    23
gabomdq@7793
    24
if [ -z "$1" ] || [ -z "$SOURCES" ]; then
gabomdq@7793
    25
    echo "Usage: androidbuild.sh com.yourcompany.yourapp < sources.list"
gabomdq@7793
    26
    echo "Usage: androidbuild.sh com.yourcompany.yourapp source1.c source2.c ...sourceN.c"
gabomdq@7907
    27
    echo "To copy SDL source instead of symlinking: COPYSOURCE=1 androidbuild.sh ... "
gabomdq@7974
    28
    echo "You can pass additional arguments to ndk-build with the NDKARGS variable: NDKARGS=\"-s\" androidbuild.sh ..."
gabomdq@7793
    29
    exit 1
gabomdq@7793
    30
fi
gabomdq@7793
    31
gabomdq@7793
    32
gabomdq@7793
    33
gabomdq@7793
    34
SDLPATH="$( cd "$(dirname "$0")/.." ; pwd -P )"
gabomdq@7793
    35
gabomdq@7793
    36
NDKBUILD=`which ndk-build`
gabomdq@7793
    37
if [ -z "$NDKBUILD" ];then
gabomdq@7793
    38
    echo "Could not find the ndk-build utility, install Android's NDK and add it to the path"
gabomdq@7793
    39
    exit 1
gabomdq@7793
    40
fi
gabomdq@7793
    41
gabomdq@7793
    42
ANDROID=`which android`
gabomdq@7793
    43
if [ -z "$ANDROID" ];then
gabomdq@7793
    44
    echo "Could not find the android utility, install Android's SDK and add it to the path"
gabomdq@7793
    45
    exit 1
gabomdq@7793
    46
fi
gabomdq@7793
    47
gabomdq@7793
    48
ANT=`which ant`
gabomdq@7793
    49
gabomdq@7793
    50
if [ -z "$ANT" ];then
gabomdq@7793
    51
    echo "Could not find the ant utility, install Android's SDK and add it to the path"
gabomdq@7793
    52
    exit 1
gabomdq@7793
    53
fi
gabomdq@7793
    54
gabomdq@7974
    55
NCPUS="1"
gabomdq@7974
    56
case "$OSTYPE" in
gabomdq@7974
    57
    darwin*)
gabomdq@7974
    58
        NCPU=`sysctl -n hw.ncpu`
gabomdq@7974
    59
        ;; 
gabomdq@7974
    60
    linux*)
gabomdq@7974
    61
        if [ -n `which nproc` ]; then
gabomdq@7974
    62
            NCPUS=`nproc`
gabomdq@7974
    63
        fi  
gabomdq@7974
    64
        ;;
gabomdq@7974
    65
  *);;
gabomdq@7974
    66
esac
gabomdq@7974
    67
gabomdq@7793
    68
APP="$1"
gabomdq@7793
    69
APPARR=(${APP//./ })
gabomdq@7793
    70
BUILDPATH="$SDLPATH/build/$APP"
gabomdq@7793
    71
gabomdq@7793
    72
# Start Building
gabomdq@7793
    73
gabomdq@7793
    74
rm -rf $BUILDPATH
gabomdq@7793
    75
mkdir -p $BUILDPATH
gabomdq@7793
    76
gabomdq@7793
    77
cp -r $SDLPATH/android-project/* $BUILDPATH
gabomdq@7793
    78
gabomdq@7793
    79
# Copy SDL sources
gabomdq@7793
    80
mkdir -p $BUILDPATH/jni/SDL
gabomdq@7907
    81
if [ -z "$COPYSOURCE" ]; then
gabomdq@7907
    82
    ln -s $SDLPATH/src $BUILDPATH/jni/SDL
gabomdq@7907
    83
    ln -s $SDLPATH/include $BUILDPATH/jni/SDL
gabomdq@7907
    84
else
gabomdq@7907
    85
    cp -r $SDLPATH/src $BUILDPATH/jni/SDL
gabomdq@7907
    86
    cp -r $SDLPATH/include $BUILDPATH/jni/SDL
gabomdq@7907
    87
fi
gabomdq@7907
    88
gabomdq@7907
    89
cp -r $SDLPATH/Android.mk $BUILDPATH/jni/SDL
philipp@10200
    90
sed -i -e "s|YourSourceHere.c|$MKSOURCES|g" $BUILDPATH/jni/src/Android.mk
philipp@10200
    91
sed -i -e "s|org\.libsdl\.app|$APP|g" $BUILDPATH/AndroidManifest.xml
gabomdq@7793
    92
gabomdq@7793
    93
# Copy user sources
gabomdq@7793
    94
for src in "${SOURCES[@]}"
gabomdq@7793
    95
do
gabomdq@7793
    96
    cp $src $BUILDPATH/jni/src
gabomdq@7793
    97
done
gabomdq@7793
    98
gabomdq@7793
    99
# Create an inherited Activity
gabomdq@7793
   100
cd $BUILDPATH/src
gabomdq@7793
   101
for folder in "${APPARR[@]}"
gabomdq@7793
   102
do
gabomdq@7793
   103
    mkdir -p $folder
gabomdq@7793
   104
    cd $folder
gabomdq@7793
   105
done
gabomdq@7793
   106
gabomdq@7793
   107
ACTIVITY="${folder}Activity"
philipp@10200
   108
sed -i -e "s|SDLActivity|$ACTIVITY|g" $BUILDPATH/AndroidManifest.xml
philipp@10200
   109
sed -i -e "s|SDLActivity|$APP|g" $BUILDPATH/build.xml
gabomdq@7793
   110
gabomdq@7793
   111
# Fill in a default Activity
gabomdq@7793
   112
echo "package $APP;" >  "$ACTIVITY.java"
gabomdq@7793
   113
echo "import org.libsdl.app.SDLActivity;" >> "$ACTIVITY.java"
gabomdq@7793
   114
echo "public class $ACTIVITY extends SDLActivity {}" >> "$ACTIVITY.java"
gabomdq@7793
   115
gabomdq@7793
   116
# Update project and build
gabomdq@7793
   117
cd $BUILDPATH
philipp@9823
   118
$ANDROID update project --path $BUILDPATH
gabomdq@7974
   119
$NDKBUILD -j $NCPUS $NDKARGS
gabomdq@7793
   120
$ANT debug
gabomdq@7793
   121
gabomdq@7793
   122
cd $CURDIR
gabomdq@7793
   123
gabomdq@7793
   124
APK="$BUILDPATH/bin/$APP-debug.apk"
gabomdq@7793
   125
gabomdq@7793
   126
if [ -f "$APK" ]; then
gabomdq@7793
   127
    echo "Your APK is ready at $APK"
gabomdq@7793
   128
    echo "To install to your device: "
gabomdq@7793
   129
    echo "cd  $BUILDPATH"
gabomdq@7793
   130
    echo "ant debug install"
gabomdq@7793
   131
    exit 0
gabomdq@7793
   132
fi
gabomdq@7793
   133
gabomdq@7793
   134
echo "There was an error building the APK"
gabomdq@7793
   135
exit 1