[Mesa-dev] [PATCH 1/4] scons: Move fallback HAVE_* definitions to headers.
Brian Paul
brianp at vmware.com
Mon Apr 25 15:14:34 UTC 2016
On 04/22/2016 02:35 AM, Jose Fonseca wrote:
> 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_ */
> 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)))
>
The series LGTM.
Reviewed-by: Brian Paul <brianp at vmware.com>
More information about the mesa-dev
mailing list