summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosé Fonseca <jrfonseca@tungstengraphics.com>2008-04-25 18:16:25 +0900
committerJosé Fonseca <jrfonseca@tungstengraphics.com>2008-04-25 18:16:25 +0900
commit35460fc91cf5311a4cbaee3c577ad8a95ccab1a1 (patch)
tree93a729c942bac01233206eda24b61e32e57c27ce
parentb4c7a48d5c9ed2f9535a17d6c05cd55178c7880a (diff)
scons: Teach scons about user-land windows.
Actually, more like get rid of all our hacks when compiling for user-land windows. Only MSVC is supported atm though.
-rw-r--r--SConstruct37
-rw-r--r--common.py159
-rw-r--r--winddk.py101
3 files changed, 158 insertions, 139 deletions
diff --git a/SConstruct b/SConstruct
index 4785e39ec5..9b46e6ade2 100644
--- a/SConstruct
+++ b/SConstruct
@@ -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']
diff --git a/common.py b/common.py
index b836a8b41d..51cbd90f1d 100644
--- 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()
diff --git a/winddk.py b/winddk.py
index c112329cd6..58de183857 100644
--- 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'] = {}