Skip to content

Commit acca63b

Browse files
committed
Fix mpi packages to account for possibly missing compilers
This would happen if the mpi was installed from a buildcache, and the compiler is not available.
1 parent 4364302 commit acca63b

File tree

14 files changed

+102
-87
lines changed

14 files changed

+102
-87
lines changed

var/spack/repos/builtin/packages/cray-mpich/package.py

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -70,18 +70,19 @@ def setup_run_environment(self, env):
7070
env.set("MPICXX", join_path(self.prefix.bin, "mpicxx"))
7171
env.set("MPIF77", join_path(self.prefix.bin, "mpif77"))
7272
env.set("MPIF90", join_path(self.prefix.bin, "mpif90"))
73-
else:
73+
elif spack_cc is not None:
7474
env.set("MPICC", spack_cc)
7575
env.set("MPICXX", spack_cxx)
7676
env.set("MPIF77", spack_fc)
7777
env.set("MPIF90", spack_fc)
7878

7979
def setup_dependent_build_environment(self, env, dependent_spec):
80-
env.set("MPICH_CC", spack_cc)
81-
env.set("MPICH_CXX", spack_cxx)
82-
env.set("MPICH_F77", spack_f77)
83-
env.set("MPICH_F90", spack_fc)
84-
env.set("MPICH_FC", spack_fc)
80+
dependent_module = dependent_spec.package.module
81+
env.set("MPICH_CC", dependent_module.spack_cc)
82+
env.set("MPICH_CXX", dependent_module.spack_cxx)
83+
env.set("MPICH_F77", dependent_module.spack_f77)
84+
env.set("MPICH_F90", dependent_module.spack_fc)
85+
env.set("MPICH_FC", dependent_module.spack_fc)
8586

8687
def setup_dependent_package(self, module, dependent_spec):
8788
spec = self.spec
@@ -90,7 +91,7 @@ def setup_dependent_package(self, module, dependent_spec):
9091
spec.mpicxx = join_path(self.prefix.bin, "mpicxx")
9192
spec.mpifc = join_path(self.prefix.bin, "mpif90")
9293
spec.mpif77 = join_path(self.prefix.bin, "mpif77")
93-
else:
94+
elif spack_cc is not None:
9495
spec.mpicc = spack_cc
9596
spec.mpicxx = spack_cxx
9697
spec.mpifc = spack_fc

var/spack/repos/builtin/packages/cray-mvapich2/package.py

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -27,24 +27,29 @@ class CrayMvapich2(Package):
2727
provides("mpi@3")
2828

2929
def setup_run_environment(self, env):
30+
if spack_cc is None:
31+
return
32+
3033
env.set("MPICC", spack_cc)
3134
env.set("MPICXX", spack_cxx)
3235
env.set("MPIF77", spack_fc)
3336
env.set("MPIF90", spack_fc)
3437

3538
def setup_dependent_build_environment(self, env, dependent_spec):
36-
env.set("MPICH_CC", spack_cc)
37-
env.set("MPICH_CXX", spack_cxx)
38-
env.set("MPICH_F77", spack_f77)
39-
env.set("MPICH_F90", spack_fc)
40-
env.set("MPICH_FC", spack_fc)
39+
dependent_module = dependent_spec.package.module
40+
env.set("MPICH_CC", dependent_module.spack_cc)
41+
env.set("MPICH_CXX", dependent_module.spack_cxx)
42+
env.set("MPICH_F77", dependent_module.spack_f77)
43+
env.set("MPICH_F90", dependent_module.spack_fc)
44+
env.set("MPICH_FC", dependent_module.spack_fc)
4145

4246
def setup_dependent_package(self, module, dependent_spec):
4347
spec = self.spec
44-
spec.mpicc = spack_cc
45-
spec.mpicxx = spack_cxx
46-
spec.mpifc = spack_fc
47-
spec.mpif77 = spack_f77
48+
dependent_module = dependent_spec.package.module
49+
spec.mpicc = dependent_module.spack_cc
50+
spec.mpicxx = dependent_module.spack_cxx
51+
spec.mpifc = dependent_module.spack_fc
52+
spec.mpif77 = dependent_module.spack_f77
4853

