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

Matt Turner mattst88 at gmail.com
Tue Jan 24 16:22:22 PST 2012


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.
---
Future TODO: use src/glsl/Makefile.sources. It'll have to be refactored
some, so I think that's a good follow-on patch.

In this version of the patch, I've gotten rid of some unnecessary convenience
libraries and fixed some issues with --enable-static.

I've build tested with DRI and Gallium drivers, xlib-glx, osmesa, shared
and static. Please give it a test.

 configure.ac                     |    4 +
 src/glsl/Makefile                |  172 --------------------------------------
 src/glsl/Makefile.am             |  126 ++++++++++++++++++++++++++++
 src/glsl/glcpp/Makefile.am       |   22 +++++
 src/glsl/glsl_lexer.lpp          |    1 +
 src/glsl/glsl_parser.ypp         |    1 +
 src/mesa/drivers/osmesa/Makefile |    2 +-
 src/mesa/sources.mak             |    2 +-
 8 files changed, 156 insertions(+), 174 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/configure.ac b/configure.ac
index 5e3a69b..c1a9480 100644
--- a/configure.ac
+++ b/configure.ac
@@ -289,6 +289,8 @@ xnono )
     enable_static=yes
     ;;
 esac
+AM_CONDITIONAL(BUILD_STATIC, test "x$enable_static" = xyes)
+AM_CONDITIONAL(BUILD_SHARED, test "x$enable_shared" = xyes)
 
 dnl
 dnl mklib options
@@ -1919,6 +1921,8 @@ dnl Substitute the config
 AC_CONFIG_FILES([configs/autoconf
 		src/gbm/Makefile
 		src/gbm/main/gbm.pc
+		src/glsl/Makefile
+		src/glsl/glcpp/Makefile
 		src/mesa/drivers/dri/dri.pc
 		src/mesa/drivers/dri/Makefile
 		src/mesa/drivers/dri/i915/Makefile
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..d1961c1
--- /dev/null
+++ b/src/glsl/Makefile.am
@@ -0,0 +1,126 @@
+LIB_DIR = @LIB_DIR@
+
+SUBDIRS = glcpp
+
+noinst_LTLIBRARIES = libglslcore.la
+lib_LTLIBRARIES = libglsl.la
+noinst_PROGRAMS = builtin_compiler glsl_test
+bin_PROGRAMS = glsl_compiler
+
+if BUILD_STATIC
+LIBGLSL=libglsl.a
+endif
+if BUILD_SHARED
+LIBGLSL=libglsl.so
+endif
+
+AM_CPPFLAGS = \
+        -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
+
+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 \
+	lower_output_reads.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
+
+builtin_compiler_SOURCES = \
+	builtin_stubs.cpp \
+	main.cpp \
+	standalone_scaffolding.cpp \
+	../mesa/program/symbol_table.c
+builtin_compiler_LDADD = libglslcore.la
+
+libglsl_la_SOURCES = builtin_function.cpp
+libglsl_la_LIBADD = libglslcore.la
+libglsl_la_LDFLAGS = -avoid-version
+
+glsl_compiler_SOURCES = \
+	main.cpp \
+	standalone_scaffolding.cpp \
+	../mesa/program/symbol_table.c
+glsl_compiler_LDADD = libglsl.la
+
+glsl_test_SOURCES = \
+	test.cpp \
+	test_optpass.cpp \
+	standalone_scaffolding.cpp \
+	../mesa/program/symbol_table.c
+glsl_test_LDADD = libglsl.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
+
+all-local: libglsl.la
+	$(MKDIR_P) $(top_builddir)/$(LIB_DIR); \
+	ln -f .libs/$(LIBGLSL) $(top_builddir)/$(LIB_DIR)/$(LIBGLSL);
diff --git a/src/glsl/glcpp/Makefile.am b/src/glsl/glcpp/Makefile.am
new file mode 100644
index 0000000..16de5ef
--- /dev/null
+++ b/src/glsl/glcpp/Makefile.am
@@ -0,0 +1,22 @@
+noinst_LTLIBRARIES = libglcpp.la
+noinst_PROGRAMS = glcpp
+
+AM_CPPFLAGS = \
+        -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
+
+libglcpp_la_SOURCES = \
+	glcpp-lex.l \
+	glcpp-parse.y \
+	pp.c \
+	../../mesa/program/hash_table.c \
+	../ralloc.c
+
+glcpp_SOURCES = glcpp.c
+glcpp_LDADD = libglcpp.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 005f4d5..5c7775c 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
 
 OSMESA_LIB_DEPS := -L$(TOP)/$(LIB_DIR) -l$(GLAPI_LIB) $(OSMESA_LIB_DEPS)
 
diff --git a/src/mesa/sources.mak b/src/mesa/sources.mak
index b57a10e..0768890 100644
--- a/src/mesa/sources.mak
+++ b/src/mesa/sources.mak
@@ -368,7 +368,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
-- 
1.7.3.4



More information about the mesa-dev mailing list