[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