On Fri, Dec 23, 2011 at 8:37 PM, Kenneth Graunke <kenn...@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 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev