/[escript]/branches/inv2jf/SConstruct
ViewVC logotype

Diff of /branches/inv2jf/SConstruct

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

revision 3896 by caltinay, Fri May 11 01:31:29 2012 UTC revision 4154 by jfenwick, Tue Jan 22 09:30:23 2013 UTC
# Line 1  Line 1 
1  ########################################################  ##############################################################################
2  #  #
3  # Copyright (c) 2003-2010 by University of Queensland  # Copyright (c) 2003-2013 by University of Queensland
4  # Earth Systems Science Computational Center (ESSCC)  # http://www.uq.edu.au
 # http://www.uq.edu.au/esscc  
5  #  #
6  # Primary Business: Queensland, Australia  # Primary Business: Queensland, Australia
7  # Licensed under the Open Software License version 3.0  # Licensed under the Open Software License version 3.0
8  # http://www.opensource.org/licenses/osl-3.0.php  # http://www.opensource.org/licenses/osl-3.0.php
9  #  #
10  ########################################################  # Development until 2012 by Earth Systems Science Computational Center (ESSCC)
11    # Development since 2012 by School of Earth Sciences
12    #
13    ##############################################################################
14    
15  EnsureSConsVersion(0,98,1)  EnsureSConsVersion(0,98,1)
16  EnsurePythonVersion(2,5)  EnsurePythonVersion(2,5)
# Line 16  EnsurePythonVersion(2,5) Line 18  EnsurePythonVersion(2,5)
18  import sys, os, platform, re  import sys, os, platform, re
19  from distutils import sysconfig  from distutils import sysconfig
20  from site_init import *  from site_init import *
 import subprocess  
21  from subprocess import PIPE, Popen  from subprocess import PIPE, Popen
22    
23  # Version number to check for in options file. Increment when new features are  # Version number to check for in options file. Increment when new features are
# Line 110  vars.AddVariables( Line 111  vars.AddVariables(
111    BoolVariable('visit', 'Enable the VisIt simulation interface', False),    BoolVariable('visit', 'Enable the VisIt simulation interface', False),
112    ('visit_prefix', 'Prefix/Paths to VisIt installation', default_prefix),    ('visit_prefix', 'Prefix/Paths to VisIt installation', default_prefix),
113    ('visit_libs', 'VisIt libraries to link with', ['simV2']),    ('visit_libs', 'VisIt libraries to link with', ['simV2']),
   BoolVariable('pyvisi', 'Enable pyvisi (deprecated, requires VTK module)', False),  
