@@ -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