4954
spec.mpicxx_shared_libs = [
5055
join_path(self.prefix.lib, "libmpicxx.{0}".format(dso_suffix)),

var/spack/repos/builtin/packages/intel-mpi/package.py

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -150,19 +150,21 @@ class IntelMpi(IntelPackage):
150150
depends_on("libfabric", when="+external-libfabric", type=("build", "link", "run"))
151151
depends_on("cpio", type="build")
152152

153-
def setup_dependent_build_environment(self, *args):
153+
def setup_dependent_build_environment(self, env, dependent_spec):
154154
# Handle in callback, conveying client's compilers in additional arg.
155155
# CAUTION - DUP code in:
156156
# ../intel-mpi/package.py
157157
# ../intel-parallel-studio/package.py
158+
dependent_module = dependent_spec.package.module
158159
self._setup_dependent_env_callback(
159-
*args,
160+
env,
161+
dependent_spec,
160162
compilers_of_client={
161-
"CC": spack_cc,
162-
"CXX": spack_cxx,
163-
"F77": spack_f77,
164-
"F90": spack_fc,
165-
"FC": spack_fc,
163+
"CC": dependent_module.spack_cc,
164+
"CXX": dependent_module.spack_cxx,
165+
"F77": dependent_module.spack_f77,
166+
"F90": dependent_module.spack_fc,
167+
"FC": dependent_module.spack_fc,
166168
},
167169
)
168170

var/spack/repos/builtin/packages/intel-oneapi-mpi/package.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -151,11 +151,12 @@ def setup_dependent_package(self, module, dep_spec):
151151
self.spec.mpifc = join_path(self.component_prefix.bin, "mpiifort")
152152

153153
def setup_dependent_build_environment(self, env, dependent_spec):
154-
env.set("I_MPI_CC", spack_cc)
155-
env.set("I_MPI_CXX", spack_cxx)
156-
env.set("I_MPI_F77", spack_f77)
157-
env.set("I_MPI_F90", spack_fc)
158-
env.set("I_MPI_FC", spack_fc)
154+
dependent_module = dependent_spec.package.module
155+
env.set("I_MPI_CC", dependent_module.spack_cc)
156+
env.set("I_MPI_CXX", dependent_module.spack_cxx)
157+
env.set("I_MPI_F77", dependent_module.spack_f77)
158+
env.set("I_MPI_F90", dependent_module.spack_fc)
159+
env.set("I_MPI_FC", dependent_module.spack_fc)
159160

160161
# Set compiler wrappers for dependent build stage
161162
if "+generic-names" in self.spec:

var/spack/repos/builtin/packages/intel-parallel-studio/package.py

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -666,19 +666,21 @@ class IntelParallelStudio(IntelPackage):
666666
msg="SSE3 is not supported on MacOS x86_64",
667667
)
668668

669-
def setup_dependent_build_environment(self, *args):
669+
def setup_dependent_build_environment(self, env, dependent_spec):
670670
# Handle in callback, conveying client's compilers in additional arg.
671671
# CAUTION - DUP code in:
672672
# ../intel-mpi/package.py
673673
# ../intel-parallel-studio/package.py
674+
dependent_module = dependent_spec.package.module
674675
self._setup_dependent_env_callback(
675-
*args,
676+
env,
677+
dependent_spec,
676678
compilers_of_client={
677-
"CC": spack_cc,
678-
"CXX": spack_cxx,
679-
"F77": spack_f77,
680-
"F90": spack_fc,
681-
"FC": spack_fc,
679+
"CC": dependent_module.spack_cc,
680+
"CXX": dependent_module.spack_cxx,
681+
"F77": dependent_module.spack_f77,
682+
"F90": dependent_module.spack_fc,
683+
"FC": dependent_module.spack_fc,
682684
},
683685
)
684686

var/spack/repos/builtin/packages/mpitrampoline/package.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -90,10 +90,11 @@ def setup_run_environment(self, env):
9090
env.set("MPIF90", join_path(self.prefix.bin, "mpifc"))
9191

