[Mesa-dev] [PATCH] glsl: Autogenerate builtin_functions.cpp as part of the build process.
José Fonseca
jfonseca at vmware.com
Tue Jan 11 09:30:49 PST 2011
This breaks cross-compilation because builtin_function.cpp needs to be
built with the native compiler, instead of the cross compiler.
I see there is a python program too. Is this native program unavoidable?
Jose
On Sat, 2011-01-08 at 21:53 -0800, Kenneth Graunke wrote:
> Now that this works with both make and SCons, builtin_function.cpp no
> longer needs to live in the repository.
> ---
> src/glsl/.gitignore | 1 +
> src/glsl/Makefile | 16 +-
> src/glsl/SConscript | 24 +-
> src/glsl/builtin_function.cpp |13637 --------------------------
> src/glsl/builtins/tools/generate_builtins.py | 11 +-
> 7 files changed, 78 insertions(+), 13687 deletions(-)
>
> glsl/builtin_function.cpp -> deleted
> glsl/builtins/tools/builtin_function.cpp -> renamed as glsl/builtin_stubs.cpp
>
> diff --git a/src/glsl/.gitignore b/src/glsl/.gitignore
> index 4c21231..162ed42 100644
> --- a/src/glsl/.gitignore
> +++ b/src/glsl/.gitignore
> @@ -1,2 +1,3 @@
> glsl_compiler
> glsl_parser.output
> +builtin_function.cpp
> diff --git a/src/glsl/Makefile b/src/glsl/Makefile
> index 86a577e..93b3bc3 100644
> --- a/src/glsl/Makefile
> +++ b/src/glsl/Makefile
> @@ -133,10 +133,11 @@ default: depend lib$(LIBNAME).a $(APPS)
> lib$(LIBNAME).a: $(OBJECTS) Makefile $(TOP)/src/glsl/Makefile.template
> $(MKLIB) -cplusplus -o $(LIBNAME) -static $(OBJECTS)
>
> -depend: $(ALL_SOURCES) Makefile
> +DEPEND_SOURCES=$(subst builtin_function.cpp,,$(ALL_SOURCES))
> +depend: $(DEPEND_SOURCES) Makefile
> rm -f depend
> touch depend
> - $(MKDEP) $(MKDEP_OPTIONS) $(INCLUDES) $(ALL_SOURCES) 2> /dev/null
> + $(MKDEP) $(MKDEP_OPTIONS) $(INCLUDES) $(DEPEND_SOURCES) 2> /dev/null
>
> # Remove .o and backup files
> clean:
> @@ -174,13 +175,12 @@ glcpp/glcpp-lex.c: glcpp/glcpp-lex.l
> glcpp/glcpp-parse.c: glcpp/glcpp-parse.y
> bison -v -o "$@" --defines=glcpp/glcpp-parse.h $<
>
> -builtins: builtin_function.cpp builtins/profiles/* builtins/ir/* builtins/tools/generate_builtins.py
> builtins/tools/texture_builtins.py
> +BUILTIN_OBJECTS = $(subst builtin_function,builtin_stubs,$(OBJECTS)) $(GLSL2_OBJECTS)
> +builtin_function.cpp: builtins/profiles/* builtins/ir/* builtins/tools/generate_builtins.py
> builtins/tools/texture_builtins.py $(BUILTIN_OBJECTS)
> @echo Bootstrapping the compiler...
> - cp builtins/tools/builtin_function.cpp .
> - make glsl_compiler
> + $(APP_CXX) $(INCLUDES) $(CFLAGS) $(LDFLAGS) $(BUILTIN_OBJECTS) $(TALLOC_LIBS) -o
> builtin_compiler
> @echo Regenerating builtin_function.cpp...
> - $(PYTHON2) $(PYTHON_FLAGS) builtins/tools/generate_builtins.py > builtin_function.cpp
> - @echo Rebuilding the real compiler...
> - make glsl_compiler
> + $(PYTHON2) $(PYTHON_FLAGS) builtins/tools/generate_builtins.py $(PWD)/builtin_compiler >
> builtin_function.cpp
> + rm builtin_compiler builtin_stubs.o
>
> -include depend
> diff --git a/src/glsl/SConscript b/src/glsl/SConscript
> index f179721..5a0d396 100644
> --- a/src/glsl/SConscript
> +++ b/src/glsl/SConscript
> @@ -2,6 +2,8 @@ import common
>
> Import('*')
>
> +from sys import executable as python_cmd
> +
> env = env.Clone()
>
> env.Prepend(CPPPATH = [
> @@ -20,7 +22,6 @@ sources = [
> 'ast_function.cpp',
> 'ast_to_hir.cpp',
> 'ast_type.cpp',
> - 'builtin_function.cpp',
> 'glsl_lexer.cpp',
> 'glsl_parser.cpp',
> 'glsl_parser_extras.cpp',
> @@ -79,9 +80,28 @@ sources = [
> 'strtod.c',
> ]
>
> +env.Prepend(LIBS = ['talloc'])
> +env.Append(CPPPATH = ['#/src/glsl'])
> +
> +builtin_compiler = env.Program(
> + target = 'builtin_compiler',
> + source = sources + ['main.cpp', 'builtin_stubs.cpp',
> + '../mesa/program/hash_table.c',
> + '../mesa/program/symbol_table.c'],
> +)
> +
> +env.CodeGenerate(
> + target = 'builtin_function.cpp',
> + script = 'builtins/tools/generate_builtins.py',
> + source = builtin_compiler,
> + command = python_cmd + ' $SCRIPT $SOURCE > $TARGET'
> +)
> +
> +env.Depends('builtin_function.cpp', ['builtins/tools/generate_builtins.py',
> 'builtins/tools/texture_builtins.py'] + Glob('builtins/ir/*'))
> +
> glsl = env.ConvenienceLibrary(
> target = 'glsl',
> - source = sources,
> + source = sources + [ 'builtin_function.cpp' ],
> )
>
> Export('glsl')
> diff --git a/src/glsl/builtins/tools/generate_builtins.py b/src/glsl/builtins/tools/generate_builtins.py
> index e2de9db..8b11338 100755
> --- a/src/glsl/builtins/tools/generate_builtins.py
> +++ b/src/glsl/builtins/tools/generate_builtins.py
> @@ -5,12 +5,20 @@ import re
> from glob import glob
> from os import path
> from subprocess import Popen, PIPE
> +from sys import argv
>
> # Local module: generator for texture lookup builtins
> from texture_builtins import generate_texture_functions
>
> builtins_dir = path.join(path.dirname(path.abspath(__file__)), "..")
>
> +# Get the path to the standalone GLSL compiler
> +if len(argv) != 2:
> + print "Usage:", argv[0], "<path to compiler>"
> + sys.exit(1)
> +
> +compiler = argv[1]
> +
> # Read the files in builtins/ir/*...add them to the supplied dictionary.
> def read_ir_files(fs):
> for filename in glob(path.join(path.join(builtins_dir, 'ir'), '*')):
> @@ -47,8 +55,7 @@ def write_function_definitions():
> print stringify(v), ';'
>
> def run_compiler(args):
> - compiler_path = path.join(path.join(builtins_dir, '..'), 'glsl_compiler')
> - command = [compiler_path, '--dump-lir'] + args
> + command = [compiler, '--dump-lir'] + args
> p = Popen(command, 1, stdout=PIPE, shell=False)
> output = p.communicate()[0]
>
More information about the mesa-dev
mailing list