[Mesa-dev] [PATCH 5/5] automake: add src/glsl and src/glsl/glcpp

Matt Turner mattst88 at gmail.com
Fri Dec 23 17:51:15 PST 2011


On Fri, Dec 23, 2011 at 8:37 PM, Kenneth Graunke <kenneth at whitecape.org> wrote:
> On 12/23/2011 04:21 PM, Matt Turner wrote:
>>  # Flex and Bison for GLSL compiler
>> -FLEX = @FLEX@
>> -BISON = @BISON@
>> +FLEX = @LEX@
>> +BISON = @YACC@
>
> Question about this: will this still require Flex and Bison, or accept
> any Lex and Yacc?  The GLSL compiler actually relies upon Flex/Bison
> extensions to pass line locations and other things, so it won't work
> with ordinary lex/yacc.

I believe it will actually accept any yacc/lex. Strangely, there
aren't AC_PROG macros for bison and flex, although many projects
require these implementations.

We run into this in Gentoo a lot, and it's surprising that there isn't
(to my knowledge) an autoconfig macro for bison/flex.

I use AC_PROG_{LEX,YACC} below since they define $YACC and $LEX, which
are what automake knows to use for .y/.l files. If there's a better
way to handle this, I'm okay with it.

>>  # Library names (base name)
>>  GL_LIB = @GL_LIB@
>> diff --git a/configure.ac b/configure.ac
>> index 0d75353..7aea0b5 100644
>> --- a/configure.ac
>> +++ b/configure.ac
>> @@ -17,6 +17,12 @@ AC_INIT([Mesa],[mesa_version],
>>  AC_CONFIG_AUX_DIR([bin])
>>  AC_CANONICAL_HOST
>>
>> +# Initialize Automake
>> +AM_INIT_AUTOMAKE([foreign dist-bzip2])
>> +
>> +# Initialize libtool
>> +AC_PROG_LIBTOOL
>> +
>>  dnl Save user CFLAGS and CXXFLAGS so one can override the default ones
>>  USER_CFLAGS="$CFLAGS"
>>  USER_CXXFLAGS="$CXXFLAGS"
>> @@ -44,11 +50,14 @@ if test "x$MKDEP" = "x"; then
>>      AC_MSG_ERROR([makedepend is required to build Mesa])
>>  fi
>>
>> -AC_PATH_PROG([FLEX], [flex])
>> -test "x$FLEX" = "x" && AC_MSG_ERROR([flex is needed to build Mesa])
>> -
>> -AC_PATH_PROG([BISON], [bison])
>> -test "x$BISON" = "x" && AC_MSG_ERROR([bison is needed to build Mesa])
>> +AC_PROG_YACC
>> +AC_PATH_PROG([YACC_INST], $YACC)
>> +if test ! -f "$srcdir/gram.c"; then
>> +    if test -z "$YACC_INST"; then
>> +        AC_MSG_ERROR([yacc not found - unable to compile gram.y])
>> +    fi
>> +fi
>
> Isn't AC_PROG_YACC a strong enough guarantee?  I'm a little confused by
> the asymmetry between the LEX and YACC checks here.

I wondered the same thing myself during the last go-around. Gaetan to
the rescue again!

http://lists.freedesktop.org/archives/mesa-dev/2011-September/012658.html

>> +AC_PROG_LEX
>>
>>  dnl Our fallback install-sh is a symlink to minstall. Use the existing
>>  dnl configuration in that case.
>> @@ -996,10 +1005,10 @@ if test "x$enable_dri" = xyes ; then
>>                AC_MSG_WARN([Shared dricore requires GCC-compatible rpath handling.  Disabling shared dricore])
>>        enable_dricore=no
>>        else
>> -      DRICORE_GLSL_LIBS='$(TOP)/$(LIB_DIR)/libglsl.so'
>> +      DRICORE_GLSL_LIBS='$(TOP)/src/glsl/libglsl.la'
>>        DRICORE_LIBS='$(TOP)/$(LIB_DIR)/libdricore.so'
>> -      DRICORE_LIB_DEPS='-L$(TOP)/$(LIB_DIR) -Wl,-R$(DRI_DRIVER_INSTALL_DIR) -lglsl'
>> -              DRI_LIB_DEPS='-L$(TOP)/$(LIB_DIR) -Wl,-R$(DRI_DRIVER_INSTALL_DIR) -ldricore -lglsl'
>> +      DRICORE_LIB_DEPS='-L$(TOP)/$(LIB_DIR) -Wl,-R$(DRI_DRIVER_INSTALL_DIR) $(TOP)/src/glsl/.libs/libglsl.so'
>> +              DRI_LIB_DEPS='-L$(TOP)/$(LIB_DIR) -Wl,-R$(DRI_DRIVER_INSTALL_DIR) -ldricore $(TOP)/src/glsl/.libs/libglsl.so'
>>                DRI_CFLAGS='$(CFLAGS_NOVISIBILITY) -DUSE_DRICORE'
>>                DRI_CXXFLAGS='$(CXXFLAGS_NOVISIBILITY) -DUSE_DRICORE'
>>                MESA_MODULES='$(DRICORE_LIBS) $(DRICORE_GLSL_LIBS)'
>> @@ -1961,3 +1970,8 @@ echo "        PYTHON2:         $PYTHON2"
>>  echo ""
>>  echo "        Run '${MAKE-make}' to build Mesa"
>>  echo ""
>> +
>> +AC_CONFIG_FILES([
>> +     src/glsl/Makefile
>> +     src/glsl/glcpp/Makefile])
>> +AC_OUTPUT
>> diff --git a/src/glsl/Makefile b/src/glsl/Makefile
>> deleted file mode 100644
>> index d9ecbc8..0000000
>> --- a/src/glsl/Makefile
>> +++ /dev/null
>> @@ -1,172 +0,0 @@
>> -
>> -#src/glsl/pp/Makefile
>> -
>> -TOP = ../..
>> -
>> -include $(TOP)/configs/current
>> -
>> -LIBNAME = glsl
>> -
>> -include Makefile.sources
>> -
>> -GLCPP_SOURCES = \
>> -     $(LIBGLCPP_GENERATED_SOURCES) \
>> -     $(LIBGLCPP_SOURCES) \
>> -     ralloc.c \
>> -     glcpp/glcpp.c
>> -
>> -C_SOURCES = \
>> -     $(LIBGLCPP_GENERATED_SOURCES) \
>> -     $(LIBGLCPP_SOURCES) \
>> -     $(LIBGLSL_SOURCES)
>> -
>> -# common sources for builtin_compiler and libglsl
>> -CXX_SOURCES = \
>> -     $(BUILTIN_COMPILER_GENERATED_CXX_SOURCES) \
>> -     $(LIBGLSL_CXX_SOURCES)
>> -
>> -LIBS = \
>> -     $(TOP)/src/glsl/libglsl.a
>> -
>> -APPS = glsl_compiler glsl_test glcpp/glcpp
>> -
>> -GLSL2_C_SOURCES = \
>> -     ../mesa/program/hash_table.c \
>> -     ../mesa/program/symbol_table.c
>> -GLSL2_CXX_SOURCES = \
>> -     $(GLSL_COMPILER_CXX_SOURCES)
>> -
>> -GLSL2_OBJECTS = \
>> -     $(GLSL2_C_SOURCES:.c=.o) \
>> -     $(GLSL2_CXX_SOURCES:.cpp=.o)
>> -
>> -TEST_C_SOURCES = \
>> -     ../mesa/program/hash_table.c \
>> -     ../mesa/program/symbol_table.c
>> -
>> -TEST_CXX_SOURCES = \
>> -     standalone_scaffolding.cpp \
>> -     test.cpp \
>> -     test_optpass.cpp
>> -
>> -TEST_OBJECTS = \
>> -     $(TEST_C_SOURCES:.c=.o) \
>> -     $(TEST_CXX_SOURCES:.cpp=.o)
>> -
>> -### Basic defines ###
>> -
>> -DEFINES += \
>> -     $(LIBRARY_DEFINES) \
>> -     $(API_DEFINES)
>> -
>> -GLCPP_OBJECTS = \
>> -     $(GLCPP_SOURCES:.c=.o) \
>> -     ../mesa/program/hash_table.o
>> -
>> -OBJECTS = \
>> -     $(C_SOURCES:.c=.o) \
>> -     $(CXX_SOURCES:.cpp=.o)
>> -
>> -DRICORE_OBJ_DIR = obj-visible
>> -OBJECTS_DRICORE = $(addprefix $(DRICORE_OBJ_DIR)/,$(OBJECTS))
>> -
>> -INCLUDES = \
>> -     -I. \
>> -     -I../mesa \
>> -     -I../mapi \
>> -     -I../../include \
>> -     $(LIBRARY_INCLUDES)
>> -
>> -ALL_SOURCES = \
>> -     $(C_SOURCES) \
>> -     $(CXX_SOURCES) \
>> -     $(GLSL2_CXX_SOURCES) \
>> -     $(GLSL2_C_SOURCES) \
>> -     $(TEST_CXX_SOURCES) \
>> -     $(TEST_C_SOURCES)
>> -
>> -##### TARGETS #####
>> -
>> -default: depend lib$(LIBNAME).a $(APPS) $(DRICORE_GLSL_LIBS)
>> -
>> -$(TOP)/$(LIB_DIR)/libglsl.so: $(OBJECTS_DRICORE) builtin_function.o Makefile $(TOP)/src/glsl/Makefile.template
>> -     $(MKLIB) -o $@ -linker '$(CXX)' -ldflags '$(LDFLAGS)' \
>> -             -cplusplus -noprefix \
>> -             -install $(TOP)/$(LIB_DIR) -id $(INSTALL_LIB_DIR)/$@.dylib \
>> -             $(OBJECTS_DRICORE) builtin_function.o
>> -
>> -lib$(LIBNAME).a: $(OBJECTS) builtin_function.o Makefile $(TOP)/src/glsl/Makefile.template
>> -     $(MKLIB) -cplusplus -o $(LIBNAME) -static $(OBJECTS) builtin_function.o
>> -
>> -depend: $(ALL_SOURCES) Makefile
>> -     rm -f depend
>> -     touch depend
>> -     $(MKDEP) $(MKDEP_OPTIONS) $(INCLUDES) $(ALL_SOURCES) 2> /dev/null
>> -     $(MKDEP) $(MKDEP_OPTIONS) -a -p $(DRICORE_OBJ_DIR)/ $(INCLUDES) $(ALL_SOURCES) 2> /dev/null
>> -
>> -# Remove .o and backup files
>> -clean: clean-dricore
>> -     rm -f $(GLCPP_OBJECTS) $(GLSL2_OBJECTS) $(TEST_OBJECTS) $(OBJECTS) lib$(LIBNAME).a depend depend.bak builtin_function.cpp builtin_function.o builtin_stubs.o builtin_compiler
>> -     -rm -f $(APPS)
>> -
>> -clean-dricore:
>> -     -rm -f $(OBJECTS_DRICORE) $(TOP)/$(LIB_DIR)/libglsl.so libglsl.so
>> -
>> -ifneq (,$(DRICORE_GLSL_LIBS))
>> -DRICORE_INSTALL_TARGET = install-dricore
>> -endif
>> -
>> -# Dummy target
>> -install: $(DRICORE_INSTALL_TARGET)
>> -     @echo -n ""
>> -
>> -install-dricore: default
>> -     $(INSTALL) -d $(DESTDIR)$(DRI_DRIVER_INSTALL_DIR)
>> -     $(INSTALL) -m 755 $(DRICORE_GLSL_LIBS) $(DESTDIR)$(DRI_DRIVER_INSTALL_DIR)
>> -
>> -##### RULES #####
>> -
>> -glsl_compiler: $(GLSL2_OBJECTS) libglsl.a
>> -     $(APP_CXX) $(INCLUDES) $(CFLAGS) $(LDFLAGS) $(GLSL2_OBJECTS) $(LIBS) -o $@
>> -
>> -glsl_test: $(TEST_OBJECTS) libglsl.a
>> -     $(APP_CXX) $(INCLUDES) $(CFLAGS) $(LDFLAGS) $(TEST_OBJECTS) $(LIBS) -o $@
>> -
>> -glcpp: glcpp/glcpp
>> -glcpp/glcpp: $(GLCPP_OBJECTS)
>> -     $(APP_CC) $(INCLUDES) $(CFLAGS) $(LDFLAGS) $(GLCPP_OBJECTS) -o $@
>> -
>> -.cpp.o:
>> -     $(CXX) -c $(INCLUDES) $(CXXFLAGS) $(DEFINES) $< -o $@
>> -
>> -.c.o:
>> -     $(CC) -c $(INCLUDES) $(CFLAGS) $(DEFINES) $< -o $@
>> -
>> -$(DRICORE_OBJ_DIR)/%.o : %.cpp
>> -     @mkdir -p $(dir $@)
>> -     $(CXX) -c $(INCLUDES) $(DRI_CXXFLAGS) $(DEFINES) $< -o $@
>> -
>> -$(DRICORE_OBJ_DIR)/%.o : %.c
>> -     @mkdir -p $(dir $@)
>> -     $(CC) -c $(INCLUDES) $(DRI_CFLAGS) $(DEFINES) $< -o $@
>> -
>> -glsl_lexer.cpp: glsl_lexer.ll
>> -     $(FLEX) --nounistd -o$@  $<
>> -
>> -glsl_parser.cpp: glsl_parser.yy
>> -     $(BISON) -v -o "$@" -p "_mesa_glsl_" --defines=glsl_parser.h $<
>> -
>> -glcpp/glcpp-lex.c: glcpp/glcpp-lex.l
>> -     $(FLEX) --nounistd -o$@  $<
>> -
>> -glcpp/glcpp-parse.c: glcpp/glcpp-parse.y
>> -     $(BISON) -v -o "$@" --defines=glcpp/glcpp-parse.h $<
>> -
>> -builtin_compiler: $(GLSL2_OBJECTS) $(OBJECTS) builtin_stubs.o
>> -     $(APP_CXX) $(INCLUDES) $(CXXFLAGS) $(LDFLAGS) $(OBJECTS) $(GLSL2_OBJECTS) builtin_stubs.o -o $@
>> -
>> -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
>> -
>> --include depend
>> diff --git a/src/glsl/Makefile.am b/src/glsl/Makefile.am
>> new file mode 100644
>> index 0000000..2f022ef
>> --- /dev/null
>> +++ b/src/glsl/Makefile.am
>> @@ -0,0 +1,126 @@
>> +SUBDIRS= glcpp
>> +
>> +noinst_LTLIBRARIES = \
>> +     libhash_table.la \
>> +     libstandalone_scaffolding.la \
>> +     libsymbol_table.la \
>> +     libmain.la \
>> +     libglslcore.la
>> +lib_LTLIBRARIES = libglsl.la
>> +noinst_PROGRAMS = builtin_compiler glsl_test
>> +bin_PROGRAMS = glsl_compiler
>> +
>> +INCLUDES = \
>> +        -I. \
>> +     -I../mesa \
>> +     -I../mapi \
>> +     -I$(top_srcdir)/include
>> +
>> +BUILT_SOURCES = glsl_parser.h
>> +AM_YFLAGS = -d -p "_mesa_glsl_"
>> +AM_LFLAGS = --nounistd -o$(LEX_OUTPUT_ROOT).c
>> +
>> +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
>> +
>> +libglslcore_la_SOURCES = \
>> +     strtod.c \
>> +     ast_expr.cpp \
>> +     ast_function.cpp \
>> +     ast_to_hir.cpp \
>> +     ast_type.cpp \
>> +     builtin_variables.cpp \
>> +     glsl_lexer.lpp \
>> +     glsl_parser.ypp \
>> +     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_refcount.cpp \
>> +     linker.cpp \
>> +     link_functions.cpp \
>> +     link_uniforms.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 = glcpp/libglcpp.la
>
> Lately we've been trying to put lists of source files in
> Makefile.sources so we can share them with the Android.mk files.

That's definitely a good goal. It looks like it should be possible
with some work to Makefile.sources (and probably breaking Android in
the process. :)

>> +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
>> +
>> +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
>> diff --git a/src/glsl/glcpp/Makefile.am b/src/glsl/glcpp/Makefile.am
>> new file mode 100644
>> index 0000000..4f66dc6
>> --- /dev/null
>> +++ b/src/glsl/glcpp/Makefile.am
>> @@ -0,0 +1,23 @@
>> +noinst_LTLIBRARIES = libglcpp.la libhash_table.la
>> +noinst_PROGRAMS = glcpp
>> +
>> +INCLUDES = \
>> +        -I. \
>> +     -I../../mesa \
>> +     -I../../mapi \
>> +     -I$(top_srcdir)/include
>> +
>> +BUILT_SOURCES = glcpp-parse.h
>> +AM_YFLAGS = -d
>> +AM_LFLAGS = --nounistd -o$(LEX_OUTPUT_ROOT).c
>> +
>> +libhash_table_la_SOURCES = ../../mesa/program/hash_table.c
>> +
>> +libglcpp_la_SOURCES = \
>> +     glcpp-lex.l \
>> +     glcpp-parse.y \
>> +     pp.c \
>> +     ../ralloc.c
>> +
>> +glcpp_SOURCES = glcpp.c
>> +glcpp_LDADD = libglcpp.la libhash_table.la
>> diff --git a/src/glsl/glsl_lexer.lpp b/src/glsl/glsl_lexer.lpp
>> new file mode 120000
>> index 0000000..d897de3
>> --- /dev/null
>> +++ b/src/glsl/glsl_lexer.lpp
>> @@ -0,0 +1 @@
>> +glsl_lexer.ll
>> \ No newline at end of file
>> diff --git a/src/glsl/glsl_parser.ypp b/src/glsl/glsl_parser.ypp
>> new file mode 120000
>> index 0000000..e8171ff
>> --- /dev/null
>> +++ b/src/glsl/glsl_parser.ypp
>> @@ -0,0 +1 @@
>> +glsl_parser.yy
>> \ No newline at end of file
>> diff --git a/src/mesa/drivers/osmesa/Makefile b/src/mesa/drivers/osmesa/Makefile
>> index 39ab09a..b2315c7 100644
>> --- a/src/mesa/drivers/osmesa/Makefile
>> +++ b/src/mesa/drivers/osmesa/Makefile
>> @@ -23,7 +23,7 @@ INCLUDE_DIRS = \
>>  CORE_MESA = \
>>       $(TOP)/src/mesa/libmesa.a \
>>       $(TOP)/src/mapi/glapi/libglapi.a \
>> -     $(TOP)/src/glsl/libglsl.a
>> +     $(TOP)/src/glsl/libglsl.la
>>
>>  .c.o:
>>       $(CC) -c $(INCLUDE_DIRS) $(CFLAGS) $< -o $@
>> diff --git a/src/mesa/sources.mak b/src/mesa/sources.mak
>> index 09cdd26..125ea46 100644
>> --- a/src/mesa/sources.mak
>> +++ b/src/mesa/sources.mak
>> @@ -371,7 +371,7 @@ COMMON_DRIVER_OBJECTS = $(COMMON_DRIVER_SOURCES:.c=.o)
>>  ### Other archives/libraries
>>
>>  GLSL_LIBS = \
>> -     $(TOP)/src/glsl/libglsl.a
>> +     $(TOP)/src/glsl/libglsl.la
>>
>>
>>  ### Include directories
>
> Matt, this looks like a great start.  Thanks so much for working on
> this.  I hope we can accept it soon.

Awesome. Thanks a lot for the review!

Matt


More information about the mesa-dev mailing list