Skip to content

Commit 0b16e7a

Browse files
committed
manually define subdir per toolchain generation
1 parent d58e677 commit 0b16e7a

File tree

2 files changed

+35
-20
lines changed

2 files changed

+35
-20
lines changed

src/build_tools/hooks_hydra.py

Lines changed: 32 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -67,9 +67,17 @@
6767
LOCAL_ARCH_SUFFIX = os.getenv('VSC_ARCH_SUFFIX')
6868
LOCAL_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

7482
SUBDIR_MODULES_BWRAP = '.modules_bwrap'
7583
SUFFIX_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['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
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

167181
def 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)

tests/test_hooks_hydra.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,8 @@
4444
('fosscuda', '2023a', 'system', 'system', 'Toolchain', False),
4545
],
4646
)
47-
def test_calc_tc_gen(toolchain, set_up_config):
47+
def test_calc_tc_gen_subdir(toolchain, set_up_config):
4848
name, version, tcname, tcversion, easyblock, expected_generation = toolchain
49-
generation, _ = hooks_hydra.calc_tc_gen(name, version, tcname, tcversion, easyblock)
49+
generation, _ = hooks_hydra.calc_tc_gen_subdir(name, version, tcname, tcversion, easyblock)
5050

51-
assert generation == expected_generation
51+
assert generation['toolchains'] == expected_generation

0 commit comments

Comments
 (0)