Add a perl script to generate builtin_function.cpp.

Usage: ./builtins/tools/generate_builtins.pl > builtin_function.cpp
This commit is contained in:
Kenneth Graunke 2010-04-28 23:00:43 -07:00 committed by Ian Romanick
parent a40e68b256
commit 4c7367b3f9
1 changed files with 108 additions and 0 deletions

View File

@ -0,0 +1,108 @@
#!/usr/bin/env perl
sub process_version {
my ($version) = @_;
my @vars;
print "/* Version $version builtins */\n\n";
my @files = <builtins/$version/*>;
foreach $file (@files) {
push(@vars, process_file($file));
}
print "static const char *functions_for_$version [] = {\n";
foreach $var (@vars) {
print " $var,\n";
}
print "};\n\n"
}
sub process_file {
my ($file) = @_;
# Change from builtins/110/foo to builtins_110_foo
my $var = $file; $var =~ s!/!_!g;
print "static const char *$var = {\n";
open SRC, "<", "$file" or die $!;
while (<SRC>) {
s/\\/\\\\/g;
s/\"/\\\"/g;
s/\n/\\n/g;
print " \"$_\"\n";
}
print "};\n\n";
close SRC or die $!;
return $var;
}
print << 'EOF';
/* DO NOT MODIFY - automatically generated by generate_builtins.pl */
/*
* Copyright © 2010 Intel Corporation
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice (including the next
* paragraph) shall be included in all copies or substantial portions of the
* Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*/
#include <stdio.h>
#include "glsl_parser_extras.h"
#include "ir_reader.h"
void
read_builtins(_mesa_glsl_parse_state *st, exec_list *instructions,
const char **functions, unsigned count)
{
if (st->error)
return;
for (unsigned i = 0; i < count; i++) {
_mesa_glsl_read_ir(st, instructions, functions[i]);
if (st->error) {
printf("error reading builtin: %.35s ...\n", functions[i]);
return;
}
}
}
EOF
@versions = sort(<builtins/[1-9][0-9][0-9]>);
foreach $version (@versions) {
$version =~ s!builtins/!!g;
process_version($version);
}
print << 'EOF';
void
_mesa_glsl_initialize_functions(exec_list *instructions,
struct _mesa_glsl_parse_state *state)
{
EOF
foreach $version (@versions) {
print " if (state->language_version >= $version)\n";
print " read_builtins(state, instructions, functions_for_$version,\n";
print " sizeof(functions_for_$version) / ";
print "sizeof(const char *));\n\n"
}
print "}\n";