Skip to content

Commit aa5d6c0

Browse files
authored
Build MPI and serial executables in separate build trees (#320)
1 parent 9c9a954 commit aa5d6c0

File tree

2 files changed

+15
-10
lines changed

2 files changed

+15
-10
lines changed

src/benchcab/model.py

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -86,15 +86,14 @@ def get_coverage_dir(self) -> Path:
8686
"""Get absolute path for code coverage analysis."""
8787
return (internal.CODECOV_DIR / f"R{self.model_id}").absolute()
8888

89-
def _get_build_flags(self, mpi: bool, coverage: bool, compiler_id: str) -> dict:
89+
def _get_build_flags(self, coverage: bool, compiler_id: str) -> dict:
9090
"""Get flags for CMake build."""
9191
# Supported compilers for code coverage
9292
codecov_compilers = ["ifort", "ifx"]
9393

9494
build_flags = {}
9595

9696
build_flags["build_type"] = "Debug" if coverage else "Release"
97-
build_flags["mpi"] = "ON" if mpi else "OFF"
9897

9998
build_flags["flags_init"] = ""
10099

@@ -164,14 +163,13 @@ def build(self, modules: list[str], mpi: bool, coverage: bool):
164163
self.logger.debug(
165164
f"Getting environment variable for compiler $FC = {env_fc}"
166165
)
167-
build_flags = self._get_build_flags(mpi, coverage, env_fc)
166+
build_flags = self._get_build_flags(coverage, env_fc)
168167
env_fc = None
169168

170169
with chdir(path_to_repo):
171170
env = os.environ.copy()
172171

173172
cmake_args = [
174-
f"-DCABLE_MPI={build_flags['mpi']}",
175173
f"-DCMAKE_BUILD_TYPE={build_flags['build_type']}",
176174
f"-DCMAKE_Fortran_FLAGS_INIT={build_flags['flags_init']}",
177175
"-DCMAKE_VERBOSE_MAKEFILE=ON",
@@ -207,12 +205,20 @@ def build(self, modules: list[str], mpi: bool, coverage: bool):
207205
)
208206

209207
self.subprocess_handler.run_cmd(
210-
"cmake -S . -B build " + " ".join(cmake_args), env=env
208+
"cmake -S . -B build/serial -DCABLE_MPI=OFF " + " ".join(cmake_args), env=env
211209
)
212-
self.subprocess_handler.run_cmd("cmake --build build ", env=env)
210+
self.subprocess_handler.run_cmd("cmake --build build/serial", env=env)
213211
self.subprocess_handler.run_cmd(
214-
"cmake --install build --prefix .", env=env
212+
"cmake --install build/serial --prefix .", env=env
215213
)
214+
if mpi:
215+
self.subprocess_handler.run_cmd(
216+
"cmake -S . -B build/mpi -DCABLE_MPI=ON " + " ".join(cmake_args), env=env
217+
)
218+
self.subprocess_handler.run_cmd("cmake --build build/mpi", env=env)
219+
self.subprocess_handler.run_cmd(
220+
"cmake --install build/mpi --prefix .", env=env
221+
)
216222

217223

218224
def remove_module_lines(file_path: Path) -> None:

tests/test_model.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,6 @@ def cmake_flags(self, codecov, mpi, compiler_id):
121121

122122
return {
123123
"build_type": codecov_build_type[codecov],
124-
"mpi": mpi_args[mpi],
125124
"flags_init": codecov_init_args[codecov],
126125
}
127126

@@ -136,11 +135,11 @@ def test_get_build_flags(self, model, mpi, codecov, compiler_id, cmake_flags):
136135
User has {compiler_id} in their environment"""
137136
),
138137
):
139-
model._get_build_flags(mpi, codecov, compiler_id)
138+
model._get_build_flags(codecov, compiler_id)
140139
return
141140

142141
# Success case: get expected build flags to pass to CMake.
143-
assert model._get_build_flags(mpi, codecov, compiler_id) == cmake_flags
142+
assert model._get_build_flags(codecov, compiler_id) == cmake_flags
144143

145144

146145
# TODO(Sean) remove for issue https://github.com/CABLE-LSM/benchcab/issues/211

0 commit comments

Comments
 (0)