/[escript]/trunk/SConstruct
ViewVC logotype

Diff of /trunk/SConstruct

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1705 by ksteube, Thu Aug 14 05:56:40 2008 UTC revision 2208 by gross, Mon Jan 12 06:37:07 2009 UTC
# Line 1  Line 1 
1  #         Copyright 2006 by ACcESS MNRF  
2    ########################################################
3    #
4    # Copyright (c) 2003-2008 by University of Queensland
5    # Earth Systems Science Computational Center (ESSCC)
6    # http://www.uq.edu.au/esscc
7  #  #
8  #              http://www.access.edu.au  # Primary Business: Queensland, Australia
9  #       Primary Business: Queensland, Australia  # Licensed under the Open Software License version 3.0
10  #  Licensed under the Open Software License version 3.0  # http://www.opensource.org/licenses/osl-3.0.php
11  #     http://www.opensource.org/licenses/osl-3.0.php  #
12    ########################################################
13    
14    
15  EnsureSConsVersion(0,96,91)  EnsureSConsVersion(0,96,91)
16  EnsurePythonVersion(2,3)  EnsurePythonVersion(2,3)
# Line 30  prefix = ARGUMENTS.get('prefix', Dir('#. Line 37  prefix = ARGUMENTS.get('prefix', Dir('#.
37  hostname = re.sub("[^0-9a-zA-Z]", "_", socket.gethostname().split('.')[0])  hostname = re.sub("[^0-9a-zA-Z]", "_", socket.gethostname().split('.')[0])
38  tmp = os.path.join("scons",hostname+"_options.py")  tmp = os.path.join("scons",hostname+"_options.py")
39  options_file = ARGUMENTS.get('options_file', tmp)  options_file = ARGUMENTS.get('options_file', tmp)
40  if not os.path.isfile(options_file): options_file = False  if not os.path.isfile(options_file):
41      options_file = False
42      print "Options file not found (expected '%s')" % tmp
43    else:
44      print "Options file is", options_file
45    
46  # Load options file and command-line arguments  # Load options file and command-line arguments
47  opts = Options(options_file, ARGUMENTS)  opts = Options(options_file, ARGUMENTS)
# Line 41  opts.AddOptions( Line 52  opts.AddOptions(
52  # Where to install esys stuff  # Where to install esys stuff
53    ('prefix', 'where everything will be installed',                       Dir('#.').abspath),    ('prefix', 'where everything will be installed',                       Dir('#.').abspath),
54    ('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')),
55      ('bininstall', 'where the esys binaries will be installed',            os.path.join(prefix,'bin')),
56    ('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')),
57    ('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')),
58  # Compilation options  # Compilation options
# Line 48  opts.AddOptions( Line 60  opts.AddOptions(
60    BoolOption('usedebug', 'Do you want a debug build?', 'no'),    BoolOption('usedebug', 'Do you want a debug build?', 'no'),
61    BoolOption('usevtk', 'Do you want to use VTK?', 'yes'),    BoolOption('usevtk', 'Do you want to use VTK?', 'yes'),
62    ('options_file', 'File of paths/options. Default: scons/<hostname>_options.py', options_file),    ('options_file', 'File of paths/options. Default: scons/<hostname>_options.py', options_file),
63      ('win_cc_name', 'windows C compiler name if needed', 'msvc'),
64    # The strings -DDEFAULT_ get replaced by scons/<hostname>_options.py or by defaults below    # The strings -DDEFAULT_ get replaced by scons/<hostname>_options.py or by defaults below
65    ('cc_flags', 'C compiler flags to use', '-DEFAULT_1'),    ('cc_flags', 'C compiler flags to use', '-DEFAULT_1'),
66    ('cc_optim', 'C compiler optimization flags to use', '-DEFAULT_2'),    ('cc_optim', 'C compiler optimization flags to use', '-DEFAULT_2'),
# Line 56  opts.AddOptions( Line 69  opts.AddOptions(
69    ('omp_debug', 'OpenMP compiler flags to use (Debug build)', '-DEFAULT_5'),    ('omp_debug', 'OpenMP compiler flags to use (Debug build)', '-DEFAULT_5'),
70    ('omp_libs', 'OpenMP compiler libraries to link with', '-DEFAULT_6'),    ('omp_libs', 'OpenMP compiler libraries to link with', '-DEFAULT_6'),
71    ('cc_extra', 'Extra C/C++ flags', ''),    ('cc_extra', 'Extra C/C++ flags', ''),
72      ('ld_extra', 'Extra linker flags', ''),
73    ('sys_libs', 'System libraries to link with', []),    ('sys_libs', 'System libraries to link with', []),
74    ('ar_flags', 'Static library archiver flags to use', ''),    ('ar_flags', 'Static library archiver flags to use', ''),
75    BoolOption('useopenmp', 'Compile parallel version using OpenMP', 'yes'),    BoolOption('useopenmp', 'Compile parallel version using OpenMP', 'yes'),
76    BoolOption('usepedantic', 'Compile with -pedantic if using gcc', 'yes'),    BoolOption('usepedantic', 'Compile with -pedantic if using gcc', 'no'),
77      BoolOption('usewarnings','Compile with warnings as errors if using gcc','yes'),
78  # Python  # Python
79    ('python_path', 'Path to Python includes', '/usr/include/'+python_version),    ('python_path', 'Path to Python includes', '/usr/include/'+python_version),
80    ('python_lib_path', 'Path to Python libs', usr_lib),    ('python_lib_path', 'Path to Python libs', usr_lib),
# Line 99  opts.AddOptions( Line 114  opts.AddOptions(
114    ('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'),
115    ('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']),
116  # UMFPACK  # UMFPACK
117    BoolOption('useumfpack', 'switch on/off the usage of UMFPACK', 'yes'),    BoolOption('useumfpack', 'switch on/off the usage of UMFPACK', 'no'),
118    ('ufc_path', 'Path to UFconfig includes', '/usr/include/suitesparse'),    ('ufc_path', 'Path to UFconfig includes', '/usr/include/suitesparse'),
119    ('umf_path', 'Path to UMFPACK includes', '/usr/include/suitesparse'),    ('umf_path', 'Path to UMFPACK includes', '/usr/include/suitesparse'),
120    ('umf_lib_path', 'Path to UMFPACK libs', usr_lib),    ('umf_lib_path', 'Path to UMFPACK libs', usr_lib),
121    ('umf_libs', 'UMFPACK libraries to link with', ['umfpack']),    ('umf_libs', 'UMFPACK libraries to link with', ['umfpack']),
122    # Silo
123      BoolOption('usesilo', 'switch on/off the usage of Silo', 'yes'),
124      ('silo_path', 'Path to Silo includes', '/usr/include'),
125      ('silo_lib_path', 'Path to Silo libs', usr_lib),
126      ('silo_libs', 'Silo libraries to link with', ['siloh5', 'hdf5']),
127  # AMD (used by UMFPACK)  # AMD (used by UMFPACK)
128    ('amd_path', 'Path to AMD includes', '/usr/include/suitesparse'),    ('amd_path', 'Path to AMD includes', '/usr/include/suitesparse'),
129    ('amd_lib_path', 'Path to AMD libs', usr_lib),    ('amd_lib_path', 'Path to AMD libs', usr_lib),
# Line 111  opts.AddOptions( Line 131  opts.AddOptions(
131  # BLAS (used by UMFPACK)  # BLAS (used by UMFPACK)
132    ('blas_path', 'Path to BLAS includes', '/usr/include/suitesparse'),    ('blas_path', 'Path to BLAS includes', '/usr/include/suitesparse'),
133    ('blas_lib_path', 'Path to BLAS libs', usr_lib),    ('blas_lib_path', 'Path to BLAS libs', usr_lib),
134    ('blas_libs', 'BLAS libraries to link with', ['blas'])    ('blas_libs', 'BLAS libraries to link with', ['blas']),
135    # An option for specifying the compiler tools set (see windows branch).
136      ('tools_names', 'allow control over the tools in the env setup', ['intelc']),
137    # finer control over library building, intel aggressive global optimisation
138    # works with dynamic libraries on windows.
139      ('share_esysUtils', 'control static or dynamic esysUtils lib', False),
140      ('share_paso', 'control static or dynamic paso lib', False)
141  )  )
142    
143  ############ Specify which compilers to use ####################  ############ Specify which compilers to use ####################
# Line 120  opts.AddOptions( Line 146  opts.AddOptions(
146  # failing to find the compilers.  This warning can be safely ignored.  # failing to find the compilers.  This warning can be safely ignored.
147    
148  if IS_WINDOWS_PLATFORM:  if IS_WINDOWS_PLATFORM:
149        env = Environment(tools = ['default', 'msvc'], options = opts)        env = Environment(options = opts)
150          env = Environment(tools = ['default'] + env['tools_names'],
151                            options = opts)
152  else:  else:
153     if socket.gethostname().split('.')[0] == 'service0':     if socket.gethostname().split('.')[0] == 'service0':
154        env = Environment(tools = ['default', 'intelc'], options = opts)        env = Environment(tools = ['default', 'intelc'], options = opts)
# Line 141  if env['useMPI']: env['usempi'] = 1 Line 169  if env['useMPI']: env['usempi'] = 1
169  # Default compiler options (override allowed in hostname_options.py, but should not be necessary)  # Default compiler options (override allowed in hostname_options.py, but should not be necessary)
170  # For both C and C++ you get: cc_flags and either the optim flags or debug flags  # For both C and C++ you get: cc_flags and either the optim flags or debug flags
171    
172    sysheaderopt = ""       # how do we indicate that a header is a system header. Use "" for no action.
173    
174  if env["CC"] == "icc":  if env["CC"] == "icc":
175    # Intel compilers    # Intel compilers
176    cc_flags      = "-fPIC -ansi -wd161 -w1 -vec-report0 -DBLOCKTIMER -DCORE_ID1"    cc_flags      = "-fPIC -ansi -wd161 -w1 -vec-report0 -DBLOCKTIMER -DCORE_ID1"
177    cc_optim      = "-O3 -ftz -IPF_ftlacc- -IPF_fma -fno-alias"    cc_optim      = "-O3 -ftz -IPF_ftlacc- -IPF_fma -fno-alias"
178    cc_debug      = "-g -O0 -UDOASSERT -DDOPROF -DBOUNDS_CHECK"    cc_debug      = "-g -O0 -DDOASSERT -DDOPROF -DBOUNDS_CHECK"
179    omp_optim     = "-openmp -openmp_report0"    omp_optim     = "-openmp -openmp_report0"
180    omp_debug     = "-openmp -openmp_report0"    omp_debug     = "-openmp -openmp_report0"
181    omp_libs      = ['guide', 'pthread']    omp_libs      = ['guide', 'pthread']
182    pedantic      = ""    pedantic      = ""
183      fatalwarning      = ""        # Switch to turn warnings into errors
184      sysheaderopt      = ""
185  elif env["CC"] == "gcc":  elif env["CC"] == "gcc":
186    # GNU C on any system    # GNU C on any system
187    cc_flags      = "-fPIC -ansi -ffast-math -Wno-unknown-pragmas -DBLOCKTIMER"    cc_flags      = "-pedantic -Wall -fPIC -ansi -ffast-math -Wno-unknown-pragmas -DBLOCKTIMER  -Wno-sign-compare -Wno-system-headers -Wno-long-long -Wno-strict-aliasing"
188    #the long long warning occurs on the Mac
189    cc_optim      = "-O3"    cc_optim      = "-O3"
190    cc_debug      = "-g -O0 -UDOASSERT -DDOPROF -DBOUNDS_CHECK"    cc_debug      = "-g -O0 -DDOASSERT -DDOPROF -DBOUNDS_CHECK"
191    omp_optim     = ""    omp_optim     = ""
192    omp_debug     = ""    omp_debug     = ""
193    omp_libs      = []    omp_libs      = []
194    pedantic      = "-pedantic-errors -Wno-long-long"    pedantic      = "-pedantic-errors -Wno-long-long"
195      fatalwarning      = "-Werror"
196      sysheaderopt      = "-isystem "
197  elif env["CC"] == "cl":  elif env["CC"] == "cl":
198    # Microsoft Visual C on Windows    # Microsoft Visual C on Windows
199    cc_flags      = "/FD /EHsc /GR /wd4068 -D_USE_MATH_DEFINES -DDLL_NETCDF"    cc_flags      = "/FD /EHsc /GR /wd4068 -D_USE_MATH_DEFINES -DDLL_NETCDF"
# Line 168  elif env["CC"] == "cl": Line 203  elif env["CC"] == "cl":
203    omp_debug     = ""    omp_debug     = ""
204    omp_libs      = []    omp_libs      = []
205    pedantic      = ""    pedantic      = ""
206      fatalwarning      = ""
207      sysheaderopt      = ""
208    elif env["CC"] == "icl":
209      # intel C on Windows, see windows_intelc_options.py for a start
210      pedantic      = ""
211      fatalwarning      = ""
212      sysheaderopt      = ""
213    
214    
215  # If not specified in hostname_options.py then set them here  # If not specified in hostname_options.py then set them here
216  if env["cc_flags"]  == "-DEFAULT_1": env['cc_flags'] = cc_flags  if env["cc_flags"]  == "-DEFAULT_1": env['cc_flags'] = cc_flags
# Line 221  except KeyError: pass Line 264  except KeyError: pass
264  env.PrependENVPath('PYTHONPATH', prefix)  env.PrependENVPath('PYTHONPATH', prefix)
265  env.PrependENVPath('LD_LIBRARY_PATH', env['libinstall'])  env.PrependENVPath('LD_LIBRARY_PATH', env['libinstall'])
266    
267    env['ENV']['ESCRIPT_ROOT'] = prefix
268    
269  ############ Set up paths for Configure() ######################  ############ Set up paths for Configure() ######################
270    
271  # Make a copy of an environment  # Make a copy of an environment
# Line 233  def clone_env(env): Line 278  def clone_env(env):
278  env.Append(CPPPATH      = [Dir('include')])  env.Append(CPPPATH      = [Dir('include')])
279    
280  # Add cc option -L<Escript>/trunk/lib  # Add cc option -L<Escript>/trunk/lib
281  env.Append(LIBPATH      = [Dir('lib')])  env.Append(LIBPATH      = [Dir(env['libinstall'])])
   
 env.Append(CPPDEFINES = ['ESCRIPT_EXPORTS', 'FINLEY_EXPORTS'])  
