scons: Teach scons about user-land windows.
authorJosé Fonseca <jrfonseca@tungstengraphics.com>
Fri, 25 Apr 2008 09:16:25 +0000 (18:16 +0900)
committerJosé Fonseca <jrfonseca@tungstengraphics.com>
Fri, 25 Apr 2008 09:16:25 +0000 (18:16 +0900)
Actually, more like get rid of all our hacks when compiling for
user-land windows.

Only MSVC is supported atm though.

SConstruct
common.py
winddk.py

index 4785e39ec566deb2ca80c897cdd51adc27f41382..9b46e6ade2b7fe6489475ccbca5c82f520d98eb2 100644 (file)
@@ -65,7 +65,7 @@ platform = env['platform']
 # derived options
 x86 = machine == 'x86'
 gcc = platform in ('linux', 'freebsd', 'darwin')
-msvc = platform in ('win32', 'winddk')
+msvc = platform in ('windows', 'winddk')
 
 Export([
        'debug', 
@@ -84,8 +84,6 @@ Export([
 # TODO: put the compiler specific settings in separate files
 # TODO: auto-detect as much as possible
 
-common.generate(env)
-
 if platform == 'winddk':
        env.Tool('winddk', ['.'])
        
@@ -96,37 +94,7 @@ if platform == 'winddk':
                env['CRT_INC_PATH'],
        ])
 
-# Optimization flags
-if gcc:
-       if debug:
-               env.Append(CFLAGS = '-O0 -g3')
-               env.Append(CXXFLAGS = '-O0 -g3')
-       else:
-               env.Append(CFLAGS = '-O3 -g3')
-               env.Append(CXXFLAGS = '-O3 -g3')
-
-       env.Append(CFLAGS = '-Wall -Wmissing-prototypes -Wno-long-long -ffast-math -pedantic')
-       env.Append(CXXFLAGS = '-Wall -pedantic')
-       
-       # Be nice to Eclipse
-       env.Append(CFLAGS = '-fmessage-length=0')
-       env.Append(CXXFLAGS = '-fmessage-length=0')
-
-if msvc:
-       cflags = [
-               #'/Wp64', # enable 64 bit porting warnings
-       ]
-       env.Append(CFLAGS = cflags)
-       env.Append(CXXFLAGS = cflags)
-       # Put debugging information in a separate .pdb file for each object file as
-       # descrived in the scons manpage
-       env['CCPDBFLAGS'] = '/Zi /Fd${TARGET}.pdb'
-
-# Defines
-if debug:
-       env.Append(CPPDEFINES = ['DEBUG'])
-else:
-       env.Append(CPPDEFINES = ['NDEBUG'])
+common.generate(env)
 
 
 # Includes
@@ -188,7 +156,6 @@ if llvm:
        # See also http://www.scons.org/wiki/UsingPkgConfig
        env.ParseConfig('llvm-config --cflags --ldflags --libs')
        env.Append(CPPDEFINES = ['MESA_LLVM'])
-       env.Append(CXXFLAGS = ['-Wno-long-long'])
         # Force C++ linkage
        env['LINK'] = env['CXX']
 
index b836a8b41dbfeb78054d1f2a5aca2cc866b6cae7..51cbd90f1dfdc9e293159c31e776100eeb63c006 100644 (file)
--- a/common.py
+++ b/common.py
@@ -34,7 +34,7 @@ default_machine = _machine_map.get(default_machine, 'generic')
 
 if default_platform in ('linux', 'freebsd', 'darwin'):
        default_dri = 'yes'
-elif default_platform in ('winddk',):
+elif default_platform in ('winddk', 'windows'):
        default_dri = 'no'
 else:
        default_dri = 'no'
@@ -51,7 +51,7 @@ def AddOptions(opts):
        opts.Add(EnumOption('machine', 'use machine-specific assembly code', default_machine,
                                                                                         allowed_values=('generic', 'x86', 'x86_64')))
        opts.Add(EnumOption('platform', 'target platform', default_platform,
-                                                                                        allowed_values=('linux', 'cell', 'winddk')))
+                                                                                        allowed_values=('linux', 'cell', 'windows', 'winddk')))
        opts.Add(BoolOption('llvm', 'use LLVM', 'no'))
        opts.Add(BoolOption('dri', 'build DRI drivers', default_dri))
 
@@ -133,8 +133,161 @@ def generate(env):
        # FIXME: this is already too late
        #if env.get('quiet', False):
        #       quietCommandLines(env)
