Skip to content

Commit 99e0fe6

Browse files
committed
Allow to build with non MPI Score-P
fixes #12
1 parent 32ed13f commit 99e0fe6

File tree

2 files changed

+75
-54
lines changed

2 files changed

+75
-54
lines changed

scorep/__main__.py

+6-1
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,12 @@ def main(argv=None):
113113

114114
scorep_bindings = None
115115
if mpi:
116-
scorep_bindings = importlib.import_module("scorep.scorep_bindings_mpi")
116+
try:
117+
scorep_bindings = importlib.import_module(
118+
"scorep.scorep_bindings_mpi")
119+
except ModuleNotFoundError:
120+
raise ModuleNotFoundError(
121+
"The MPI bindings are missing. Did you build Score-P with '--without-mpi'?")
117122
else:
118123
scorep_bindings = importlib.import_module("scorep.scorep_bindings")
119124

setup.py

+69-53
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,11 @@
2727

2828

2929
def get_config(scorep_config):
30+
(retrun_code, _, _) = scorep.helper.call(scorep_config)
31+
if retrun_code != 0:
32+
raise ValueError(
33+
"given config {} is not supported".format(scorep_config))
34+
3035
(retrun_code, _, _) = scorep.helper.call(scorep_config + ["--cuda"])
3136
if retrun_code == 0:
3237
scorep_config.append("--cuda")
@@ -161,12 +166,11 @@ def build_vampir_groups_writer():
161166
return return_val, "tmp_build/libscorep_substrate_vampir_groups_writer.so"
162167

163168

169+
cmodules = []
170+
additonal_libs = []
171+
164172
(include, lib, lib_dir, macro, linker_flags_tmp,
165173
scorep_adapter_init) = get_config(scorep_config)
166-
(include_mpi, lib_mpi, lib_dir_mpi, macro_mpi, linker_flags_mpi_tmp,
167-
scorep_adapter_init_mpi) = get_config(scorep_config_mpi)
168-
(include_mpi_, lib_mpi_, lib_dir_mpi_, macro_mpi_,
169-
linker_flags_mpi_tmp_) = get_mpi_config()
170174

171175
# add -Wl,-no-as-needed to tell the compiler that we really want to link these. Actually this sould be default.
172176
# as distutils adds extra args at the very end we need to add all the libs
@@ -175,40 +179,70 @@ def build_vampir_groups_writer():
175179
linker_flags.extend(lib)
176180
linker_flags.extend(linker_flags_tmp)
177181

178-
include_mpi.extend(include_mpi_)
179-
lib_dir_mpi.extend(lib_dir_mpi_)
180-
macro_mpi.extend(macro_mpi_)
181-
182-
linker_flags_mpi = ["-Wl,-no-as-needed"]
183-
linker_flags_mpi.extend(linker_flags_mpi_tmp)
184-
linker_flags_mpi.extend(linker_flags_mpi_tmp_)
185-
linker_flags_mpi.extend(lib_mpi)
186-
linker_flags_mpi.extend(lib_mpi_)
187-
188182
with open("./scorep_init.c", "w") as f:
189183
f.write(scorep_adapter_init)
190184

