Skip to content

Commit fb459cd

Browse files
intel-oneapi-mpi: add determine_version/determine_variants (spack#2582)
* intel-oneapi-mpi: add determine_version/determine_variants * [@spackbot] updating style on behalf of AlexanderRichert-NOAA
1 parent 7c33927 commit fb459cd

File tree

1 file changed

+41
-0
lines changed
  • repos/spack_repo/builtin/packages/intel_oneapi_mpi

1 file changed

+41
-0
lines changed

repos/spack_repo/builtin/packages/intel_oneapi_mpi/package.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
44

55

6+
import os
7+
import re
8+
69
from spack_repo.builtin.build_systems.oneapi import IntelOneApiLibraryPackage, IntelOneApiPackage
710

811
from spack.package import *
@@ -192,6 +195,44 @@ class IntelOneapiMpi(IntelOneApiLibraryPackage):
192195
provides("mpi@:3.1")
193196
conflicts("+generic-names +classic-names")
194197

198+
executables = [r"^mpiicpx$"]
199+
200+
@classmethod
201+
def determine_version(cls, exe):
202+
output = Executable(exe)("-v", output=str, error=str)
203+
match = re.search(r"MPI Library (20\d\d(\.\d+)+)", output)
204+
return match.group(1) if match else None
205+
206+
@classmethod
207+
def determine_variants(cls, exes, version_str):
208+
output = Executable(exes[0])("-show", output=str, error=str)
209+
lib_paths = re.findall(r'-L"?([^\s"]+)"?', output)
210+
variants_set = set()
211+
for lib_path in set(lib_paths):
212+
mpi_root = join_path(lib_path, "..")
213+
# Look for ilp64
214+
if os.path.exists(join_path(lib_path, "libmpi_ilp64.so")):
215+
variants_set.add("+ilp64")
216+
# Look for libfabric
217+
libfabric_dir = join_path(mpi_root, "opt/mpi/libfabric/lib")
218+
if os.path.exists(join_path(libfabric_dir, "libfabric.so")):
219+
variants_set.add("~external-libfabric")
220+
# If generic executables don't exist, disable the variant
221+
mpicxx_path = join_path(mpi_root, "bin", "mpicxx")
222+
if not os.path.exists(mpicxx_path):
223+
variants_set.add("~generic-names")
224+
# If classic executables don't exist, disable the variant
225+
mpiicpc_path = join_path(mpi_root, "bin", "mpiicpc")
226+
if not os.path.exists(mpiicpc_path):
227+
variants_set.add("~classic-names")
228+
229+
if "+ilp64" not in variants_set:
230+
variants_set.add("~ilp64")
231+
if "~external-libfabric" not in variants_set:
232+
variants_set.add("+external-libfabric")
233+
234+
return "".join(list(variants_set))
235+
195236
@property
196237
def mpiexec(self):
197238
return self.component_prefix.bin.mpiexec

0 commit comments

Comments
 (0)