[Mesa-dev] [PATCH 5/5] automake: add src/glsl and src/glsl/glcpp
Matt Turner
mattst88 at gmail.com
Fri Dec 23 16:21:07 PST 2011
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 this is a good start to automaking Mesa.
configs/autoconf.in | 4 +-
configure.ac | 30 +++++--
src/glsl/Makefile | 172 --------------------------------------
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@
# 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
+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
+
+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
--
1.7.3.4
More information about the mesa-dev
mailing list