[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