intel compiler: fix link time error with LLVMgold.so
(#28731)
The Intel compiler will, at link time, call `ld -plugin LLVMgold.so`, which expects libraries like `libimfo.so` to be found either in the `LD_LIBRARY_PATH` or in `LLVMgold.so`s RPATH. As `LLVMgold.so` already uses RUNPATH, I used that to extend this to the necessary library locations. This PR should fix issues: https://github.com/spack/spack/issues/10308 https://github.com/spack/spack/issues/18606 https://github.com/spack/spack/issues/17100 https://github.com/spack/spack/issues/21237 https://github.com/spack/spack/issues/4261 Co-authored-by: Stephen Sachs <stesachs@amazon.com>
This commit is contained in:
parent
cebe4fdf1d
commit
79f22423b8
@ -24,6 +24,7 @@
|
|||||||
install,
|
install,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
import spack.error
|
||||||
from spack.build_environment import dso_suffix
|
from spack.build_environment import dso_suffix
|
||||||
from spack.package import InstallError, PackageBase, run_after
|
from spack.package import InstallError, PackageBase, run_after
|
||||||
from spack.util.environment import EnvironmentModifications
|
from spack.util.environment import EnvironmentModifications
|
||||||
@ -1333,5 +1334,42 @@ def uninstall_ism(self):
|
|||||||
debug_print(os.getcwd())
|
debug_print(os.getcwd())
|
||||||
return
|
return
|
||||||
|
|
||||||
|
@property
|
||||||
|
def base_lib_dir(self):
|
||||||
|
"""Provide the library directory located in the base of Intel installation.
|
||||||
|
"""
|
||||||
|
d = self.normalize_path('')
|
||||||
|
d = os.path.join(d, 'lib')
|
||||||
|
|
||||||
|
debug_print(d)
|
||||||
|
return d
|
||||||
|
|
||||||
|
@run_after('install')
|
||||||
|
def modify_LLVMgold_rpath(self):
|
||||||
|
"""Add libimf.so and other required libraries to the RUNPATH of LLVMgold.so.
|
||||||
|
|
||||||
|
These are needed explicitly at dependent link time when
|
||||||
|
`ld -plugin LLVMgold.so` is called by the compiler.
|
||||||
|
"""
|
||||||
|
if self._has_compilers:
|
||||||
|
LLVMgold_libs = find_libraries('LLVMgold', self.base_lib_dir,
|
||||||
|
shared=True, recursive=True)
|
||||||
|
# Ignore ia32 entries as they mostly ignore throughout the rest
|
||||||
|
# of the file.
|
||||||
|
# The first entry in rpath preserves the original, the seconds entry
|
||||||
|
# is the location of libimf.so. If this relative location is changed
|
||||||
|
# in compiler releases, then we need to search for libimf.so instead
|
||||||
|
# of this static path.
|
||||||
|
for lib in LLVMgold_libs:
|
||||||
|
if not self.spec.satisfies('^patchelf'):
|
||||||
|
raise spack.error.SpackError(
|
||||||
|
'Attempting to patch RPATH in LLVMgold.so.'
|
||||||
|
+ '`patchelf` dependency should be set in package.py'
|
||||||
|
)
|
||||||
|
patchelf = Executable('patchelf')
|
||||||
|
rpath = ':'.join([patchelf('--print-rpath', lib, output=str).strip(),
|
||||||
|
'$ORIGIN/../compiler/lib/intel64_lin'])
|
||||||
|
patchelf('--set-rpath', rpath, lib)
|
||||||
|
|
||||||
# Check that self.prefix is there after installation
|
# Check that self.prefix is there after installation
|
||||||
run_after('install')(PackageBase.sanity_check_prefix)
|
run_after('install')(PackageBase.sanity_check_prefix)
|
||||||
|
@ -13,6 +13,8 @@ class IntelParallelStudio(IntelPackage):
|
|||||||
|
|
||||||
maintainers = ['rscohn2']
|
maintainers = ['rscohn2']
|
||||||
|
|
||||||
|
depends_on('patchelf', type='build')
|
||||||
|
|
||||||
# As of 2016, the product comes in three "editions" that vary by scope.
|
# As of 2016, the product comes in three "editions" that vary by scope.
|
||||||
#
|
#
|
||||||
# In Spack, select the edition via the version number in the spec, e.g.:
|
# In Spack, select the edition via the version number in the spec, e.g.:
|
||||||
|
@ -15,6 +15,8 @@ class Intel(IntelPackage):
|
|||||||
# Robert Cohn
|
# Robert Cohn
|
||||||
maintainers = ['rscohn2']
|
maintainers = ['rscohn2']
|
||||||
|
|
||||||
|
depends_on('patchelf', type='build')
|
||||||
|
|
||||||
# Same as in ../intel-parallel-studio/package.py, Composer Edition,
|
# Same as in ../intel-parallel-studio/package.py, Composer Edition,
|
||||||
# but the version numbering in Spack differs.
|
# but the version numbering in Spack differs.
|
||||||
version('20.0.4', sha256='ac1efeff608a8c3a416e6dfe20364061e8abf62d35fbaacdffe3fc9676fc1aa3', url='https://registrationcenter-download.intel.com/akdlm/irc_nas/tec/17117/parallel_studio_xe_2020_update4_composer_edition.tgz')
|
version('20.0.4', sha256='ac1efeff608a8c3a416e6dfe20364061e8abf62d35fbaacdffe3fc9676fc1aa3', url='https://registrationcenter-download.intel.com/akdlm/irc_nas/tec/17117/parallel_studio_xe_2020_update4_composer_edition.tgz')
|
||||||
|
Loading…
Reference in New Issue
Block a user