Skip to content

Commit 1177c2b

Browse files
committed
Only trigger EESSI CUDA hook for EESSI installations
1 parent 5e900de commit 1177c2b

File tree

1 file changed

+48
-44
lines changed

1 file changed

+48
-44
lines changed

eb_hooks.py

Lines changed: 48 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -965,52 +965,56 @@ def post_postproc_cuda(self, *args, **kwargs):
965965
Remove files from CUDA installation that we are not allowed to ship,
966966
and replace them with a symlink to a corresponding installation under host_injections.
967967
"""
968+
if self.name == 'CUDA':
969+
# This hook only acts on an installation under repositories that _we_ ship (*.eessi.io/versions)
970+
eessi_installation = bool(re.search(EESSI_INSTALLATION_REGEX, self.installdir))
971+
972+
if eessi_installation:
973+
print_msg("Replacing files in CUDA installation that we can not ship with symlinks to host_injections...")
974+
975+
# read CUDA EULA, construct allowlist based on section 2.6 that specifies list of files that can be shipped
976+
eula_path = os.path.join(self.installdir, 'EULA.txt')
977+
relevant_eula_lines = []
978+
with open(eula_path) as infile:
979+
copy = False
980+
for line in infile:
981+
if line.strip() == "2.6. Attachment A":
982+
copy = True
983+
continue
984+
elif line.strip() == "2.7. Attachment B":
985+
copy = False
986+
continue
987+
elif copy:
988+
relevant_eula_lines.append(line)
989+
990+
# create list without file extensions, they're not really needed and they only complicate things
991+
allowlist = ['EULA', 'README']
992+
file_extensions = ['.so', '.a', '.h', '.bc']
993+
for line in relevant_eula_lines:
994+
for word in line.split():
995+
if any(ext in word for ext in file_extensions):
996+
allowlist.append(os.path.splitext(word)[0])
997+
# The EULA of CUDA 12.4 introduced a typo (confirmed by NVIDIA):
998+
# libnvrtx-builtins_static.so should be libnvrtc-builtins_static.so
999+
if 'libnvrtx-builtins_static' in allowlist:
1000+
allowlist.remove('libnvrtx-builtins_static')
1001+
allowlist.append('libnvrtc-builtins_static')
1002+
allowlist = sorted(set(allowlist))
1003+
self.log.info(
1004+
"Allowlist for files in CUDA installation that can be redistributed: " + ', '.join(allowlist)
1005+
)
9681006

969-
# We need to check if we are doing an EESSI-distributed installation
970-
eessi_installation = bool(re.search(EESSI_INSTALLATION_REGEX, self.installdir))
971-
972-
if self.name == 'CUDA' and eessi_installation:
973-
print_msg("Replacing files in CUDA installation that we can not ship with symlinks to host_injections...")
974-
975-
# read CUDA EULA, construct allowlist based on section 2.6 that specifies list of files that can be shipped
976-
eula_path = os.path.join(self.installdir, 'EULA.txt')
977-
relevant_eula_lines = []
978-
with open(eula_path) as infile:
979-
copy = False
980-
for line in infile:
981-
if line.strip() == "2.6. Attachment A":
982-
copy = True
983-
continue
984-
elif line.strip() == "2.7. Attachment B":
985-
copy = False
986-
continue
987-
elif copy:
988-
relevant_eula_lines.append(line)
989-
990-
# create list without file extensions, they're not really needed and they only complicate things
991-
allowlist = ['EULA', 'README']
992-
file_extensions = ['.so', '.a', '.h', '.bc']
993-
for line in relevant_eula_lines:
994-
for word in line.split():
995-
if any(ext in word for ext in file_extensions):
996-
allowlist.append(os.path.splitext(word)[0])
997-
# The EULA of CUDA 12.4 introduced a typo (confirmed by NVIDIA):
998-
# libnvrtx-builtins_static.so should be libnvrtc-builtins_static.so
999-
if 'libnvrtx-builtins_static' in allowlist:
1000-
allowlist.remove('libnvrtx-builtins_static')
1001-
allowlist.append('libnvrtc-builtins_static')
1002-
allowlist = sorted(set(allowlist))
1003-
self.log.info("Allowlist for files in CUDA installation that can be redistributed: " + ', '.join(allowlist))
1004-
1005-
# Do some quick sanity checks for things we should or shouldn't have in the list
1006-
if 'nvcc' in allowlist:
1007-
raise EasyBuildError("Found 'nvcc' in allowlist: %s" % allowlist)
1008-
if 'libcudart' not in allowlist:
1009-
raise EasyBuildError("Did not find 'libcudart' in allowlist: %s" % allowlist)
1007+
# Do some quick sanity checks for things we should or shouldn't have in the list
1008+
if 'nvcc' in allowlist:
1009+
raise EasyBuildError("Found 'nvcc' in allowlist: %s" % allowlist)
1010+
if 'libcudart' not in allowlist:
1011+
raise EasyBuildError("Did not find 'libcudart' in allowlist: %s" % allowlist)
10101012

1011-
# replace files that are not distributable with symlinks into
1012-
# host_injections
1013-
replace_non_distributable_files_with_symlinks(self.log, self.installdir, self.name, allowlist)
1013+
# replace files that are not distributable with symlinks into
1014+
# host_injections
1015+
replace_non_distributable_files_with_symlinks(self.log, self.installdir, self.name, allowlist)
1016+
else:
1017+
print_msg(f"EESSI hook to respect CUDA license not triggered for installation path {self.installdir}")
10141018
else:
10151019
raise EasyBuildError("CUDA-specific hook triggered for non-CUDA easyconfig?!")
10161020

0 commit comments

Comments
 (0)