scons: Try to support building 64bit binaries on 32bit windows.
authorJosé Fonseca <jfonseca@vmware.com>
Fri, 11 Feb 2011 16:44:13 +0000 (16:44 +0000)
committerJosé Fonseca <jfonseca@vmware.com>
Fri, 11 Feb 2011 20:09:26 +0000 (20:09 +0000)
SConstruct
common.py
scons/gallium.py
src/glsl/SConscript

index a2c20471f7a446455fb4923ef9130abf3f8dceb0..3908840086a126984da51b2d7e0b48c8fad19b8c 100644 (file)
@@ -132,7 +132,7 @@ Export('env')
 #
 
 # Create host environent
-if env['platform'] != common.host_platform:
+if env['crosscompile'] and env['platform'] != 'embedded':
     host_env = Environment(
         options = opts,
         # no tool used
index cbb61629d27c8800fa4a8982798f91946fb3ecfd..e7941262e5264c115884be25236356d1d089c67f 100644 (file)
--- a/common.py
+++ b/common.py
@@ -14,13 +14,7 @@ import SCons.Script.SConscript
 #######################################################################
 # Defaults
 
-_platform_map = {
-       'linux2': 'linux',
-       'win32': 'windows',
-}
-
-host_platform = sys.platform
-host_platform = _platform_map.get(host_platform, host_platform)
+host_platform = _platform.system().lower()
 
 # Search sys.argv[] for a "platform=foo" argument since we don't have
 # an 'env' variable at this point.
@@ -29,8 +23,6 @@ if 'platform' in SCons.Script.ARGUMENTS:
 else:
     target_platform = host_platform
 
-cross_compiling = target_platform != host_platform
-
 _machine_map = {
        'x86': 'x86',
        'i386': 'x86',
@@ -52,7 +44,7 @@ host_machine = _machine_map.get(host_machine, 'generic')
 default_machine = host_machine
 default_toolchain = 'default'
 
-if target_platform == 'windows' and cross_compiling:
+if target_platform == 'windows' and host_platform != 'windows':
     default_machine = 'x86'
     default_toolchain = 'crossmingw'
 
index ea09b5d0d693a59fa1c97355efd9b143d727983e..f9a2e592db8746063ad3ba82f8c3f191eb78d04a 100755 (executable)
@@ -35,6 +35,7 @@ import os
 import os.path
 import re
 import subprocess
+import platform as _platform
 
 import SCons.Action
 import SCons.Builder
@@ -191,6 +192,23 @@ def generate(env):
     gcc = env['gcc']
     msvc = env['msvc']
 
+    # Determine whether we are cross compiling; in particular, whether we need
+    # to compile code generators with a different compiler as the target code.
+    host_platform = _platform.system().lower()
+    host_machine = os.environ.get('PROCESSOR_ARCHITECTURE', _platform.machine())
+    host_machine = {
+        'x86': 'x86',
+        'i386': 'x86',
+        'i486': 'x86',
+        'i586': 'x86',
+        'i686': 'x86',
+        'ppc' : 'ppc',
+        'x86_64': 'x86_64',
+    }.get(host_machine, 'generic')
+    env['crosscompile'] = platform != host_platform
+    if machine == 'x86_64' and host_machine != 'x86_64':
+        env['crosscompile'] = True
+
     # Backwards compatability with the debug= profile= options
     if env['build'] == 'debug':
         if not env['debug']:
index f55d7de744f72831ea6d7e591b462c5ec0555755..ca17ddd6a2cbaa4ef53b50de1e84475c2976dd92 100644 (file)
@@ -82,7 +82,7 @@ sources = [
 ] 
 
 
-if env['platform'] == common.host_platform:
+if not env['crosscompile'] or env['platform'] == 'embedded':
     if env['msvc']:
         env.Prepend(CPPPATH = ['#/src/getopt'])
         env.PrependUnique(LIBS = [getopt])
@@ -105,9 +105,6 @@ if env['platform'] == common.host_platform:
 
     Export('builtin_glsl_function')
 
-    if common.cross_compiling:
-        Return()
-
 sources += builtin_glsl_function
 
 glsl = env.ConvenienceLibrary(