I like the idea as it should prevent future thrash. There are a couple comments below.
On 02/26/2015 08:51 AM, Jose Fonseca wrote: > 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. > --- > 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 5fbb7bc..22dc023 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 d21d8a9..a4db210 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 4b62057..27a8b3f 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 0bd4282..1d3853e 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 31546a7..f13fcb2 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 85f2ac1..51c3f05 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 5a0a643..b466a3b 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 36ddba8..3d32279 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) I don't think this is necessary for src/loader. Isn't that only built for DRI? > libloader_la_SOURCES = $(LOADER_C_FILES) > diff --git a/src/mapi/Makefile.am b/src/mapi/Makefile.am > index 6794682..b0a6c8c 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 b6cb8f1..5e9a820 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) Forgive my ignorance about the build system... does applying this here affect building files down in src/mesa/drivers/dri? > ARCH_LIBS = > > diff --git a/src/util/Makefile.am b/src/util/Makefile.am > index 9af2330..29b66e7 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) \ _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev