6767LOCAL_ARCH_SUFFIX = os .getenv ('VSC_ARCH_SUFFIX' )
6868LOCAL_ARCH_FULL = f'{ LOCAL_ARCH } { LOCAL_ARCH_SUFFIX } '
6969
70- VALID_TCGENS = ['2024a' , '25.1' ]
71- VALID_MODULES_SUBDIRS = VALID_TCGENS + ['system' ]
72- VALID_TCS = ['foss' , 'intel' , 'gomkl' , 'gimkl' , 'gimpi' , 'nvidia-compilers' , 'NVHPC' ]
70+ VALID_TOOLCHAINS = {
71+ '2024a' : {
72+ 'toolchains' : ['foss' , 'intel' , 'gomkl' , 'gimkl' , 'gimpi' ],
73+ 'subdir' : '2024a' ,
74+ },
75+ '25.1' : {
76+ 'toolchains' : ['nvidia-compilers' , 'NVHPC' ],
77+ 'subdir' : '2024a' ,
78+ },
79+ }
80+ VALID_MODULES_SUBDIRS = ['system' , '2024a' ]
7381
7482SUBDIR_MODULES_BWRAP = '.modules_bwrap'
7583SUFFIX_MODULES_PATH = 'collection'
@@ -118,22 +126,26 @@ def get_tc_versions():
118126 update_build_option ('hooks' , None )
119127
120128 tc_versions = {}
121- for toolcgen in VALID_TCGENS :
122- tc_versions [ toolcgen ] = []
123- for toolc in VALID_TCS :
129+ for tcgen , tcgen_spec in VALID_TOOLCHAINS . items () :
130+ tcgen_versions = []
131+ for tc_name in tcgen_spec [ 'toolchains' ] :
124132 try :
125- tc_versions [ toolcgen ] .extend (get_toolchain_hierarchy ({'name' : toolc , 'version' : toolcgen }))
133+ tcgen_versions .extend (get_toolchain_hierarchy ({'name' : tc_name , 'version' : tcgen }))
126134 except EasyBuildError :
127135 # skip if no easyconfig found for toolchain-version
128136 pass
137+ tc_versions [tcgen ] = {
138+ 'toolchains' : tcgen_versions ,
139+ 'subdir' : tcgen_spec ['subdir' ],
140+ }
129141
130142 update_build_option ('hooks' , hooks )
131143 return tc_versions
132144
133145
134- def calc_tc_gen (name , version , tcname , tcversion , easyblock ):
146+ def calc_tc_gen_subdir (name , version , tcname , tcversion , easyblock ):
135147 """
136- calculate the toolchain generation
148+ calculate the toolchain generation subdir
137149 return False if not valid
138150 """
139151 name_version = {'name' : name , 'version' : version }
@@ -143,10 +155,11 @@ def calc_tc_gen(name, version, tcname, tcversion, easyblock):
143155 tc_versions = get_tc_versions ()
144156
145157 # (software with) valid (sub)toolchain-version combination
146- for toolcgen in VALID_TCGENS :
147- if toolchain in tc_versions [toolcgen ] or name_version in tc_versions [toolcgen ]:
148- log_msg = f"Determined toolchain generation { toolcgen } for { software } "
149- return toolcgen , log_msg
158+ for tcgen , tcgen_spec in tc_versions .items ():
159+ if toolchain in tcgen_spec [tcgen ]['toolchains' ] or name_version in tcgen_spec [tcgen ]['toolchains' ]:
160+ tcgen_subdir = tcgen_spec [tcgen ]['subdir' ]
161+ log_msg = f"Determined toolchain generation subdir '{ tcgen_subdir } ' for { software } "
162+ return tcgen_subdir , log_msg
150163
151164 # invalid toolchains
152165 # all toolchains have 'system' toolchain, so we need to handle the invalid toolchains separately
@@ -157,17 +170,19 @@ def calc_tc_gen(name, version, tcname, tcversion, easyblock):
157170
158171 # software with 'system' toolchain: return 'system'
159172 if tcname == 'system' :
160- log_msg = f"Determined toolchain { tcname } for { software } "
161- return tcname , log_msg
173+ tcgen_subdir = 'system'
174+ log_msg = f"Determined toolchain '{ tcgen_subdir } ' for { software } "
175+ return tcgen_subdir , log_msg
162176
163177 log_msg = f"Invalid toolchain { tcname } and/or toolchain version { tcversion } for { software } "
164178 return False , log_msg
165179
166180
167181def update_moduleclass (ec ):
168182 "update the moduleclass of an easyconfig to <tc_gen>/all"
169- tc_gen , log_msg = calc_tc_gen (
170- ec .name , ec .version , ec .toolchain .name , ec .toolchain .version , ec .easyblock )
183+ tc_gen , log_msg = calc_tc_gen_subdir (
184+ ec .name , ec .version , ec .toolchain .name , ec .toolchain .version , ec .easyblock
185+ )
171186
172187 if not tc_gen :
173188 raise EasyBuildError ("[parse hook] " + log_msg )
0 commit comments