|
import platform |
|
|
|
from distutils.unixccompiler import UnixCCompiler |
|
from numpy.distutils.exec_command import find_executable |
|
from numpy.distutils.ccompiler import simple_version_match |
|
if platform.system() == 'Windows': |
|
from numpy.distutils.msvc9compiler import MSVCCompiler |
|
|
|
|
|
class IntelCCompiler(UnixCCompiler): |
|
"""A modified Intel compiler compatible with a GCC-built Python.""" |
|
compiler_type = 'intel' |
|
cc_exe = 'icc' |
|
cc_args = 'fPIC' |
|
|
|
def __init__(self, verbose=0, dry_run=0, force=0): |
|
UnixCCompiler.__init__(self, verbose, dry_run, force) |
|
|
|
v = self.get_version() |
|
mpopt = 'openmp' if v and v < '15' else 'qopenmp' |
|
self.cc_exe = ('icc -fPIC -fp-model strict -O3 ' |
|
'-fomit-frame-pointer -{}').format(mpopt) |
|
compiler = self.cc_exe |
|
|
|
if platform.system() == 'Darwin': |
|
shared_flag = '-Wl,-undefined,dynamic_lookup' |
|
else: |
|
shared_flag = '-shared' |
|
self.set_executables(compiler=compiler, |
|
compiler_so=compiler, |
|
compiler_cxx=compiler, |
|
archiver='xiar' + ' cru', |
|
linker_exe=compiler + ' -shared-intel', |
|
linker_so=compiler + ' ' + shared_flag + |
|
' -shared-intel') |
|
|
|
|
|
class IntelItaniumCCompiler(IntelCCompiler): |
|
compiler_type = 'intele' |
|
|
|
|
|
|
|
for cc_exe in map(find_executable, ['icc', 'ecc']): |
|
if cc_exe: |
|
break |
|
|
|
|
|
class IntelEM64TCCompiler(UnixCCompiler): |
|
""" |
|
A modified Intel x86_64 compiler compatible with a 64bit GCC-built Python. |
|
""" |
|
compiler_type = 'intelem' |
|
cc_exe = 'icc -m64' |
|
cc_args = '-fPIC' |
|
|
|
def __init__(self, verbose=0, dry_run=0, force=0): |
|
UnixCCompiler.__init__(self, verbose, dry_run, force) |
|
|
|
v = self.get_version() |
|
mpopt = 'openmp' if v and v < '15' else 'qopenmp' |
|
self.cc_exe = ('icc -std=c99 -m64 -fPIC -fp-model strict -O3 ' |
|
'-fomit-frame-pointer -{}').format(mpopt) |
|
compiler = self.cc_exe |
|
|
|
if platform.system() == 'Darwin': |
|
shared_flag = '-Wl,-undefined,dynamic_lookup' |
|
else: |
|
shared_flag = '-shared' |
|
self.set_executables(compiler=compiler, |
|
compiler_so=compiler, |
|
compiler_cxx=compiler, |
|
archiver='xiar' + ' cru', |
|
linker_exe=compiler + ' -shared-intel', |
|
linker_so=compiler + ' ' + shared_flag + |
|
' -shared-intel') |
|
|
|
|
|
if platform.system() == 'Windows': |
|
class IntelCCompilerW(MSVCCompiler): |
|
""" |
|
A modified Intel compiler compatible with an MSVC-built Python. |
|
""" |
|
compiler_type = 'intelw' |
|
compiler_cxx = 'icl' |
|
|
|
def __init__(self, verbose=0, dry_run=0, force=0): |
|
MSVCCompiler.__init__(self, verbose, dry_run, force) |
|
version_match = simple_version_match(start=r'Intel\(R\).*?32,') |
|
self.__version = version_match |
|
|
|
def initialize(self, plat_name=None): |
|
MSVCCompiler.initialize(self, plat_name) |
|
self.cc = self.find_exe('icl.exe') |
|
self.lib = self.find_exe('xilib') |
|
self.linker = self.find_exe('xilink') |
|
self.compile_options = ['/nologo', '/O3', '/MD', '/W3', |
|
'/Qstd=c99'] |
|
self.compile_options_debug = ['/nologo', '/Od', '/MDd', '/W3', |
|
'/Qstd=c99', '/Z7', '/D_DEBUG'] |
|
|
|
class IntelEM64TCCompilerW(IntelCCompilerW): |
|
""" |
|
A modified Intel x86_64 compiler compatible with |
|
a 64bit MSVC-built Python. |
|
""" |
|
compiler_type = 'intelemw' |
|
|
|
def __init__(self, verbose=0, dry_run=0, force=0): |
|
MSVCCompiler.__init__(self, verbose, dry_run, force) |
|
version_match = simple_version_match(start=r'Intel\(R\).*?64,') |
|
self.__version = version_match |
|
|