summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteven Knight <knight@baldmt.com>2003-06-16 04:21:51 (GMT)
committerSteven Knight <knight@baldmt.com>2003-06-16 04:21:51 (GMT)
commitba5e0ae491d9078daa733ab0de6732db11a5c852 (patch)
tree6a90aab218f679feab39e8992e837a90658b8055
parentd0acf56c9c4ee38ab3c709eb173a42bf3d6d4349 (diff)
downloadSCons-ba5e0ae491d9078daa733ab0de6732db11a5c852.zip
SCons-ba5e0ae491d9078daa733ab0de6732db11a5c852.tar.gz
SCons-ba5e0ae491d9078daa733ab0de6732db11a5c852.tar.bz2
Add support for the Intel C Compiler. (Gary Oberbrunner)
-rw-r--r--bin/files1
-rw-r--r--doc/man/scons.16
-rw-r--r--src/CHANGES.txt4
-rw-r--r--src/engine/MANIFEST.in1
-rw-r--r--src/engine/SCons/Tool/__init__.py4
-rw-r--r--src/engine/SCons/Tool/icl.py88
-rw-r--r--test/import.py1
7 files changed, 101 insertions, 4 deletions
diff --git a/bin/files b/bin/files
index 1b42f74..c4b19a3 100644
--- a/bin/files
+++ b/bin/files
@@ -49,6 +49,7 @@
./SCons/Tool/hpcc.py
./SCons/Tool/hplink.py
./SCons/Tool/icc.py
+./SCons/Tool/icl.py
./SCons/Tool/ifl.py
./SCons/Tool/ilink.py
./SCons/Tool/jar.py
diff --git a/doc/man/scons.1 b/doc/man/scons.1
index 2dd18b6..214401f 100644
--- a/doc/man/scons.1
+++ b/doc/man/scons.1
@@ -870,6 +870,7 @@ g++
g77
gs
icc
+icl
ifl
ilink
gas
@@ -894,10 +895,11 @@ pdflatex
pdftex
rmic
sgiar
-sgias
sgicc
-sgif77
sgilink
+sunar
+suncc
+sunlink
tar
tex
yacc
diff --git a/src/CHANGES.txt b/src/CHANGES.txt
index 9b326d3..6cb5ed8 100644
--- a/src/CHANGES.txt
+++ b/src/CHANGES.txt
@@ -51,6 +51,10 @@ RELEASE 0.15 - XXX
- Don't update the .sconsign files when run with -n.
+ From Gary Oberbrunner:
+
+ - Add support for the Intel C Compiler (icl.exe).
+
From Anthony Roach
- Fix Import('*').
diff --git a/src/engine/MANIFEST.in b/src/engine/MANIFEST.in
index 870d430..53c8c8a 100644
--- a/src/engine/MANIFEST.in
+++ b/src/engine/MANIFEST.in
@@ -64,6 +64,7 @@ SCons/Tool/javac.py
SCons/Tool/JavaCommon.py
SCons/Tool/javah.py
SCons/Tool/icc.py
+SCons/Tool/icl.py
SCons/Tool/ifl.py
SCons/Tool/ilink.py
SCons/Tool/latex.py
diff --git a/src/engine/SCons/Tool/__init__.py b/src/engine/SCons/Tool/__init__.py
index ca730be..486637f 100644
--- a/src/engine/SCons/Tool/__init__.py
+++ b/src/engine/SCons/Tool/__init__.py
@@ -152,8 +152,8 @@ def tool_list(platform, env):
# change these search orders, update the man page as well.
if str(platform) == 'win32':
"prefer Microsoft tools on Windows"
- linkers = ['mslink', 'gnulink', 'ilink', 'linkloc' ]
- c_compilers = ['msvc', 'mingw', 'gcc', 'icc' ]
+ linkers = ['mslink', 'gnulink', 'xilink', 'ilink', 'linkloc' ]
+ c_compilers = ['msvc', 'mingw', 'gcc', 'icl', 'icc' ]
assemblers = ['masm', 'nasm', 'gas', '386asm' ]
fortran_compilers = ['g77', 'ifl']
ars = ['mslib', 'ar']
diff --git a/src/engine/SCons/Tool/icl.py b/src/engine/SCons/Tool/icl.py
new file mode 100644
index 0000000..1b653e3
--- /dev/null
+++ b/src/engine/SCons/Tool/icl.py
@@ -0,0 +1,88 @@
+"""engine.SCons.Tool.icl
+
+Tool-specific initialization for the Intel C/C++ compiler.
+
+There normally shouldn't be any need to import this module directly.
+It will usually be imported through the generic SCons.Tool.Tool()
+selection method.
+
+"""
+
+__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
+
+import os.path
+import string
+
+import SCons.Tool.msvc
+import SCons.Util
+
+# Find Intel compiler:
+# Could enumerate subkeys here to be more flexible.
+def get_intel_compiler_top(version):
+ """
+ Return the main path to the top-level dir of the Intel compiler,
+ using the given version or latest if 0.
+ The compiler will be in <top>/Bin/icl.exe,
+ the include dir is <top>/Include, etc.
+ """
+
+ if version == 0:
+ version = "7.0" # XXX: should scan for latest
+
+ if not SCons.Util.can_read_reg:
+ raise SCons.Errors.InternalError, "No Windows registry module was found"
+
+ K = ('Software\\Intel\\' +
+ 'Intel(R) C/C++ Compiler for 32-bit apps, Version ' + version)
+ # Note: v5 had slightly different key:
+ # HKCU\Software\Intel\Intel C/C++ Compiler for 32-bit apps, Version 5.0
+ # Note no (R).
+ try:
+ k = SCons.Util.RegOpenKeyEx(SCons.Util.HKEY_CURRENT_USER, K)
+ except SCons.Util.RegError:
+ return None
+
+ try:
+ # On my machine, this returns:
+ # c:\Program Files\Intel\Compiler70
+ top = SCons.Util.RegQueryValueEx(k, "Directory")[0]
+ except SCons.Util.RegError:
+ raise SCons.Errors.InternalError, "%s was not found in the registry."%K
+
+ if os.path.exists(os.path.join(top, "ia32")):
+ top = os.path.join(top, "ia32")
+
+ if not os.path.exists(os.path.join(top, "Bin", "icl.exe")):
+ raise SCons.Errors.InternalError, "Can't find Intel compiler in %s"%top
+
+ return top
+
+
+def generate(env):
+ """Add Builders and construction variables for icl to an Environment."""
+ SCons.Tool.msvc.generate(env)
+
+ try:
+ icltop = get_intel_compiler_top(0)
+ except (SCons.Util.RegError, SCons.Errors.InternalError):
+ icltop = None
+
+ if icltop:
+ env.PrependENVPath('INCLUDE', os.path.join(icltop, 'Include'))
+ env.PrependENVPath('PATH', os.path.join(icltop, 'Bin'))
+
+ env['CC'] = 'icl'
+ env['CXX'] = 'icl'
+ env['LINK'] = 'xilink'
+
+ env['ENV']['INTEL_LICENSE_FILE'] = r'C:\Program Files\Common Files\Intel\Licenses'
+
+def exists(env):
+ try:
+ top = get_intel_compiler_top(0)
+ except (SCons.Util.RegError, SCons.Errors.InternalError):
+ top = None
+
+ if not top:
+ return env.Detect('icl')
+ return top is not None
diff --git a/test/import.py b/test/import.py
index c76c47d..d66f8e5 100644
--- a/test/import.py
+++ b/test/import.py
@@ -66,6 +66,7 @@ tools = [
'hpcc',
'hplink',
'icc',
+ 'icl',
'ifl',
'ilink',
'jar',