[Mesa-dev] [PATCH v2] build: Don't cross-compile GLSL builtin compiler
Kenneth Graunke
kenneth at whitecape.org
Thu Nov 1 18:20:46 PDT 2012
On 10/19/2012 05:03 AM, Thierry Reding wrote:
> 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 <thierry.reding at avionic-design.de>
> ---
> Changes in v2:
> - extend CFLAGS_FOR_BUILD and CXXFLAGS_FOR_BUILD with necessary flags
> (-Wall -fno-builtin-memcmp -fno-strict-aliasing) and introduce the new
> DEFINES_FOR_BUILD variable
> - remove builtin_function.cpp from BUILT_SOURCES
> - clean up source file lists for glsl_compiler and drop the now unneeded
> libglslcommon.la convenience library
>
> configure.ac | 40 ++++++-
> m4/ax_prog_cc_for_build.m4 | 140 ++++++++++++++++++++++
> m4/ax_prog_cxx_for_build.m4 | 123 +++++++++++++++++++
> 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 | 0
> 8 files changed, 385 insertions(+), 40 deletions(-)
> create mode 100644 m4/ax_prog_cc_for_build.m4
> create mode 100644 m4/ax_prog_cxx_for_build.m4
> create mode 100644 src/glsl/builtin_compiler/.gitignore
> create mode 100644 src/glsl/builtin_compiler/Makefile.am
> rename src/glsl/{ => builtin_compiler}/builtin_stubs.cpp (100%)
>
> diff --git a/configure.ac b/configure.ac
> index ca24856..f0edd95 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -10,7 +10,7 @@ AC_INIT([Mesa], [9.1.0],
> [https://bugs.freedesktop.org/enter_bug.cgi?product=Mesa])
> AC_CONFIG_AUX_DIR([bin])
> AC_CONFIG_MACRO_DIR([m4])
> -AC_CANONICAL_HOST
> +AC_CANONICAL_SYSTEM
> AM_INIT_AUTOMAKE([foreign])
>
> dnl http://people.gnome.org/~walters/docs/build-api.txt
> @@ -24,9 +24,6 @@ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
>
> m4_ifdef([AM_PROG_AR], [AM_PROG_AR])
>
> -LT_PREREQ([2.2])
> -LT_INIT([disable-static])
> -
> dnl Set internal versions
> OSMESA_VERSION=8
> AC_SUBST([OSMESA_VERSION])
> @@ -45,7 +42,9 @@ LIBKMS_XORG_REQUIRED=1.0.0
> dnl Check for progs
> AC_PROG_CPP
> AC_PROG_CC
> +AX_PROG_CC_FOR_BUILD
> AC_PROG_CXX
> +AX_PROG_CXX_FOR_BUILD
> AM_PROG_CC_C_O
> AM_PROG_AS
> AC_CHECK_PROGS([MAKE], [gmake make])
> @@ -54,6 +53,9 @@ AC_PROG_SED
> AC_PROG_MKDIR_P
> AC_PATH_PROG([MKDEP], [makedepend])
>
> +LT_PREREQ([2.2])
> +LT_INIT([disable-static])
> +
> if test "x$MKDEP" = "x"; then
> AC_MSG_ERROR([makedepend is required to build Mesa])
> fi
> @@ -155,6 +157,21 @@ dnl Cache LDFLAGS and CPPFLAGS so we can add to them and restore later
> _SAVE_LDFLAGS="$LDFLAGS"
> _SAVE_CPPFLAGS="$CPPFLAGS"
>
> +dnl build host compiler macros
> +DEFINES_FOR_BUILD=""
> +AC_SUBST([DEFINES_FOR_BUILD])
> +case "$build_os" in
> +linux*|*-gnu*|gnu*)
> + DEFINES_FOR_BUILD="$DEFINES_FOR_BUILD -D_GNU_SOURCE"
> + ;;
> +solaris*)
> + DEFINES_FOR_BUILD="$DEFINES_FOR_BUILD -DSVR4"
> + ;;
> +cygwin*)
> + DEFINES_FOR_BUILD="$DEFINES_FOR_BUILD"
> + ;;
> +esac
> +
> dnl Compiler macros
> DEFINES=""
> AC_SUBST([DEFINES])
> @@ -177,6 +194,7 @@ if test "x$GCC" = xyes; then
> CFLAGS="$CFLAGS -Wall -std=gnu99"
> ;;
> *)
> + CFLAGS_FOR_BUILD="$CFLAGS_FOR_BUILD -Wall -std=c99"
> CFLAGS="$CFLAGS -Wall -std=c99"
> ;;
> esac
> @@ -206,13 +224,16 @@ if test "x$GCC" = xyes; then
> CFLAGS=$save_CFLAGS
>
> # Work around aliasing bugs - developers should comment this out
> + CFLAGS_FOR_BUILD="$CFLAGS_FOR_BUILD -fno-strict-aliasing"
> CFLAGS="$CFLAGS -fno-strict-aliasing"
>
> # gcc's builtin memcmp is slower than glibc's
> # http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43052
> + CFLAGS_FOR_BUILD="$CFLAGS_FOR_BUILD -fno-builtin-memcmp"
> CFLAGS="$CFLAGS -fno-builtin-memcmp"
> fi
> if test "x$GXX" = xyes; then
> + CXXFLAGS_FOR_BUILD="$CXXFLAGS_FOR_BUILD -Wall"
> CXXFLAGS="$CXXFLAGS -Wall"
>
> # Enable -fvisibility=hidden if using a gcc that supports it
> @@ -229,10 +250,12 @@ if test "x$GXX" = xyes; then
> CXXFLAGS=$save_CXXFLAGS
>
> # Work around aliasing bugs - developers should comment this out
> + CXXFLAGS_FOR_BUILD="$CXXFLAGS_FOR_BUILD -fno-strict-aliasing"
> CXXFLAGS="$CXXFLAGS -fno-strict-aliasing"
>
> # gcc's builtin memcmp is slower than glibc's
> # http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43052
> + CXXFLAGS_FOR_BUILD="$CXXFLAGS_FOR_BUILD -fno-builtin-memcmp"
> CXXFLAGS="$CXXFLAGS -fno-builtin-memcmp"
> fi
>
> @@ -316,6 +339,14 @@ AC_ARG_ENABLE([debug],
> [enable_debug=no]
> )
> if test "x$enable_debug" = xyes; then
> + DEFINES_FOR_BUILD="$DEFINES_FOR_BUILD -DDEBUG"
> + if test "x$GCC_FOR_BUILD" = xyes; then
> + CFLAGS_FOR_BUILD="$CFLAGS_FOR_BUILD -g"
> + fi
> + if test "x$GXX_FOR_BUILD" = xyes; then
> + CXXFLAGS_FOR_BUILD="$XXCFLAGS_FOR_BUILD -g"
Typo here...I changed this to $CXXFLAGS_FOR_BUILD and went ahead and
pushed it. Thanks so much for doing this, and I'm sorry it took so
absurdly long to get the patch upstream...
--Ken
More information about the mesa-dev
mailing list