114    BoolVariable('vsl_random', 'Use VSL from intel for random data', False),    BoolVariable('vsl_random', 'Use VSL from intel for random data', False),
115  # Advanced settings  # Advanced settings
116    #dudley_assemble_flags = -funroll-loops      to actually do something    #dudley_assemble_flags = -funroll-loops      to actually do something
# Line 131  vars.AddVariables( Line 131  vars.AddVariables(
131    ('pythoncmd', 'which python to compile with','python'),    ('pythoncmd', 'which python to compile with','python'),
132    ('usepython3', 'Is this a python3 build? (experimental)', False),    ('usepython3', 'Is this a python3 build? (experimental)', False),
133    ('pythonlibname', 'Name of the python library to link. (This is found automatically for python2.X.)', ''),    ('pythonlibname', 'Name of the python library to link. (This is found automatically for python2.X.)', ''),
134      ('pythonlibpath', 'Path to the python library. (You should not need to set this unless your python has moved)',''),
135      ('pythonincpath','Path to python include files. (You should not need to set this unless your python has moved',''),
136      BoolVariable('BADPYTHONMACROS','Extra \#include to get around a python bug.', True),
137  )  )
138    
139  ##################### Create environment and help text #######################  ##################### Create environment and help text #######################
# Line 142  vars.AddVariables( Line 145  vars.AddVariables(
145  # in default locations.  # in default locations.
146  env = Environment(tools = ['default'], options = vars,  env = Environment(tools = ['default'], options = vars,
147                    ENV = {'PATH': os.environ['PATH']})                    ENV = {'PATH': os.environ['PATH']})
148                      
149    
150    #set the vars for clang
151    def mkclang(env):
152      env['CC']='clang'
153      env['CXX']='clang++'
154                      
155                      
156  if env['tools_names'] != 'default':  if env['tools_names'] != 'default':
157        zz=env['tools_names']
158        if 'clang' in zz:
159            zz.remove('clang')
160            zz.insert(0, mkclang)
161      env = Environment(tools = ['default'] + env['tools_names'], options = vars,      env = Environment(tools = ['default'] + env['tools_names'], options = vars,
162                        ENV = {'PATH' : os.environ['PATH']})                        ENV = {'PATH' : os.environ['PATH']})
163    
# Line 170  if len(vars.UnknownVariables())>0: Line 185  if len(vars.UnknownVariables())>0:
185    
186  #################### Make sure install directories exist #####################  #################### Make sure install directories exist #####################
187    
188  env['BUILD_DIR']=env['build_dir']  env['BUILD_DIR']=Dir(env['build_dir']).abspath
189  prefix=Dir(env['prefix']).abspath  prefix=Dir(env['prefix']).abspath
190  env['incinstall'] = os.path.join(prefix, 'include')  env['incinstall'] = os.path.join(prefix, 'include')
191  env['bininstall'] = os.path.join(prefix, 'bin')  env['bininstall'] = os.path.join(prefix, 'bin')
# Line 210  cc_name=os.path.basename(env['CC']) Line 225  cc_name=os.path.basename(env['CC'])
225    
226  if cc_name == 'icc':  if cc_name == 'icc':
227      # Intel compiler      # Intel compiler
228      cc_flags    = "-std=c99 -fPIC -wd161 -w1 -vec-report0 -DBLOCKTIMER -DCORE_ID1"      # #1875: offsetof applied to non-POD types is nonstandard (in boost)
229      cc_optim    = "-O3 -ftz -IPF_ftlacc- -IPF_fma -fno-alias -ip"      cc_flags    = "-std=c99 -fPIC -w2 -wd1875 -Wno-unknown-pragmas -DBLOCKTIMER -DCORE_ID1"
230        cc_optim    = "-O3 -ftz -fno-alias -ipo -xHost"
231      cc_debug    = "-g -O0 -DDOASSERT -DDOPROF -DBOUNDS_CHECK"      cc_debug    = "-g -O0 -DDOASSERT -DDOPROF -DBOUNDS_CHECK"
232      omp_flags   = "-openmp -openmp_report0"      omp_flags   = "-openmp"
233      omp_ldflags = "-openmp -openmp_report0 -lpthread"      omp_ldflags = "-openmp -openmp_report=1"
234      fatalwarning = "-Werror"      fatalwarning = "-Werror"
235  elif cc_name[:3] == 'gcc':  elif cc_name[:3] == 'gcc':
236      # GNU C on any system      # GNU C on any system
# Line 249  if env['cc_extra']  != '': env.Append(CF Line 265  if env['cc_extra']  != '': env.Append(CF
265  if env['cxx_extra'] != '': env.Append(CXXFLAGS = env['cxx_extra'])  if env['cxx_extra'] != '': env.Append(CXXFLAGS = env['cxx_extra'])
266  if env['ld_extra']  != '': env.Append(LINKFLAGS = env['ld_extra'])  if env['ld_extra']  != '': env.Append(LINKFLAGS = env['ld_extra'])
267    
268    if env['BADPYTHONMACROS']: env.Append(CXXFLAGS = ' -DBADPYTHONMACROS')
269    
270  if env['usepython3']:  if env['usepython3']:
271      env.Append(CPPDEFINES=['ESPYTHON3'])      env.Append(CPPDEFINES=['ESPYTHON3'])
272    
# Line 333  for key in 'OMP_NUM_THREADS', 'ESCRIPT_N Line 351  for key in 'OMP_NUM_THREADS', 'ESCRIPT_N
351          env['ENV'][key] = 1          env['ENV'][key] = 1
352    
353  env_export=env['env_export']  env_export=env['env_export']
354  env_export.extend(['ESCRIPT_NUM_THREADS','ESCRIPT_HOSTFILE','DISPLAY','XAUTHORITY','PATH','HOME','TMPDIR','TEMP','TMP'])  env_export.extend(['ESCRIPT_NUM_THREADS','ESCRIPT_HOSTFILE','DISPLAY','XAUTHORITY','PATH','HOME','KMP_MONITOR_STACKSIZE','TMPDIR','TEMP','TMP'])
355    
356  for key in set(env_export):  for key in set(env_export):
357      try:      try:
# Line 402  if conf.CheckFunc('gethostname'): Line 420  if conf.CheckFunc('gethostname'):
420    
421  ######## Python headers & library (required)  ######## Python headers & library (required)
422    
423    #First we check to see if the config file has specified
424    ##Where to find the filae. Ideally, this should be automatic
425    #But we need to deal with the case where python is not in its INSTALL
426    #Directory
427  # Use the python scons is running  # Use the python scons is running
428  if env['pythoncmd']=='python':  if env['pythoncmd']=='python':
429      python_inc_path=sysconfig.get_python_inc()      python_inc_path=sysconfig.get_python_inc()
# Line 457  else: Line 479  else:
479      p.wait()      p.wait()
480      python_lib_path=python_lib_path.strip()      python_lib_path=python_lib_path.strip()
481    
482    #Check for an override from the config file.
483    #Ideally, this should be automatic
484    #But we need to deal with the case where python is not in its INSTALL
485    #Directory
486    if env['pythonlibpath']!='':
487        python_lib_path=env['pythonlibpath']
488    
489    if env['pythonincpath']!='':
490        python_inc_path=env['pythonincpath']
491    
492    
493  if sysheaderopt == '':  if sysheaderopt == '':
494      conf.env.AppendUnique(CPPPATH = [python_inc_path])      conf.env.AppendUnique(CPPPATH = [python_inc_path])
495  else:  else:
# Line 507  env.PrependENVPath(LD_LIBRARY_PATH_KEY, Line 540  env.PrependENVPath(LD_LIBRARY_PATH_KEY,
540    
541  ######## numpy (required)  ######## numpy (required)
542    
543  if env['pythoncmd']=='python':  if not detectModule(env, 'numpy'):
544      try:      print("Cannot import numpy. If it is installed try setting your PYTHONPATH and probably %s"%LD_LIBRARY_PATH_KEY)
545        from numpy import identity      Exit(1)
     except ImportError:  
       print("Cannot import numpy, you need to set your PYTHONPATH and probably %s"%LD_LIBRARY_PATH_KEY)  
       Exit(1)  
 else:  
     p=subprocess.call([env['pythoncmd'],'-c','import numpy'])  
     if p!=0:  
       print("Cannot import numpy, you need to set your PYTHONPATH and probably %s"%LD_LIBRARY_PATH_KEY)  
       Exit(1)  
546    
547  ######## CppUnit (required for tests)  ######## CppUnit (required for tests)
548    
# Line 530  try: Line 555  try:
555  except:  except:
556      env['cppunit']=False      env['cppunit']=False
557    
558  ######## VTK (optional)  ######## sympy (optional)
559    
560  if env['pyvisi']:  if detectModule(env, 'sympy'):
561      try:      env['sympy'] = True
562          import vtk  else:
563          env['pyvisi'] = True      print("Cannot import sympy. Symbolic toolbox and nonlinear PDEs will not be available.")
564      except ImportError:      env['sympy'] = False
         print("Cannot import vtk, disabling pyvisi.")  
         env['pyvisi'] = False  
565    
566  ######## netCDF (optional)  ######## netCDF (optional)
567    
# Line 685  if env['parmetis']: Line 708  if env['parmetis']:
708  ######## gmsh (optional, for tests)  ######## gmsh (optional, for tests)
709    
710  try:  try:
711      import subprocess      p=Popen(['gmsh', '-info'], stderr=PIPE)
     p=subprocess.Popen(['gmsh', '-info'], stderr=subprocess.PIPE)  
712      _,e=p.communicate()      _,e=p.communicate()
713      if e.split().count("MPI"):      if e.split().count("MPI"):
714          env['gmsh']='m'          env['gmsh']='m'
# Line 739  else: Line 761  else:
761      print("          LAPACK:  DISABLED")      print("          LAPACK:  DISABLED")
762  d_list=[]  d_list=[]
763  e_list=[]  e_list=[]
764  for i in 'debug','openmp','netcdf','parmetis','papi','mkl','umfpack','boomeramg','silo','visit','vsl_random':  for i in 'debug','openmp','boomeramg','mkl','netcdf','papi','parmetis','silo','sympy','umfpack','visit','vsl_random':
765      if env[i]: e_list.append(i)      if env[i]: e_list.append(i)
766      else: d_list.append(i)      else: d_list.append(i)
767  for i in e_list:  for i in e_list:
# Line 799  env.SConscript(dirs = ['pasowrap/src'], Line 821  env.SConscript(dirs = ['pasowrap/src'],
821  env.SConscript(dirs = ['dudley/src'], variant_dir='$BUILD_DIR/$PLATFORM/dudley', duplicate=0)  env.SConscript(dirs = ['dudley/src'], variant_dir='$BUILD_DIR/$PLATFORM/dudley', duplicate=0)
822  env.SConscript(dirs = ['finley/src'], variant_dir='$BUILD_DIR/$PLATFORM/finley', duplicate=0)  env.SConscript(dirs = ['finley/src'], variant_dir='$BUILD_DIR/$PLATFORM/finley', duplicate=0)
823  env.SConscript(dirs = ['ripley/src'], variant_dir='$BUILD_DIR/$PLATFORM/ripley', duplicate=0)  env.SConscript(dirs = ['ripley/src'], variant_dir='$BUILD_DIR/$PLATFORM/ripley', duplicate=0)
824    env.SConscript(dirs = ['downunder/py_src'], variant_dir='$BUILD_DIR/$PLATFORM/downunder', duplicate=0)
825  env.SConscript(dirs = ['modellib/py_src'], variant_dir='$BUILD_DIR/$PLATFORM/modellib', duplicate=0)  env.SConscript(dirs = ['modellib/py_src'], variant_dir='$BUILD_DIR/$PLATFORM/modellib', duplicate=0)
 env.SConscript(dirs = ['doc'], variant_dir='$BUILD_DIR/$PLATFORM/doc', duplicate=0)  
 env.SConscript(dirs = ['pyvisi/py_src'], variant_dir='$BUILD_DIR/$PLATFORM/pyvisi', duplicate=0)  
