| /* |
| * Copyright 2012 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| import java.io.BufferedReader; |
| import java.io.File; |
| import java.io.FileOutputStream; |
| import java.io.FileReader; |
| import java.io.IOException; |
| import java.io.PrintStream; |
| |
| public class GenerateEGL { |
| |
| private static void copy(String filename, PrintStream out) throws IOException { |
| BufferedReader br = new BufferedReader(new FileReader(filename)); |
| String s; |
| while ((s = br.readLine()) != null) { |
| out.println(s); |
| } |
| } |
| |
| private static void emit(EGLCodeEmitter emitter, |
| BufferedReader specReader, |
| PrintStream glStream, |
| PrintStream cStream) throws Exception { |
| String s = null; |
| while ((s = specReader.readLine()) != null) { |
| if (s.trim().startsWith("//")) { |
| continue; |
| } |
| |
| CFunc cfunc = CFunc.parseCFunc(s); |
| |
| String fname = cfunc.getName(); |
| String stubRoot = "stubs/egl/" + fname; |
| String javaPath = stubRoot + ".java"; |
| File f = new File(javaPath); |
| if (f.exists()) { |
| System.out.println("Special-casing function " + fname); |
| copy(javaPath, glStream); |
| copy(stubRoot + ".cpp", cStream); |
| |
| // Register native function names |
| // This should be improved to require fewer discrete files |
| String filename = stubRoot + ".nativeReg"; |
| BufferedReader br = |
| new BufferedReader(new FileReader(filename)); |
| String nfunc; |
| while ((nfunc = br.readLine()) != null) { |
| emitter.addNativeRegistration(nfunc); |
| } |
| } else { |
| emitter.emitCode(cfunc, s); |
| } |
| } |
| } |
| |
| public static void main(String[] args) throws Exception { |
| int aidx = 0; |
| while ((aidx < args.length) && (args[aidx].charAt(0) == '-')) { |
| switch (args[aidx].charAt(1)) { |
| default: |
| System.err.println("Unknown flag: " + args[aidx]); |
| System.exit(1); |
| } |
| |
| aidx++; |
| } |
| |
| BufferedReader checksReader = |
| new BufferedReader(new FileReader("specs/egl/checks.spec")); |
| ParameterChecker checker = new ParameterChecker(checksReader); |
| |
| |
| BufferedReader specReader = |
| new BufferedReader(new FileReader("specs/egl/EGL14.spec")); |
| |
| String egljFilename = "android/opengl/EGL14.java"; |
| String eglcFilename = "android_opengl_EGL14.cpp"; |
| PrintStream egljStream = |
| new PrintStream(new FileOutputStream("out/" + egljFilename)); |
| PrintStream eglcStream = |
| new PrintStream(new FileOutputStream("out/" + eglcFilename)); |
| egljStream.println("/*"); |
| eglcStream.println("/*"); |
| copy("stubs/egl/EGL14Header.java-if", egljStream); |
| copy("stubs/egl/EGL14cHeader.cpp", eglcStream); |
| EGLCodeEmitter emitter = new EGLCodeEmitter( |
| "android/opengl/EGL14", |
| checker, egljStream, eglcStream); |
| emit(emitter, specReader, egljStream, eglcStream); |
| emitter.emitNativeRegistration("register_android_opengl_jni_EGL14"); |
| egljStream.println("}"); |
| egljStream.close(); |
| eglcStream.close(); |
| } |
| } |