scons: Update to target WinCE 6.0.
authorJosé Fonseca <jrfonseca@tungstengraphics.com>
Mon, 23 Jun 2008 03:49:45 +0000 (12:49 +0900)
committerJosé Fonseca <jrfonseca@tungstengraphics.com>
Mon, 23 Jun 2008 10:44:37 +0000 (19:44 +0900)
scons/gallium.py
scons/wcesdk.py [moved from scons/evc.py with 59% similarity]

index 1787adb..217a1d6 100644 (file)
@@ -94,7 +94,7 @@ def generate(env):
        if platform == 'winddk':
                env.Tool('winddk')
        elif platform == 'wince':
-               env.Tool('evc')
+               env.Tool('wcesdk')
        else:
                env.Tool('default')
 
@@ -165,16 +165,20 @@ def generate(env):
                        cppdefines += [('DBG', 1)]
        if platform == 'wince':
                cppdefines += [
-                       ('_WIN32_WCE', '500'), 
-                       'WCE_PLATFORM_STANDARDSDK_500',
-                       '_i386_',
-                       ('UNDER_CE', '500'),
+                       '_CRT_SECURE_NO_DEPRECATE',
+                       '_USE_32BIT_TIME_T',
                        'UNICODE',
                        '_UNICODE',
-                       '_X86_',
+                       ('UNDER_CE', '600'),
+                       ('_WIN32_WCE', '0x600'),
+                       'WINCEOEM',
+                       'WINCEINTERNAL',
+                       'WIN32',
+                       'STRICT',
                        'x86',
-                       '_USRDLL',
-                       'TEST_EXPORTS' ,
+                       '_X86_',
+                       'INTERNATIONAL',
+                       ('INTLMSG_CODEPAGE', '1252'),
                ]
        if platform == 'windows':
                cppdefines += ['PIPE_SUBSYSTEM_WINDOWS_USER']
@@ -262,9 +266,18 @@ def generate(env):
                                #'/Z7', #enable old-style debug info
                        ]
                if platform == 'wince':
+                       # See also C:\WINCE600\public\common\oak\misc\makefile.def
                        cflags += [
-                               '/Gs8192',
                                '/GF', # enable read-only string pooling
+                               '/GR-', # disable C++ RTTI
+                               '/GS', # enable security checks
+                               # Allow disabling language conformance to maintain backward compat
+                               #'/Zc:wchar_t-', # don't force wchar_t as native type, instead of typedef
+                               #'/Zc:forScope-', # don't enforce Standard C++ for scoping rules
+                               #'/wd4867',
+                               #'/wd4430',
+                               #'/MT',
+                               #'/U_MT',
                        ]
                # Automatic pdb generation
                # See http://scons.tigris.org/issues/show_bug.cgi?id=1656
similarity index 59%
rename from scons/evc.py
rename to scons/wcesdk.py
index 22a9260..bdaab7d 100644 (file)
@@ -1,6 +1,6 @@
-"""evc
+"""wcesdk
 
-Tool-specific initialization for Microsoft eMbedded Visual C++.
+Tool-specific initialization for Microsoft Window CE SDKs.
 
 """
 
@@ -44,7 +44,7 @@ import msvc_sa
 import mslib_sa
 import mslink_sa
 
-def get_evc_paths(env, version=None):
+def get_wce500_paths(env):
     """Return a 3-tuple of (INCLUDE, LIB, PATH) as the values
     of those three environment variables that should be set
     in order to execute the MSVC tools properly."""
@@ -76,6 +76,58 @@ def get_evc_paths(env, version=None):
     exe_path = string.join(exe_paths, os.pathsep )
     return (include_path, lib_path, exe_path)
 
+def get_wce600_paths(env):
+    """Return a 3-tuple of (INCLUDE, LIB, PATH) as the values
+    of those three environment variables that should be set
+    in order to execute the MSVC tools properly."""
+    
+    exe_paths = []
+    lib_paths = []
+    include_paths = []
+
+    # See also C:\WINCE600\public\common\oak\misc\wince.bat
+
+    os_version = os.environ.get('_winceosver', '600')
+    wince_root = os.environ.get('_winceroot', r'C:\WINCE600')
+    platform_root = os.environ.get('_platformroot', os.path.join(wince_root, 'platform'))
+    sdk_root = os.environ.get('_sdkroot' ,os.path.join(wince_root, 'sdk'))
+
+    platform_root = os.environ.get('_platformroot', os.path.join(wince_root, 'platform'))
+    sdk_root = os.environ.get('_sdkroot' ,os.path.join(wince_root, 'sdk'))
+
+    host_cpu = os.environ.get('_hostcputype', 'i386')
+    target_cpu = os.environ.get('_tgtcpu', 'x86')
+
+    if env['debug']:
+        build = 'debug'
+    else:
+        build = 'retail'
+
+    try:
+        project_root = os.environ['_projectroot']
+    except KeyError:
+        # No project root defined -- use the common stuff instead
+        project_root = os.path.join(wince_root, 'public', 'common')
+
+    exe_paths.append( os.path.join(sdk_root, 'bin', host_cpu) )
+    exe_paths.append( os.path.join(sdk_root, 'bin', host_cpu, target_cpu) )
+    exe_paths.append( os.path.join(wince_root, 'common', 'oak', 'bin', host_cpu) )
+    exe_paths.append( os.path.join(wince_root, 'common', 'oak', 'misc') )
+
+    include_paths.append( os.path.join(project_root, 'sdk', 'inc') )
+    include_paths.append( os.path.join(project_root, 'oak', 'inc') )
+    include_paths.append( os.path.join(project_root, 'ddk', 'inc') )
+    include_paths.append( os.path.join(sdk_root, 'CE', 'inc') )
+    
+    lib_paths.append( os.path.join(project_root, 'sdk', 'lib', target_cpu, build) )
+    lib_paths.append( os.path.join(project_root, 'oak', 'lib', target_cpu, build) )
+    lib_paths.append( os.path.join(project_root, 'ddk', 'lib', target_cpu, build) )
+
+    include_path = string.join( include_paths, os.pathsep )
+    lib_path = string.join(lib_paths, os.pathsep )
+    exe_path = string.join(exe_paths, os.pathsep )
+    return (include_path, lib_path, exe_path)
+
 def generate(env):
 
     msvc_sa.generate(env)
@@ -86,10 +138,8 @@ def generate(env):
         env['ENV'] = {}
     
     try:
-        include_path, lib_path, exe_path = get_evc_paths(env)
+        include_path, lib_path, exe_path = get_wce600_paths(env)
 
-        # since other tools can set these, we just make sure that the
-        # relevant stuff from WINDDK is in there somewhere.
         env.PrependENVPath('INCLUDE', include_path)
         env.PrependENVPath('LIB', lib_path)
         env.PrependENVPath('PATH', exe_path)