On 12/23/2011 04:21 PM, Matt Turner wrote: > The glsl_{lexer.lpp,parser.ypp} symlinks allow automake to figure out > dependency information, since .ll generates a .cc file, and .lpp > generates a .cpp. They were originally named .lpp/.ypp, but were changed > to work around scons. > --- > > This isn't free from breakage, but it is good enough to build > --with-dri-drivers=swrast,i915,i965 > --enable-shared-dricore > --with-gallium-drivers=swrast,r300,r600 > > (non-shared dricore fails)
I think that's fine. I don't use shared-dricore because I got random failures with it, but I'm pretty sure those were all related to build system mess. IMHO there's little value in making this an option if the build system actually works. > I think this is a good start to automaking Mesa. > > configs/autoconf.in | 4 +- > configure.ac | 30 +++++-- > src/glsl/Makefile | 172 > -------------------------------------- This begs the question: Can we remove the old, static Makefile build system targets? At this point, I think basically everybody is using Autoconf, SCons, or the Android build system. I see several compelling reasons to do so: 1. We have four build systems. Need I say more :) 2. Two 'make'-based build systems is confusing to new contributors. Look at the Haiku patches; the first patch added static Makefile targets, while the second used autoconf. I tried to help a friend build Mesa for the first time the other day, and he ran "./configure --with-dri-driver=..." by mistake rather than --with-dri-driver*s*, so configure failed. Yet, there were still Makefiles, so 'make' ran and looked like it was building stuff, but finally resulted in a bizarre link error. SCons vs Automake is one thing; they're clearly separate. But two 'make' based build systems is confusing and hides failures. 2. Less maintenance burden. I doubt most people are testing the old static build targets nor adding new features to them. For example, I don't think they have an equivalent to --enable-texture-float, so no GL 3.0 for you. 3. It allows us to incrementally clean up the build system. Matt's patch here is a great start; if automake were the only make, we could just accept patches like this that incrementally clean up one corner of the build system without having to overhaul the whole thing. Which means it might actually get accomplished. Does anyone out there still use the non-autoconf Makefile targets? I seem to recall that Brian did, and maybe some OSMesa users, but I'm not sure who else. Brian, would you be opposed to removing them? > src/glsl/Makefile.am | 126 ++++++++++++++++++++++++++++ > src/glsl/glcpp/Makefile.am | 23 +++++ > src/glsl/glsl_lexer.lpp | 1 + > src/glsl/glsl_parser.ypp | 1 + > src/mesa/drivers/osmesa/Makefile | 2 +- > src/mesa/sources.mak | 2 +- > 9 files changed, 177 insertions(+), 184 deletions(-) > delete mode 100644 src/glsl/Makefile > create mode 100644 src/glsl/Makefile.am > create mode 100644 src/glsl/glcpp/Makefile.am > create mode 120000 src/glsl/glsl_lexer.lpp > create mode 120000 src/glsl/glsl_parser.ypp > > diff --git a/configs/autoconf.in b/configs/autoconf.in > index 9ea7588..0b03afe 100644 > --- a/configs/autoconf.in > +++ b/configs/autoconf.in > @@ -63,8 +63,8 @@ PYTHON2 = @PYTHON2@ > PYTHON_FLAGS = -t -O -O > > # 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. > # 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. > +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. > +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. _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev