31 |
tmp = os.path.join("scons",hostname+"_options.py") |
tmp = os.path.join("scons",hostname+"_options.py") |
32 |
options_file = ARGUMENTS.get('options_file', tmp) |
options_file = ARGUMENTS.get('options_file', tmp) |
33 |
if not os.path.isfile(options_file): options_file = False |
if not os.path.isfile(options_file): options_file = False |
34 |
|
else: print "Options file is", options_file |
35 |
|
|
36 |
# Load options file and command-line arguments |
# Load options file and command-line arguments |
37 |
opts = Options(options_file, ARGUMENTS) |
opts = Options(options_file, ARGUMENTS) |
42 |
# Where to install esys stuff |
# Where to install esys stuff |
43 |
('prefix', 'where everything will be installed', Dir('#.').abspath), |
('prefix', 'where everything will be installed', Dir('#.').abspath), |
44 |
('incinstall', 'where the esys headers will be installed', os.path.join(Dir('#.').abspath,'include')), |
('incinstall', 'where the esys headers will be installed', os.path.join(Dir('#.').abspath,'include')), |
45 |
|
('bininstall', 'where the esys binaries will be installed', os.path.join(prefix,'bin')), |
46 |
('libinstall', 'where the esys libraries will be installed', os.path.join(prefix,'lib')), |
('libinstall', 'where the esys libraries will be installed', os.path.join(prefix,'lib')), |
47 |
('pyinstall', 'where the esys python modules will be installed', os.path.join(prefix,'esys')), |
('pyinstall', 'where the esys python modules will be installed', os.path.join(prefix,'esys')), |
48 |
# Compilation options |
# Compilation options |
58 |
('omp_debug', 'OpenMP compiler flags to use (Debug build)', '-DEFAULT_5'), |
('omp_debug', 'OpenMP compiler flags to use (Debug build)', '-DEFAULT_5'), |
59 |
('omp_libs', 'OpenMP compiler libraries to link with', '-DEFAULT_6'), |
('omp_libs', 'OpenMP compiler libraries to link with', '-DEFAULT_6'), |
60 |
('cc_extra', 'Extra C/C++ flags', ''), |
('cc_extra', 'Extra C/C++ flags', ''), |
61 |
|
('ld_extra', 'Extra linker flags', ''), |
62 |
('sys_libs', 'System libraries to link with', []), |
('sys_libs', 'System libraries to link with', []), |
63 |
('ar_flags', 'Static library archiver flags to use', ''), |
('ar_flags', 'Static library archiver flags to use', ''), |
64 |
BoolOption('useopenmp', 'Compile parallel version using OpenMP', 'yes'), |
BoolOption('useopenmp', 'Compile parallel version using OpenMP', 'yes'), |
102 |
('mkl_lib_path', 'Path to MKL libs', '/sw/sdev/cmkl/10.0.2.18/lib/em64t'), |
('mkl_lib_path', 'Path to MKL libs', '/sw/sdev/cmkl/10.0.2.18/lib/em64t'), |
103 |
('mkl_libs', 'MKL libraries to link with', ['mkl_solver', 'mkl_em64t', 'guide', 'pthread']), |
('mkl_libs', 'MKL libraries to link with', ['mkl_solver', 'mkl_em64t', 'guide', 'pthread']), |
104 |
# UMFPACK |
# UMFPACK |
105 |
BoolOption('useumfpack', 'switch on/off the usage of UMFPACK', 'yes'), |
BoolOption('useumfpack', 'switch on/off the usage of UMFPACK', 'no'), |
106 |
('ufc_path', 'Path to UFconfig includes', '/usr/include/suitesparse'), |
('ufc_path', 'Path to UFconfig includes', '/usr/include/suitesparse'), |
107 |
('umf_path', 'Path to UMFPACK includes', '/usr/include/suitesparse'), |
('umf_path', 'Path to UMFPACK includes', '/usr/include/suitesparse'), |
108 |
('umf_lib_path', 'Path to UMFPACK libs', usr_lib), |
('umf_lib_path', 'Path to UMFPACK libs', usr_lib), |
224 |
env.PrependENVPath('PYTHONPATH', prefix) |
env.PrependENVPath('PYTHONPATH', prefix) |
225 |
env.PrependENVPath('LD_LIBRARY_PATH', env['libinstall']) |
env.PrependENVPath('LD_LIBRARY_PATH', env['libinstall']) |
226 |
|
|
227 |
|
env['ENV']['ESCRIPT_ROOT'] = prefix |
228 |
|
|
229 |
############ Set up paths for Configure() ###################### |
############ Set up paths for Configure() ###################### |
230 |
|
|
231 |
# Make a copy of an environment |
# Make a copy of an environment |
238 |
env.Append(CPPPATH = [Dir('include')]) |
env.Append(CPPPATH = [Dir('include')]) |
239 |
|
|
240 |
# Add cc option -L<Escript>/trunk/lib |
# Add cc option -L<Escript>/trunk/lib |
241 |
env.Append(LIBPATH = [Dir('lib')]) |
env.Append(LIBPATH = [Dir(env['libinstall'])]) |
242 |
|
|
243 |
env.Append(CPPDEFINES = ['ESCRIPT_EXPORTS', 'FINLEY_EXPORTS']) |
env.Append(CPPDEFINES = ['ESCRIPT_EXPORTS', 'FINLEY_EXPORTS']) |
244 |
|
|
245 |
if env['cc_extra'] != '': env.Append(CCFLAGS = env['cc_extra']) |
if env['cc_extra'] != '': env.Append(CCFLAGS = env['cc_extra']) |
246 |
|
if env['ld_extra'] != '': env.Append(LINKFLAGS = env['ld_extra']) |
247 |
|
|
248 |
if env['usepedantic']: env.Append(CCFLAGS = pedantic) |
if env['usepedantic']: env.Append(CCFLAGS = pedantic) |
249 |
|
|
284 |
print "Cannot run C compiler '%s' (or libc is missing)" % (env['CC']) |
print "Cannot run C compiler '%s' (or libc is missing)" % (env['CC']) |
285 |
sys.exit(1) |
sys.exit(1) |
286 |
|
|
287 |
if not conf.CheckFunc('gethostname'): |
if conf.CheckFunc('gethostname'): |
288 |
env.Append(CPPDEFINES = ['HAVE_GETHOSTNAME']) |
conf.env.Append(CPPDEFINES = ['HAVE_GETHOSTNAME']) |
289 |
|
|
290 |
############ python libraries (required) ####################### |
############ python libraries (required) ####################### |
291 |
|
|
293 |
conf.env.AppendUnique(LIBPATH = [env['python_lib_path']]) |
conf.env.AppendUnique(LIBPATH = [env['python_lib_path']]) |
294 |
conf.env.AppendUnique(LIBS = [env['python_libs']]) |
conf.env.AppendUnique(LIBS = [env['python_libs']]) |
295 |
|
|
296 |
|
conf.env.PrependENVPath('LD_LIBRARY_PATH', env['python_lib_path']) # The wrapper script needs to find these libs |
297 |
|
|
298 |
if not conf.CheckCHeader('Python.h'): |
if not conf.CheckCHeader('Python.h'): |
299 |
print "Cannot find python include files (tried 'Python.h' in directory %s)" % (env['python_path']) |
print "Cannot find python include files (tried 'Python.h' in directory %s)" % (env['python_path']) |
300 |
sys.exit(1) |
sys.exit(1) |
308 |
conf.env.AppendUnique(LIBPATH = [env['boost_lib_path']]) |
conf.env.AppendUnique(LIBPATH = [env['boost_lib_path']]) |
309 |
conf.env.AppendUnique(LIBS = [env['boost_libs']]) |
conf.env.AppendUnique(LIBS = [env['boost_libs']]) |
310 |
|
|
311 |
|
conf.env.PrependENVPath('LD_LIBRARY_PATH', env['boost_lib_path']) # The wrapper script needs to find these libs |
312 |
|
|
313 |
if not conf.CheckCXXHeader('boost/python.hpp'): |
if not conf.CheckCXXHeader('boost/python.hpp'): |
314 |
print "Cannot find boost include files (tried boost/python.hpp in directory %s)" % (env['boost_path']) |
print "Cannot find boost include files (tried boost/python.hpp in directory %s)" % (env['boost_path']) |
315 |
sys.exit(1) |
sys.exit(1) |
341 |
conf.env.AppendUnique(CPPPATH = [env['netCDF_path']]) |
conf.env.AppendUnique(CPPPATH = [env['netCDF_path']]) |
342 |
conf.env.AppendUnique(LIBPATH = [env['netCDF_lib_path']]) |
conf.env.AppendUnique(LIBPATH = [env['netCDF_lib_path']]) |
343 |
conf.env.AppendUnique(LIBS = [env['netCDF_libs']]) |
conf.env.AppendUnique(LIBS = [env['netCDF_libs']]) |
344 |
|
conf.env.PrependENVPath('LD_LIBRARY_PATH', env['netCDF_lib_path']) # The wrapper script needs to find these libs |
345 |
|
|
346 |
if env['usenetcdf'] and not conf.CheckCHeader('netcdf.h'): env['usenetcdf'] = 0 |
if env['usenetcdf'] and not conf.CheckCHeader('netcdf.h'): env['usenetcdf'] = 0 |
347 |
if env['usenetcdf'] and not conf.CheckFunc('nc_open'): env['usenetcdf'] = 0 |
if env['usenetcdf'] and not conf.CheckFunc('nc_open'): env['usenetcdf'] = 0 |
362 |
conf.env.AppendUnique(CPPPATH = [env['papi_path']]) |
conf.env.AppendUnique(CPPPATH = [env['papi_path']]) |
363 |
conf.env.AppendUnique(LIBPATH = [env['papi_lib_path']]) |
conf.env.AppendUnique(LIBPATH = [env['papi_lib_path']]) |
364 |
conf.env.AppendUnique(LIBS = [env['papi_libs']]) |
conf.env.AppendUnique(LIBS = [env['papi_libs']]) |
365 |
|
conf.env.PrependENVPath('LD_LIBRARY_PATH', env['papi_lib_path']) # The wrapper script needs to find these libs |
366 |
|
|
367 |
if env['usepapi'] and not conf.CheckCHeader('papi.h'): env['usepapi'] = 0 |
if env['usepapi'] and not conf.CheckCHeader('papi.h'): env['usepapi'] = 0 |
368 |
if env['usepapi'] and not conf.CheckFunc('PAPI_start_counters'): env['usepapi'] = 0 |
if env['usepapi'] and not conf.CheckFunc('PAPI_start_counters'): env['usepapi'] = 0 |
383 |
conf.env.AppendUnique(CPPPATH = [env['mkl_path']]) |
conf.env.AppendUnique(CPPPATH = [env['mkl_path']]) |
384 |
conf.env.AppendUnique(LIBPATH = [env['mkl_lib_path']]) |
conf.env.AppendUnique(LIBPATH = [env['mkl_lib_path']]) |
385 |
conf.env.AppendUnique(LIBS = [env['mkl_libs']]) |
conf.env.AppendUnique(LIBS = [env['mkl_libs']]) |
386 |
|
conf.env.PrependENVPath('LD_LIBRARY_PATH', env['mkl_lib_path']) # The wrapper script needs to find these libs |
387 |
|
|
388 |
if env['usemkl'] and not conf.CheckCHeader('mkl_solver.h'): env['usemkl'] = 0 |
if env['usemkl'] and not conf.CheckCHeader('mkl_solver.h'): env['usemkl'] = 0 |
389 |
if env['usemkl'] and not conf.CheckFunc('pardiso_'): env['usemkl'] = 0 |
if env['usemkl'] and not conf.CheckFunc('pardiso_'): env['usemkl'] = 0 |
411 |
conf.env.AppendUnique(CPPPATH = [env['blas_path']]) |
conf.env.AppendUnique(CPPPATH = [env['blas_path']]) |
412 |
conf.env.AppendUnique(LIBPATH = [env['blas_lib_path']]) |
conf.env.AppendUnique(LIBPATH = [env['blas_lib_path']]) |
413 |
conf.env.AppendUnique(LIBS = [env['blas_libs']]) |
conf.env.AppendUnique(LIBS = [env['blas_libs']]) |
414 |
|
conf.env.PrependENVPath('LD_LIBRARY_PATH', env['umf_lib_path']) # The wrapper script needs to find these libs |
415 |
|
conf.env.PrependENVPath('LD_LIBRARY_PATH', env['amd_lib_path']) # The wrapper script needs to find these libs |
416 |
|
conf.env.PrependENVPath('LD_LIBRARY_PATH', env['blas_lib_path']) # The wrapper script needs to find these libs |
417 |
|
|
418 |
if env['useumfpack'] and not conf.CheckCHeader('umfpack.h'): env['useumfpack'] = 0 |
if env['useumfpack'] and not conf.CheckCHeader('umfpack.h'): env['useumfpack'] = 0 |
419 |
if env['useumfpack'] and not conf.CheckFunc('umfpack_di_symbolic'): env['useumfpack'] = 0 |
if env['useumfpack'] and not conf.CheckFunc('umfpack_di_symbolic'): env['useumfpack'] = 0 |
451 |
conf.env.AppendUnique(CPPPATH = [env_mpi['mpi_path']]) |
conf.env.AppendUnique(CPPPATH = [env_mpi['mpi_path']]) |
452 |
conf.env.AppendUnique(LIBPATH = [env_mpi['mpi_lib_path']]) |
conf.env.AppendUnique(LIBPATH = [env_mpi['mpi_lib_path']]) |
453 |
conf.env.AppendUnique(LIBS = [env_mpi['mpi_libs']]) |
conf.env.AppendUnique(LIBS = [env_mpi['mpi_libs']]) |
454 |
|
conf.env.PrependENVPath('LD_LIBRARY_PATH', env['mpi_lib_path']) # The wrapper script needs to find these libs |
455 |
|
|
456 |
if env_mpi['usempi'] and not conf.CheckCHeader('mpi.h'): env_mpi['usempi'] = 0 |
if env_mpi['usempi'] and not conf.CheckCHeader('mpi.h'): env_mpi['usempi'] = 0 |
457 |
if env_mpi['usempi'] and not conf.CheckFunc('MPI_Init'): env_mpi['usempi'] = 0 |
if env_mpi['usempi'] and not conf.CheckFunc('MPI_Init'): env_mpi['usempi'] = 0 |
476 |
conf.env.AppendUnique(CPPPATH = [env_mpi['parmetis_path']]) |
conf.env.AppendUnique(CPPPATH = [env_mpi['parmetis_path']]) |
477 |
conf.env.AppendUnique(LIBPATH = [env_mpi['parmetis_lib_path']]) |
conf.env.AppendUnique(LIBPATH = [env_mpi['parmetis_lib_path']]) |
478 |
conf.env.AppendUnique(LIBS = [env_mpi['parmetis_libs']]) |
conf.env.AppendUnique(LIBS = [env_mpi['parmetis_libs']]) |
479 |
|
conf.env.PrependENVPath('LD_LIBRARY_PATH', env['parmetis_lib_path']) # The wrapper script needs to find these libs |
480 |
|
|
481 |
if env_mpi['useparmetis'] and not conf.CheckCHeader('parmetis.h'): env_mpi['useparmetis'] = 0 |
if env_mpi['useparmetis'] and not conf.CheckCHeader('parmetis.h'): env_mpi['useparmetis'] = 0 |
482 |
if env_mpi['useparmetis'] and not conf.CheckFunc('ParMETIS_V3_PartGeomKway'): env_mpi['useparmetis'] = 0 |
if env_mpi['useparmetis'] and not conf.CheckFunc('ParMETIS_V3_PartGeomKway'): env_mpi['useparmetis'] = 0 |
518 |
print " Installing in", prefix |
print " Installing in", prefix |
519 |
print "" |
print "" |
520 |
|
|
521 |
|
############ Delete option-dependent files ##################### |
522 |
|
|
523 |
|
Execute(Delete(env['libinstall'] + "/Compiled.with.debug")) |
524 |
|
Execute(Delete(env['libinstall'] + "/Compiled.with.mpi")) |
525 |
|
Execute(Delete(env['libinstall'] + "/Compiled.with.openmp")) |
526 |
|
if not env['usempi']: Execute(Delete(env['libinstall'] + "/pythonMPI")) |
527 |
|
|
528 |
############ Add some custom builders ########################## |
############ Add some custom builders ########################## |
529 |
|
|
530 |
py_builder = Builder(action = scons_extensions.build_py, suffix = '.pyc', src_suffix = '.py', single_source=True) |
py_builder = Builder(action = scons_extensions.build_py, suffix = '.pyc', src_suffix = '.py', single_source=True) |
536 |
runPyUnitTest_builder = Builder(action = scons_extensions.runPyUnitTest, suffix = '.passed', src_suffic='.py', single_source=True) |
runPyUnitTest_builder = Builder(action = scons_extensions.runPyUnitTest, suffix = '.passed', src_suffic='.py', single_source=True) |
537 |
env.Append(BUILDERS = {'RunPyUnitTest' : runPyUnitTest_builder}); |
env.Append(BUILDERS = {'RunPyUnitTest' : runPyUnitTest_builder}); |
538 |
|
|
539 |
############ Build the desired subdirectories ################## |
############ Build the subdirectories ########################## |
540 |
|
|
541 |
Export(["env", "env_mpi", "clone_env"]) |
Export(["env", "env_mpi", "clone_env"]) |
542 |
|
|
550 |
env.SConscript(dirs = ['pyvisi/py_src'], build_dir='build/$PLATFORM/pyvisi', duplicate=0) |
env.SConscript(dirs = ['pyvisi/py_src'], build_dir='build/$PLATFORM/pyvisi', duplicate=0) |
551 |
env.SConscript(dirs = ['pycad/py_src'], build_dir='build/$PLATFORM/pycad', duplicate=0) |
env.SConscript(dirs = ['pycad/py_src'], build_dir='build/$PLATFORM/pycad', duplicate=0) |
552 |
env.SConscript(dirs = ['pythonMPI/src'], build_dir='build/$PLATFORM/pythonMPI', duplicate=0) |
env.SConscript(dirs = ['pythonMPI/src'], build_dir='build/$PLATFORM/pythonMPI', duplicate=0) |
553 |
|
env.SConscript(dirs = ['scripts'], build_dir='build/$PLATFORM/scripts', duplicate=0) |
554 |
|
|
555 |
############ Remember what optimizations we used ############### |
############ Remember what optimizations we used ############### |
556 |
|
|
558 |
|
|
559 |
if env['usedebug']: |
if env['usedebug']: |
560 |
remember_list += env.Command(env['libinstall'] + "/Compiled.with.debug", None, Touch('$TARGET')) |
remember_list += env.Command(env['libinstall'] + "/Compiled.with.debug", None, Touch('$TARGET')) |
|
else: |
|
|
remember_list += env.Command(env['libinstall'] + "/Compiled.with.debug", None, Delete('$TARGET')) |
|
561 |
|
|
562 |
if env['usempi']: |
if env['usempi']: |
563 |
remember_list += env.Command(env['libinstall'] + "/Compiled.with.mpi", None, Touch('$TARGET')) |
remember_list += env.Command(env['libinstall'] + "/Compiled.with.mpi", None, Touch('$TARGET')) |
|
else: |
|
|
remember_list += env.Command(env['libinstall'] + "/Compiled.with.mpi", None, Delete('$TARGET')) |
|
564 |
|
|
565 |
if env['omp_optim'] != '': |
if env['omp_optim'] != '': |
566 |
remember_list += env.Command(env['libinstall'] + "/Compiled.with.openmp", None, Touch('$TARGET')) |
remember_list += env.Command(env['libinstall'] + "/Compiled.with.openmp", None, Touch('$TARGET')) |
|
else: |
|
|
remember_list += env.Command(env['libinstall'] + "/Compiled.with.openmp", None, Delete('$TARGET')) |
|
567 |
|
|
568 |
env.Alias('remember_options', remember_list) |
env.Alias('remember_options', remember_list) |
569 |
|
|
591 |
build_all_list += ['build_paso'] |
build_all_list += ['build_paso'] |
592 |
build_all_list += ['build_escript'] |
build_all_list += ['build_escript'] |
593 |
build_all_list += ['build_finley'] |
build_all_list += ['build_finley'] |
594 |
if env['usempi']: build_all_list += ['target_pythonMPI_exe'] |
if env['usempi']: build_all_list += ['target_pythonMPI_exe'] |
595 |
|
if not IS_WINDOWS_PLATFORM: build_all_list += ['target_finley_wrapper'] |
596 |
env.Alias('build_all', build_all_list) |
env.Alias('build_all', build_all_list) |
597 |
|
|
598 |
install_all_list = [] |
install_all_list = [] |
604 |
install_all_list += ['target_install_pyvisi_py'] |
install_all_list += ['target_install_pyvisi_py'] |
605 |
install_all_list += ['target_install_modellib_py'] |
install_all_list += ['target_install_modellib_py'] |
606 |
install_all_list += ['target_install_pycad_py'] |
install_all_list += ['target_install_pycad_py'] |
607 |
if env['usempi']: install_all_list += ['target_install_pythonMPI_exe'] |
if env['usempi']: install_all_list += ['target_install_pythonMPI_exe'] |
608 |
|
if not IS_WINDOWS_PLATFORM: install_all_list += ['target_install_finley_wrapper'] |
609 |
install_all_list += ['remember_options'] |
install_all_list += ['remember_options'] |
610 |
env.Alias('install_all', install_all_list) |
env.Alias('install_all', install_all_list) |
611 |
|
|