From 9948a33653088c2b9409f12924857643989657a5 Mon Sep 17 00:00:00 2001 From: Thierry Reding Date: Fri, 19 Oct 2012 14:03:01 +0200 Subject: build: Don't cross-compile GLSL builtin compiler The builtin_compiler binary is used during the build process to generate code for the builtin GLSL functions. Since this binary needs to be run on the build host, it must not be cross-compiled. This patch fixes the build system to compile a second version of the source files and the builtin_compiler binary itself for the build system. It does so by defining the CC_FOR_BUILD and CXX_FOR_BUILD variables, which are searched for by the configure script and point to the location of native C and C++ compilers. In order for this to work properly, builtin_function.cpp is removed from BUILT_SOURCES, otherwise the build system would try to generate it before having had a chance to descend into the builtin_compiler subdirectory. With the builtin_compiler and glsl_compiler now being generated at different stages, the build instructions for glsl_compiler can be simplified a bit. Signed-off-by: Thierry Reding Acked-by: Kenneth Graunke --- src/glsl/.gitignore | 1 - src/glsl/Makefile.am | 48 ++++++--------------- src/glsl/builtin_compiler/.gitignore | 6 +++ src/glsl/builtin_compiler/Makefile.am | 67 +++++++++++++++++++++++++++++ src/glsl/builtin_compiler/builtin_stubs.cpp | 39 +++++++++++++++++ src/glsl/builtin_stubs.cpp | 39 ----------------- 6 files changed, 125 insertions(+), 75 deletions(-) create mode 100644 src/glsl/builtin_compiler/.gitignore create mode 100644 src/glsl/builtin_compiler/Makefile.am create mode 100644 src/glsl/builtin_compiler/builtin_stubs.cpp delete mode 100644 src/glsl/builtin_stubs.cpp (limited to 'src') diff --git a/src/glsl/.gitignore b/src/glsl/.gitignore index 81240b95254..068d4874b3f 100644 --- a/src/glsl/.gitignore +++ b/src/glsl/.gitignore @@ -4,6 +4,5 @@ glsl_parser.cc glsl_parser.h glsl_parser.output builtin_function.cpp -builtin_compiler glsl_test /Makefile diff --git a/src/glsl/Makefile.am b/src/glsl/Makefile.am index 1ecc0036c90..6fb3d2d9dc7 100644 --- a/src/glsl/Makefile.am +++ b/src/glsl/Makefile.am @@ -19,9 +19,7 @@ # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS # IN THE SOFTWARE. - -# builtin_compiler is built before libglsl to generate builtin_function.cpp for libglsl. -# For this to work, a dummy version of builtin_function.cpp, builtin_stubs.cpp, is used. +SUBDIRS = builtin_compiler glcpp AM_CPPFLAGS = \ -I$(top_srcdir)/include \ @@ -38,32 +36,23 @@ AM_LFLAGS = --nounistd -o$(LEX_OUTPUT_ROOT).c include Makefile.sources -noinst_LTLIBRARIES = libglslcommon.la libglsl.la -noinst_PROGRAMS = glsl_compiler glsl_test builtin_compiler +noinst_LTLIBRARIES = libglsl.la +noinst_PROGRAMS = glsl_compiler glsl_test -# common sources for builtin_compiler and libglsl -libglslcommon_la_SOURCES = \ +libglsl_la_SOURCES = \ glsl_lexer.ll \ glsl_parser.cc \ $(LIBGLSL_FILES) \ - $(LIBGLSL_CXX_FILES) - -libglslcommon_la_LIBADD = glcpp/libglcpp.la - -# common sources for builtin_compiler and glsl_compiler -GLSL2_SOURCES = \ - $(top_srcdir)/src/mesa/program/hash_table.c \ - $(top_srcdir)/src/mesa/program/symbol_table.c \ - $(GLSL_COMPILER_CXX_FILES) - -libglsl_la_SOURCES = \ + $(LIBGLSL_CXX_FILES) \ builtin_function.cpp -libglsl_la_LIBADD = libglslcommon.la +libglsl_la_LIBADD = glcpp/libglcpp.la libglsl_la_LDFLAGS = glsl_compiler_SOURCES = \ - $(GLSL2_SOURCES) + $(top_srcdir)/src/mesa/program/hash_table.c \ + $(top_srcdir)/src/mesa/program/symbol_table.c \ + $(GLSL_COMPILER_CXX_FILES) glsl_compiler_LDADD = libglsl.la @@ -76,12 +65,6 @@ glsl_test_SOURCES = \ glsl_test_LDADD = libglsl.la -builtin_compiler_SOURCES = \ - $(GLSL2_SOURCES) \ - builtin_stubs.cpp - -builtin_compiler_LDADD = libglslcommon.la - # automake <=1.11 and automake >=1.12 have different conventions for naming C++ header files # made by yacc. To work with both, we write our own rule rather than using automake's. # When (if) we require automake >=1.12 in configure.ac, this can be removed, and we can use @@ -89,16 +72,11 @@ builtin_compiler_LDADD = libglslcommon.la glsl_parser.cc glsl_parser.h: glsl_parser.yy $(AM_V_GEN) $(YACC) -v -o glsl_parser.cc -p "_mesa_glsl_" --defines=glsl_parser.h $< -BUILT_SOURCES = glsl_parser.h builtin_function.cpp -CLEANFILES = glsl_lexer.cc glsl_parser.cc $(BUILT_SOURCES) - -builtin_function.cpp: $(srcdir)/builtins/profiles/* $(srcdir)/builtins/ir/* $(srcdir)/builtins/glsl/* $(srcdir)/builtins/tools/generate_builtins.py $(srcdir)/builtins/tools/texture_builtins.py builtin_compiler$(EXEEXT) - $(AM_V_GEN) $(PYTHON2) $(PYTHON_FLAGS) $(srcdir)/builtins/tools/generate_builtins.py ./builtin_compiler > builtin_function.cpp || rm -f builtin_function.cpp - -glcpp/libglcpp.la: - cd glcpp ; $(MAKE) $(AM_MAKEFLAGS) +BUILT_SOURCES = glsl_parser.h +CLEANFILES = glsl_lexer.cc glsl_parser.cc $(BUILT_SOURCES) builtin_function.cpp -SUBDIRS = glcpp +builtin_function.cpp: $(srcdir)/builtins/profiles/* $(srcdir)/builtins/ir/* $(srcdir)/builtins/glsl/* $(srcdir)/builtins/tools/generate_builtins.py $(srcdir)/builtins/tools/texture_builtins.py builtin_compiler/builtin_compiler$(BUILD_EXEEXT) + $(AM_V_GEN) $(PYTHON2) $(PYTHON_FLAGS) $(srcdir)/builtins/tools/generate_builtins.py builtin_compiler/builtin_compiler$(BUILD_EXEEXT) > builtin_function.cpp || rm -f builtin_function.cpp # Provide compatibility with scripts for the old Mesa build system for # a while by putting a link to the library in the current directory. diff --git a/src/glsl/builtin_compiler/.gitignore b/src/glsl/builtin_compiler/.gitignore new file mode 100644 index 00000000000..40c551baa22 --- /dev/null +++ b/src/glsl/builtin_compiler/.gitignore @@ -0,0 +1,6 @@ +builtin_compiler +glcpp-lex.c +glcpp-parse.c +glcpp-parse.h +glcpp-parse.output +/Makefile diff --git a/src/glsl/builtin_compiler/Makefile.am b/src/glsl/builtin_compiler/Makefile.am new file mode 100644 index 00000000000..eeac4245d83 --- /dev/null +++ b/src/glsl/builtin_compiler/Makefile.am @@ -0,0 +1,67 @@ +# Copyright © 2012 Jon TURNEY +# Copyright © 2012 Thierry Reding +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice (including the next +# paragraph) shall be included in all copies or substantial portions of the +# Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +CC = @CC_FOR_BUILD@ +CFLAGS = @CFLAGS_FOR_BUILD@ +CPP = @CPP_FOR_BUILD@ +CPPFLAGS = @CPPFLAGS_FOR_BUILD@ +CXX = @CXX_FOR_BUILD@ +CXXFLAGS = @CXXFLAGS_FOR_BUILD@ +LD = @LD_FOR_BUILD@ +LDFLAGS = @LDFLAGS_FOR_BUILD@ + +AM_CFLAGS = \ + -I $(top_srcdir)/src/mapi \ + -I $(top_srcdir)/src/mesa \ + -I $(GLSL_SRCDIR) \ + -I $(GLSL_SRCDIR)/glcpp \ + $(DEFINES_FOR_BUILD) + +AM_CXXFLAGS = $(AM_CFLAGS) + +AM_YFLAGS = -v -d -p "glcpp_parser_" +AM_LFLAGS = --nounistd -o$(LEX_OUTPUT_ROOT).c + +include ../Makefile.sources + +noinst_PROGRAMS = builtin_compiler + +builtin_compiler_SOURCES = \ + $(GLSL_SRCDIR)/glcpp/glcpp-lex.l \ + $(GLSL_SRCDIR)/glcpp/glcpp-parse.y \ + $(LIBGLCPP_FILES) \ + $(GLSL_SRCDIR)/glsl_lexer.ll \ + $(GLSL_SRCDIR)/glsl_parser.cc \ + $(LIBGLSL_FILES) \ + $(LIBGLSL_CXX_FILES) \ + $(top_srcdir)/src/mesa/program/hash_table.c \ + $(top_srcdir)/src/mesa/program/symbol_table.c \ + $(GLSL_COMPILER_CXX_FILES) \ + builtin_stubs.cpp + +BUILT_SOURCES = \ + glcpp-lex.c \ + glcpp-parse.c \ + glcpp-parse.h \ + glsl_lexer.cc + +CLEANFILES = $(BUILT_SOURCES) diff --git a/src/glsl/builtin_compiler/builtin_stubs.cpp b/src/glsl/builtin_compiler/builtin_stubs.cpp new file mode 100644 index 00000000000..dfa5d324e7f --- /dev/null +++ b/src/glsl/builtin_compiler/builtin_stubs.cpp @@ -0,0 +1,39 @@ +/* + * Copyright © 2010 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +#include +#include "glsl_parser_extras.h" + +/* A dummy file. When compiling prototypes, we don't care about builtins. + * We really don't want to half-compile builtin_functions.cpp and fail, though. + */ +void +_mesa_glsl_release_functions(void) +{ +} + +void +_mesa_glsl_initialize_functions(_mesa_glsl_parse_state *state) +{ + (void) state; +} diff --git a/src/glsl/builtin_stubs.cpp b/src/glsl/builtin_stubs.cpp deleted file mode 100644 index dfa5d324e7f..00000000000 --- a/src/glsl/builtin_stubs.cpp +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright © 2010 Intel Corporation - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -#include -#include "glsl_parser_extras.h" - -/* A dummy file. When compiling prototypes, we don't care about builtins. - * We really don't want to half-compile builtin_functions.cpp and fail, though. - */ -void -_mesa_glsl_release_functions(void) -{ -} - -void -_mesa_glsl_initialize_functions(_mesa_glsl_parse_state *state) -{ - (void) state; -} -- cgit v1.2.3