xref: /aosp_15_r20/frameworks/native/opengl/tools/glgen/gen (revision 38e8c45f13ce32b0dcecb25141ffecaf386fa17f)
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