From 80c5bd7ef0319d14cd0362a763d9d15e9ba2c946 Mon Sep 17 00:00:00 2001 From: Jose Fonseca Date: Thu, 26 Feb 2015 16:46:48 +0000 Subject: [PATCH] configure: Leverage gcc warn options to enable safe use of C99 features where possible. The main objective of this change is to enable Linux developers to use more of C99 throughout Mesa, with confidence that the portions that need to be built with MSVC -- and only those portions --, stay portable. This is achieved by using the appropriate -Werror= options only on the places they need to be used. Unfortunately we still need MSVC 2008 on a few portions of the code (namely llvmpipe and its dependencies). I hope to eventually eliminate this so that we can use C99 everywhere, but there are technical/logistic challenges (specifically, newer Windows SDKs no longer bundle MSVC, instead require a full installation of Visual Studio, and that has hindered adoption of newer MSVC versions on our build processes.) Thankfully we have more directy control over our OpenGL driver, which is why we're now able to migrate to MSVC 2013 for most of the tree. Reviewed-by: Brian Paul Reviewed-by: Kenneth Graunke --- configure.ac | 17 +++++++++++++++++ src/egl/main/Makefile.am | 1 + src/gallium/auxiliary/Makefile.am | 7 +++++-- src/gallium/drivers/llvmpipe/Makefile.am | 6 ++++-- src/gallium/state_trackers/egl/Makefile.am | 3 ++- src/gallium/targets/egl-static/Makefile.am | 3 ++- src/glsl/Makefile.am | 8 ++++++-- src/loader/Makefile.am | 1 + src/mapi/Makefile.am | 4 +++- src/mesa/Makefile.am | 10 ++++++++-- src/util/Makefile.am | 3 ++- 11 files changed, 51 insertions(+), 12 deletions(-) diff --git a/configure.ac b/configure.ac index 2ba79ef7255..c5abbfd0784 100644 --- a/configure.ac +++ b/configure.ac @@ -263,6 +263,18 @@ if test "x$GCC" = xyes; then # gcc's builtin memcmp is slower than glibc's # http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43052 CFLAGS="$CFLAGS -fno-builtin-memcmp" + + # Flags to help ensure that certain portions of the code -- and only those + # portions -- can be built with MSVC: + # - src/util, src/gallium/auxiliary, and src/gallium/drivers/llvmpipe needs + # to build with Windows SDK 7.0.7600, which bundles MSVC 2008 + # - non-Linux/Posix OpenGL portions needs to build on MSVC 2013 (which + # supports most of C99) + # - the rest has no compiler compiler restrictions + MSVC2013_COMPAT_CFLAGS="-Werror=vla -Werror=pointer-arith" + MSVC2013_COMPAT_CXXFLAGS="-Werror=vla -Werror=pointer-arith" + MSVC2008_COMPAT_CFLAGS="$MSVC2013_COMPAT_CFLAGS -Werror=declaration-after-statement" + MSVC2008_COMPAT_CXXFLAGS="$MSVC2013_COMPAT_CXXFLAGS" fi if test "x$GXX" = xyes; then CXXFLAGS="$CXXFLAGS -Wall" @@ -288,6 +300,11 @@ if test "x$GXX" = xyes; then CXXFLAGS="$CXXFLAGS -fno-builtin-memcmp" fi +AC_SUBST([MSVC2013_COMPAT_CFLAGS]) +AC_SUBST([MSVC2013_COMPAT_CXXFLAGS]) +AC_SUBST([MSVC2008_COMPAT_CFLAGS]) +AC_SUBST([MSVC2008_COMPAT_CXXFLAGS]) + dnl even if the compiler appears to support it, using visibility attributes isn't dnl going to do anything useful currently on cygwin apart from emit lots of warnings case "$host_os" in diff --git a/src/egl/main/Makefile.am b/src/egl/main/Makefile.am index d21d8a9eb5a..a4db21016e9 100644 --- a/src/egl/main/Makefile.am +++ b/src/egl/main/Makefile.am @@ -26,6 +26,7 @@ AM_CFLAGS = \ -I$(top_srcdir)/src/gbm/main \ $(DEFINES) \ $(VISIBILITY_CFLAGS) \ + $(MSVC2013_COMPAT_CFLAGS) \ $(EGL_CFLAGS) \ -D_EGL_NATIVE_PLATFORM=$(EGL_NATIVE_PLATFORM) \ -D_EGL_DRIVER_SEARCH_DIR=\"$(libdir)/egl\" \ diff --git a/src/gallium/auxiliary/Makefile.am b/src/gallium/auxiliary/Makefile.am index 4b6205797ef..27a8b3fe420 100644 --- a/src/gallium/auxiliary/Makefile.am +++ b/src/gallium/auxiliary/Makefile.am @@ -12,9 +12,12 @@ noinst_LTLIBRARIES = libgallium.la AM_CFLAGS = \ -I$(top_srcdir)/src/gallium/auxiliary/util \ $(GALLIUM_CFLAGS) \ - $(VISIBILITY_CFLAGS) + $(VISIBILITY_CFLAGS) \ + $(MSVC2008_COMPAT_CXXFLAGS) -AM_CXXFLAGS = $(VISIBILITY_CXXFLAGS) +AM_CXXFLAGS = \ + $(VISIBILITY_CXXFLAGS) \ + $(MSVC2008_COMPAT_CXXFLAGS) libgallium_la_SOURCES = \ $(C_SOURCES) \ diff --git a/src/gallium/drivers/llvmpipe/Makefile.am b/src/gallium/drivers/llvmpipe/Makefile.am index 0bd4282632a..1d3853e41a6 100644 --- a/src/gallium/drivers/llvmpipe/Makefile.am +++ b/src/gallium/drivers/llvmpipe/Makefile.am @@ -25,10 +25,12 @@ include $(top_srcdir)/src/gallium/Automake.inc AM_CFLAGS = \ $(GALLIUM_DRIVER_CFLAGS) \ - $(LLVM_CFLAGS) + $(LLVM_CFLAGS) \ + $(MSVC2008_COMPAT_CFLAGS) AM_CXXFLAGS= \ $(GALLIUM_DRIVER_CXXFLAGS) \ - $(LLVM_CXXFLAGS) + $(LLVM_CXXFLAGS) \ + $(MSVC2008_COMPAT_CXXFLAGS) noinst_LTLIBRARIES = libllvmpipe.la diff --git a/src/gallium/state_trackers/egl/Makefile.am b/src/gallium/state_trackers/egl/Makefile.am index 31546a778cf..f13fcb2ccb8 100644 --- a/src/gallium/state_trackers/egl/Makefile.am +++ b/src/gallium/state_trackers/egl/Makefile.am @@ -27,7 +27,8 @@ include $(top_srcdir)/src/gallium/Automake.inc AM_CFLAGS = \ $(GALLIUM_CFLAGS) \ - $(VISIBILITY_CFLAGS) + $(VISIBILITY_CFLAGS) \ + $(MSVC2013_COMPAT_CFLAGS) AM_CPPFLAGS = \ -I$(top_srcdir)/src/egl/main \ diff --git a/src/gallium/targets/egl-static/Makefile.am b/src/gallium/targets/egl-static/Makefile.am index 0056276469f..653fab15104 100644 --- a/src/gallium/targets/egl-static/Makefile.am +++ b/src/gallium/targets/egl-static/Makefile.am @@ -31,7 +31,8 @@ include $(top_srcdir)/src/gallium/Automake.inc AM_CFLAGS = \ - $(GALLIUM_TARGET_CFLAGS) + $(GALLIUM_TARGET_CFLAGS) \ + $(MSVC2013_COMPAT_CFLAGS) AM_CPPFLAGS = \ -I$(top_srcdir)/src/gallium/state_trackers/egl \ diff --git a/src/glsl/Makefile.am b/src/glsl/Makefile.am index 5a0a643daf2..b466a3b5c52 100644 --- a/src/glsl/Makefile.am +++ b/src/glsl/Makefile.am @@ -33,8 +33,12 @@ AM_CPPFLAGS = \ -I$(top_srcdir)/src/gtest/include \ -I$(top_builddir)/src/glsl/nir \ $(DEFINES) -AM_CFLAGS = $(VISIBILITY_CFLAGS) -AM_CXXFLAGS = $(VISIBILITY_CXXFLAGS) +AM_CFLAGS = \ + $(VISIBILITY_CFLAGS) \ + $(MSVC2013_COMPAT_CFLAGS) +AM_CXXFLAGS = \ + $(VISIBILITY_CXXFLAGS) \ + $(MSVC2013_COMPAT_CXXFLAGS) EXTRA_DIST = tests glcpp/tests README TODO glcpp/README \ glsl_lexer.ll \ diff --git a/src/loader/Makefile.am b/src/loader/Makefile.am index 36ddba82bd3..3d32279ea26 100644 --- a/src/loader/Makefile.am +++ b/src/loader/Makefile.am @@ -30,6 +30,7 @@ libloader_la_CPPFLAGS = \ -I$(top_srcdir)/include \ -I$(top_srcdir)/src \ $(VISIBILITY_CFLAGS) \ + $(MSVC2013_COMPAT_CFLAGS) \ $(LIBUDEV_CFLAGS) libloader_la_SOURCES = $(LOADER_C_FILES) diff --git a/src/mapi/Makefile.am b/src/mapi/Makefile.am index 67946829198..b0a6c8ca2d8 100644 --- a/src/mapi/Makefile.am +++ b/src/mapi/Makefile.am @@ -39,7 +39,9 @@ EXTRA_DIST = \ glapi/SConscript \ shared-glapi/SConscript -AM_CFLAGS = $(PTHREAD_CFLAGS) +AM_CFLAGS = \ + $(PTHREAD_CFLAGS) \ + $(MSVC2013_COMPAT_CFLAGS) AM_CPPFLAGS = \ $(DEFINES) \ $(SELINUX_CFLAGS) \ diff --git a/src/mesa/Makefile.am b/src/mesa/Makefile.am index b6cb8f1117b..5e9a82098fb 100644 --- a/src/mesa/Makefile.am +++ b/src/mesa/Makefile.am @@ -136,8 +136,14 @@ noinst_LTLIBRARIES += libmesagallium.la endif AM_CPPFLAGS = $(DEFINES) $(INCLUDE_DIRS) -AM_CFLAGS = $(LLVM_CFLAGS) $(VISIBILITY_CFLAGS) -AM_CXXFLAGS = $(LLVM_CFLAGS) $(VISIBILITY_CXXFLAGS) +AM_CFLAGS = \ + $(LLVM_CFLAGS) \ + $(VISIBILITY_CFLAGS) \ + $(MSVC2013_COMPAT_CFLAGS) +AM_CXXFLAGS = \ + $(LLVM_CFLAGS) \ + $(VISIBILITY_CXXFLAGS) \ + $(MSVC2013_COMPAT_CXXFLAGS) ARCH_LIBS = diff --git a/src/util/Makefile.am b/src/util/Makefile.am index 9af233059bb..29b66e70e9d 100644 --- a/src/util/Makefile.am +++ b/src/util/Makefile.am @@ -34,7 +34,8 @@ libmesautil_la_CPPFLAGS = \ -I$(top_srcdir)/src/gallium/include \ -I$(top_srcdir)/src/gallium/auxiliary \ $(SHA1_CFLAGS) \ - $(VISIBILITY_CFLAGS) + $(VISIBILITY_CFLAGS) \ + $(MSVC2008_COMPAT_CFLAGS) libmesautil_la_SOURCES = \ $(MESA_UTIL_FILES) \ -- 2.11.0