9875750593
Just use jniThrowException instead. Note that it would be trivial to throw seemingly more appropriate exceptions (NullPointerException and OutOfMemoryException in particular), but I'm only attempting to preserve existing behavior here. I also found shadowing bugs in some of the special-case functions, which would previously always have leaked memory. This also moves an accidental change to a generated file (ActivityThread -> AppGlobals) into the generator, so it won't be overwritten in future. Change-Id: Iab570310b568cb406c60dd0e2b8211f8a36ae590
121 lines
4.7 KiB
Bash
Executable File
121 lines
4.7 KiB
Bash
Executable File
#!/bin/bash
|
|
set -u
|
|
set -e
|
|
rm -rf out generated
|
|
|
|
mkdir out
|
|
|
|
# Create dummy Java files for Android APIs that are used by the code we generate.
|
|
# This allows us to test the generated code without building the rest of Android.
|
|
|
|
mkdir -p out/javax/microedition/khronos/opengles
|
|
mkdir -p out/com/google/android/gles_jni
|
|
mkdir -p out/android/app
|
|
mkdir -p out/android/graphics
|
|
mkdir -p out/android/opengl
|
|
mkdir -p out/android/content
|
|
mkdir -p out/android/content/pm
|
|
mkdir -p out/android/os
|
|
mkdir -p out/android/util
|
|
|
|
echo "package android.graphics;" > out/android/graphics/Canvas.java
|
|
echo "public interface Canvas {}" >> out/android/graphics/Canvas.java
|
|
|
|
echo "package android.app; import android.content.pm.IPackageManager; public class AppGlobals { public static IPackageManager getPackageManager() { return null;} }" > out/android/app/AppGlobals.java
|
|
# echo "package android.content; import android.content.pm.PackageManager; public interface Context { public PackageManager getPackageManager(); }" > out/android/content/Context.java
|
|
echo "package android.content.pm; public class ApplicationInfo {public int targetSdkVersion;}" > out/android/content/pm/ApplicationInfo.java
|
|
echo "package android.content.pm; public interface IPackageManager {ApplicationInfo getApplicationInfo(java.lang.String packageName, int flags) throws android.os.RemoteException;}" > out/android/content/pm/IPackageManager.java
|
|
echo "package android.os; public class Build {public static class VERSION_CODES { public static final int CUPCAKE = 3;}; }" > out/android/os/Build.java
|
|
echo "package android.os; public class RemoteException extends Exception {}" > out/android/os/RemoteException.java
|
|
echo "package android.util; public class Log {public static void w(String a, String b) {} public static void e(String a, String b) {}}" > out/android/util/Log.java
|
|
|
|
GLFILE=out/javax/microedition/khronos/opengles/GL.java
|
|
cp stubs/jsr239/GLHeader.java-if $GLFILE
|
|
|
|
GLGEN_FILES="CFunc.java CType.java CodeEmitter.java GenerateGL.java GenerateGLES.java GLESCodeEmitter.java JFunc.java JniCodeEmitter.java JType.java Jsr239CodeEmitter.java ParameterChecker.java"
|
|
|
|
pushd src > /dev/null
|
|
javac ${GLGEN_FILES}
|
|
JAVAC_RESULT=$?
|
|
if [ $JAVAC_RESULT -ne 0 ]; then
|
|
echo "Could not compile glgen."
|
|
exit $JAVAC_RESULT
|
|
fi
|
|
popd > /dev/null
|
|
|
|
echo "Generating JSR239-like APIs"
|
|
java -classpath src GenerateGL -c specs/jsr239/glspec-1.0 specs/jsr239/glspec-1.0ext specs/jsr239/glspec-1.1 specs/jsr239/glspec-1.1ext specs/jsr239/glspec-1.1extpack specs/jsr239/glspec-checks
|
|
JAVA_RESULT=$?
|
|
if [ $JAVA_RESULT -ne 0 ]; then
|
|
echo "Could not run GenerateGL."
|
|
exit $JAVA_RESULT
|
|
fi
|
|
|
|
echo "Generating static OpenGLES 1.1 bindings"
|
|
java -classpath src GenerateGLES
|
|
JAVA_RESULT=$?
|
|
if [ $JAVA_RESULT -ne 0 ]; then
|
|
echo "Could not run GenerateGLES."
|
|
exit $JAVA_RESULT
|
|
fi
|
|
|
|
rm src/*.class
|
|
|
|
pushd out > /dev/null
|
|
mkdir classes
|
|
javac -d classes com/google/android/gles_jni/GLImpl.java javax/microedition/khronos/opengles/GL10.java javax/microedition/khronos/opengles/GL10Ext.java javax/microedition/khronos/opengles/GL11.java javax/microedition/khronos/opengles/GL11Ext.java javax/microedition/khronos/opengles/GL11ExtensionPack.java android/opengl/GLES10.java android/opengl/GLES10Ext.java android/opengl/GLES11.java android/opengl/GLES11Ext.java android/opengl/GLES20.java
|
|
popd > /dev/null
|
|
JAVA_RESULT=$?
|
|
if [ $JAVA_RESULT -ne 0 ]; then
|
|
echo "Could not compile generated classes."
|
|
exit $JAVA_RESULT
|
|
fi
|
|
|
|
rm -rf generated
|
|
mkdir -p generated/C
|
|
cp out/com_google_android_gles_jni_GLImpl.cpp generated/C
|
|
cp -r out/com generated
|
|
cp -r out/javax generated
|
|
|
|
cp out/android_opengl_*.cpp generated/C
|
|
mkdir -p generated/android/opengl
|
|
cp -r out/android/opengl generated/android
|
|
|
|
rm -rf out
|
|
KEEP_GENERATED=0
|
|
SAID_PLEASE=0
|
|
|
|
# compareGenerated destDir generatedDir file
|
|
compareGenerated() {
|
|
if cmp -s $1/$3 $2/$3 ; then
|
|
echo "# " $3 unchanged
|
|
else
|
|
if [ $SAID_PLEASE == "0" ] ; then
|
|
echo Please evaluate the following commands:
|
|
echo
|
|
SAID_PLEASE=1
|
|
fi
|
|
echo " " cp $2/$3 $1
|
|
echo " " git add $1/$3
|
|
KEEP_GENERATED=1
|
|
fi
|
|
}
|
|
|
|
compareGenerated ../../../core/jni generated/C com_google_android_gles_jni_GLImpl.cpp
|
|
compareGenerated ../../java/com/google/android/gles_jni generated/com/google/android/gles_jni GLImpl.java
|
|
|
|
for x in GL.java GL10.java GL10Ext.java GL11.java GL11Ext.java GL11ExtensionPack.java
|
|
do
|
|
compareGenerated ../../java/javax/microedition/khronos/opengles generated/javax/microedition/khronos/opengles $x
|
|
done
|
|
|
|
for x in GLES10 GLES10Ext GLES11 GLES11Ext GLES20
|
|
do
|
|
compareGenerated ../../java/android/opengl generated/android/opengl ${x}.java
|
|
compareGenerated ../../../core/jni generated/C android_opengl_${x}.cpp
|
|
done
|
|
|
|
if [ $KEEP_GENERATED == "0" ] ; then
|
|
rm -rf generated
|
|
fi
|