27
27
28
28
29
29
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
+
30
35
(retrun_code , _ , _ ) = scorep .helper .call (scorep_config + ["--cuda" ])
31
36
if retrun_code == 0 :
32
37
scorep_config .append ("--cuda" )
@@ -161,12 +166,11 @@ def build_vampir_groups_writer():
161
166
return return_val , "tmp_build/libscorep_substrate_vampir_groups_writer.so"
162
167
163
168
169
+ cmodules = []
170
+ additonal_libs = []
171
+
164
172
(include , lib , lib_dir , macro , linker_flags_tmp ,
165
173
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 ()
170
174
171
175
# add -Wl,-no-as-needed to tell the compiler that we really want to link these. Actually this sould be default.
172
176
# 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():
175
179
linker_flags .extend (lib )
176
180
linker_flags .extend (linker_flags_tmp )
177
181
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
-
188
182
with open ("./scorep_init.c" , "w" ) as f :
189
183
f .write (scorep_adapter_init )
190
184
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" )
193
243
194
244
# build scorep with mpi for ld_prealod
195
245
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 ]
212
246
213
247
(ret_val , message ) = build_vampir_groups_writer ()
214
248
@@ -217,25 +251,7 @@ def build_vampir_groups_writer():
217
251
print ("Error building vampir groups writer:\n {}" .format (message ))
218
252
print ("Continuing without" )
219
253
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 )
239
255
240
256
setup (
241
257
name = 'scorep' ,
@@ -251,6 +267,6 @@ def build_vampir_groups_writer():
251
267
Besides this, it uses the traditional python-tracing infrastructure.
252
268
''' ,
253
269
packages = ['scorep' ],
254
- data_files = [("lib" , libs )],
255
- ext_modules = [ module1 , module2 ]
270
+ data_files = [("lib" , additonal_libs )],
271
+ ext_modules = cmodules
256
272
)
0 commit comments