-       createConvenienceLibBuilder(env)
+       
+       # shortcuts
+       debug = env['debug']
+       machine = env['machine']
+       platform = env['platform']
+       x86 = env['machine'] == 'x86'
+       gcc = env['platform'] in ('linux', 'freebsd', 'darwin')
+       msvc = env['platform'] in ('windows', 'winddk')
+
+       # C preprocessor options
+       cppdefines = []
+       if debug:
+               cppdefines += ['DEBUG']
+       else:
+               cppdefines += ['NDEBUG']
+       if platform == 'windows':
+               cppdefines += [
+                       'WIN32', 
+                       '_WINDOWS', 
+                       '_UNICODE',
+                       'UNICODE',
+                       # http://msdn2.microsoft.com/en-us/library/6dwk3a1z.aspx,
+                       'WIN32_LEAN_AND_MEAN',
+                       'VC_EXTRALEAN', 
+               ]
+               if debug:
+                       cppdefines += ['_DEBUG']
+       if platform == 'winddk':
+               # Mimic WINDDK's builtin flags. See also:
+               # - WINDDK's bin/makefile.new i386mk.inc for more info.
+               # - buildchk_wxp_x86.log files, generated by the WINDDK's build
+               # - http://alter.org.ua/docs/nt_kernel/vc8_proj/
+               cppdefines += [
+                       ('_X86_', '1'), 
+                       ('i386', '1'), 
+                       'STD_CALL', 
+                       ('CONDITION_HANDLING', '1'),
+                       ('NT_INST', '0'), 
+                       ('WIN32', '100'),
+                       ('_NT1X_', '100'),
+                       ('WINNT', '1'),
+                       ('_WIN32_WINNT', '0x0501'), # minimum required OS version
+                       ('WINVER', '0x0501'),
+                       ('_WIN32_IE', '0x0603'),
+                       ('WIN32_LEAN_AND_MEAN', '1'),
+                       ('DEVL', '1'),
+                       ('__BUILDMACHINE__', 'WinDDK'),
+                       ('FPO', '0'),
+               ]
+               if debug:
+                       cppdefines += [('DBG', 1)]
+       if platform == 'windows':
+               cppdefines += ['PIPE_SUBSYSTEM_USER']
+       if platform == 'winddk':
+               cppdefines += ['PIPE_SUBSYSTEM_KERNEL']
+       env.Append(CPPDEFINES = cppdefines)
+
+       # C compiler options
+       cflags = []
+       if gcc:
+               if debug:
+                       cflags += ['-O0', '-g3']
+               else:
+                       cflags += ['-O3', '-g3']
+               cflags += [
+                       '-Wall', 
+                       '-Wmissing-prototypes',
+                       '-Wno-long-long',
+                       '-ffast-math',
+                       '-pedantic',
+                       '-fmessage-length=0', # be nice to Eclipse 
+               ]
+       if msvc:
+               # See also:
+               # - http://msdn2.microsoft.com/en-us/library/y0zzbyt4.aspx
+               # - cl /?
+               if debug:
+                       cflags += [
+                         '/Od', # disable optimizations
+                         '/Oi', # enable intrinsic functions
+                         '/Oy-', # disable frame pointer omission
+                       ]
+               else:
+                       cflags += [
+                         '/Ox', # maximum optimizations
+                         '/Oi', # enable intrinsic functions
+                         '/Os', # favor code space
+                       ]
+               if platform == 'windows':
+                       cflags += [
+                               # TODO
+                               #'/Wp64', # enable 64 bit porting warnings
+                       ]
+               if platform == 'winddk':
+                       cflags += [
+                               '/Zl', # omit default library name in .OBJ
+                               '/Zp8', # 8bytes struct member alignment
+                               '/Gy', # separate functions for linker
+                               '/Gm-', # disable minimal rebuild
+                               '/W3', # warning level
+                               '/WX', # treat warnings as errors
+                               '/Gz', # __stdcall Calling convention
+                               '/GX-', # disable C++ EH
+                               '/GR-', # disable C++ RTTI
+                               '/GF', # enable read-only string pooling
+                               '/GS', # enable security checks
+                               '/G6', # optimize for PPro, P-II, P-III
+                               '/Ze', # enable extensions
+                               #'/Gi-', # ???
+                               '/QIfdiv-', # disable Pentium FDIV fix
+                               #'/hotpatch', # ???
+                               #'/Z7', #enable old-style debug info
+                       ]
+               # Put debugging information in a separate .pdb file for each object file as
+               # descrived in the scons manpage
+               env['CCPDBFLAGS'] = '/Zi /Fd${TARGET}.pdb'
+       env.Append(CFLAGS = cflags)
+       env.Append(CXXFLAGS = cflags)
 
+       # Linker options
+       if platform == 'winddk':
+               # See also:
+               # - http://msdn2.microsoft.com/en-us/library/y0zzbyt4.aspx
+               env.Append(LINKFLAGS = [
+                       '/merge:_PAGE=PAGE',
+                       '/merge:_TEXT=.text',
+                       '/section:INIT,d',
+                       '/opt:ref',
+                       '/opt:icf',
+                       '/ignore:4198,4010,4037,4039,4065,4070,4078,4087,4089,4221',
+                       '/incremental:no',
+                       '/fullbuild',
+                       '/release',
+                       '/nodefaultlib',
+                       '/wx',
+                       '/debug',
+                       '/debugtype:cv',
+                       '/version:5.1',
+                       '/osversion:5.1',
+                       '/functionpadmin:5',
+                       '/safeseh',
+                       '/pdbcompress',
+                       '/stack:0x40000,0x1000',
+                       '/driver', 
+                       '/align:0x80',
+                       '/subsystem:native,5.01',
+                       '/base:0x10000',
+                       
+                       '/entry:DrvEnableDriver',
+               ])
+
+
+       createConvenienceLibBuilder(env)
+       
+       
        # for debugging
        #print env.Dump()
 
