python: added a variant to enable PGO + using --with-icc if compiled with Intel (#7496)

Added a variant to enable default optimizations for production builds.
Uses --with-icc if built with Intel compilers.
This commit is contained in:
Massimiliano Culpo 2018-03-25 09:10:40 +02:00 committed by GitHub
parent 8890dbe3d9
commit dffd8f384c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -86,6 +86,11 @@ class Python(AutotoolsPackage):
description='Produce position-independent code (for shared libs)')
variant('dbm', default=True, description='Provide support for dbm')
variant(
'optimizations',
default=False,
description='Enable expensive build-time optimizations, if available'
)
depends_on("openssl")
depends_on("bzip2")
@ -104,10 +109,21 @@ class Python(AutotoolsPackage):
patch('cray-rpath-2.3.patch', when="@2.3:3.0.1 platform=cray")
patch('cray-rpath-3.1.patch', when="@3.1:3.99 platform=cray")
# For more information refer to this bug report:
# https://bugs.python.org/issue29712
conflicts(
'@:2.8 +shared',
when='+optimizations',
msg='+optimizations is incompatible with +shared in python@2.X'
)
_DISTUTIL_VARS_TO_SAVE = ['LDSHARED']
_DISTUTIL_CACHE_FILENAME = 'sysconfig.json'
_distutil_vars = None
# An in-source build with --enable-optimizations fails for python@3.X
build_directory = 'spack-build'
@when('@2.7:2.8,3.4:')
def patch(self):
# NOTE: Python's default installation procedure makes it possible for a
@ -122,7 +138,6 @@ def patch(self):
def setup_environment(self, spack_env, run_env):
spec = self.spec
prefix = self.prefix
# TODO: The '--no-user-cfg' option for Python installation is only in
# Python v2.7 and v3.4+ (see https://bugs.python.org/issue1180) and
@ -133,8 +148,6 @@ def setup_environment(self, spack_env, run_env):
'user configurations are present.').format(self.version))
# Need this to allow python build to find the Python installation.
spack_env.set('PYTHONHOME', prefix)
spack_env.set('PYTHONPATH', prefix)
spack_env.set('MACOSX_DEPLOYMENT_TARGET', platform.mac_ver()[0])
def configure_args(self):
@ -148,9 +161,18 @@ def configure_args(self):
'CPPFLAGS=-I{0}'.format(' -I'.join(dp.include for dp in dep_pfxs)),
'LDFLAGS=-L{0}'.format(' -L'.join(dp.lib for dp in dep_pfxs)),
]
if spec.satisfies('@2.7.13:2.8,3.5.3:', strict=True) \
and '+optimizations' in spec:
config_args.append('--enable-optimizations')
if spec.satisfies('%gcc platform=darwin'):
config_args.append('--disable-toolbox-glue')
if spec.satisfies('%intel', strict=True) and \
spec.satisfies('@2.7.12:2.8,3.5.2:', strict=True):
config_args.append('--with-icc')
if '+shared' in spec:
config_args.append('--enable-shared')
else: