-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathgenerate.py
95 lines (64 loc) · 2.31 KB
/
generate.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#!/usr/bin/python
import os, sys, getopt, json, time
from khrparser.Profile import Profile
from khrparser.gl.GLParser import GLParser
from khrparser.egl.EGLParser import EGLParser
from khrparser.vk.VKParser import VKParser
from khrparser.an.ANParser import ANParser
from khrgenerator.cpp.CPPGenerator import CPPGenerator
def main(argv):
try:
opts, args = getopt.getopt(argv[1:], "p:d:", ["profile=", "directory=" ])
except getopt.GetoptError:
print("usage: %s -p <profile JSON> [-d <output directory>]" % argv[0])
sys.exit(1)
profileFile = None
targetDir = "."
for opt, arg in opts:
if opt in ("-p", "--profile"):
profileFile = arg
if opt in ("-d", "--directory"):
targetDir = arg
if profileFile == None or not os.path.isfile(profileFile):
print("no profile given or not readable")
sys.exit(1)
profile = Profile(json.load(open(profileFile)), targetDir)
parsers = {
"gl": GLParser,
"egl": EGLParser,
"vk": VKParser,
"an": ANParser,
# "idl": IDLParser
}
generators = {
"cpp": CPPGenerator
}
if profile.parserIdentifier in parsers:
khrParser = parsers[profile.parserIdentifier]
else:
print("Parser " + profile.parserIdentifier + " not registered")
sys.exit(1)
if profile.generatorIdentifier in generators:
khrGenerator = generators[profile.generatorIdentifier]
else:
print("Generator " + profile.generatorIdentifier + " not registered")
sys.exit(1)
begin = time.time()
print("Start parsing")
parseBegin = time.time()
api = khrParser.parse(profile)
api = khrParser.patch(api, profile)
api = khrParser.filterAPI(api, profile)
parseEnd = time.time()
print("Parsing took {:.3f} seconds".format(parseEnd - parseBegin))
# api.printSummary()
binding = khrParser.deriveBinding(api, profile)
print("Start template rendering")
generateBegin = time.time()
khrGenerator.generate(profile, api, binding)
generateEnd = time.time()
print("Rendering took {:.3f} seconds".format(generateEnd - generateBegin))
end = time.time()
print("Generation took {:.3f} seconds".format(end - begin))
if __name__ == "__main__":
main(sys.argv)