Am 22.04.2016 um 10:35 schrieb Jose Fonseca: > These were being defined in SCons, but it's not practical: > > - we actually need to include Gallium headers from external source trees, with > completely disjoint build infrastructure, and it's unsustainable to > replicate the HAVE_xxx checks or even hard-coded defines across > everywhere. > > - checking compiler version via command line doesn't really work due to > Clang essentially being like a cameleon which can fake either GCC or > MSVC > > There's no change for autoconf. > --- > include/c99_compat.h | 44 ++++++++++++++++++++++++++++++++++++++++++++ > scons/gallium.py | 48 +++++------------------------------------------- > src/util/macros.h | 2 ++ > 3 files changed, 51 insertions(+), 43 deletions(-) > > diff --git a/include/c99_compat.h b/include/c99_compat.h > index b55ad9c..bfe655b 100644 > --- a/include/c99_compat.h > +++ b/include/c99_compat.h > @@ -135,4 +135,48 @@ test_c99_compat_h(const void * restrict a, > #endif > > > +/* Fallback definitions, for build systems other than autoconfig which don't > + * auto-detect these things. */ > +#ifdef HAVE_NO_AUTOCONF > + > +# ifndef _WIN32 > +# define HAVE_PTHREAD > +# define HAVE_POSIX_MEMALIGN > +# endif > + > +# ifdef __GNUC__ > +# if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 2) > +# error "GCC version 4.2 or higher required" > +# endif > + > + /* https://gcc.gnu.org/onlinedocs/gcc-4.2.4/gcc/Other-Builtins.html */ > +# define HAVE___BUILTIN_CLZ 1 > +# define HAVE___BUILTIN_CLZLL 1 > +# define HAVE___BUILTIN_CTZ 1 > +# define HAVE___BUILTIN_EXPECT 1 > +# define HAVE___BUILTIN_FFS 1 > +# define HAVE___BUILTIN_FFSLL 1 > +# define HAVE___BUILTIN_POPCOUNT 1 > +# define HAVE___BUILTIN_POPCOUNTLL 1 > + /* > https://gcc.gnu.org/onlinedocs/gcc-4.2.4/gcc/Function-Attributes.html */ > +# define HAVE_FUNC_ATTRIBUTE_FLATTEN 1 > +# define HAVE_FUNC_ATTRIBUTE_UNUSED 1 > +# define HAVE_FUNC_ATTRIBUTE_FORMAT 1 > +# define HAVE_FUNC_ATTRIBUTE_PACKED 1 > + > +# if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3) > + /* https://gcc.gnu.org/onlinedocs/gcc-4.3.6/gcc/Other-Builtins.html */ > +# define HAVE___BUILTIN_BSWAP32 1 > +# define HAVE___BUILTIN_BSWAP64 1 > +# endif > + > +# if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) > +# define HAVE___BUILTIN_UNREACHABLE 1 > +# endif > + > +# endif /* __GNUC__ */ > + > +#endif /* !HAVE_AUTOCONF */ > + > + > #endif /* _C99_COMPAT_H_ */ Is that the right file for putting them in?
But either way, for the series: Reviewed-by: Roland Scheidegger <srol...@vmware.com> > diff --git a/scons/gallium.py b/scons/gallium.py > index dd29c75..1a81962 100755 > --- a/scons/gallium.py > +++ b/scons/gallium.py > @@ -171,16 +171,6 @@ def generate(env): > # Allow override compiler and specify additional flags from environment > if os.environ.has_key('CC'): > env['CC'] = os.environ['CC'] > - # Update CCVERSION to match > - pipe = SCons.Action._subproc(env, [env['CC'], '--version'], > - stdin = 'devnull', > - stderr = 'devnull', > - stdout = subprocess.PIPE) > - if pipe.wait() == 0: > - line = pipe.stdout.readline() > - match = re.search(r'[0-9]+(\.[0-9]+)+', line) > - if match: > - env['CCVERSION'] = match.group(0) > if os.environ.has_key('CFLAGS'): > env['CCFLAGS'] += SCons.Util.CLVar(os.environ['CFLAGS']) > if os.environ.has_key('CXX'): > @@ -299,7 +289,11 @@ def generate(env): > > # C preprocessor options > cppdefines = [] > - cppdefines += ['__STDC_LIMIT_MACROS', '__STDC_CONSTANT_MACROS'] > + cppdefines += [ > + '__STDC_LIMIT_MACROS', > + '__STDC_CONSTANT_MACROS', > + 'HAVE_NO_AUTOCONF', > + ] > if env['build'] in ('debug', 'checked'): > cppdefines += ['DEBUG'] > else: > @@ -314,8 +308,6 @@ def generate(env): > '_BSD_SOURCE', > '_GNU_SOURCE', > '_DEFAULT_SOURCE', > - 'HAVE_PTHREAD', > - 'HAVE_POSIX_MEMALIGN', > ] > if env['platform'] == 'darwin': > cppdefines += [ > @@ -336,11 +328,6 @@ def generate(env): > if env['platform'] in ('linux', 'darwin'): > cppdefines += ['HAVE_XLOCALE_H'] > > - if env['platform'] == 'haiku': > - cppdefines += [ > - 'HAVE_PTHREAD', > - 'HAVE_POSIX_MEMALIGN' > - ] > if platform == 'windows': > cppdefines += [ > 'WIN32', > @@ -374,26 +361,6 @@ def generate(env): > print 'warning: Floating-point textures enabled.' > print 'warning: Please consult docs/patents.txt with your lawyer > before building Mesa.' > cppdefines += ['TEXTURE_FLOAT_ENABLED'] > - if gcc_compat: > - ccversion = env['CCVERSION'] > - cppdefines += [ > - 'HAVE___BUILTIN_EXPECT', > - 'HAVE___BUILTIN_FFS', > - 'HAVE___BUILTIN_FFSLL', > - 'HAVE_FUNC_ATTRIBUTE_FLATTEN', > - 'HAVE_FUNC_ATTRIBUTE_UNUSED', > - # GCC 3.0 > - 'HAVE_FUNC_ATTRIBUTE_FORMAT', > - 'HAVE_FUNC_ATTRIBUTE_PACKED', > - # GCC 3.4 > - 'HAVE___BUILTIN_CTZ', > - 'HAVE___BUILTIN_POPCOUNT', > - 'HAVE___BUILTIN_POPCOUNTLL', > - 'HAVE___BUILTIN_CLZ', > - 'HAVE___BUILTIN_CLZLL', > - ] > - if distutils.version.LooseVersion(ccversion) >= > distutils.version.LooseVersion('4.5'): > - cppdefines += ['HAVE___BUILTIN_UNREACHABLE'] > env.Append(CPPDEFINES = cppdefines) > > # C compiler options > @@ -401,13 +368,8 @@ def generate(env): > cxxflags = [] # C++ > ccflags = [] # C & C++ > if gcc_compat: > - ccversion = env['CCVERSION'] > if env['build'] == 'debug': > ccflags += ['-O0'] > - elif env['gcc'] and ccversion.startswith('4.2.'): > - # gcc 4.2.x optimizer is broken > - print "warning: gcc 4.2.x optimizer is broken -- disabling > optimizations" > - ccflags += ['-O0'] > else: > ccflags += ['-O3'] > if env['gcc']: > diff --git a/src/util/macros.h b/src/util/macros.h > index 0c8958f..8721b30 100644 > --- a/src/util/macros.h > +++ b/src/util/macros.h > @@ -26,6 +26,8 @@ > > #include <assert.h> > > +#include "c99_compat.h" > + > /* Compute the size of an array */ > #ifndef ARRAY_SIZE > # define ARRAY_SIZE(x) (sizeof(x) / sizeof(*(x))) > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev