diff options
Diffstat (limited to 'scons/gallium.py')
| -rw-r--r-- | scons/gallium.py | 38 | 
1 files changed, 28 insertions, 10 deletions
| diff --git a/scons/gallium.py b/scons/gallium.py index bf6172b4d7..f4e82e8e0a 100644 --- a/scons/gallium.py +++ b/scons/gallium.py @@ -263,7 +263,11 @@ def generate(env):          if msvc and env['toolchain'] != 'winddk':              cppdefines += [                  'VC_EXTRALEAN', +                '_USE_MATH_DEFINES', +                '_CRT_SECURE_NO_WARNINGS',                  '_CRT_SECURE_NO_DEPRECATE', +                '_SCL_SECURE_NO_WARNINGS', +                '_SCL_SECURE_NO_DEPRECATE',              ]          if debug:              cppdefines += ['_DEBUG'] @@ -334,14 +338,27 @@ def generate(env):          else:              ccflags += ['-O3', '-g3']          if env['profile']: -            ccflags += ['-pg'] +            # See http://code.google.com/p/jrfonseca/wiki/Gprof2Dot#Which_options_should_I_pass_to_gcc_when_compiling_for_profiling? +            ccflags += [ +                '-fno-omit-frame-pointer', +                '-fno-optimize-sibling-calls', +            ]          if env['machine'] == 'x86':              ccflags += [                  '-m32',                  #'-march=pentium4', -                '-mmmx', '-msse', '-msse2', # enable SIMD intrinsics                  #'-mfpmath=sse',              ] +            if platform != 'windows': +                # XXX: -mstackrealign causes stack corruption on MinGW. Ditto +                # for -mincoming-stack-boundary=2.  Still enable it on other +                # platforms for now, but we can't rely on it for cross platform +                # code. We have to use __attribute__((force_align_arg_pointer)) +                # instead. +                ccflags += [ +                    '-mmmx', '-msse', '-msse2', # enable SIMD intrinsics +                    '-mstackrealign', # ensure stack is aligned +                ]          if env['machine'] == 'x86_64':              ccflags += ['-m64']          # See also: @@ -349,10 +366,11 @@ def generate(env):          ccflags += [              '-Wall',              '-Wmissing-field-initializers', -            '-Wpointer-arith', +            '-Werror=pointer-arith',              '-Wno-long-long',              '-ffast-math',              '-fmessage-length=0', # be nice to Eclipse +            '-fno-strict-aliasing', # we violate strict pointer aliasing rules          ]          cflags += [              '-Werror=declaration-after-statement', @@ -373,20 +391,15 @@ def generate(env):          else:              ccflags += [                  '/O2', # optimize for speed -                #'/fp:fast', # fast floating point  -            ] -        if env['profile']: -            ccflags += [ -                '/Gh', # enable _penter hook function -                '/GH', # enable _pexit hook function +                '/GL', # enable whole program optimization              ]          ccflags += [ +            '/fp:fast', # fast floating point               '/W3', # warning level              #'/Wp64', # enable 64 bit porting warnings          ]          if env['machine'] == 'x86':              ccflags += [ -                #'/QIfist', # Suppress _ftol                  #'/arch:SSE2', # use the SSE2 instructions              ]          if platform == 'windows': @@ -464,6 +477,11 @@ def generate(env):          ]          # Handle circular dependencies in the libraries          env['_LIBFLAGS'] = '-Wl,--start-group ' + env['_LIBFLAGS'] + ' -Wl,--end-group' +    if msvc: +        if not env['debug']: +            # enable Link-time Code Generation +            linkflags += ['/LTCG'] +            env.Append(ARFLAGS = ['/LTCG'])      if platform == 'windows' and msvc:          # See also:          # - http://msdn2.microsoft.com/en-us/library/y0zzbyt4.aspx | 
