67
67
LOCAL_ARCH_SUFFIX = os .getenv ('VSC_ARCH_SUFFIX' )
68
68
LOCAL_ARCH_FULL = f'{ LOCAL_ARCH } { LOCAL_ARCH_SUFFIX } '
69
69
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' ]
73
81
74
82
SUBDIR_MODULES_BWRAP = '.modules_bwrap'
75
83
SUFFIX_MODULES_PATH = 'collection'
@@ -118,22 +126,26 @@ def get_tc_versions():
118
126
update_build_option ('hooks' , None )
119
127
120
128
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' ] :
124
132
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 }))
126
134
except EasyBuildError :
127
135
# skip if no easyconfig found for toolchain-version
128
136
pass
137
+ tc_versions [tcgen ] = {
138
+ 'toolchains' : tcgen_versions ,
139
+ 'subdir' : tcgen_spec ['subdir' ],
140
+ }
129
141
130
142
update_build_option ('hooks' , hooks )
131
143
return tc_versions
132
144
133
145
134
- def calc_tc_gen (name , version , tcname , tcversion , easyblock ):
146
+ def calc_tc_gen_subdir (name , version , tcname , tcversion , easyblock ):
135
147
"""
136
- calculate the toolchain generation
148
+ calculate the toolchain generation subdir
137
149
return False if not valid
138
150
"""
139
151
name_version = {'name' : name , 'version' : version }
@@ -143,10 +155,11 @@ def calc_tc_gen(name, version, tcname, tcversion, easyblock):
143
155
tc_versions = get_tc_versions ()
144
156
145
157
# (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 ['toolchains' ] or name_version in tcgen_spec ['toolchains' ]:
160
+ tcgen_subdir = tcgen_spec ['subdir' ]
161
+ log_msg = f"Determined toolchain generation subdir '{ tcgen_subdir } ' for { software } "
162
+ return tcgen_subdir , log_msg
150
163
151
164
# invalid toolchains
152
165
# 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):
157
170
158
171
# software with 'system' toolchain: return 'system'
159
172
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
162
176
163
177
log_msg = f"Invalid toolchain { tcname } and/or toolchain version { tcversion } for { software } "
164
178
return False , log_msg
165
179
166
180
167
181
def update_moduleclass (ec ):
168
182
"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
+ )
171
186
172
187
if not tc_gen :
173
188
raise EasyBuildError ("[parse hook] " + log_msg )
0 commit comments