gallium: Identify each Windows platform individually from scons.
[mesa.git] / common.py
index 51cbd90f1dfdc9e293159c31e776100eeb63c006..b6251d3960d8c804a3dd74199bfca64f46392fb6 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', 'windows'):
+elif default_platform in ('winddk', 'windows', 'wince'):
        default_dri = 'no'
 else:
        default_dri = 'no'
@@ -44,14 +44,21 @@ else:
 # Common options
 
 def AddOptions(opts):
-       from SCons.Options.BoolOption import BoolOption
-       from SCons.Options.EnumOption import EnumOption
-       opts.Add(BoolOption('debug', 'build debug version', 'no'))
+       try:
+               from SCons.Options.BoolOption import BoolOption
+       except ImportError:
+               from SCons.Variables.BoolVariable import BoolVariable as BoolOption
+       try:
+               from SCons.Options.EnumOption import EnumOption
+       except ImportError:
+               from SCons.Variables.EnumVariable import EnumVariable as EnumOption
+       opts.Add(BoolOption('debug', 'debug build', 'no'))
+       opts.Add(BoolOption('profile', 'profile build', 'no'))
        #opts.Add(BoolOption('quiet', 'quiet command lines', 'no'))
        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', 'windows', 'winddk')))
+                                                                                        allowed_values=('linux', 'cell', 'windows', 'winddk', 'wince')))
        opts.Add(BoolOption('llvm', 'use LLVM', 'no'))
        opts.Add(BoolOption('dri', 'build DRI drivers', default_dri))
 
@@ -119,6 +126,8 @@ def make_build_dir(env):
                build_subdir += '-' + env['machine']
        if env['debug']:
                build_subdir += "-debug"
+       if env['profile']:
+               build_subdir += "-profile"
        build_dir = os.path.join(build_topdir, build_subdir)
        # Place the .sconsign file on the builddir too, to avoid issues with different scons
        # versions building the same source file
@@ -140,7 +149,7 @@ def generate(env):
        platform = env['platform']
        x86 = env['machine'] == 'x86'
        gcc = env['platform'] in ('linux', 'freebsd', 'darwin')
-       msvc = env['platform'] in ('windows', 'winddk')
+       msvc = env['platform'] in ('windows', 'winddk', 'wince')
 
        # C preprocessor options
        cppdefines = []
@@ -148,6 +157,8 @@ def generate(env):
                cppdefines += ['DEBUG']
        else:
                cppdefines += ['NDEBUG']
+       if env['profile']:
+               cppdefines += ['PROFILE']
        if platform == 'windows':
                cppdefines += [
                        'WIN32', 
@@ -157,6 +168,7 @@ def generate(env):
                        # http://msdn2.microsoft.com/en-us/library/6dwk3a1z.aspx,
                        'WIN32_LEAN_AND_MEAN',
                        'VC_EXTRALEAN', 
+                       '_CRT_SECURE_NO_DEPRECATE',
                ]
                if debug:
                        cppdefines += ['_DEBUG']
@@ -184,10 +196,25 @@ def generate(env):
                ]
                if debug:
                        cppdefines += [('DBG', 1)]
+       if platform == 'wince':
+               cppdefines += [
+                       ('_WIN32_WCE', '500'), 
+                       'WCE_PLATFORM_STANDARDSDK_500',
+                       '_i386_',
+                       ('UNDER_CE', '500'),
+                       'UNICODE',
+                       '_UNICODE',
+                       '_X86_',
+                       'x86',
+                       '_USRDLL',
+                       'TEST_EXPORTS' ,
+               ]
        if platform == 'windows':
-               cppdefines += ['PIPE_SUBSYSTEM_USER']
+               cppdefines += ['PIPE_SUBSYSTEM_WINDOWS_USER']
        if platform == 'winddk':
-               cppdefines += ['PIPE_SUBSYSTEM_KERNEL']
+               cppdefines += ['PIPE_SUBSYSTEM_WINDOWS_DISPLAY']
+       if platform == 'wince':
+               cppdefines += ['PIPE_SUBSYSTEM_WINDOWS_CE']
        env.Append(CPPDEFINES = cppdefines)
 
        # C compiler options
@@ -197,6 +224,8 @@ def generate(env):
                        cflags += ['-O0', '-g3']
                else:
                        cflags += ['-O3', '-g3']
+               if env['profile']:
+                       cflags += ['-pg']
                cflags += [
                        '-Wall', 
                        '-Wmissing-prototypes',
@@ -221,10 +250,18 @@ def generate(env):
                          '/Oi', # enable intrinsic functions
                          '/Os', # favor code space
                        ]
+               if env['profile']:
+                       cflags += [
+                               '/Gh', # enable _penter hook function
+                               '/GH', # enable _pexit hook function
+                       ]
+               cflags += [
+                       '/W3', # warning level
+                       #'/Wp64', # enable 64 bit porting warnings
+               ]
                if platform == 'windows':
                        cflags += [
                                # TODO
-                               #'/Wp64', # enable 64 bit porting warnings
                        ]
                if platform == 'winddk':
                        cflags += [
@@ -232,22 +269,25 @@ def generate(env):
                                '/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-', # ???
+                               '/Gi-', # disable incremental compilation
                                '/QIfdiv-', # disable Pentium FDIV fix
-                               #'/hotpatch', # ???
+                               '/hotpatch', # prepares an image for hotpatching.
                                #'/Z7', #enable old-style debug info
                        ]
+               if platform == 'wince':
+                       cflags += [
+                               '/Gs8192',
+                               '/GF', # enable read-only string pooling
+                       ]
                # Put debugging information in a separate .pdb file for each object file as
-               # descrived in the scons manpage
+               # described in the scons manpage
                env['CCPDBFLAGS'] = '/Zi /Fd${TARGET}.pdb'
        env.Append(CFLAGS = cflags)
        env.Append(CXXFLAGS = cflags)