115a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root/* 215a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * Copyright (C) 2006 The Android Open Source Project 315a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * 415a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * Licensed under the Apache License, Version 2.0 (the "License"); 515a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * you may not use this file except in compliance with the License. 615a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * You may obtain a copy of the License at 715a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * 815a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * http://www.apache.org/licenses/LICENSE-2.0 915a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * 1015a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * Unless required by applicable law or agreed to in writing, software 1115a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * distributed under the License is distributed on an "AS IS" BASIS, 1215a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1315a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * See the License for the specific language governing permissions and 1415a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * limitations under the License. 1515a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root */ 161c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich 171c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevichimport java.io.BufferedReader; 181c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevichimport java.io.File; 191c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevichimport java.io.FileOutputStream; 201c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevichimport java.io.FileReader; 211c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevichimport java.io.IOException; 221c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevichimport java.io.PrintStream; 231c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich 241c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevichpublic class GenerateGL { 251c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich 261c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich static void copy(String filename, PrintStream out) throws IOException { 271c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich BufferedReader br = new BufferedReader(new FileReader(filename)); 281c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich String s; 291c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich while ((s = br.readLine()) != null) { 301c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich out.println(s); 311c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich } 321c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich } 331c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich 341c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich private static void emit(int version, boolean ext, boolean pack, 351c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich CodeEmitter emitter, 361c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich BufferedReader specReader, 371c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich PrintStream glStream, 381c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich PrintStream glImplStream, 391c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich PrintStream cStream) throws Exception { 401c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich String s = null; 411c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich while ((s = specReader.readLine()) != null) { 421c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich if (s.trim().startsWith("//")) { 431c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich continue; 441c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich } 451c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich 461c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich CFunc cfunc = CFunc.parseCFunc(s); 471c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich 481c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich String fname = cfunc.getName(); 491c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich File f = new File("stubs/jsr239/" + fname + 501c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich ".java-1" + version + "-if"); 511c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich if (f.exists()) { 521c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich System.out.println("Special-casing function " + fname); 531c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich copy("stubs/jsr239/" + fname + 541c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich ".java-1" + version + "-if", glStream); 551c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich copy("stubs/jsr239/" + fname + ".java-impl", glImplStream); 561c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich copy("stubs/jsr239/" + fname + ".cpp", cStream); 571c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich 581c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich // Register native function names 591c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich // This should be improved to require fewer discrete files 601c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich String filename = "stubs/jsr239/" + fname + ".nativeReg"; 611c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich BufferedReader br = 621c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich new BufferedReader(new FileReader(filename)); 631c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich String nfunc; 641c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich while ((nfunc = br.readLine()) != null) { 651c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich emitter.addNativeRegistration(nfunc); 661c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich } 671c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich } else { 681c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich emitter.setVersion(version, ext, pack); 691c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich emitter.emitCode(cfunc, s); 701c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich } 711c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich } 721c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich } 731c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich 741c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich public static void main(String[] args) throws Exception { 751c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich String classPathName = "com/google/android/gles_jni/GLImpl"; 761c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich boolean useContextPointer = true; 771c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich 781c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich int aidx = 0; 791c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich while (args[aidx].charAt(0) == '-') { 801c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich switch (args[aidx].charAt(1)) { 811c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich case 'c': 821c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich useContextPointer = false; 831c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich break; 841c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich 851c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich default: 861c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich System.err.println("Unknown flag: " + args[aidx]); 871c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich System.exit(1); 881c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich } 891c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich 901c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich aidx++; 911c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich } 921c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich 931c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich System.out.println("useContextPointer = " + useContextPointer); 941c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich 951c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich BufferedReader spec10Reader = 961c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich new BufferedReader(new FileReader(args[aidx++])); 971c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich BufferedReader spec10ExtReader = 981c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich new BufferedReader(new FileReader(args[aidx++])); 991c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich BufferedReader spec11Reader = 1001c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich new BufferedReader(new FileReader(args[aidx++])); 1011c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich BufferedReader spec11ExtReader = 1021c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich new BufferedReader(new FileReader(args[aidx++])); 1031c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich BufferedReader spec11ExtPackReader = 1041c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich new BufferedReader(new FileReader(args[aidx++])); 1051c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich BufferedReader checksReader = 1061c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich new BufferedReader(new FileReader(args[aidx++])); 1071c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich 1081c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich String gl10Filename = "javax/microedition/khronos/opengles/GL10.java"; 1091c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich String gl10ExtFilename = 1101c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich "javax/microedition/khronos/opengles/GL10Ext.java"; 1111c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich String gl11Filename = "javax/microedition/khronos/opengles/GL11.java"; 1121c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich String gl11ExtFilename = 1131c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich "javax/microedition/khronos/opengles/GL11Ext.java"; 1141c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich String gl11ExtPackFilename = 1151c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich "javax/microedition/khronos/opengles/GL11ExtensionPack.java"; 1161c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich String glImplFilename = "com/google/android/gles_jni/GLImpl.java"; 1171c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich String cFilename = "com_google_android_gles_jni_GLImpl.cpp"; 1181c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich 1191c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich PrintStream gl10Stream = 1201c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich new PrintStream(new FileOutputStream("out/" + gl10Filename)); 1211c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich PrintStream gl10ExtStream = 1221c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich new PrintStream(new FileOutputStream("out/" + gl10ExtFilename)); 1231c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich PrintStream gl11Stream = 1241c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich new PrintStream(new FileOutputStream("out/" + gl11Filename)); 1251c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich PrintStream gl11ExtStream = 1261c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich new PrintStream(new FileOutputStream("out/" + gl11ExtFilename)); 1271c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich PrintStream gl11ExtPackStream = 1281c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich new PrintStream(new FileOutputStream("out/" + gl11ExtPackFilename)); 1291c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich PrintStream glImplStream = 1301c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich new PrintStream(new FileOutputStream("out/" + glImplFilename)); 1311c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich PrintStream cStream = 1321c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich new PrintStream(new FileOutputStream("out/" + cFilename)); 1331c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich 1341c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich ParameterChecker checker = new ParameterChecker(checksReader); 1351c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich 1361c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich CodeEmitter emitter = 1371c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich new Jsr239CodeEmitter(classPathName, 1381c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich checker, 1391c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich gl10Stream, gl10ExtStream, 1401c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich gl11Stream, gl11ExtStream, gl11ExtPackStream, 1411c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich glImplStream, cStream, 1421c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich useContextPointer); 1431c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich 1441c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich gl10Stream.println("/* //device/java/android/" + gl10Filename); 1451c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich gl10ExtStream.println("/* //device/java/android/" + gl10ExtFilename); 1461c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich gl11Stream.println("/* //device/java/android/" + gl11Filename); 1471c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich gl11ExtStream.println("/* //device/java/android/" + gl11ExtFilename); 1481c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich gl11ExtPackStream.println("/* //device/java/android/" + 1491c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich gl11ExtPackFilename); 1501c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich glImplStream.println("/* //device/java/android/" + glImplFilename); 1511c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich cStream.println("/* //device/libs/android_runtime/" + cFilename); 1521c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich 1531c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich copy("stubs/jsr239/GL10Header.java-if", gl10Stream); 1541c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich copy("stubs/jsr239/GL10ExtHeader.java-if", gl10ExtStream); 1551c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich copy("stubs/jsr239/GL11Header.java-if", gl11Stream); 1561c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich copy("stubs/jsr239/GL11ExtHeader.java-if", gl11ExtStream); 1571c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich copy("stubs/jsr239/GL11ExtensionPackHeader.java-if", gl11ExtPackStream); 1581c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich copy("stubs/jsr239/GLImplHeader.java-impl", glImplStream); 1591c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich copy("stubs/jsr239/GLCHeader.cpp", cStream); 1601c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich 1611c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich emit(0, false, false, 1621c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich emitter, spec10Reader, gl10Stream, glImplStream, cStream); 1631c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich emit(0, true, false, 1641c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich emitter, spec10ExtReader, gl10ExtStream, glImplStream, cStream); 1651c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich emit(1, false, false, 1661c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich emitter, spec11Reader, gl11Stream, glImplStream, cStream); 1671c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich emit(1, true, false, 1681c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich emitter, spec11ExtReader, gl11ExtStream, glImplStream, cStream); 1691c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich emit(1, true, true, 1701c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich emitter, spec11ExtPackReader, gl11ExtPackStream, glImplStream, 1711c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich cStream); 1721c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich 1731c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich emitter.emitNativeRegistration(); 1741c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich 1751c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich gl10Stream.println("}"); 1761c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich gl10ExtStream.println("}"); 1771c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich gl11Stream.println("}"); 1781c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich gl11ExtStream.println("}"); 1791c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich gl11ExtPackStream.println("}"); 1801c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich glImplStream.println("}"); 1811c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich } 1821c4907ee77392afb768c2f088e0dedbe4239f6fbJack Palevich} 183