diff options
author | Kenneth Graunke <[email protected]> | 2010-10-21 11:42:45 -0700 |
---|---|---|
committer | Kenneth Graunke <[email protected]> | 2010-10-21 11:45:38 -0700 |
commit | 2cacaf6e7b9bc38efd47413b5e667b6e750698b8 (patch) | |
tree | 3819162a5f0275548877b01cd58bff10ed1b250a /src/glsl | |
parent | 50095ac87c9a57e2b87220401c2dbdb255cabb4b (diff) |
generate_builtins.py: Output large strings as arrays of characters.
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.
Diffstat (limited to 'src/glsl')
-rwxr-xr-x | src/glsl/builtins/tools/generate_builtins.py | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/src/glsl/builtins/tools/generate_builtins.py b/src/glsl/builtins/tools/generate_builtins.py index e8191ee9fdc..9bde17157af 100755 --- a/src/glsl/builtins/tools/generate_builtins.py +++ b/src/glsl/builtins/tools/generate_builtins.py @@ -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. |