generate_builtins.py: Output large strings as arrays of characters.
authorKenneth Graunke <kenneth@whitecape.org>
Thu, 21 Oct 2010 18:42:45 +0000 (11:42 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Thu, 21 Oct 2010 18:45:38 +0000 (11:45 -0700)
This works around MSVC's 65535 byte limit, unfortunately at the expense
of any semblance of readability and much larger file size.  Hopefully I
can implement a better solution later, but for now this fixes the build.

src/glsl/builtins/tools/generate_builtins.py

index e8191ee9fdc9d786568b4eb3510a24432304297f..9bde17157afe0c2f1d7381199694bab35ddc7542 100755 (executable)
@@ -25,13 +25,25 @@ def get_builtin_definitions():
     return fs
 
 def stringify(s):
+    # Work around MSVC's 65535 byte limit by outputting an array of characters
+    # rather than actual string literals.
+    if len(s) >= 65535:
+        #t = "/* Warning: length " + repr(len(s)) + " too large */\n"
+       t = ""
+        for c in re.sub('\s\s+', ' ', s):
+            if c == '\n':
+               t += '\n'
+            else:
+               t += "'" + c + "',"
+        return '{' + t[:-1] + '}'
+
     t = s.replace('\\', '\\\\').replace('"', '\\"').replace('\n', '\\n"\n   "')
     return '   "' + t + '"\n'
 
 def write_function_definitions():
     fs = get_builtin_definitions()
     for k, v in sorted(fs.iteritems()):
-        print 'static const char *builtin_' + k + ' ='
+        print 'static const char builtin_' + k + '[] ='
         print stringify(v), ';'
 
 def run_compiler(args):
@@ -64,7 +76,7 @@ def write_profile(filename, profile):
     # clutter the diff output.
     proto_ir = re.sub(r'@0x[0-9a-f]+', '', proto_ir);
 
-    print 'static const char *prototypes_for_' + profile + ' ='
+    print 'static const char prototypes_for_' + profile + '[] ='
     print stringify(proto_ir), ';'
 
     # Print a table of all the functions (not signatures) referenced.