[Mesa-dev] [RFC PATCH] automake: add support to src/glsl/
Matt Turner
mattst88 at gmail.com
Mon Sep 26 08:38:10 PDT 2011
On Mon, Sep 26, 2011 at 11:29 AM, Eric Anholt <eric at anholt.net> wrote:
> On Sun, 25 Sep 2011 15:36:02 -0400, Matt Turner <mattst88 at gmail.com> wrote:
> Non-text part: multipart/mixed
>> On Sat, Sep 24, 2011 at 9:06 PM, Matt Turner <mattst88 at gmail.com> wrote:
>> > Signed-off-by: Matt Turner <mattst88 at gmail.com>
>> > ---
>> > The last discussion about using automake ("[RFC] Convert mesa to automake/libtool")
>> > ended without anything happening, probably because the branch wasn't ready.
>> >
>> > This patch is an attempt to get the ball rolling again. Without ripping out
>> > the entire existing build system in one swat, it attempts to gradually replace
>> > it directory by directory with automake.
>> >
>> > The patch has a few problems currently, and a few things that can possibly be
>> > done better:
>> > - Mainly, that building libmesa.a currently fails.
>> > - Not sure how to handle shared/static dricore options.
>> > - libtool defines VERSION (-DVERSION=...), which screws up the VERSION
>> > token in glsl_lexer.ll and glsl_parser.yy. I trivially renamed it.
>> > - libralloc.la can probably be combined into libglslcore.la, and not
>> > have to be added to every _LDADD line.
>> > - The rules for flex and bison can probably be eliminated by using
>> > YFLAGS and LFLAGS. I tried, but ylwrap gave me some error.
>
> I'd like to add other libs (hash table) at the src/ level, too, so a
> single helper lib that is "mesa's shared, non-mtypes-using stuff but not
> things that are really Mesa like the glsl compiler" would be nice.
>
> I do want to see dricore continue. It's a really nice feature for
> development, by shortening build times, and it seems like distros want
> it. However, it was pretty broken as-is. You had to build every helper
> lib into a separate installed .so, because the build system was lame,
> and dependencies were even more screwed up than usual. I'd say go ahead
> even if dricore isn't fixed. I don't think we'll have any big problem
> recovering it for automake once core Mesa is converted.
I definitely want dricore as well.
If you've got a few minutes, it'd be very helpful if you could try the
patch and see if you can see why libmesa.a fails to compile with it.
>> diff --git a/src/glsl/Makefile.am b/src/glsl/Makefile.am
>> new file mode 100644
>> index 0000000..a31d845
>> --- /dev/null
>> +++ b/src/glsl/Makefile.am
>> @@ -0,0 +1,152 @@
>> +LEX = @FLEX@
>> +YACC = @BISON@
>> +
>> +noinst_LTLIBRARIES = \
>> + libhash_table.la \
>> + libstandalone_scaffolding.la \
>> + libsymbol_table.la \
>> + libmain.la \
>> + libglcpp.la \
>> + libglslcore.la
>> +lib_LTLIBRARIES = libglsl.la
>> +noinst_PROGRAMS = glcpp/glcpp builtin_compiler glsl_test
>> +bin_PROGRAMS = glsl_compiler
>> +
>> +INCLUDES = \
>> + -I. \
>> + -I../mesa \
>> + -I../mapi \
>> + -Iglcpp \
>> + -I../../include
>> +
>> +BUILT_SOURCES = \
>> + glcpp/glcpp-lex.c \
>> + glcpp/glcpp-parse.c \
>> + glsl_lexer.cpp \
>> + glsl_parser.cpp \
>> + builtin_function.cpp
>> +
>> +libhash_table_la_SOURCES = ../mesa/program/hash_table.c
>> +libstandalone_scaffolding_la_SOURCES = standalone_scaffolding.cpp
>> +libsymbol_table_la_SOURCES = ../mesa/program/symbol_table.c
>> +libmain_la_SOURCES = main.cpp
>> +
>> +libglcpp_la_SOURCES = \
>> + glcpp/glcpp-lex.c \
>> + glcpp/glcpp-parse.c \
>> + glcpp/pp.c \
>> + ralloc.c
>> +
>> +glcpp_glcpp_SOURCES = glcpp/glcpp.c
>> +glcpp_glcpp_LDADD = libglcpp.la libhash_table.la
>> +
>> +libglslcore_la_SOURCES = \
>> + strtod.c \
>> + ast_expr.cpp \
>> + ast_function.cpp \
>> + ast_to_hir.cpp \
>> + ast_type.cpp \
>> + glsl_lexer.cpp \
>> + glsl_parser.cpp \
>> + glsl_parser_extras.cpp \
>> + glsl_types.cpp \
>> + glsl_symbol_table.cpp \
>> + hir_field_selection.cpp \
>> + ir_basic_block.cpp \
>> + ir_clone.cpp \
>> + ir_constant_expression.cpp \
>> + ir.cpp \
>> + ir_expression_flattening.cpp \
>> + ir_function_can_inline.cpp \
>> + ir_function_detect_recursion.cpp \
>> + ir_function.cpp \
>> + ir_hierarchical_visitor.cpp \
>> + ir_hv_accept.cpp \
>> + ir_import_prototypes.cpp \
>> + ir_print_visitor.cpp \
>> + ir_reader.cpp \
>> + ir_rvalue_visitor.cpp \
>> + ir_set_program_inouts.cpp \
>> + ir_validate.cpp \
>> + ir_variable.cpp \
>> + ir_variable_refcount.cpp \
>> + linker.cpp \
>> + link_functions.cpp \
>> + loop_analysis.cpp \
>> + loop_controls.cpp \
>> + loop_unroll.cpp \
>> + lower_clip_distance.cpp \
>> + lower_discard.cpp \
>> + lower_if_to_cond_assign.cpp \
>> + lower_instructions.cpp \
>> + lower_jumps.cpp \
>> + lower_mat_op_to_vec.cpp \
>> + lower_noise.cpp \
>> + lower_texture_projection.cpp \
>> + lower_variable_index_to_cond_assign.cpp \
>> + lower_vec_index_to_cond_assign.cpp \
>> + lower_vec_index_to_swizzle.cpp \
>> + lower_vector.cpp \
>> + opt_algebraic.cpp \
>> + opt_constant_folding.cpp \
>> + 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 \
>> + opt_discard_simplification.cpp \
>> + opt_function_inlining.cpp \
>> + opt_if_simplification.cpp \
>> + opt_noop_swizzle.cpp \
>> + opt_redundant_jumps.cpp \
>> + opt_structure_splitting.cpp \
>> + opt_swizzle_swizzle.cpp \
>> + opt_tree_grafting.cpp \
>> + s_expression.cpp
>> +libglslcore_la_LIBADD = libglcpp.la
>> +
>> +builtin_compiler_SOURCES = builtin_stubs.cpp
>> +builtin_compiler_LDADD = \
>> + libmain.la \
>> + libglslcore.la \
>> + libhash_table.la \
>> + libsymbol_table.la \
>> + libstandalone_scaffolding.la
>> +
>> +libglsl_la_SOURCES = builtin_function.cpp
>> +libglsl_la_LIBADD = libglslcore.la
>> +
>> +glsl_compiler_SOURCES =
>> +glsl_compiler_LDADD = \
>> + libmain.la \
>> + libglsl.la \
>> + libhash_table.la \
>> + libsymbol_table.la \
>> + libstandalone_scaffolding.la
>> +
>> +glsl_test_SOURCES = \
>> + test.cpp \
>> + test_optpass.cpp
>> +glsl_test_LDADD = \
>> + libglsl.la \
>> + libhash_table.la \
>> + libsymbol_table.la \
>> + libstandalone_scaffolding.la
>> +
>> +glsl_lexer.cpp: glsl_lexer.ll
>> + $(LEX) --nounistd -o$@ $<
>> +
>> +glsl_parser.cpp: glsl_parser.yy
>> + $(YACC) -v -o "$@" -p "_mesa_glsl_" --defines=glsl_parser.h $<
>> +
>> +glcpp/glcpp-lex.c: glcpp/glcpp-lex.l
>> + $(LEX) --nounistd -o$@ $<
>> +
>> +glcpp/glcpp-parse.c: glcpp/glcpp-parse.y
>> + $(YACC) -v -o "$@" --defines=glcpp/glcpp-parse.h $<
>> +
>> +builtin_function.cpp: builtins/profiles/* builtins/ir/* builtins/tools/generate_builtins.py builtins/tools/texture_builtins.py builtin_compiler
>> + @echo Regenerating builtin_function.cpp...
>> + $(PYTHON2) $(PYTHON_FLAGS) builtins/tools/generate_builtins.py ./builtin_compiler > builtin_function.cpp || rm -f builtin_function.cpp
>
> I really like how this file is understandable now. It was a disaster
> before.
>
> One concern I had for automake overall doesn't look like an issue using
> the "include" directive: android mandates using the special android
> build system to build its software, and we're definitely supporting
> android, so we want to share our source lists in a sources.mak file if
> possible.
Definitely. I was doing that when working on other directories, but
src/glsl didn't have a sources.mak for some reason. That's probably a
good first step.
>> diff --git a/src/glsl/glsl_lexer.ll b/src/glsl/glsl_lexer.ll
>> index cfd8926..dd7c68c 100644
>> --- a/src/glsl/glsl_lexer.ll
>> +++ b/src/glsl/glsl_lexer.ll
>> @@ -104,8 +104,8 @@ HASH ^{SPC}#{SPC}
>>
>> /* Preprocessor tokens. */
>> ^[ \t]*#[ \t]*$ ;
>> -^[ \t]*#[ \t]*version { BEGIN PP; return VERSION; }
>> -^[ \t]*#[ \t]*extension { BEGIN PP; return EXTENSION; }
>> +^[ \t]*#[ \t]*version { BEGIN PP; return GLSL_VERS; }
>> +^[ \t]*#[ \t]*extension { BEGIN PP; return GLSL_EXTENSION; }
>> {HASH}line{SPCP}{INT}{SPCP}{INT}{SPC}$ {
>> /* Eat characters until the first digit is
>> * encountered
>> diff --git a/src/glsl/glsl_parser.yy b/src/glsl/glsl_parser.yy
>> index 25d02fb..831f72a 100644
>> --- a/src/glsl/glsl_parser.yy
>> +++ b/src/glsl/glsl_parser.yy
>> @@ -106,7 +106,7 @@
>> %token INVARIANT
>> %token LOWP MEDIUMP HIGHP SUPERP PRECISION
>>
>> -%token VERSION EXTENSION LINE COLON EOL INTERFACE OUTPUT
>> +%token GLSL_VERS GLSL_EXTENSION LINE COLON EOL INTERFACE OUTPUT
>> %token PRAGMA_DEBUG_ON PRAGMA_DEBUG_OFF
>> %token PRAGMA_OPTIMIZE_ON PRAGMA_OPTIMIZE_OFF
>> %token PRAGMA_INVARIANT_ALL
>> @@ -228,7 +228,7 @@ translation_unit:
>>
>> version_statement:
>> /* blank - no #version specified: defaults are already set */
>> - | VERSION INTCONSTANT EOL
>> + | GLSL_VERS INTCONSTANT EOL
>> {
>> bool supported = false;
>>
>> @@ -296,7 +296,7 @@ any_identifier:
>> ;
>>
>> extension_statement:
>> - EXTENSION any_identifier COLON any_identifier EOL
>> + GLSL_EXTENSION any_identifier COLON any_identifier EOL
>> {
>> if (!_mesa_glsl_process_extension($2, & @2, $4, & @4, state)) {
>> YYERROR;
>> --
>> 1.7.3.4
>>
>
> I'd prefer VERSION to be fully spelled out, and it's probably worth
> being in a separate commit.
Yeah, will do. I feel like there's a better way to deal with this anyway.
Thanks,
Matt
More information about the mesa-dev
mailing list