Mesa (gallium-0.2): scons: Use parallel builds by default.

Jose Fonseca jrfonseca at kemper.freedesktop.org
Tue Feb 10 18:13:11 UTC 2009


Module: Mesa
Branch: gallium-0.2
Commit: 1e8177ee178b131afa86d874b062a8ae3fae0cca
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=1e8177ee178b131afa86d874b062a8ae3fae0cca

Author: José Fonseca <jfonseca at vmware.com>
Date:   Tue Feb 10 18:11:56 2009 +0000

scons: Use parallel builds by default.

---

 scons/gallium.py |   23 +++++++++++++++++++++++
 scons/generic.py |   24 ++++++++++++++++++++++++
 2 files changed, 47 insertions(+), 0 deletions(-)

diff --git a/scons/gallium.py b/scons/gallium.py
index 065c53c..fc1ed08 100644
--- a/scons/gallium.py
+++ b/scons/gallium.py
@@ -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:
diff --git a/scons/generic.py b/scons/generic.py
index 05f7356..2323196 100644
--- a/scons/generic.py
+++ b/scons/generic.py
@@ -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




More information about the mesa-commit mailing list