9292
def setup_dependent_build_environment(self, env, dependent_spec):
93+
dependent_module = dependent_spec.package.module
9394
# Use the Spack compiler wrappers under MPI
94-
env.set("MPITRAMPOLINE_CC", spack_cc)
95-
env.set("MPITRAMPOLINE_CXX", spack_cxx)
96-
env.set("MPITRAMPOLINE_FC", spack_fc)
95+
env.set("MPITRAMPOLINE_CC", dependent_module.spack_cc)
96+
env.set("MPITRAMPOLINE_CXX", dependent_module.spack_cxx)
97+
env.set("MPITRAMPOLINE_FC", dependent_module.spack_fc)
9798
fflags = []
9899
if (
99100
self.spec.satisfies("%apple-clang")

var/spack/repos/builtin/packages/mpt/package.py

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,10 @@ def libs(self):
3636

3737
def setup_dependent_build_environment(self, env, dependent_spec):
3838
# use the Spack compiler wrappers under MPI
39-
env.set("MPICC_CC", spack_cc)
40-
env.set("MPICXX_CXX", spack_cxx)
41-
env.set("MPIF90_F90", spack_fc)
39+
dependent_module = dependent_spec.package.module
40+
env.set("MPICC_CC", dependent_module.spack_cc)
41+
env.set("MPICXX_CXX", dependent_module.spack_cxx)
42+
env.set("MPIF90_F90", dependent_module.spack_fc)
4243

4344
def setup_run_environment(self, env):
4445
# Because MPI is both runtime and compiler, we have to setup the mpi
@@ -50,10 +51,11 @@ def setup_run_environment(self, env):
5051

5152
def setup_dependent_package(self, module, dependent_spec):
5253
if "platform=cray" in self.spec:
53-
self.spec.mpicc = spack_cc
54-
self.spec.mpicxx = spack_cxx
55-
self.spec.mpifc = spack_fc
56-
self.spec.mpif77 = spack_f77
54+
dependent_module = dependent_spec.package.module
55+
self.spec.mpicc = dependent_module.spack_cc
56+
self.spec.mpicxx = dependent_module.spack_cxx
57+
self.spec.mpifc = dependent_module.spack_fc
58+
self.spec.mpif77 = dependent_module.spack_f77
5759
else:
5860
self.spec.mpicc = self.prefix.bin.mpicc
5961
self.spec.mpicxx = self.prefix.bin.mpicxx

var/spack/repos/builtin/packages/msmpi/package.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -41,14 +41,14 @@ def determine_version(cls, exe):
4141
return Version(ver_str.group(1)) if ver_str else None
4242

4343
def setup_dependent_package(self, module, dependent_spec):
44-
spec = self.spec
4544
# MSMPI does not vendor compiler wrappers, instead arguments should
4645
# be manually supplied to compiler by consuming package
4746
# Note: This is not typical of MPI installations
48-
spec.mpicc = spack_cc
49-
spec.mpicxx = spack_cxx
50-
spec.mpifc = spack_fc
51-
spec.mpif77 = spack_f77
47+
dependent_module = dependent_spec.package.module
48+
self.spec.mpicc = dependent_module.spack_cc
49+
self.spec.mpicxx = dependent_module.spack_cxx
50+
self.spec.mpifc = dependent_module.spack_fc
51+
self.spec.mpif77 = dependent_module.spack_f77
5252

5353

5454
class GenericBuilder(GenericBuilder):

var/spack/repos/builtin/packages/mvapich/package.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -215,16 +215,17 @@ def setup_dependent_build_environment(self, env, dependent_spec):
215215
self.setup_compiler_environment(env)
216216

217217
# use the Spack compiler wrappers under MPI
218-
env.set("MPICH_CC", spack_cc)
219-
env.set("MPICH_CXX", spack_cxx)
220-
env.set("MPICH_F77", spack_f77)
221-
env.set("MPICH_F90", spack_fc)
222-
env.set("MPICH_FC", spack_fc)
218+
dependent_module = dependent_spec.package.module
219+
env.set("MPICH_CC", dependent_module.spack_cc)
220+
env.set("MPICH_CXX", dependent_module.spack_cxx)
221+
env.set("MPICH_F77", dependent_module.spack_f77)
222+
env.set("MPICH_F90", dependent_module.spack_fc)
223+
env.set("MPICH_FC", dependent_module.spack_fc)
223224

224225
def setup_compiler_environment(self, env):
225226
# For Cray MPIs, the regular compiler wrappers *are* the MPI wrappers.
226227
# Cray MPIs always have cray in the module name, e.g. "cray-mvapich"
227-
if self.spec.satisfies("platform=cray"):
228+
if self.spec.satisfies("platform=cray") and spack_cc is not None:
228229
env.set("MPICC", spack_cc)
229230
env.set("MPICXX", spack_cxx)
230231
env.set("MPIF77", spack_fc)

var/spack/repos/builtin/packages/mvapich2-gdr/package.py

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -166,13 +166,12 @@ def setup_run_environment(self, env):
166166

167167
def setup_dependent_build_environment(self, env, dependent_spec):
168168
self.setup_compiler_environment(env)
169-
170-
# use the Spack compiler wrappers under MPI
171-
env.set("MPICH_CC", spack_cc)
172-
env.set("MPICH_CXX", spack_cxx)
173-
env.set("MPICH_F77", spack_f77)
174-
env.set("MPICH_F90", spack_fc)
175-
env.set("MPICH_FC", spack_fc)
169+
dependent_module = dependent_spec.package.module
170+
env.set("MPICH_CC", dependent_module.spack_cc)
171+
env.set("MPICH_CXX", dependent_module.spack_cxx)
172+
env.set("MPICH_F77", dependent_module.spack_f77)
173+
env.set("MPICH_F90", dependent_module.spack_fc)
174+
env.set("MPICH_FC", dependent_module.spack_fc)
176175

177176
def setup_compiler_environment(self, env):
178177
env.set("MPICC", join_path(self.prefix.bin, "mpicc"))

0 commit comments

Comments
 (0)