26
26
Summary: OpenHPC compatibility package for Intel(R) oneAPI MPI Library
27
27
Name: %{pname }%{PROJ_DELIM }
28
28
Version: 2024.0
29
- Release: %{?dist }.1
29
+ Release: %{?dist }.2
30
30
License: Apache-2.0
31
31
URL: https://github.com/openhpc/ohpc
32
32
Group: %{PROJ_NAME }/mpi-families
33
33
BuildArch: x86_64
34
34
AutoReq: no
35
35
36
36
Source1: mod_generator_impi.sh
37
+ Source2: ohpc-update-modules-mpi
37
38
38
39
#!BuildIgnore: post-build-checks
39
40
@@ -57,11 +58,27 @@ MPI Library.
57
58
# Mod generator for PSXE support
58
59
install -D -m755 %{SOURCE1 } %{buildroot }/%{OHPC_ADMIN }/compat/modulegen/mod_generator_impi.sh
59
60
61
+ # Mod generator for oneAPI support
62
+ sed -e 's|@@oneapi_manifest@@|%{oneapi_manifes }|' \
63
+ -e 's|@@OHPC_ADMIN@@|%{OHPC_ADMIN }|' \
64
+ -e 's|@@OHPC_MODULEDEPS@@|%{OHPC_MODULEDEPS }|' \
65
+ -e 's|@@OHPC_MODULES@@|%{OHPC_MODULES }|' \
66
+ -e 's|@@exact_deps@@|%{exact_deps }|' \
67
+ -e 's|@@exact_mpi_ver@@|%{exact_mpi_ver }|' \
68
+ -e 's|@@gnu_major_ver@@|%{gnu_major_ver }|' %{SOURCE3 } > ohpc-update-modules-mpi
69
+ install -D -m755 ohpc-update-modules-mpi %{buildroot }/%{OHPC_BIN }/ohpc-update-modules-mpi
70
+
60
71
# Module directories
61
72
mkdir -p %{buildroot }/%{OHPC_MODULEDEPS }/intel/impi
62
73
mkdir -p %{buildroot }/%{OHPC_MODULEDEPS }/gnu/impi
63
74
mkdir -p %{buildroot }/%{OHPC_MODULEDEPS }/gnu%{gnu_major_ver }/impi
64
75
76
+
77
+ # Regenerate module files when components are added or removed
78
+ %transfiletriggerin -- /opt/intel/oneapi/mpi
79
+ %{OHPC_BIN }/ohpc-update-modules-mpi
80
+
81
+
65
82
%pre
66
83
if ! [ -d /opt/intel/oneapi/mpi/%{exact_mpi_ver}/etc/modulefiles ]; then
67
84
echo " "
72
89
73
90
74
91
%post
75
- # Don't clobber/overwrite existing files
76
- # Write the new file .rpmnew
77
- testfile () {
78
- if [ -e $1 ]; then
79
- echo " $1 .rpmnew"
80
- else
81
- echo " $1 "
82
- fi
83
- }
84
-
85
- # Create an OpenHPC module file for each version found in compilers
86
- rm -f %{oneapi_manifest }
87
-
88
- # Regenerate the oneAPI modules directory (since MPI may have just been added)
89
- echo "Generating new oneAPI modulefiles"
90
- /opt/intel/oneapi/modulefiles-setup.sh --ignore-latest --force --output-dir= %{OHPC_MODULEDEPS }/oneapi/ > /dev/null
91
- if [ ! -d %{OHPC_MODULEDEPS }/oneapi/compiler ]; then
92
- echo "ERROR: Failed to create oneAPI module directory"
93
- exit 1
94
- fi
95
-
96
- # Set system defaults for default OBS oneAPI modules
97
- for tool in %{exact_deps }; do
98
- filename= %{OHPC_MODULEDEPS }/oneapi/${tool%%/*}/.version
99
- echo "#%Module1.0" > ${filename}
100
- echo "set ModulesVersion \"${tool##*/}\"" >> ${filename}
101
- done
102
-
103
- # Create an OpenHPC module file for each MPI version found
104
- echo "Creating OpenHPC-style modulefiles for local oneAPI MPI installation(s)."
105
- for mpis in %{OHPC_MODULEDEPS }/oneapi/mpi/2*; do
106
- ver= $(basename "$mpis")
107
- echo "--> Installing modulefile for version= ${ver}"
108
- modname= $(testfile %{OHPC_MODULEDEPS }/intel/impi/$ver)
109
-
110
- # Get value for MPI_DIR
111
- eval $(%{OHPC_ADMIN }/lmod/lmod/libexec/lmod --expert use %{OHPC_MODULEDEPS }/oneapi)
112
- eval $(%{OHPC_ADMIN }/lmod/lmod/libexec/lmod --expert load mpi/$ver)
113
- MPIDIR= $I_MPI_ROOT
114
- eval $(%{OHPC_ADMIN }/lmod/lmod/libexec/lmod --expert unload mpi/$ver)
115
- eval $(%{OHPC_ADMIN }/lmod/lmod/libexec/lmod --expert unuse %{OHPC_MODULEDEPS }/oneapi)
116
-
117
- cat << EOF > ${modname}
118
- #%Module1.0#####################################################################
119
-
120
- set version "$ver"
121
-
122
- proc ModulesHelp { } {
123
- global version
124
- puts stderr "\nThis module loads the Intel MPI environment.\n"
125
- puts stderr " mpiifort (Fortran source)"
126
- puts stderr " mpiicc (C source)"
127
- puts stderr " mpiicpc (C++ source)"
128
- puts stderr "\nVersion \$version\n"
129
- }
130
-
131
- module-whatis "Name: Intel MPI"
132
- module-whatis "Version: \$version"
133
- module-whatis "Category: library, runtime support"
134
- module-whatis "Description: Intel MPI Library (C/C++/Fortran for x86_64 )"
135
- module-whatis "URL: http://software.intel.com/en-us/articles/intel-mpi-library"
136
-
137
- # For convenience, redirect standard mpicc/mpicxx/mpifort
138
- # to use oneAPI icc/icpc/ifort instead of gcc/g++/gfortran
139
- setenv I_MPI_CC icx
140
- setenv I_MPI_CXX icpx
141
- setenv I_MPI_FC ifx
142
- setenv I_MPI_F77 ifx
143
- setenv I_MPI_F90 ifx
144
-
145
- setenv MPI_DIR "${MPIDIR}"
146
-
147
- prepend-path MODULEPATH %{OHPC_MODULEDEPS }/oneapi
148
- prepend-path MODULEPATH %{OHPC_MODULEDEPS }/intel-impi
149
-
150
- module load "mpi/\$version"
151
-
152
- prepend-path LIBRARY_PATH "${MPIDIR}/libfabric/lib"
153
- prepend-path LIBRARY_PATH "${MPIDIR}/lib"
154
-
155
- family "MPI"
156
- EOF
157
-
158
- md5sum ${modname} >> %{oneapi_manifest }
159
-
160
- modname= $(testfile %{OHPC_MODULEDEPS }/gnu/impi/$ver)
161
-
162
- cat << EOF > ${modname}
163
- #%Module1.0#####################################################################
164
-
165
- set version "$ver"
166
-
167
- proc ModulesHelp { } {
168
- global version
169
- puts stderr "\nThis module loads the Intel MPI environment for use with the GNU"
170
- puts stderr "compiler toolchain\n"
171
- puts stderr "mpif90 (Fortran source)"
172
- puts stderr "mpicc (C source)"
173
- puts stderr "mpicxx (C++ source)"
174
- puts stderr "\nVersion \$version\n"
175
- }
176
-
177
- module-whatis "Name: Intel MPI"
178
- module-whatis "Version: \$version"
179
- module-whatis "Category: library, runtime support"
180
- module-whatis "Description: Intel MPI Library (C/C++/Fortran for x86_64 )"
181
- module-whatis "URL: http://software.intel.com/en-us/articles/intel-mpi-library/"
182
-
183
- setenv MPI_DIR "${MPIDIR}"
184
-
185
- prepend-path MODULEPATH %{OHPC_MODULEDEPS }/oneapi
186
- prepend-path MODULEPATH %{OHPC_MODULEDEPS }/gnu-impi
187
-
188
- module load "mpi/\$version"
189
-
190
- prepend-path LIBRARY_PATH "${MPIDIR}/libfabric/lib"
191
- prepend-path LIBRARY_PATH "${MPIDIR}/lib"
192
-
193
- family "MPI"
194
- EOF
195
-
196
- md5sum ${modname} >> %{oneapi_manifest }
197
-
198
- # support for gnu major version
199
- orig_modname= $modname
200
- modname= $(testfile %{OHPC_MODULEDEPS }/gnu%{gnu_major_ver }/impi/$ver)
201
- cp ${orig_modname} ${modname}
202
- sed -i "s,%{OHPC_MODULEDEPS }/gnu-impi,%{OHPC_MODULEDEPS }/gnu%{gnu_major_ver }-impi," ${modname}
203
- md5sum ${modname} >> %{oneapi_manifest }
204
-
205
- done
206
-
207
- # Default Intel(R) MPI Versions to match OpenHPC build version
208
- modname= $(testfile %{OHPC_MODULEDEPS }/intel/impi/.version)
209
-
210
- cat << EOF > ${modname}
211
- #%Module1.0#####################################################################
212
- set ModulesVersion "%{exact_mpi_ver }"
213
- EOF
214
-
215
- md5sum ${modname} >> %{oneapi_manifest }
216
-
217
- modname= $(testfile %{OHPC_MODULEDEPS }/gnu/impi/.version)
218
-
219
- cat << EOF > ${modname}
220
- #%Module1.0#####################################################################
221
- set ModulesVersion "%{exact_mpi_ver }"
222
- EOF
223
-
224
- md5sum ${modname} >> %{oneapi_manifest }
225
-
226
- # support for gnu major version
227
- orig_modname= $modname
228
- modname= $(testfile %{OHPC_MODULEDEPS }/gnu%{gnu_major_ver }/impi/.version)
229
- cp ${orig_modname} ${modname}
230
- md5sum ${modname} >> %{oneapi_manifest }
92
+ %{OHPC_BIN }/ohpc-update-modules-mpi
231
93
232
94
%preun -p /bin/bash
233
95
# Check current files against the manifest
490
352
491
353
%files -n %{psxemod }
492
354
%{OHPC_ADMIN }/compat/modulegen/mod_generator_impi.sh
355
+ %{OHPC_BIN }/ohpc-update-modules-mpi
493
356
%dir %{OHPC_MODULEDEPS }/intel/impi
494
357
%dir %{OHPC_MODULEDEPS }/gnu/impi
495
358
%dir %{OHPC_MODULEDEPS }/gnu%{gnu_major_ver }/impi
0 commit comments