826  env.SConscript(dirs = ['pycad/py_src'], variant_dir='$BUILD_DIR/$PLATFORM/pycad', duplicate=0)  env.SConscript(dirs = ['pycad/py_src'], variant_dir='$BUILD_DIR/$PLATFORM/pycad', duplicate=0)
827  env.SConscript(dirs = ['pythonMPI/src'], variant_dir='$BUILD_DIR/$PLATFORM/pythonMPI', duplicate=0)  env.SConscript(dirs = ['pythonMPI/src'], variant_dir='$BUILD_DIR/$PLATFORM/pythonMPI', duplicate=0)
828    env.SConscript(dirs = ['doc'], variant_dir='$BUILD_DIR/$PLATFORM/doc', duplicate=0)
829  env.SConscript(dirs = ['paso/profiling'], variant_dir='$BUILD_DIR/$PLATFORM/paso/profiling', duplicate=0)  env.SConscript(dirs = ['paso/profiling'], variant_dir='$BUILD_DIR/$PLATFORM/paso/profiling', duplicate=0)
830    
831    
# Line 850  buildvars.write("mpi=%s\n"%env['mpi']) Line 872  buildvars.write("mpi=%s\n"%env['mpi'])
872  buildvars.write("mpi_inc_path=%s\n"%mpi_inc_path)  buildvars.write("mpi_inc_path=%s\n"%mpi_inc_path)
873  buildvars.write("mpi_lib_path=%s\n"%mpi_lib_path)  buildvars.write("mpi_lib_path=%s\n"%mpi_lib_path)
874  buildvars.write("lapack=%s\n"%env['lapack'])  buildvars.write("lapack=%s\n"%env['lapack'])
 buildvars.write("pyvisi=%d\n"%env['pyvisi'])  
875  buildvars.write("vsl_random=%d\n"%int(env['vsl_random']))  buildvars.write("vsl_random=%d\n"%int(env['vsl_random']))
876  for i in 'netcdf','parmetis','papi','mkl','umfpack','boomeramg','silo','visit':  for i in 'netcdf','parmetis','papi','mkl','umfpack','boomeramg','silo','visit':
877      buildvars.write("%s=%d\n"%(i, int(env[i])))      buildvars.write("%s=%d\n"%(i, int(env[i])))
# Line 921  install_all_list += ['install_finley'] Line 942  install_all_list += ['install_finley']
942  install_all_list += ['install_ripley']  install_all_list += ['install_ripley']
943  install_all_list += ['install_weipa']  install_all_list += ['install_weipa']
944  if not IS_WINDOWS: install_all_list += ['install_escriptreader']  if not IS_WINDOWS: install_all_list += ['install_escriptreader']
945  #install_all_list += ['install_pyvisi_py']  install_all_list += ['install_downunder_py']
946  install_all_list += ['install_modellib_py']  install_all_list += ['install_modellib_py']
947  install_all_list += ['install_pycad_py']  install_all_list += ['install_pycad_py']
948  if env['usempi']:   install_all_list += ['install_pythonMPI']  if env['usempi']:   install_all_list += ['install_pythonMPI']
# Line 933  env.Default('install_all') Line 954  env.Default('install_all')
954    
955  ################## Targets to build and run the test suite ###################  ################## Targets to build and run the test suite ###################
956    
 test_msg = env.Command('.dummy.', None, '@echo "Cannot run C/C++ unit tests, CppUnit not found!";exit 1')  
