scons: Use parallel builds by default.
authorJosé Fonseca <jfonseca@vmware.com>
Tue, 10 Feb 2009 18:11:56 +0000 (18:11 +0000)
committerJosé Fonseca <jfonseca@vmware.com>
Tue, 10 Feb 2009 18:13:05 +0000 (18:13 +0000)
scons/gallium.py
scons/generic.py

index 065c53c54b2589ead2f5f499218b5df54bfcaf6a..fc1ed08e478529595fc7e0d14081144a0e20c7f7 100644 (file)
@@ -163,6 +163,25 @@ def createInstallMethods(env):
     env.AddMethod(install_shared_library, 'InstallSharedLibrary')
 
 
+def num_jobs():
+    try:
+        return int(os.environ['NUMBER_OF_PROCESSORS'])
+    except (ValueError, KeyError):
+        pass
+
+    try:
+        return os.sysconf('SC_NPROCESSORS_ONLN')
+    except (ValueError, OSError, AttributeError):
+        pass
+
+    try:
+        return int(os.popen2("sysctl -n hw.ncpu")[1].read())
+    except ValueError:
+        pass
+
+    return 1
+
+
 def generate(env):
     """Common environment generation code"""
 
@@ -207,6 +226,10 @@ def generate(env):
     env.SConsignFile(os.path.join(build_dir, '.sconsign'))
     env.CacheDir('build/cache')
 
+    # Parallel build
+    if env.GetOption('num_jobs') <= 1:
+        env.SetOption('num_jobs', num_jobs())
+
     # C preprocessor options
     cppdefines = []
     if debug:
index 05f7356b7622bcef78bee6495b26b2f3d9611299..23231966731573b9a90532ed9d2cfdd686af0e53 100644 (file)
@@ -206,6 +206,25 @@ _bool_map = {
 }
 
 
+def num_jobs():
+    try:
+        return int(os.environ['NUMBER_OF_PROCESSORS'])
+    except (ValueError, KeyError):
+        pass
+
+    try:
+        return os.sysconf('SC_NPROCESSORS_ONLN')
+    except (ValueError, OSError, AttributeError):
+        pass
+
+    try:
+        return int(os.popen2("sysctl -n hw.ncpu")[1].read())
+    except ValueError:
+        pass
+
+    return 1
+
+
 def generate(env):
     """Common environment generation code"""
 
@@ -266,6 +285,10 @@ def generate(env):
     # different scons versions building the same source file
     env.SConsignFile(os.path.join(env['build'], '.sconsign'))
 
+    # Parallel build
+    if env.GetOption('num_jobs') <= 1:
+        env.SetOption('num_jobs', num_jobs())
+
     # Summary
     print
     print '  platform=%s' % env['platform']
@@ -274,6 +297,7 @@ def generate(env):
     print '  debug=%s' % ['no', 'yes'][env['debug']]
     print '  profile=%s' % ['no', 'yes'][env['profile']]
     print '  build=%s' % env['build']
+    print '  %s jobs' % env.GetOption('num_jobs')
     print
 
     # Load tool chain