X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fglsl%2FSConscript;h=9ecc155c9c960ec18b44707c00f5c53aef47300a;hb=0292ffb85c03e9fa15b9395e3875109dd8979292;hp=1757605f7cbd56aae218331c0356df0d0a0580c0;hpb=33d0c44910860e0522bd56a0f8637a69e0c4a456;p=mesa.git diff --git a/src/glsl/SConscript b/src/glsl/SConscript index 1757605f7cb..9ecc155c9c9 100644 --- a/src/glsl/SConscript +++ b/src/glsl/SConscript @@ -7,23 +7,39 @@ from sys import executable as python_cmd env = env.Clone() env.Prepend(CPPPATH = [ + '#include', '#src/mapi', '#src/mesa', + '#src/glsl', + '#src/glsl/glcpp', ]) -if env['platform'] == 'windows': - env.Prepend(CPPPATH = ['#src/talloc']) +# Make glcpp/glcpp-parse.h and glsl_parser.h reacheable from the include path +env.Append(CPPPATH = [Dir('.').abspath]) + +env.Append(YACCFLAGS = '-d') + +parser_env = env.Clone() +parser_env.Append(YACCFLAGS = [ + '--defines=%s' % File('glsl_parser.h').abspath, + '-p', '_mesa_glsl_', +]) -sources = [ - 'glcpp/glcpp-lex.c', - 'glcpp/glcpp-parse.c', +glcpp_lexer = env.CFile('glcpp/glcpp-lex.c', 'glcpp/glcpp-lex.l') +glcpp_parser = env.CFile('glcpp/glcpp-parse.c', 'glcpp/glcpp-parse.y') +glsl_lexer = parser_env.CXXFile('glsl_lexer.cpp', 'glsl_lexer.ll') +glsl_parser = parser_env.CXXFile('glsl_parser.cpp', 'glsl_parser.yy') + +glsl_sources = [ + glcpp_lexer, + glcpp_parser[0], 'glcpp/pp.c', 'ast_expr.cpp', 'ast_function.cpp', 'ast_to_hir.cpp', 'ast_type.cpp', - 'glsl_lexer.cpp', - 'glsl_parser.cpp', + glsl_lexer, + glsl_parser[0], 'glsl_parser_extras.cpp', 'glsl_types.cpp', 'glsl_symbol_table.cpp', @@ -65,6 +81,7 @@ sources = [ 'opt_constant_propagation.cpp', 'opt_constant_variable.cpp', 'opt_copy_propagation.cpp', + 'opt_copy_propagation_elements.cpp', 'opt_dead_code.cpp', 'opt_dead_code_local.cpp', 'opt_dead_functions.cpp', @@ -76,38 +93,66 @@ sources = [ 'opt_structure_splitting.cpp', 'opt_swizzle_swizzle.cpp', 'opt_tree_grafting.cpp', + 'ralloc.c', 's_expression.cpp', 'strtod.c', -] +] -env.Prepend(LIBS = ['talloc']) -env.Append(CPPPATH = ['#/src/glsl']) +if env['msvc']: + env.Prepend(CPPPATH = ['#/src/getopt']) + env.PrependUnique(LIBS = [getopt]) -builtin_compiler = env.Program( - target = 'builtin_compiler', - source = sources + ['main.cpp', 'builtin_stubs.cpp', - '#src/mesa/program/hash_table.c', - '#src/mesa/program/symbol_table.c'], -) +if env['crosscompile'] and env['platform'] != 'embedded': + Import('builtin_glsl_function') +else: + main_obj = env.StaticObject('main.cpp') -env.CodeGenerate( - target = 'builtin_function.cpp', - script = 'builtins/tools/generate_builtins.py', - source = builtin_compiler, - command = python_cmd + ' $SCRIPT $SOURCE > $TARGET' -) + mesa_objs = env.StaticObject([ + '#src/mesa/program/hash_table.c', + '#src/mesa/program/symbol_table.c', + ]) -env.Depends('builtin_function.cpp', ['builtins/tools/generate_builtins.py', 'builtins/tools/texture_builtins.py'] + Glob('builtins/ir/*')) + builtin_compiler = env.Program( + target = 'builtin_compiler', + source = main_obj + glsl_sources + ['builtin_stubs.cpp'] + mesa_objs, + ) + + # SCons builtin dependency scanner doesn't detect that glsl_lexer.ll + # depends on glsl_parser.h + env.Depends(builtin_compiler, glsl_parser) + + builtin_glsl_function = env.CodeGenerate( + target = 'builtin_function.cpp', + script = 'builtins/tools/generate_builtins.py', + source = builtin_compiler, + command = python_cmd + ' $SCRIPT $SOURCE > $TARGET' + ) + + env.Depends(builtin_glsl_function, ['builtins/tools/generate_builtins.py', 'builtins/tools/texture_builtins.py'] + Glob('builtins/ir/*')) + + Export('builtin_glsl_function') + + if env['hostonly']: + Return() + + +glsl_sources += builtin_glsl_function glsl = env.ConvenienceLibrary( target = 'glsl', - source = sources + [ 'builtin_function.cpp' ], + source = glsl_sources, ) +# SCons builtin dependency scanner doesn't detect that glsl_lexer.ll depends on +# glsl_parser.h +env.Depends(glsl, glsl_parser) + Export('glsl') -# FIXME: We can't build the programs because there's a cyclic dependency between tis directory and src/mesa -Return() +# Skip building these programs as they will cause SCons error "Two environments +# with different actions were specified for the same target" +if env['crosscompile'] or env['platform'] == 'embedded': + Return() env = env.Clone() @@ -116,16 +161,16 @@ if env['platform'] == 'windows': 'user32', ]) -env.Prepend(LIBS = [glsl, talloc]) +env.Prepend(LIBS = [glsl]) -env.Program( +glsl2 = env.Program( target = 'glsl2', - source = [ - 'main.cpp', - ] + source = main_obj + mesa_objs, ) +env.Alias('glsl2', glsl2) -env.Program( - target = 'glcpp', - source = ['glcpp/glcpp.c'], +glcpp = env.Program( + target = 'glcpp/glcpp', + source = ['glcpp/glcpp.c'] + mesa_objs, ) +env.Alias('glcpp', glcpp)