282    
283  if env['cc_extra'] != '': env.Append(CCFLAGS = env['cc_extra'])  if env['cc_extra'] != '': env.Append(CCFLAGS = env['cc_extra'])
284    if env['ld_extra'] != '': env.Append(LINKFLAGS = env['ld_extra'])
285    
286  if env['usepedantic']: env.Append(CCFLAGS = pedantic)  if env['usepedantic']: env.Append(CCFLAGS = pedantic)
287    
# Line 245  if env['usepedantic']: env.Append(CCFLAG Line 289  if env['usepedantic']: env.Append(CCFLAG
289  if IS_WINDOWS_PLATFORM:  if IS_WINDOWS_PLATFORM:
290    env.PrependENVPath('PATH',    [env['boost_lib_path']])    env.PrependENVPath('PATH',    [env['boost_lib_path']])
291    env.PrependENVPath('PATH',    [env['libinstall']])    env.PrependENVPath('PATH',    [env['libinstall']])
292      if not env['share_esysUtils'] :
293        env.Append(CPPDEFINES = ['ESYSUTILS_STATIC_LIB'])
294      if not env['share_paso'] :
295        env.Append(CPPDEFINES = ['PASO_STATIC_LIB'])
296    
297    if env['usenetcdf']:    if env['usenetcdf']:
298      env.PrependENVPath('PATH',  [env['netCDF_lib_path']])      env.PrependENVPath('PATH',  [env['netCDF_lib_path']])
299    
# Line 278  if not conf.CheckFunc('printf'): Line 327  if not conf.CheckFunc('printf'):
327    print "Cannot run C compiler '%s' (or libc is missing)" % (env['CC'])    print "Cannot run C compiler '%s' (or libc is missing)" % (env['CC'])
328    sys.exit(1)    sys.exit(1)
329    
330  if not conf.CheckFunc('gethostname'):  if conf.CheckFunc('gethostname'):
331    env.Append(CPPDEFINES = ['HAVE_GETHOSTNAME'])    conf.env.Append(CPPDEFINES = ['HAVE_GETHOSTNAME'])
332    
333  ############ python libraries (required) #######################  ############ python libraries (required) #######################
334    
335  conf.env.AppendUnique(CPPPATH       = [env['python_path']])  
336    if not sysheaderopt =="":
337      conf.env.Append(CCFLAGS=sysheaderopt+env['python_path'])
338    else:
339      conf.env.AppendUnique(CPPPATH     = [env['python_path']])
340    
341  conf.env.AppendUnique(LIBPATH       = [env['python_lib_path']])  conf.env.AppendUnique(LIBPATH       = [env['python_lib_path']])
342  conf.env.AppendUnique(LIBS      = [env['python_libs']])  conf.env.AppendUnique(LIBS      = [env['python_libs']])
343    
344    conf.env.PrependENVPath('LD_LIBRARY_PATH', env['python_lib_path'])  # The wrapper script needs to find these libs
345    
346  if not conf.CheckCHeader('Python.h'):  if not conf.CheckCHeader('Python.h'):
347    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'])
348    sys.exit(1)    sys.exit(1)
# Line 296  if not conf.CheckFunc('Py_Main'): Line 352  if not conf.CheckFunc('Py_Main'):
352    
353  ############ boost (required) ##################################  ############ boost (required) ##################################
354    
355  conf.env.AppendUnique(CPPPATH       = [env['boost_path']])  if not sysheaderopt =="":
356      conf.env.Append(CCFLAGS=sysheaderopt+env['boost_path']+'boost')
357    else:
358      conf.env.AppendUnique(CPPPATH     = [env['boost_path']])
359    
360  conf.env.AppendUnique(LIBPATH       = [env['boost_lib_path']])  conf.env.AppendUnique(LIBPATH       = [env['boost_lib_path']])
361  conf.env.AppendUnique(LIBS      = [env['boost_libs']])  conf.env.AppendUnique(LIBS      = [env['boost_libs']])
362    
363    conf.env.PrependENVPath('LD_LIBRARY_PATH', env['boost_lib_path'])   # The wrapper script needs to find these libs
364    
365  if not conf.CheckCXXHeader('boost/python.hpp'):  if not conf.CheckCXXHeader('boost/python.hpp'):
366    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'])
367    sys.exit(1)    sys.exit(1)
# Line 331  if env['usenetcdf']: Line 393  if env['usenetcdf']:
393    conf.env.AppendUnique(CPPPATH = [env['netCDF_path']])    conf.env.AppendUnique(CPPPATH = [env['netCDF_path']])
394    conf.env.AppendUnique(LIBPATH = [env['netCDF_lib_path']])    conf.env.AppendUnique(LIBPATH = [env['netCDF_lib_path']])
395    conf.env.AppendUnique(LIBS    = [env['netCDF_libs']])    conf.env.AppendUnique(LIBS    = [env['netCDF_libs']])
396      conf.env.PrependENVPath('LD_LIBRARY_PATH', env['netCDF_lib_path'])    # The wrapper script needs to find these libs
397    
398  if env['usenetcdf'] and not conf.CheckCHeader('netcdf.h'): env['usenetcdf'] = 0  if env['usenetcdf'] and not conf.CheckCHeader('netcdf.h'): env['usenetcdf'] = 0
399  if env['usenetcdf'] and not conf.CheckFunc('nc_open'): env['usenetcdf'] = 0  if env['usenetcdf'] and not conf.CheckFunc('nc_open'): env['usenetcdf'] = 0
# Line 351  if env['usepapi']: Line 414  if env['usepapi']:
414    conf.env.AppendUnique(CPPPATH = [env['papi_path']])    conf.env.AppendUnique(CPPPATH = [env['papi_path']])
415    conf.env.AppendUnique(LIBPATH = [env['papi_lib_path']])    conf.env.AppendUnique(LIBPATH = [env['papi_lib_path']])
416    conf.env.AppendUnique(LIBS    = [env['papi_libs']])    conf.env.AppendUnique(LIBS    = [env['papi_libs']])
417      conf.env.PrependENVPath('LD_LIBRARY_PATH', env['papi_lib_path'])  # The wrapper script needs to find these libs
418    
419  if env['usepapi'] and not conf.CheckCHeader('papi.h'): env['usepapi'] = 0  if env['usepapi'] and not conf.CheckCHeader('papi.h'): env['usepapi'] = 0
420  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
# Line 371  if env['usemkl']: Line 435  if env['usemkl']:
435    conf.env.AppendUnique(CPPPATH = [env['mkl_path']])    conf.env.AppendUnique(CPPPATH = [env['mkl_path']])
436    conf.env.AppendUnique(LIBPATH = [env['mkl_lib_path']])    conf.env.AppendUnique(LIBPATH = [env['mkl_lib_path']])
437    conf.env.AppendUnique(LIBS    = [env['mkl_libs']])    conf.env.AppendUnique(LIBS    = [env['mkl_libs']])
438      conf.env.PrependENVPath('LD_LIBRARY_PATH', env['mkl_lib_path'])   # The wrapper script needs to find these libs
439    
440  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
441  if env['usemkl'] and not conf.CheckFunc('pardiso_'): env['usemkl'] = 0  if env['usemkl'] and not conf.CheckFunc('pardiso_'): env['usemkl'] = 0
# Line 398  if env['useumfpack']: Line 463  if env['useumfpack']:
463    conf.env.AppendUnique(CPPPATH = [env['blas_path']])    conf.env.AppendUnique(CPPPATH = [env['blas_path']])
464    conf.env.AppendUnique(LIBPATH = [env['blas_lib_path']])    conf.env.AppendUnique(LIBPATH = [env['blas_lib_path']])
465    conf.env.AppendUnique(LIBS    = [env['blas_libs']])    conf.env.AppendUnique(LIBS    = [env['blas_libs']])
466      conf.env.PrependENVPath('LD_LIBRARY_PATH', env['umf_lib_path'])   # The wrapper script needs to find these libs
467      conf.env.PrependENVPath('LD_LIBRARY_PATH', env['amd_lib_path'])   # The wrapper script needs to find these libs
468      conf.env.PrependENVPath('LD_LIBRARY_PATH', env['blas_lib_path'])  # The wrapper script needs to find these libs
469    
470  if env['useumfpack'] and not conf.CheckCHeader('umfpack.h'): env['useumfpack'] = 0  if env['useumfpack'] and not conf.CheckCHeader('umfpack.h'): env['useumfpack'] = 0
471  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
472    if env['useumfpack'] and not conf.CheckFunc('daxpy'): env['useumfpack'] = 0 # this does not work on shake73?
473    
474  # Add UMFPACK to environment env if it was found  # Add UMFPACK to environment env if it was found
475  if env['useumfpack']:  if env['useumfpack']:
# Line 409  if env['useumfpack']: Line 478  if env['useumfpack']:
478  else:  else:
479    conf.Finish()    conf.Finish()
480    
481    ############ Silo (optional) ###################################
482    
483    if env['usesilo']:
484      conf = Configure(clone_env(env))
485      conf.env.AppendUnique(CPPPATH = [env['silo_path']])
486      conf.env.AppendUnique(LIBPATH = [env['silo_lib_path']])
487      conf.env.AppendUnique(LIBS = [env['silo_libs']])
488      if not conf.CheckCHeader('silo.h'): env['usesilo'] = 0
489      if not conf.CheckFunc('DBMkDir'): env['usesilo'] = 0
490      conf.Finish()
491    
492    # Add the path to Silo to environment env if it was found.
493    # Note that we do not add the libs since they are only needed for the
494    # escriptreader library and tools.
495    if env['usesilo']:
496      env.AppendUnique(CPPPATH = [env['silo_path']])
497      env.AppendUnique(LIBPATH = [env['silo_lib_path']])
498      env.Append(CPPDEFINES = ['HAVE_SILO'])
499    
500  ############ Add the compiler flags ############################  ############ Add the compiler flags ############################
501    
502  # Enable debug by choosing either cc_debug or cc_optim  # Enable debug by choosing either cc_debug or cc_optim
# Line 435  if env_mpi['usempi']: Line 523  if env_mpi['usempi']:
523    conf.env.AppendUnique(CPPPATH = [env_mpi['mpi_path']])    conf.env.AppendUnique(CPPPATH = [env_mpi['mpi_path']])
524    conf.env.AppendUnique(LIBPATH = [env_mpi['mpi_lib_path']])    conf.env.AppendUnique(LIBPATH = [env_mpi['mpi_lib_path']])
525    conf.env.AppendUnique(LIBS    = [env_mpi['mpi_libs']])    conf.env.AppendUnique(LIBS    = [env_mpi['mpi_libs']])
526      conf.env.PrependENVPath('LD_LIBRARY_PATH', env['mpi_lib_path'])   # The wrapper script needs to find these libs
527    
528  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
529  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
# Line 459  if env_mpi['useparmetis']: Line 548  if env_mpi['useparmetis']:
548    conf.env.AppendUnique(CPPPATH = [env_mpi['parmetis_path']])    conf.env.AppendUnique(CPPPATH = [env_mpi['parmetis_path']])
549    conf.env.AppendUnique(LIBPATH = [env_mpi['parmetis_lib_path']])    conf.env.AppendUnique(LIBPATH = [env_mpi['parmetis_lib_path']])
550    conf.env.AppendUnique(LIBS    = [env_mpi['parmetis_libs']])    conf.env.AppendUnique(LIBS    = [env_mpi['parmetis_libs']])
551      conf.env.PrependENVPath('LD_LIBRARY_PATH', env['parmetis_lib_path'])  # The wrapper script needs to find these libs
552    
553  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
554  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
# Line 472  else: Line 562  else:
562    
563  env['useparmetis'] = env_mpi['useparmetis']  env['useparmetis'] = env_mpi['useparmetis']
564    
565    ############ Now we switch on Warnings as errors ###############
566    
567    #this needs to be done after configuration because the scons test files have warnings in them
568    
569    if ((fatalwarning != "") and (env['usewarnings'])):
570      env.Append(CCFLAGS        = fatalwarning)
571      env_mpi.Append(CCFLAGS        = fatalwarning)
572    
573  ############ Summarize our environment #########################  ############ Summarize our environment #########################
574    
575  print ""  print ""
# Line 487  if env['usemkl']: print "  Using MKL" Line 585  if env['usemkl']: print "  Using MKL"
585  else: print "   Not using MKL"  else: print "   Not using MKL"
586  if env['useumfpack']: print "   Using UMFPACK"  if env['useumfpack']: print "   Using UMFPACK"
587  else: print "   Not using UMFPACK"  else: print "   Not using UMFPACK"
588    if env['usesilo']: print "  Using Silo"
589    else: print "   Not using Silo"
590  if env['useopenmp']: print "    Using OpenMP"  if env['useopenmp']: print "    Using OpenMP"
591  else: print "   Not using OpenMP"  else: print "   Not using OpenMP"
592  if env['usempi']: print "   Using MPI"  if env['usempi']: print "   Using MPI"
# Line 498  else: print "  Not using PAPI" Line 598  else: print "  Not using PAPI"
598  if env['usedebug']: print " Compiling for debug"  if env['usedebug']: print " Compiling for debug"
599  else: print "   Not compiling for debug"  else: print "   Not compiling for debug"
600  print " Installing in", prefix  print " Installing in", prefix
601    if ((fatalwarning != "") and (env['usewarnings'])): print " Treating warnings as errors"
602    else: print "   Not treating warnings as errors"
603  print ""  print ""
604    
605    ############ Delete option-dependent files #####################
606    
607    Execute(Delete(env['libinstall'] + "/Compiled.with.debug"))
608    Execute(Delete(env['libinstall'] + "/Compiled.with.mpi"))
609    Execute(Delete(env['libinstall'] + "/Compiled.with.openmp"))
610    if not env['usempi']: Execute(Delete(env['libinstall'] + "/pythonMPI"))
611    
612  ############ Add some custom builders ##########################  ############ Add some custom builders ##########################
613    
614  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)
# Line 511  env.Append(BUILDERS = {'RunUnitTest' : r Line 620  env.Append(BUILDERS = {'RunUnitTest' : r
620  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)
621  env.Append(BUILDERS = {'RunPyUnitTest' : runPyUnitTest_builder});  env.Append(BUILDERS = {'RunPyUnitTest' : runPyUnitTest_builder});
622    
623  ############ Build the desired subdirectories ##################  ############ Build the subdirectories ##########################
624    
625  Export(["env", "env_mpi", "clone_env"])  Export(
626      ["env",
627       "env_mpi",
628       "clone_env",
629       "IS_WINDOWS_PLATFORM"
630       ]
631      )
632    
633  env.SConscript(dirs = ['tools/CppUnitTest/src'], build_dir='build/$PLATFORM/tools/CppUnitTest', duplicate=0)  env.SConscript(dirs = ['tools/CppUnitTest/src'], build_dir='build/$PLATFORM/tools/CppUnitTest', duplicate=0)
634    env.SConscript(dirs = ['tools/libescriptreader/src'], build_dir='build/$PLATFORM/tools/libescriptreader', duplicate=0)
635  env.SConscript(dirs = ['paso/src'], build_dir='build/$PLATFORM/paso', duplicate=0)  env.SConscript(dirs = ['paso/src'], build_dir='build/$PLATFORM/paso', duplicate=0)
636  env.SConscript(dirs = ['escript/src'], build_dir='build/$PLATFORM/escript', duplicate=0)  env.SConscript(dirs = ['escript/src'], build_dir='build/$PLATFORM/escript', duplicate=0)
637  env.SConscript(dirs = ['esysUtils/src'], build_dir='build/$PLATFORM/esysUtils', duplicate=0)  env.SConscript(dirs = ['esysUtils/src'], build_dir='build/$PLATFORM/esysUtils', duplicate=0)
# Line 525  env.SConscript(dirs = ['doc'], build_dir Line 641  env.SConscript(dirs = ['doc'], build_dir
641  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)
642  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)
643  env.SConscript(dirs = ['pythonMPI/src'], build_dir='build/$PLATFORM/pythonMPI', duplicate=0)  env.SConscript(dirs = ['pythonMPI/src'], build_dir='build/$PLATFORM/pythonMPI', duplicate=0)
644    env.SConscript(dirs = ['scripts'], build_dir='build/$PLATFORM/scripts', duplicate=0)
645    env.SConscript(dirs = ['paso/profiling'], build_dir='build/$PLATFORM/paso/profiling', duplicate=0)
646    
647  ############ Remember what optimizations we used ###############  ############ Remember what optimizations we used ###############
648    
# Line 532  remember_list = [] Line 650  remember_list = []
650    
651  if env['usedebug']:  if env['usedebug']:
652    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'))  
653    
654  if env['usempi']:  if env['usempi']:
655    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'))  
656    
657  if env['omp_optim'] != '':  if env['omp_optim'] != '':
658    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'))  
659    
660  env.Alias('remember_options', remember_list)  env.Alias('remember_options', remember_list)
661    
# Line 571  build_all_list += ['build_esysUtils'] Line 683  build_all_list += ['build_esysUtils']
683  build_all_list += ['build_paso']  build_all_list += ['build_paso']
684  build_all_list += ['build_escript']  build_all_list += ['build_escript']
685  build_all_list += ['build_finley']  build_all_list += ['build_finley']
686  if env['usempi']: build_all_list += ['target_pythonMPI_exe']  if env['usempi']:       build_all_list += ['target_pythonMPI_exe']
687    if not IS_WINDOWS_PLATFORM: build_all_list += ['target_finley_wrapper']
688    if env['usesilo']:  build_all_list += ['target_escript2silo']
689  env.Alias('build_all', build_all_list)  env.Alias('build_all', build_all_list)
690    
691  install_all_list = []  install_all_list = []
# Line 583  install_all_list += ['install_finley'] Line 697  install_all_list += ['install_finley']
697  install_all_list += ['target_install_pyvisi_py']  install_all_list += ['target_install_pyvisi_py']
698  install_all_list += ['target_install_modellib_py']  install_all_list += ['target_install_modellib_py']
699  install_all_list += ['target_install_pycad_py']  install_all_list += ['target_install_pycad_py']
700  if env['usempi']: install_all_list += ['target_install_pythonMPI_exe']  if env['usempi']:       install_all_list += ['target_install_pythonMPI_exe']
701    if not IS_WINDOWS_PLATFORM: install_all_list += ['target_install_finley_wrapper']
702    if env['usesilo']:  install_all_list += ['target_install_escript2silo']
703  install_all_list += ['remember_options']  install_all_list += ['remember_options']
704  env.Alias('install_all', install_all_list)  env.Alias('install_all', install_all_list)
705    

Legend:
Removed from v.1705  
changed lines
  Added in v.2208

  ViewVC Help
Powered by ViewVC 1.1.26