2727
2828
2929def 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():
175179linker_flags .extend (lib )
176180linker_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-
188182with 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" )
219253else :
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
240256setup (
241257 name = 'scorep' ,
@@ -251,6 +267,6 @@ def build_vampir_groups_writer():
251267Besides 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