1*38e8c45fSAndroid Build Coastguard Worker#!/bin/bash 2*38e8c45fSAndroid Build Coastguard Workerset -u 3*38e8c45fSAndroid Build Coastguard Workerset -e 4*38e8c45fSAndroid Build Coastguard Worker 5*38e8c45fSAndroid Build Coastguard Workerif [ -z "$ANDROID_BUILD_TOP" ] ; then 6*38e8c45fSAndroid Build Coastguard Worker echo "ANDROID_BUILD_TOP is not set, did you run lunch?" 7*38e8c45fSAndroid Build Coastguard Worker exit 1 8*38e8c45fSAndroid Build Coastguard Workerfi 9*38e8c45fSAndroid Build Coastguard Worker 10*38e8c45fSAndroid Build Coastguard Worker# Avoid spewing files in any location other than the intended one. 11*38e8c45fSAndroid Build Coastguard Workerif [ ! -x "$PWD/gen" ] ; then 12*38e8c45fSAndroid Build Coastguard Worker echo "Run this script from its parent directory". 13*38e8c45fSAndroid Build Coastguard Worker exit 1 14*38e8c45fSAndroid Build Coastguard Workerfi 15*38e8c45fSAndroid Build Coastguard Worker 16*38e8c45fSAndroid Build Coastguard Workerrm -rf out generated 17*38e8c45fSAndroid Build Coastguard Worker 18*38e8c45fSAndroid Build Coastguard Workermkdir out 19*38e8c45fSAndroid Build Coastguard Worker 20*38e8c45fSAndroid Build Coastguard Worker# Create stub Java files for Android APIs that are used by the code we generate. 21*38e8c45fSAndroid Build Coastguard Worker# This allows us to test the generated code without building the rest of Android. 22*38e8c45fSAndroid Build Coastguard Worker 23*38e8c45fSAndroid Build Coastguard Workermkdir -p out/javax/microedition/khronos/opengles 24*38e8c45fSAndroid Build Coastguard Workermkdir -p out/com/google/android/gles_jni 25*38e8c45fSAndroid Build Coastguard Workermkdir -p out/android/annotation 26*38e8c45fSAndroid Build Coastguard Workermkdir -p out/android/app 27*38e8c45fSAndroid Build Coastguard Workermkdir -p out/android/graphics 28*38e8c45fSAndroid Build Coastguard Workermkdir -p out/android/hardware 29*38e8c45fSAndroid Build Coastguard Workermkdir -p out/android/view 30*38e8c45fSAndroid Build Coastguard Workermkdir -p out/android/opengl 31*38e8c45fSAndroid Build Coastguard Workermkdir -p out/android/content 32*38e8c45fSAndroid Build Coastguard Workermkdir -p out/android/content/pm 33*38e8c45fSAndroid Build Coastguard Workermkdir -p out/android/os 34*38e8c45fSAndroid Build Coastguard Workermkdir -p out/android/util 35*38e8c45fSAndroid Build Coastguard Worker 36*38e8c45fSAndroid Build Coastguard Workerecho "package android.graphics;" > out/android/graphics/Canvas.java 37*38e8c45fSAndroid Build Coastguard Workerecho "public interface Canvas {}" >> out/android/graphics/Canvas.java 38*38e8c45fSAndroid Build Coastguard Worker 39*38e8c45fSAndroid Build Coastguard Workerecho "package android.annotation; public @interface NonNull {}" > out/android/annotation/NonNull.java 40*38e8c45fSAndroid Build Coastguard Workerecho "package android.app; import android.content.pm.IPackageManager; public class AppGlobals { public static IPackageManager getPackageManager() { return null;} }" > out/android/app/AppGlobals.java 41*38e8c45fSAndroid Build Coastguard Worker# echo "package android.content; import android.content.pm.PackageManager; public interface Context { public PackageManager getPackageManager(); }" > out/android/content/Context.java 42*38e8c45fSAndroid Build Coastguard Workerecho "package android.content.pm; public class ApplicationInfo {public int targetSdkVersion;}" > out/android/content/pm/ApplicationInfo.java 43*38e8c45fSAndroid Build Coastguard Workerecho "package android.content.pm; public interface IPackageManager {ApplicationInfo getApplicationInfo(java.lang.String packageName, int flags, java.lang.String userId) throws android.os.RemoteException;}" > out/android/content/pm/IPackageManager.java 44*38e8c45fSAndroid Build Coastguard Workerecho "package android.hardware; import android.os.ParcelFileDescriptor; public class SyncFence { public static SyncFence create(ParcelFileDescriptor w) { return null; } public static SyncFence createEmpty() { return null; } }" > out/android/hardware/SyncFence.java 45*38e8c45fSAndroid Build Coastguard Workerecho "package android.os; public class Build {public static class VERSION_CODES { public static final int CUPCAKE = 0; public static final int R = 0; }; }" > out/android/os/Build.java 46*38e8c45fSAndroid Build Coastguard Workerecho "package android.os; public class ParcelFileDescriptor { public static ParcelFileDescriptor adoptFd(int fd) { return null; } }" > out/android/os/ParcelFileDescriptor.java 47*38e8c45fSAndroid Build Coastguard Workerecho "package android.os; public class UserHandle {public static String myUserId() { return \"\"; } }" > out/android/os/UserHandle.java 48*38e8c45fSAndroid Build Coastguard Workerecho "package android.os; public class RemoteException extends Exception {}" > out/android/os/RemoteException.java 49*38e8c45fSAndroid Build Coastguard Workerecho "package android.util; public class Log {public static void d(String a, String b) {} public static void w(String a, String b) {} public static void e(String a, String b) {}}" > out/android/util/Log.java 50*38e8c45fSAndroid Build Coastguard Worker 51*38e8c45fSAndroid Build Coastguard Workerecho "package android.opengl; public abstract class EGLObjectHandle { public int getHandle() { return 0; } }" > out/android/opengl/EGLObjectHandle.java 52*38e8c45fSAndroid Build Coastguard Worker 53*38e8c45fSAndroid Build Coastguard Workerecho "package android.graphics;" > out/android/graphics/SurfaceTexture.java 54*38e8c45fSAndroid Build Coastguard Workerecho "public interface SurfaceTexture {}" >> out/android/graphics/SurfaceTexture.java 55*38e8c45fSAndroid Build Coastguard Workerecho "package android.view;" > out/android/view/SurfaceView.java 56*38e8c45fSAndroid Build Coastguard Workerecho "public interface SurfaceView { SurfaceHolder getHolder(); }" >> out/android/view/SurfaceView.java 57*38e8c45fSAndroid Build Coastguard Workerecho "package android.view;" > out/android/view/Surface.java 58*38e8c45fSAndroid Build Coastguard Workerecho "public interface Surface {}" >> out/android/view/Surface.java 59*38e8c45fSAndroid Build Coastguard Workerecho "package android.view;" > out/android/view/SurfaceHolder.java 60*38e8c45fSAndroid Build Coastguard Workerecho "public interface SurfaceHolder { Surface getSurface(); }" >> out/android/view/SurfaceHolder.java 61*38e8c45fSAndroid Build Coastguard Worker 62*38e8c45fSAndroid Build Coastguard Workercp static/egl/*.java out/android/opengl/ 63*38e8c45fSAndroid Build Coastguard Worker 64*38e8c45fSAndroid Build Coastguard WorkerGLFILE=out/javax/microedition/khronos/opengles/GL.java 65*38e8c45fSAndroid Build Coastguard Workercp stubs/jsr239/GLHeader.java-if $GLFILE 66*38e8c45fSAndroid Build Coastguard Worker 67*38e8c45fSAndroid Build Coastguard WorkerGLGEN_FILES="CFunc.java CType.java CodeEmitter.java EGLCodeEmitter.java GenerateEGL.java GenerateGL.java GenerateGLES.java GLESCodeEmitter.java JFunc.java JniCodeEmitter.java JType.java Jsr239CodeEmitter.java ParameterChecker.java" 68*38e8c45fSAndroid Build Coastguard Worker 69*38e8c45fSAndroid Build Coastguard Workerpushd src > /dev/null 70*38e8c45fSAndroid Build Coastguard Workerjavac ${GLGEN_FILES} 71*38e8c45fSAndroid Build Coastguard WorkerJAVAC_RESULT=$? 72*38e8c45fSAndroid Build Coastguard Workerif [ $JAVAC_RESULT -ne 0 ]; then 73*38e8c45fSAndroid Build Coastguard Worker echo "Could not compile glgen." 74*38e8c45fSAndroid Build Coastguard Worker exit $JAVAC_RESULT 75*38e8c45fSAndroid Build Coastguard Workerfi 76*38e8c45fSAndroid Build Coastguard Workerpopd > /dev/null 77*38e8c45fSAndroid Build Coastguard Worker 78*38e8c45fSAndroid Build Coastguard Workerecho "Generating JSR239-like APIs" 79*38e8c45fSAndroid Build Coastguard Workerjava -classpath src GenerateGL -c specs/jsr239/glspec-1.0 \ 80*38e8c45fSAndroid Build Coastguard Worker specs/jsr239/glspec-1.0ext \ 81*38e8c45fSAndroid Build Coastguard Worker specs/jsr239/glspec-1.1 \ 82*38e8c45fSAndroid Build Coastguard Worker specs/jsr239/glspec-1.1ext \ 83*38e8c45fSAndroid Build Coastguard Worker specs/jsr239/glspec-1.1extpack \ 84*38e8c45fSAndroid Build Coastguard Worker specs/jsr239/glspec-checks 85*38e8c45fSAndroid Build Coastguard WorkerJAVA_RESULT=$? 86*38e8c45fSAndroid Build Coastguard Workerif [ $JAVA_RESULT -ne 0 ]; then 87*38e8c45fSAndroid Build Coastguard Worker echo "Could not run GenerateGL." 88*38e8c45fSAndroid Build Coastguard Worker exit $JAVA_RESULT 89*38e8c45fSAndroid Build Coastguard Workerfi 90*38e8c45fSAndroid Build Coastguard Worker 91*38e8c45fSAndroid Build Coastguard Workerecho "Generating static OpenGLES bindings" 92*38e8c45fSAndroid Build Coastguard Workerjava -classpath src GenerateGLES 93*38e8c45fSAndroid Build Coastguard WorkerJAVA_RESULT=$? 94*38e8c45fSAndroid Build Coastguard Workerif [ $JAVA_RESULT -ne 0 ]; then 95*38e8c45fSAndroid Build Coastguard Worker echo "Could not run GenerateGLES." 96*38e8c45fSAndroid Build Coastguard Worker exit $JAVA_RESULT 97*38e8c45fSAndroid Build Coastguard Workerfi 98*38e8c45fSAndroid Build Coastguard Worker 99*38e8c45fSAndroid Build Coastguard Workerecho "Generating static EGL bindings" 100*38e8c45fSAndroid Build Coastguard Workerjava -classpath src GenerateEGL 101*38e8c45fSAndroid Build Coastguard WorkerJAVA_RESULT=$? 102*38e8c45fSAndroid Build Coastguard Workerif [ $JAVA_RESULT -ne 0 ]; then 103*38e8c45fSAndroid Build Coastguard Worker echo "Could not run GenerateEGL." 104*38e8c45fSAndroid Build Coastguard Worker exit $JAVA_RESULT 105*38e8c45fSAndroid Build Coastguard Workerfi 106*38e8c45fSAndroid Build Coastguard Worker 107*38e8c45fSAndroid Build Coastguard Workerrm src/*.class 108*38e8c45fSAndroid Build Coastguard Worker 109*38e8c45fSAndroid Build Coastguard Worker# Add UnsupportedAppUsage.java to known sources. 110*38e8c45fSAndroid Build Coastguard Workermkdir -p out/android/compat/annotation 111*38e8c45fSAndroid Build Coastguard Workercp ${ANDROID_BUILD_TOP}/tools/platform-compat/java/android/compat/annotation/UnsupportedAppUsage.java out/android/compat/annotation 112*38e8c45fSAndroid Build Coastguard Worker 113*38e8c45fSAndroid Build Coastguard Workerpushd out > /dev/null 114*38e8c45fSAndroid Build Coastguard Workermkdir classes 115*38e8c45fSAndroid Build Coastguard Workerjavac -d classes android/opengl/EGL14.java \ 116*38e8c45fSAndroid Build Coastguard Worker android/opengl/EGL15.java \ 117*38e8c45fSAndroid Build Coastguard Worker android/opengl/EGLExt.java \ 118*38e8c45fSAndroid Build Coastguard Worker com/google/android/gles_jni/GLImpl.java \ 119*38e8c45fSAndroid Build Coastguard Worker javax/microedition/khronos/opengles/GL10.java \ 120*38e8c45fSAndroid Build Coastguard Worker javax/microedition/khronos/opengles/GL10Ext.java \ 121*38e8c45fSAndroid Build Coastguard Worker javax/microedition/khronos/opengles/GL11.java \ 122*38e8c45fSAndroid Build Coastguard Worker javax/microedition/khronos/opengles/GL11Ext.java \ 123*38e8c45fSAndroid Build Coastguard Worker javax/microedition/khronos/opengles/GL11ExtensionPack.java \ 124*38e8c45fSAndroid Build Coastguard Worker android/opengl/GLES10.java \ 125*38e8c45fSAndroid Build Coastguard Worker android/opengl/GLES10Ext.java \ 126*38e8c45fSAndroid Build Coastguard Worker android/opengl/GLES11.java \ 127*38e8c45fSAndroid Build Coastguard Worker android/opengl/GLES11Ext.java \ 128*38e8c45fSAndroid Build Coastguard Worker android/opengl/GLES20.java \ 129*38e8c45fSAndroid Build Coastguard Worker android/opengl/GLES30.java \ 130*38e8c45fSAndroid Build Coastguard Worker android/opengl/GLES31.java \ 131*38e8c45fSAndroid Build Coastguard Worker android/opengl/GLES31Ext.java \ 132*38e8c45fSAndroid Build Coastguard Worker android/opengl/GLES32.java \ 133*38e8c45fSAndroid Build Coastguard Worker android/compat/annotation/UnsupportedAppUsage.java 134*38e8c45fSAndroid Build Coastguard Workerpopd > /dev/null 135*38e8c45fSAndroid Build Coastguard WorkerJAVA_RESULT=$? 136*38e8c45fSAndroid Build Coastguard Workerif [ $JAVA_RESULT -ne 0 ]; then 137*38e8c45fSAndroid Build Coastguard Worker echo "Could not compile generated classes." 138*38e8c45fSAndroid Build Coastguard Worker exit $JAVA_RESULT 139*38e8c45fSAndroid Build Coastguard Workerfi 140*38e8c45fSAndroid Build Coastguard Worker 141*38e8c45fSAndroid Build Coastguard Workerrm -rf generated 142*38e8c45fSAndroid Build Coastguard Workermkdir -p generated/C 143*38e8c45fSAndroid Build Coastguard Workercp out/com_google_android_gles_jni_GLImpl.cpp generated/C 144*38e8c45fSAndroid Build Coastguard Workercp -r out/com generated 145*38e8c45fSAndroid Build Coastguard Workercp -r out/javax generated 146*38e8c45fSAndroid Build Coastguard Worker 147*38e8c45fSAndroid Build Coastguard Workercp out/android_opengl_*.cpp generated/C 148*38e8c45fSAndroid Build Coastguard Workermkdir -p generated/android/opengl 149*38e8c45fSAndroid Build Coastguard Workercp -r out/android/opengl generated/android 150*38e8c45fSAndroid Build Coastguard Worker 151*38e8c45fSAndroid Build Coastguard Workerrm -rf out 152*38e8c45fSAndroid Build Coastguard WorkerKEEP_GENERATED=0 153*38e8c45fSAndroid Build Coastguard WorkerSAID_PLEASE=0 154*38e8c45fSAndroid Build Coastguard Worker 155*38e8c45fSAndroid Build Coastguard Worker# compareGenerated destDir generatedDir file 156*38e8c45fSAndroid Build Coastguard WorkercompareGenerated() { 157*38e8c45fSAndroid Build Coastguard Worker if cmp -s $1/$3 $2/$3 ; then 158*38e8c45fSAndroid Build Coastguard Worker echo "# " $3 unchanged 159*38e8c45fSAndroid Build Coastguard Worker else 160*38e8c45fSAndroid Build Coastguard Worker echo "# " $3 changed 161*38e8c45fSAndroid Build Coastguard Worker if [ $SAID_PLEASE == "0" ] ; then 162*38e8c45fSAndroid Build Coastguard Worker echo Please evaluate the following commands: 163*38e8c45fSAndroid Build Coastguard Worker echo 164*38e8c45fSAndroid Build Coastguard Worker SAID_PLEASE=1 165*38e8c45fSAndroid Build Coastguard Worker fi 166*38e8c45fSAndroid Build Coastguard Worker echo " cp $2/$3 $1/$3" 167*38e8c45fSAndroid Build Coastguard Worker echo " (cd $1; git add $3)" 168*38e8c45fSAndroid Build Coastguard Worker KEEP_GENERATED=1 169*38e8c45fSAndroid Build Coastguard Worker fi 170*38e8c45fSAndroid Build Coastguard Worker} 171*38e8c45fSAndroid Build Coastguard Worker 172*38e8c45fSAndroid Build Coastguard WorkercompareGenerated ${ANDROID_BUILD_TOP}/frameworks/base/core/jni generated/C com_google_android_gles_jni_GLImpl.cpp 173*38e8c45fSAndroid Build Coastguard WorkercompareGenerated ${ANDROID_BUILD_TOP}/frameworks/base/opengl/java/com/google/android/gles_jni generated/com/google/android/gles_jni GLImpl.java 174*38e8c45fSAndroid Build Coastguard Worker 175*38e8c45fSAndroid Build Coastguard Workerfor x in GL.java GL10.java GL10Ext.java GL11.java GL11Ext.java GL11ExtensionPack.java 176*38e8c45fSAndroid Build Coastguard Workerdo 177*38e8c45fSAndroid Build Coastguard Worker compareGenerated ${ANDROID_BUILD_TOP}/frameworks/base/opengl/java/javax/microedition/khronos/opengles generated/javax/microedition/khronos/opengles $x 178*38e8c45fSAndroid Build Coastguard Workerdone 179*38e8c45fSAndroid Build Coastguard Worker 180*38e8c45fSAndroid Build Coastguard Workerfor x in EGL14 EGL15 EGLExt GLES10 GLES10Ext GLES11 GLES11Ext GLES20 GLES30 GLES31 GLES31Ext GLES32 181*38e8c45fSAndroid Build Coastguard Workerdo 182*38e8c45fSAndroid Build Coastguard Worker compareGenerated ${ANDROID_BUILD_TOP}/frameworks/base/opengl/java/android/opengl generated/android/opengl ${x}.java 183*38e8c45fSAndroid Build Coastguard Worker compareGenerated ${ANDROID_BUILD_TOP}/frameworks/base/core/jni generated/C android_opengl_${x}.cpp 184*38e8c45fSAndroid Build Coastguard Workerdone 185*38e8c45fSAndroid Build Coastguard Worker 186*38e8c45fSAndroid Build Coastguard Workerfor x in EGLConfig EGLContext EGLDisplay EGLObjectHandle EGLSurface EGLImage EGLSync 187*38e8c45fSAndroid Build Coastguard Workerdo 188*38e8c45fSAndroid Build Coastguard Worker compareGenerated ${ANDROID_BUILD_TOP}/frameworks/base/opengl/java/android/opengl generated/android/opengl ${x}.java 189*38e8c45fSAndroid Build Coastguard Workerdone 190*38e8c45fSAndroid Build Coastguard Worker 191*38e8c45fSAndroid Build Coastguard Workerif [ $KEEP_GENERATED == "0" ] ; then 192*38e8c45fSAndroid Build Coastguard Worker rm -rf generated 193*38e8c45fSAndroid Build Coastguard Workerfi 194