957  if not env['cppunit']:  if not env['cppunit']:
958        test_msg = env.Command('.dummy.', None, '@echo "Cannot run C/C++ unit tests, CppUnit not found!";exit 1')
959      env.Alias('run_tests', test_msg)      env.Alias('run_tests', test_msg)
960  env.Alias('run_tests', ['install_all'])  env.Alias('run_tests', ['install_all'])
961  env.Alias('all_tests', ['install_all', 'run_tests', 'py_tests'])  env.Alias('all_tests', ['install_all', 'run_tests', 'py_tests'])
# Line 944  env.Alias('build_PasoTests','$BUILD_DIR/ Line 965  env.Alias('build_PasoTests','$BUILD_DIR/
965  ##################### Targets to build the documentation #####################  ##################### Targets to build the documentation #####################
966    
967  env.Alias('api_epydoc','install_all')  env.Alias('api_epydoc','install_all')
968  env.Alias('docs', ['examples_tarfile', 'examples_zipfile', 'api_epydoc', 'api_doxygen', 'user_pdf', 'install_pdf', 'cookbook_pdf'])  env.Alias('docs', ['examples_tarfile', 'examples_zipfile', 'sphinxdoc', 'api_doxygen', 'user_pdf', 'install_pdf', 'cookbook_pdf', 'inversion_pdf'])
969  env.Alias('release_prep', ['docs', 'install_all'])  env.Alias('release_prep', ['docs', 'install_all'])
970    
971    
972    # The test scripts are always generated, this target allows us to
973    # generate the testscripts without doing a full build
974    env.Alias('testscripts',[])
975    
976  if not IS_WINDOWS:  if not IS_WINDOWS:
977      try:      try:
978          utest=open('utest.sh','w')          utest=open('utest.sh','w')
979          utest.write(GroupTest.makeHeader(env['PLATFORM'], prefix))          utest.write(GroupTest.makeHeader(env['PLATFORM'], prefix, False))
980          for tests in TestGroups:          for tests in TestGroups:
981              utest.write(tests.makeString())              utest.write(tests.makeString())
982          utest.close()          utest.close()
983          Execute(Chmod('utest.sh', 0o755))          Execute(Chmod('utest.sh', 0o755))
984          print("Generated utest.sh.")          print("Generated utest.sh.")
985            # This version contains only python tests - I want this to be usable
986            # From a binary only install if you have the test files
987            utest=open('itest.sh','w')
988            utest.write(GroupTest.makeHeader(env['PLATFORM'], prefix, True))
989            for tests in TestGroups:
990              if tests.exec_cmd=='$PYTHONRUNNER ':
991                utest.write(tests.makeString())
992            utest.close()
993            Execute(Chmod('itest.sh', 0o755))
994            print("Generated itest.sh.")        
995      except IOError:      except IOError:
996          print("Error attempting to write unittests file.")          print("Error attempting to write unittests file.")
997          Exit(1)          Exit(1)
998    
999      # delete utest.sh upon cleanup      # delete utest.sh upon cleanup
1000      env.Clean('target_init', 'utest.sh')      env.Clean('target_init', 'utest.sh')
1001        env.Clean('target_init', 'itest.sh')
1002    
1003      # Make sure that the escript wrapper is in place      # Make sure that the escript wrapper is in place
1004      if not os.path.isfile(os.path.join(env['bininstall'], 'run-escript')):      if not os.path.isfile(os.path.join(env['bininstall'], 'run-escript')):

Legend:
Removed from v.3896  
changed lines
  Added in v.4154

  ViewVC Help
Powered by ViewVC 1.1.26