index c112329cd69f7ddf0a5089068564e4e8007cac96..58de18385769a994f5f8f49260d249418814e565 100644 (file)
--- a/winddk.py
+++ b/winddk.py
@@ -89,105 +89,6 @@ def get_winddk_paths(env, version=None):
     exe_path = string.join(exe_paths, os.pathsep )
     return (include_path, lib_path, exe_path)
 
-def set_winddk_flags(env):
-    """Mimic WINDDK's builtin flags.
-
-    See also:
-    - WINDDK's bin/makefile.new i386mk.inc for more info.
-    - buildchk_wxp_x86.log files, generated by the WINDDK's build
-    - http://alter.org.ua/docs/nt_kernel/vc8_proj/
-    """
-    
-    cppdefines = [
-        ('_X86_', '1'), 
-        ('i386', '1'), 
-        'STD_CALL', 
-        ('CONDITION_HANDLING', '1'),
-        ('NT_INST', '0'), 
-        ('WIN32', '100'),
-        ('_NT1X_', '100'),
-        ('WINNT', '1'),
-        ('_WIN32_WINNT', '0x0501'), # minimum required OS version
-        ('WINVER', '0x0501'),
-        ('_WIN32_IE', '0x0603'),
-        ('WIN32_LEAN_AND_MEAN', '1'),
-        ('DEVL', '1'),
-        ('__BUILDMACHINE__', 'WinDDK'),
-        ('FPO', '0'),
-    ]
-    if env.get('DEBUG', False):
-         cppdefines += [
-              ('DBG', 1),
-         ]
-    env.Append(CPPDEFINES = cppdefines)
-
-    # See also:
-    # - http://msdn2.microsoft.com/en-us/library/y0zzbyt4.aspx
-    # - cl /?
-    cflags = [
-        '/Zl', # omit default library name in .OBJ
-        '/Zp8', # 8bytes struct member alignment
-        '/Gy', # separate functions for linker
-        '/Gm-', # disable minimal rebuild
-        '/W3', # warning level
-        '/WX', # treat warnings as errors
-        '/Gz', # __stdcall Calling convention
-        '/GX-', # disable C++ EH
-        '/GR-', # disable C++ RTTI
-        '/GF', # enable read-only string pooling
-        '/GS', # enable security checks
-        '/G6', # optimize for PPro, P-II, P-III
-        '/Ze', # enable extensions
-        #'/Gi-', # ???
-        '/QIfdiv-', # disable Pentium FDIV fix
-        #'/hotpatch', # ???
-        #'/Z7', #enable old-style debug info
-    ]
-    if env.get('debug', False):
-        cflags += [
-          '/Od', # disable optimizations
-          '/Oi', # enable intrinsic functions
-          '/Oy-', # disable frame pointer omission
-        ]
-    else:
-        cflags += [
-          '/Ox', # maximum optimizations
-          '/Oi', # enable intrinsic functions
-          '/Os', # favor code space
-        ]
-    env.Append(CFLAGS = cflags)
-    env.Append(CXXFLAGS = cflags)
-    
-    # See also:
-    # - http://msdn2.microsoft.com/en-us/library/y0zzbyt4.aspx
-    env.Append(LINKFLAGS = [
-        '/merge:_PAGE=PAGE',
-        '/merge:_TEXT=.text',
-        '/section:INIT,d',
-        '/opt:ref',
-        '/opt:icf',
-        '/ignore:4198,4010,4037,4039,4065,4070,4078,4087,4089,4221',
-        '/incremental:no',
-        '/fullbuild',
-        '/release',
-        '/nodefaultlib',
-        '/wx',
-        '/debug',
-        '/debugtype:cv',
-        '/version:5.1',
-        '/osversion:5.1',
-        '/functionpadmin:5',
-        '/safeseh',
-        '/pdbcompress',
-        '/stack:0x40000,0x1000',
-        '/driver', 
-        '/align:0x80',
-        '/subsystem:native,5.01',
-        '/base:0x10000',
-        
-        '/entry:DrvEnableDriver',
-    ])
-
 def validate_vars(env):
     """Validate the PCH and PCHSTOP construction variables."""
     if env.has_key('PCH') and env['PCH']:
@@ -314,8 +215,6 @@ def generate(env):
 
     SCons.Tool.mslink.generate(env)
 
-    set_winddk_flags(env)
-    
     if not env.has_key('ENV'):
         env['ENV'] = {}