[Mesa-dev] [PATCH 2/2] configure: Leverage gcc warn options to enable safe use of C99 features where possible.
Emil Velikov
emil.l.velikov at gmail.com
Fri Feb 27 14:20:22 PST 2015
On 27/02/15 15:59, Ian Romanick wrote:
> I like the idea as it should prevent future thrash. There are a couple
> comments below.
>
True. Not to mention that having -Werror=pointer-arith and
-Werror=declaration-after-statement does not sounds too bad either.
Although I would suspect that either one might cause a bit of chaos atm
- i.e. we do (ab)use them rather often.
> 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"
Jose,
I'm guessing that we might want to move the CXXFLAGS within the GXX
check below. Or maybe compact the two conditionals, as they are almost
identical - if you're feeling bored, that is :)
...
>> 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?
>
There are quite a few users actually
src/egl/drivers/dri2/Makefile.am
src/gallium/auxiliary/pipe-loader/Makefile.am
src/gallium/targets/*/Makefile.am
src/gbm/Makefile.am
src/glx/Makefile.am
...
>> 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?
>
It affects only the objects (_PROGRAMS, _LTLIBRARIES) built within this
Makefile. Namely:
libmesa_sse41.la
libmesa.la
libmesagallium.la
gen_matypes
Those are used in many places, but at that stage the above CFLAGS are
irrelevant.
-Emil
More information about the mesa-dev
mailing list