191-
with open("./scorep_init_mpi.c", "w") as f:
192-
f.write(scorep_adapter_init_mpi)
185+
cmodules.append(Extension('scorep.scorep_bindings',
186+
include_dirs=include,
187+
libraries=[],
188+
library_dirs=lib_dir,
189+
define_macros=macro,
190+
extra_link_args=linker_flags,
191+
extra_compile_args=["-std=c++11"],
192+
sources=['src/scorep.cpp', 'scorep_init.c']))
193+
194+
# MPI is treated differently than CUDA and OpenCL, as it needs to build
195+
# its own module
196+
try:
197+
(include_mpi, lib_mpi, lib_dir_mpi, macro_mpi, linker_flags_mpi_tmp,
198+
scorep_adapter_init_mpi) = get_config(scorep_config_mpi)
199+
(include_mpi_, lib_mpi_, lib_dir_mpi_, macro_mpi_,
200+
linker_flags_mpi_tmp_) = get_mpi_config()
201+
include_mpi.extend(include_mpi_)
202+
lib_dir_mpi.extend(lib_dir_mpi_)
203+
macro_mpi.extend(macro_mpi_)
204+
205+
linker_flags_mpi = ["-Wl,-no-as-needed"]
206+
linker_flags_mpi.extend(linker_flags_mpi_tmp)
207+
linker_flags_mpi.extend(linker_flags_mpi_tmp_)
208+
linker_flags_mpi.extend(lib_mpi)
209+
linker_flags_mpi.extend(lib_mpi_)
210+
211+
with open("./scorep_init_mpi.c", "w") as f:
212+
f.write(scorep_adapter_init_mpi)
213+
214+
mpi_lib_name = scorep.helper.gen_mpi_lib_name()
215+
216+
cc = distutils.ccompiler.new_compiler()
217+
cc.compile(["./scorep_init_mpi.c"])
218+
cc.link(
219+
"scorep_init_mpi",
220+
objects=["./scorep_init_mpi.o"],
221+
output_filename=mpi_lib_name,
222+
library_dirs=lib_dir_mpi,
223+
extra_postargs=linker_flags_mpi)
224+
225+
mpi_link_name = scorep.helper.gen_mpi_link_name()
226+
227+
linker_flags_mpi.append("-l{}".format(mpi_link_name))
228+
229+
additonal_libs.append(mpi_lib_name)
230+
231+
cmodules.append(Extension('scorep.scorep_bindings_mpi',
232+
include_dirs=include_mpi,
233+
libraries=[],
234+
library_dirs=lib_dir_mpi + ["./"],
235+
define_macros=macro_mpi + [("USE_MPI", None)],
236+
extra_link_args=linker_flags_mpi,
237+
extra_compile_args=["-std=c++11"],
238+
sources=['src/scorep.cpp']))
239+
240+
241+
except ValueError:
242+
print("MPI is not supported, build without MPI")
193243

194244
# build scorep with mpi for ld_prealod
195245

196-
mpi_lib_name = scorep.helper.gen_mpi_lib_name()
197-
198-
cc = distutils.ccompiler.new_compiler()
199-
cc.compile(["./scorep_init_mpi.c"])
200-
cc.link(
201-
"scorep_init_mpi",
202-
objects=["./scorep_init_mpi.o"],
203-
output_filename=mpi_lib_name,
204-
library_dirs=lib_dir_mpi,
205-
extra_postargs=linker_flags_mpi)
206-
207-
mpi_link_name = scorep.helper.gen_mpi_link_name()
208-
209-
linker_flags_mpi.append("-l{}".format(mpi_link_name))
210-
211-
libs = [mpi_lib_name]
212246

213247
(ret_val, message) = build_vampir_groups_writer()
214248

@@ -217,25 +251,7 @@ def build_vampir_groups_writer():
217251
print("Error building vampir groups writer:\n{}".format(message))
218252
print("Continuing without")
219253
else:
220-
libs.append(message)
221-
222-
module1 = Extension('scorep.scorep_bindings',
223-
include_dirs=include,
224-
libraries=[],
225-
library_dirs=lib_dir,
226-
define_macros=macro,
227-
extra_link_args=linker_flags,
228-
extra_compile_args=["-std=c++11"],
229-
sources=['src/scorep.cpp', 'scorep_init.c'])
230-
231-
module2 = Extension('scorep.scorep_bindings_mpi',
232-
include_dirs=include_mpi,
233-
libraries=[],
234-
library_dirs=lib_dir_mpi + ["./"],
235-
define_macros=macro_mpi + [("USE_MPI", None)],
236-
extra_link_args=linker_flags_mpi,
237-
extra_compile_args=["-std=c++11"],
238-
sources=['src/scorep.cpp'])
254+
additonal_libs.append(message)
239255

240256
setup(
241257
name='scorep',
@@ -251,6 +267,6 @@ def build_vampir_groups_writer():
251267
Besides this, it uses the traditional python-tracing infrastructure.
252268
''',
253269
packages=['scorep'],
254-
data_files=[("lib", libs)],
255-
ext_modules=[module1, module2]
270+
data_files=[("lib", additonal_libs)],
271+
ext_modules=cmodules
256272
)

0 commit comments

Comments
 (0)