From b914c84a81b606624c99302b4024c92f620af689 Mon Sep 17 00:00:00 2001 From: stevenknight Date: Mon, 16 Jun 2003 04:21:51 +0000 Subject: [PATCH] Add support for the Intel C Compiler. (Gary Oberbrunner) git-svn-id: http://scons.tigris.org/svn/scons/trunk@714 fdb21ef1-2011-0410-befe-b5e4ea1792b1 --- bin/files | 1 + doc/man/scons.1 | 6 ++- src/CHANGES.txt | 4 ++ src/engine/MANIFEST.in | 1 + src/engine/SCons/Tool/__init__.py | 4 +- src/engine/SCons/Tool/icl.py | 88 +++++++++++++++++++++++++++++++ test/import.py | 1 + 7 files changed, 101 insertions(+), 4 deletions(-) create mode 100644 src/engine/SCons/Tool/icl.py diff --git a/bin/files b/bin/files index 1b42f74c..c4b19a38 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 2dd18b63..214401f7 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 9b326d36..6cb5ed8d 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 870d4301..53c8c8a3 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 ca730be8..486637f8 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 00000000..1b653e38 --- /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 /Bin/icl.exe, + the include dir is /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 c76c47d0..d66f8e5c 100644 --- a/test/import.py +++ b/test/import.py @@ -66,6 +66,7 @@ tools = [ 'hpcc', 'hplink', 'icc', + 'icl', 'ifl', 'ilink', 'jar', -- 2.26.2