98 |
('mpi_run', 'mpirun name' , 'mpiexec -np 1'), |
('mpi_run', 'mpirun name' , 'mpiexec -np 1'), |
99 |
('mpi_lib_path', 'Path to MPI libs (needs to be added to the LD_LIBRARY_PATH)', usr_lib), |
('mpi_lib_path', 'Path to MPI libs (needs to be added to the LD_LIBRARY_PATH)', usr_lib), |
100 |
('mpi_libs', 'MPI libraries to link with (needs to be shared!)', ['mpich' , 'pthread', 'rt']), |
('mpi_libs', 'MPI libraries to link with (needs to be shared!)', ['mpich' , 'pthread', 'rt']), |
101 |
|
('mpi_flavour','Type of MPI execution environment','none'), |
102 |
# ParMETIS |
# ParMETIS |
103 |
BoolOption('useparmetis', 'Compile parallel version using ParMETIS', 'yes'), |
BoolOption('useparmetis', 'Compile parallel version using ParMETIS', 'yes'), |
104 |
('parmetis_path', 'Path to ParMETIS includes', '/usr/include'), |
('parmetis_path', 'Path to ParMETIS includes', '/usr/include'), |
297 |
|
|
298 |
# MS Windows |
# MS Windows |
299 |
if IS_WINDOWS_PLATFORM: |
if IS_WINDOWS_PLATFORM: |
300 |
env.PrependENVPath('PATH', [env['boost_lib_path']]) |
env.AppendENVPath('PATH', [env['boost_lib_path']]) |
301 |
env.PrependENVPath('PATH', [env['libinstall']]) |
env.AppendENVPath('PATH', [env['libinstall']]) |
302 |
if not env['share_esysUtils'] : |
if not env['share_esysUtils'] : |
303 |
env.Append(CPPDEFINES = ['ESYSUTILS_STATIC_LIB']) |
env.Append(CPPDEFINES = ['ESYSUTILS_STATIC_LIB']) |
304 |
if not env['share_paso'] : |
if not env['share_paso'] : |
305 |
env.Append(CPPDEFINES = ['PASO_STATIC_LIB']) |
env.Append(CPPDEFINES = ['PASO_STATIC_LIB']) |
306 |
|
|
307 |
if env['usenetcdf']: |
if env['usenetcdf']: |
308 |
env.PrependENVPath('PATH', [env['netCDF_lib_path']]) |
env.AppendENVPath('PATH', [env['netCDF_lib_path']]) |
309 |
|
|
310 |
env.Append(ARFLAGS = env['ar_flags']) |
env.Append(ARFLAGS = env['ar_flags']) |
311 |
|
|
467 |
conf.env.PrependENVPath('LD_LIBRARY_PATH', env['libinstall']) |
conf.env.PrependENVPath('LD_LIBRARY_PATH', env['libinstall']) |
468 |
|
|
469 |
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 |
470 |
if env['usemkl'] and not conf.CheckFunc('pardiso_'): env['usemkl'] = 0 |
if env['usemkl'] and not conf.CheckFunc('pardiso'): env['usemkl'] = 0 |
471 |
|
|
472 |
# Add MKL to environment env if it was found |
# Add MKL to environment env if it was found |
473 |
if env['usemkl']: |
if env['usemkl']: |
543 |
env.Append(CCFLAGS = env['cc_flags']) |
env.Append(CCFLAGS = env['cc_flags']) |
544 |
env.Append(LIBS = [env['omp_libs']]) |
env.Append(LIBS = [env['omp_libs']]) |
545 |
|
|
|
|
|
546 |
############ Add some custom builders ########################## |
############ Add some custom builders ########################## |
547 |
|
|
548 |
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) |
563 |
conf = Configure(clone_env(env_mpi)) |
conf = Configure(clone_env(env_mpi)) |
564 |
|
|
565 |
if env_mpi['usempi']: |
if env_mpi['usempi']: |
566 |
|
VALID_MPIs=[ "MPT", "OPENMPI", "MPICH", "OPENMPI", "INTELMPI" ] |
567 |
|
if not env_mpi['mpi_flavour'] in VALID_MPIs: |
568 |
|
raise ValueError,"MPI is enabled but mpi_flavour = %s is not a valid key from %s."%( env_mpi['mpi_flavour'],VALID_MPIs) |
569 |
conf.env.AppendUnique(CPPPATH = [env_mpi['mpi_path']]) |
conf.env.AppendUnique(CPPPATH = [env_mpi['mpi_path']]) |
570 |
conf.env.AppendUnique(LIBPATH = [env_mpi['mpi_lib_path']]) |
conf.env.AppendUnique(LIBPATH = [env_mpi['mpi_lib_path']]) |
571 |
conf.env.AppendUnique(LIBS = [env_mpi['mpi_libs']]) |
conf.env.AppendUnique(LIBS = [env_mpi['mpi_libs']]) |
575 |
conf.env.PrependENVPath('LD_LIBRARY_PATH', env['libinstall']) |
conf.env.PrependENVPath('LD_LIBRARY_PATH', env['libinstall']) |
576 |
|
|
577 |
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 |
578 |
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 |
579 |
|
|
580 |
# Add MPI to environment env_mpi if it was found |
# Add MPI to environment env_mpi if it was found |
581 |
if env_mpi['usempi']: |
if env_mpi['usempi']: |
641 |
else: print " Not using Silo" |
else: print " Not using Silo" |
642 |
if env['useopenmp']: print " Using OpenMP" |
if env['useopenmp']: print " Using OpenMP" |
643 |
else: print " Not using OpenMP" |
else: print " Not using OpenMP" |
644 |
if env['usempi']: print " Using MPI" |
if env['usempi']: print " Using MPI (flavour = %s)"%env['mpi_flavour'] |
645 |
else: print " Not using MPI" |
else: print " Not using MPI" |
646 |
if env['useparmetis']: print " Using ParMETIS" |
if env['useparmetis']: print " Using ParMETIS" |
647 |
else: print " Not using ParMETIS (requires MPI)" |
else: print " Not using ParMETIS (requires MPI)" |
656 |
|
|
657 |
############ Delete option-dependent files ##################### |
############ Delete option-dependent files ##################### |
658 |
|
|
659 |
Execute(Delete(env['libinstall'] + "/Compiled.with.debug")) |
Execute(Delete(os.path.join(env['libinstall'],"Compiled.with.debug"))) |
660 |
Execute(Delete(env['libinstall'] + "/Compiled.with.mpi")) |
Execute(Delete(os.path.join(env['libinstall'],"Compiled.with.mpi"))) |
661 |
Execute(Delete(env['libinstall'] + "/Compiled.with.openmp")) |
Execute(Delete(os.path.join(env['libinstall'],"Compiled.with.openmp"))) |
662 |
Execute(Delete(env['libinstall'] + "pyversion")) |
Execute(Delete(os.path.join(env['libinstall'],"pyversion"))) |
663 |
if not env['usempi']: Execute(Delete(env['libinstall'] + "/pythonMPI")) |
Execute(Delete(os.path.join(env['libinstall'],"buildvars"))) |
664 |
|
if not env['usempi']: Execute(Delete(os.path.join(env['libinstall'],"pythonMPI"))) |
665 |
|
|
666 |
|
|
667 |
############ Build the subdirectories ########################## |
############ Build the subdirectories ########################## |
699 |
remember_list = [] |
remember_list = [] |
700 |
|
|
701 |
if env['usedebug']: |
if env['usedebug']: |
702 |
remember_list += env.Command(env['libinstall'] + "/Compiled.with.debug", None, Touch('$TARGET')) |
remember_list += env.Command(os.path.join(env['libinstall'],"Compiled.with.debug"), None, Touch('$TARGET')) |
703 |
|
|
704 |
if env['usempi']: |
if env['usempi']: |
705 |
remember_list += env.Command(env['libinstall'] + "/Compiled.with.mpi", None, Touch('$TARGET')) |
remember_list += env.Command(os.path.join(env['libinstall'],"Compiled.with.mpi"), None, Touch('$TARGET')) |
706 |
|
|
707 |
if env['omp_optim'] != '': |
if env['useopenmp']: |
708 |
remember_list += env.Command(env['libinstall'] + "/Compiled.with.openmp", None, Touch('$TARGET')) |
remember_list += env.Command(os.path.join(env['libinstall'],"Compiled.with.openmp"), None, Touch('$TARGET')) |
709 |
|
|
710 |
env.Alias('remember_options', remember_list) |
env.Alias('remember_options', remember_list) |
711 |
|
|
714 |
|
|
715 |
if not IS_WINDOWS_PLATFORM: |
if not IS_WINDOWS_PLATFORM: |
716 |
versionstring="Python "+str(sys.version_info[0])+"."+str(sys.version_info[1])+"."+str(sys.version_info[2]) |
versionstring="Python "+str(sys.version_info[0])+"."+str(sys.version_info[1])+"."+str(sys.version_info[2]) |
717 |
os.system("echo "+versionstring+" > "+env['libinstall']+"/pyversion") |
os.system("echo "+versionstring+" > "+os.path.join(env['libinstall'],"pyversion")) |
718 |
|
|
719 |
|
############## Populate the buildvars file ##################### |
720 |
|
|
721 |
|
buildvars=open(os.path.join(env['libinstall'],'buildvars'),'w') |
722 |
|
buildvars.write('python='+str(sys.version_info[0])+"."+str(sys.version_info[1])+"."+str(sys.version_info[2])+'\n') |
723 |
|
|
724 |
|
# Find the boost version by extracting it from version.hpp |
725 |
|
boosthpp=open(os.path.join(env['boost_path'],'boost','version.hpp')) |
726 |
|
boostversion='unknown' |
727 |
|
try: |
728 |
|
for line in boosthpp: |
729 |
|
ver=re.match(r'#define BOOST_VERSION (\d+)',line) |
730 |
|
if ver: |
731 |
|
boostversion=ver.group(1) |
732 |
|
except StopIteration: |
733 |
|
pass |
734 |
|
buildvars.write("boost="+boostversion+"\n") |
735 |
|
buildvars.write("svn_revision="+str(global_revision)+"\n") |
736 |
|
out="usedebug=" |
737 |
|
if env['usedebug']: |
738 |
|
out+="y" |
739 |
|
else: |
740 |
|
out+="n" |
741 |
|
out+="\nusempi=" |
742 |
|
if env['usempi']: |
743 |
|
out+="y" |
744 |
|
else: |
745 |
|
out+="n" |
746 |
|
out+="\nuseopenmp=" |
747 |
|
if env['useopenmp']: |
748 |
|
out+="y" |
749 |
|
else: |
750 |
|
out+="n" |
751 |
|
buildvars.write(out+"\n") |
752 |
|
buildvars.write("mpi_flavour="+env['mpi_flavour']+'\n') |
753 |
|
|
754 |
|
buildvars.close() |
755 |
|
|
756 |
|
|
757 |
############ Targets to build and install libraries ############ |
############ Targets to build and install libraries ############ |
758 |
|
|
811 |
|
|
812 |
############ Targets to build the documentation ################ |
############ Targets to build the documentation ################ |
813 |
|
|
814 |
env.Alias('docs', ['examples_tarfile', 'examples_zipfile', 'api_epydoc', 'api_doxygen', 'guide_pdf', 'guide_html']) |
env.Alias('docs', ['examples_tarfile', 'examples_zipfile', 'api_epydoc', 'api_doxygen', 'guide_pdf', 'guide_html','install_pdf']) |
815 |
|
|
816 |
if not IS_WINDOWS_PLATFORM: |
if not IS_WINDOWS_PLATFORM: |
817 |
try: |
try: |