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

Annotation of /branches/diaplayground/SConstruct

Parent Directory Parent Directory | Revision Log Revision Log


Revision 4657 - (hide annotations)
Thu Feb 6 06:12:20 2014 UTC (5 years, 8 months ago) by jfenwick
Original Path: trunk/SConstruct
File size: 28150 byte(s)
I changed some files.
Updated copyright notices, added GeoComp.



1 jfenwick 3982 ##############################################################################
2 jgs 214 #
3 jfenwick 4657 # Copyright (c) 2003-2014 by University of Queensland
4 jfenwick 3982 # http://www.uq.edu.au
5 ksteube 1811 #
6     # Primary Business: Queensland, Australia
7     # Licensed under the Open Software License version 3.0
8     # http://www.opensource.org/licenses/osl-3.0.php
9     #
10 jfenwick 3982 # Development until 2012 by Earth Systems Science Computational Center (ESSCC)
11 jfenwick 4657 # Development 2012-2013 by School of Earth Sciences
12     # Development from 2014 by Centre for Geoscience Computing (GeoComp)
13 jfenwick 3982 #
14     ##############################################################################
15 jgs 455
16 jfenwick 3259 EnsureSConsVersion(0,98,1)
17     EnsurePythonVersion(2,5)
18 ksteube 1811
19 caltinay 4295 import atexit, sys, os, platform, re
20 jfenwick 3259 from distutils import sysconfig
21 caltinay 4295 from dependencies import *
22 jfenwick 3259 from site_init import *
23 jgs 214
24 jfenwick 3259 # Version number to check for in options file. Increment when new features are
25     # added or existing options changed.
26 caltinay 3597 REQUIRED_OPTS_VERSION=201
27 ksteube 1705
28     # MS Windows support, many thanks to PH
29 jfenwick 3259 IS_WINDOWS = (os.name == 'nt')
30 gross 806
31 jfenwick 4640 IS_OSX = (os.uname()[0] == 'Darwin')
32    
33 jfenwick 3259 ########################## Determine options file ############################
34     # 1. command line
35     # 2. scons/<hostname>_options.py
36     # 3. name as part of a cluster
37 jfenwick 2391 options_file=ARGUMENTS.get('options_file', None)
38     if not options_file:
39 jfenwick 3259 ext_dir = os.path.join(os.getcwd(), 'scons')
40     hostname = platform.node().split('.')[0]
41     for name in hostname, effectiveName(hostname):
42     mangledhostname = re.sub('[^0-9a-zA-Z]', '_', hostname)
43     options_file = os.path.join(ext_dir, mangledhostname+'_options.py')
44     if os.path.isfile(options_file): break
45 jfenwick 2391
46 ksteube 1866 if not os.path.isfile(options_file):
47 jfenwick 3259 print("\nWARNING:\nOptions file %s" % options_file)
48     print("not found! Default options will be used which is most likely suboptimal.")
49 jfenwick 4426 print("We recommend that you copy one of the TEMPLATE files in the scons/")
50 jfenwick 3259 print("subdirectory and customize it to your needs.\n")
51     options_file = None
52 ksteube 1217
53 jfenwick 3259 ############################### Build options ################################
54 gross 1149
55 jfenwick 3259 default_prefix='/usr'
56 jfenwick 3618 mpi_flavours=('no', 'none', 'MPT', 'MPICH', 'MPICH2', 'OPENMPI', 'INTELMPI')
57 jfenwick 3259 lapack_flavours=('none', 'clapack', 'mkl')
58 jfenwick 2430
59 jfenwick 3259 vars = Variables(options_file, ARGUMENTS)
60     vars.AddVariables(
61     PathVariable('options_file', 'Path to options file', options_file, PathVariable.PathIsFile),
62     PathVariable('prefix', 'Installation prefix', Dir('#.').abspath, PathVariable.PathIsDirCreate),
63 caltinay 3349 PathVariable('build_dir', 'Top-level build directory', Dir('#/build').abspath, PathVariable.PathIsDirCreate),
64 jfenwick 3259 BoolVariable('verbose', 'Output full compile/link lines', False),
65     # Compiler/Linker options
66     ('cxx', 'Path to C++ compiler', 'default'),
67 caltinay 4520 ('cc_flags', 'Base C++ compiler flags', 'default'),
68     ('cc_optim', 'Additional C++ flags for a non-debug build', 'default'),
69     ('cc_debug', 'Additional C++ flags for a debug build', 'default'),
70 caltinay 2967 ('cxx_extra', 'Extra C++ compiler flags', ''),
71 ksteube 1771 ('ld_extra', 'Extra linker flags', ''),
72 jfenwick 3259 BoolVariable('werror','Treat compiler warnings as errors', True),
73     BoolVariable('debug', 'Compile with debug flags', False),
74     BoolVariable('openmp', 'Compile parallel version using OpenMP', False),
75     ('omp_flags', 'OpenMP compiler flags', 'default'),
76     ('omp_ldflags', 'OpenMP linker flags', 'default'),
77     # Mandatory libraries
78     ('boost_prefix', 'Prefix/Paths of boost installation', default_prefix),
79 jfenwick 3338 ('boost_libs', 'Boost libraries to link with', ['boost_python-mt']),
80 caltinay 3597 # Mandatory for tests
81     ('cppunit_prefix', 'Prefix/Paths of CppUnit installation', default_prefix),
82     ('cppunit_libs', 'CppUnit libraries to link with', ['cppunit']),
83 jfenwick 3259 # Optional libraries and options
84     EnumVariable('mpi', 'Compile parallel version using MPI flavour', 'none', allowed_values=mpi_flavours),
85     ('mpi_prefix', 'Prefix/Paths of MPI installation', default_prefix),
86     ('mpi_libs', 'MPI shared libraries to link with', ['mpi']),
87     BoolVariable('netcdf', 'Enable netCDF file support', False),
88     ('netcdf_prefix', 'Prefix/Paths of netCDF installation', default_prefix),
89     ('netcdf_libs', 'netCDF libraries to link with', ['netcdf_c++', 'netcdf']),
90     BoolVariable('parmetis', 'Enable ParMETIS (requires MPI)', False),
91     ('parmetis_prefix', 'Prefix/Paths of ParMETIS installation', default_prefix),
92     ('parmetis_libs', 'ParMETIS libraries to link with', ['parmetis', 'metis']),
93     BoolVariable('papi', 'Enable PAPI', False),
94     ('papi_prefix', 'Prefix/Paths to PAPI installation', default_prefix),
95 ksteube 1705 ('papi_libs', 'PAPI libraries to link with', ['papi']),
96 jfenwick 3259 BoolVariable('papi_instrument_solver', 'Use PAPI to instrument each iteration of the solver', False),
97     BoolVariable('mkl', 'Enable the Math Kernel Library', False),
98     ('mkl_prefix', 'Prefix/Paths to MKL installation', default_prefix),
99     ('mkl_libs', 'MKL libraries to link with', ['mkl_solver','mkl_em64t','guide','pthread']),
100     BoolVariable('umfpack', 'Enable UMFPACK', False),
101     ('umfpack_prefix', 'Prefix/Paths to UMFPACK installation', default_prefix),
102     ('umfpack_libs', 'UMFPACK libraries to link with', ['umfpack']),
103 lgao 3508 BoolVariable('boomeramg', 'Enable BoomerAMG', False),
104     ('boomeramg_prefix', 'Prefix/Paths to BoomerAMG installation', default_prefix),
105     ('boomeramg_libs', 'BoomerAMG libraries to link with', ['boomeramg']),
106 jfenwick 3259 EnumVariable('lapack', 'Set LAPACK flavour', 'none', allowed_values=lapack_flavours),
107     ('lapack_prefix', 'Prefix/Paths to LAPACK installation', default_prefix),
108     ('lapack_libs', 'LAPACK libraries to link with', []),
109     BoolVariable('silo', 'Enable the Silo file format in weipa', False),
110     ('silo_prefix', 'Prefix/Paths to Silo installation', default_prefix),
111 caltinay 2184 ('silo_libs', 'Silo libraries to link with', ['siloh5', 'hdf5']),
112 jfenwick 3259 BoolVariable('visit', 'Enable the VisIt simulation interface', False),
113     ('visit_prefix', 'Prefix/Paths to VisIt installation', default_prefix),
114     ('visit_libs', 'VisIt libraries to link with', ['simV2']),
115 jfenwick 3506 BoolVariable('vsl_random', 'Use VSL from intel for random data', False),
116 jfenwick 3259 # Advanced settings
117     #dudley_assemble_flags = -funroll-loops to actually do something
118     ('dudley_assemble_flags', 'compiler flags for some dudley optimisations', ''),
119     # To enable passing function pointers through python
120     BoolVariable('iknowwhatimdoing', 'Allow non-standard C', False),
121     # An option for specifying the compiler tools (see windows branch)
122     ('tools_names', 'Compiler tools to use', ['default']),
123     ('env_export', 'Environment variables to be passed to tools',[]),
124     EnumVariable('forcelazy', 'For testing use only - set the default value for autolazy', 'leave_alone', allowed_values=('leave_alone', 'on', 'off')),
125     EnumVariable('forcecollres', 'For testing use only - set the default value for force resolving collective ops', 'leave_alone', allowed_values=('leave_alone', 'on', 'off')),
126     # finer control over library building, intel aggressive global optimisation
127     # works with dynamic libraries on windows.
128 caltinay 3598 ('build_shared', 'Build dynamic libraries only', False),
129 jfenwick 3259 ('sys_libs', 'Extra libraries to link with', []),
130     ('escript_opts_version', 'Version of options file (do not specify on command line)'),
131 jfenwick 3618 ('SVN_VERSION', 'Do not use from options file', -2),
132 jfenwick 3851 ('pythoncmd', 'which python to compile with','python'),
133 jfenwick 3892 ('usepython3', 'Is this a python3 build? (experimental)', False),
134     ('pythonlibname', 'Name of the python library to link. (This is found automatically for python2.X.)', ''),
135 jfenwick 3942 ('pythonlibpath', 'Path to the python library. (You should not need to set this unless your python has moved)',''),
136     ('pythonincpath','Path to python include files. (You should not need to set this unless your python has moved',''),
137 jfenwick 3961 BoolVariable('BADPYTHONMACROS','Extra \#include to get around a python bug.', True),
138 robwdcock 682 )
139 phornby 1232
140 jfenwick 3259 ##################### Create environment and help text #######################
141 jfenwick 3078
142 jfenwick 3259 # Intel's compiler uses regular expressions improperly and emits a warning
143     # about failing to find the compilers. This warning can be safely ignored.
144 jfenwick 3078
145 caltinay 3319 # PATH is needed so the compiler, linker and tools are found if they are not
146     # in default locations.
147     env = Environment(tools = ['default'], options = vars,
148     ENV = {'PATH': os.environ['PATH']})
149 jfenwick 3967
150 caltinay 4295 # set the vars for clang
151 jfenwick 3967 def mkclang(env):
152 caltinay 4295 env['CXX']='clang++'
153    
154 jfenwick 3259 if env['tools_names'] != 'default':
155 jfenwick 3967 zz=env['tools_names']
156     if 'clang' in zz:
157     zz.remove('clang')
158     zz.insert(0, mkclang)
159 caltinay 3319 env = Environment(tools = ['default'] + env['tools_names'], options = vars,
160     ENV = {'PATH' : os.environ['PATH']})
161 jfenwick 3078
162 jfenwick 3259 if options_file:
163     opts_valid=False
164     if 'escript_opts_version' in env.Dictionary() and \
165     int(env['escript_opts_version']) >= REQUIRED_OPTS_VERSION:
166     opts_valid=True
167     if opts_valid:
168     print("Using options in %s." % options_file)
169     else:
170     print("\nOptions file %s" % options_file)
171     print("is outdated! Please update the file by examining one of the TEMPLATE")
172     print("files in the scons/ subdirectory and setting escript_opts_version to %d.\n"%REQUIRED_OPTS_VERSION)
173     Exit(1)
174 jfenwick 3078
175 jfenwick 3259 # Generate help text (scons -h)
176     Help(vars.GenerateHelpText(env))
177 jfenwick 3078
178 jfenwick 3259 # Check for superfluous options
179 caltinay 3268 if len(vars.UnknownVariables())>0:
180     for k in vars.UnknownVariables():
181     print("Unknown option '%s'" % k)
182     Exit(1)
183 jfenwick 3078
184 caltinay 4295 # create dictionary which will be populated with info for buildvars file
185     env['buildvars']={}
186     # create list which will be populated with warnings if there are any
187     env['warnings']=[]
188    
189 jfenwick 3259 #################### Make sure install directories exist #####################
190 ksteube 1705
191 caltinay 4046 env['BUILD_DIR']=Dir(env['build_dir']).abspath
192 jfenwick 3259 prefix=Dir(env['prefix']).abspath
193 caltinay 4295 env['buildvars']['prefix']=prefix
194 jfenwick 3259 env['incinstall'] = os.path.join(prefix, 'include')
195     env['bininstall'] = os.path.join(prefix, 'bin')
196     env['libinstall'] = os.path.join(prefix, 'lib')
197     env['pyinstall'] = os.path.join(prefix, 'esys')
198 jfenwick 2604 if not os.path.isdir(env['bininstall']):
199     os.makedirs(env['bininstall'])
200     if not os.path.isdir(env['libinstall']):
201     os.makedirs(env['libinstall'])
202     if not os.path.isdir(env['pyinstall']):
203     os.makedirs(env['pyinstall'])
204    
205 jfenwick 3259 env.Append(CPPPATH = [env['incinstall']])
206     env.Append(LIBPATH = [env['libinstall']])
207 jfenwick 2603
208 jfenwick 3259 ################# Fill in compiler options if not set above ##################
209 ksteube 1312
210 jfenwick 3259 if env['cxx'] != 'default': env['CXX']=env['cxx']
211 gross 1024
212 jfenwick 3259 # version >=9 of intel C++ compiler requires use of icpc to link in C++
213     # runtimes (icc does not)
214     if not IS_WINDOWS and os.uname()[4]=='ia64' and env['CXX']=='icpc':
215     env['LINK'] = env['CXX']
216 phornby 1243
217 jfenwick 3259 # default compiler/linker options
218     cc_flags = ''
219     cc_optim = ''
220     cc_debug = ''
221     omp_flags = ''
222     omp_ldflags = ''
223     fatalwarning = '' # switch to turn warnings into errors
224     sysheaderopt = '' # how to indicate that a header is a system header
225 jfenwick 2130
226 jfenwick 3259 # env['CC'] might be a full path
227 caltinay 4520 cc_name=os.path.basename(env['CXX'])
228 caltinay 2882
229 caltinay 4520 if cc_name == 'icpc':
230 jfenwick 3259 # Intel compiler
231 caltinay 4090 # #1875: offsetof applied to non-POD types is nonstandard (in boost)
232 jfenwick 4542 # removed -std=c99 because icpc doesn't like it and we aren't using c anymore
233     cc_flags = "-fPIC -w2 -wd1875 -Wno-unknown-pragmas -DBLOCKTIMER -DCORE_ID1"
234 caltinay 4090 cc_optim = "-O3 -ftz -fno-alias -ipo -xHost"
235 jfenwick 3259 cc_debug = "-g -O0 -DDOASSERT -DDOPROF -DBOUNDS_CHECK"
236 caltinay 4090 omp_flags = "-openmp"
237     omp_ldflags = "-openmp -openmp_report=1"
238 jfenwick 3259 fatalwarning = "-Werror"
239 caltinay 4520 elif cc_name[:3] == 'g++':
240 jfenwick 3259 # GNU C on any system
241 caltinay 4173 # note that -ffast-math is not used because it breaks isnan(),
242     # see mantis #691
243     cc_flags = "-pedantic -Wall -fPIC -Wno-unknown-pragmas -DBLOCKTIMER -Wno-sign-compare -Wno-system-headers -Wno-long-long -Wno-strict-aliasing -finline-functions"
244 jfenwick 3259 cc_optim = "-O3"
245     cc_debug = "-g -O0 -DDOASSERT -DDOPROF -DBOUNDS_CHECK"
246     omp_flags = "-fopenmp"
247     omp_ldflags = "-fopenmp"
248     fatalwarning = "-Werror"
249     sysheaderopt = "-isystem"
250     elif cc_name == 'cl':
251     # Microsoft Visual C on Windows
252     cc_flags = "/EHsc /MD /GR /wd4068 /D_USE_MATH_DEFINES /DDLL_NETCDF"
253     cc_optim = "/O2 /Op /W3"
254     cc_debug = "/Od /RTCcsu /ZI /DBOUNDS_CHECK"
255     fatalwarning = "/WX"
256     elif cc_name == 'icl':
257     # Intel C on Windows
258     cc_flags = '/EHsc /GR /MD'
259     cc_optim = '/fast /Oi /W3 /Qssp /Qinline-factor- /Qinline-min-size=0 /Qunroll'
260     cc_debug = '/Od /RTCcsu /Zi /Y- /debug:all /Qtrapuv'
261     omp_flags = '/Qvec-report0 /Qopenmp /Qopenmp-report0 /Qparallel'
262     omp_ldflags = '/Qvec-report0 /Qopenmp /Qopenmp-report0 /Qparallel'
263 phornby 1243
264 caltinay 4295 env['sysheaderopt']=sysheaderopt
265    
266 jfenwick 3259 # set defaults if not otherwise specified
267     if env['cc_flags'] == 'default': env['cc_flags'] = cc_flags
268     if env['cc_optim'] == 'default': env['cc_optim'] = cc_optim
269     if env['cc_debug'] == 'default': env['cc_debug'] = cc_debug
270     if env['omp_flags'] == 'default': env['omp_flags'] = omp_flags
271     if env['omp_ldflags'] == 'default': env['omp_ldflags'] = omp_ldflags
272     if env['cxx_extra'] != '': env.Append(CXXFLAGS = env['cxx_extra'])
273     if env['ld_extra'] != '': env.Append(LINKFLAGS = env['ld_extra'])
274 jfenwick 2130
275 jfenwick 3961 if env['BADPYTHONMACROS']: env.Append(CXXFLAGS = ' -DBADPYTHONMACROS')
276    
277 jfenwick 3892 if env['usepython3']:
278     env.Append(CPPDEFINES=['ESPYTHON3'])
279    
280 jfenwick 3259 # set up the autolazy values
281     if env['forcelazy'] == 'on':
282     env.Append(CPPDEFINES=['FAUTOLAZYON'])
283     elif env['forcelazy'] == 'off':
284     env.Append(CPPDEFINES=['FAUTOLAZYOFF'])
285 ksteube 1312
286 jfenwick 3259 # set up the collective resolve values
287     if env['forcecollres'] == 'on':
288     env.Append(CPPDEFINES=['FRESCOLLECTON'])
289     elif env['forcecollres'] == 'off':
290     env.Append(CPPDEFINES=['FRESCOLLECTOFF'])
291 jfenwick 2273
292 jfenwick 3259 # allow non-standard C if requested
293 jfenwick 2827 if env['iknowwhatimdoing']:
294 jfenwick 3259 env.Append(CPPDEFINES=['IKNOWWHATIMDOING'])
295 jfenwick 2827
296 jfenwick 3259 # Disable OpenMP if no flags provided
297     if env['openmp'] and env['omp_flags'] == '':
298 caltinay 4295 env['warnings'].append("OpenMP requested but no flags provided - disabling OpenMP!")
299 jfenwick 3259 env['openmp'] = False
300 gross 1160
301 jfenwick 3259 if env['openmp']:
302     env.Append(CCFLAGS = env['omp_flags'])
303     if env['omp_ldflags'] != '': env.Append(LINKFLAGS = env['omp_ldflags'])
304     else:
305     env['omp_flags']=''
306     env['omp_ldflags']=''
307 ksteube 1312
308 caltinay 4295 env['buildvars']['openmp']=int(env['openmp'])
309    
310 jfenwick 3259 # add debug/non-debug compiler flags
311 caltinay 4295 env['buildvars']['debug']=int(env['debug'])
312 jfenwick 3259 if env['debug']:
313     env.Append(CCFLAGS = env['cc_debug'])
314 gross 2423 else:
315 jfenwick 3259 env.Append(CCFLAGS = env['cc_optim'])
316 gross 1163
317 jfenwick 3259 # always add cc_flags
318     env.Append(CCFLAGS = env['cc_flags'])
319 phornby 1243
320 jfenwick 3259 # add system libraries
321     env.AppendUnique(LIBS = env['sys_libs'])
322 gross 2363
323 caltinay 4295 # determine svn revision
324 jfenwick 3618 global_revision=ARGUMENTS.get('SVN_VERSION', None)
325     if global_revision:
326     global_revision = re.sub(':.*', '', global_revision)
327     global_revision = re.sub('[^0-9]', '', global_revision)
328     if global_revision == '': global_revision='-2'
329     else:
330     # Get the global Subversion revision number for the getVersion() method
331     try:
332 jfenwick 3259 global_revision = os.popen('svnversion -n .').read()
333     global_revision = re.sub(':.*', '', global_revision)
334     global_revision = re.sub('[^0-9]', '', global_revision)
335     if global_revision == '': global_revision='-2'
336 jfenwick 3618 except:
337 jfenwick 3259 global_revision = '-1'
338 caltinay 3271 env['svn_revision']=global_revision
339 caltinay 4295 env['buildvars']['svn_revision']=global_revision
340 jfenwick 3259 env.Append(CPPDEFINES=['SVN_VERSION='+global_revision])
341 gross 2363
342 jfenwick 3259 if IS_WINDOWS:
343 caltinay 3602 if not env['build_shared']:
344 jfenwick 3259 env.Append(CPPDEFINES = ['ESYSUTILS_STATIC_LIB'])
345     env.Append(CPPDEFINES = ['PASO_STATIC_LIB'])
346 gross 2363
347 caltinay 4295 # VSL random numbers
348     env['buildvars']['vsl_random']=int(env['vsl_random'])
349     if env['vsl_random']:
350     env.Append(CPPDEFINES = ['MKLRANDOM'])
351    
352     env['IS_WINDOWS']=IS_WINDOWS
353    
354 jfenwick 3259 ###################### Copy required environment vars ########################
355 gross 2363
356 jfenwick 3259 # Windows doesn't use LD_LIBRARY_PATH but PATH instead
357     if IS_WINDOWS:
358     LD_LIBRARY_PATH_KEY='PATH'
359     env['ENV']['LD_LIBRARY_PATH']=''
360     else:
361     LD_LIBRARY_PATH_KEY='LD_LIBRARY_PATH'
362 robwdcock 682
363 caltinay 4295 env['LD_LIBRARY_PATH_KEY']=LD_LIBRARY_PATH_KEY
364    
365 caltinay 3319 # the following env variables are exported for the unit tests
366 phornby 1244
367 jfenwick 3259 for key in 'OMP_NUM_THREADS', 'ESCRIPT_NUM_PROCS', 'ESCRIPT_NUM_NODES':
368     try:
369     env['ENV'][key] = os.environ[key]
370     except KeyError:
371     env['ENV'][key] = 1
372 robwdcock 682
373 jfenwick 3259 env_export=env['env_export']
374 caltinay 3977 env_export.extend(['ESCRIPT_NUM_THREADS','ESCRIPT_HOSTFILE','DISPLAY','XAUTHORITY','PATH','HOME','KMP_MONITOR_STACKSIZE','TMPDIR','TEMP','TMP'])
375 robwdcock 682
376 jfenwick 3259 for key in set(env_export):
377     try:
378     env['ENV'][key] = os.environ[key]
379     except KeyError:
380     pass
381 ksteube 1312
382 jfenwick 3259 try:
383     env.PrependENVPath(LD_LIBRARY_PATH_KEY, os.environ[LD_LIBRARY_PATH_KEY])
384     except KeyError:
385     pass
386 ksteube 1312
387 jfenwick 4640 if IS_OSX:
388     try:
389     env.PrependENVPath('DYLD_LIBRARY_PATH', os.environ['DYLD_LIBRARY_PATH'])
390     except KeyError:
391     pass
392    
393    
394 jfenwick 3259 # these shouldn't be needed
395     #for key in 'C_INCLUDE_PATH','CPLUS_INCLUDE_PATH','LIBRARY_PATH':
396     # try:
397     # env['ENV'][key] = os.environ[key]
398     # except KeyError:
399     # pass
400 ksteube 1312
401 jfenwick 3259 try:
402     env['ENV']['PYTHONPATH'] = os.environ['PYTHONPATH']
403     except KeyError:
404     pass
405 ksteube 1312
406 jfenwick 3259 ######################## Add some custom builders ############################
407 ksteube 1312
408 jfenwick 3851 if env['pythoncmd']=='python':
409     py_builder = Builder(action = build_py, suffix = '.pyc', src_suffix = '.py', single_source=True)
410     else:
411 jfenwick 3892 py_builder = Builder(action = env['pythoncmd']+" scripts/py_comp.py $SOURCE $TARGET", suffix = '.pyc', src_suffix = '.py', single_source=True)
412 jfenwick 3259 env.Append(BUILDERS = {'PyCompile' : py_builder});
413 gross 2423
414 jfenwick 3259 runUnitTest_builder = Builder(action = runUnitTest, suffix = '.passed', src_suffix=env['PROGSUFFIX'], single_source=True)
415     env.Append(BUILDERS = {'RunUnitTest' : runUnitTest_builder});
416 gross 2423
417 jfenwick 3259 runPyUnitTest_builder = Builder(action = runPyUnitTest, suffix = '.passed', src_suffic='.py', single_source=True)
418     env.Append(BUILDERS = {'RunPyUnitTest' : runPyUnitTest_builder});
419 ksteube 1756
420 jfenwick 3259 epstopdfbuilder = Builder(action = eps2pdf, suffix='.pdf', src_suffix='.eps', single_source=True)
421     env.Append(BUILDERS = {'EpsToPDF' : epstopdfbuilder});
422 ksteube 817
423 jfenwick 3259 ############################ Dependency checks ###############################
424 phornby 1246
425 caltinay 4295 ######## Compiler
426     env=checkCompiler(env)
427 phornby 1634
428 jfenwick 3259 ######## Python headers & library (required)
429 caltinay 4295 env=checkPython(env)
430 gross 806
431 caltinay 4295 ######## boost & boost-python (required)
432     env=checkBoost(env)
433 jfenwick 3892
434 caltinay 4295 ######## numpy (required) and numpy headers (optional)
435     env=checkNumpy(env)
436 jfenwick 3892
437 caltinay 3597 ######## CppUnit (required for tests)
438 caltinay 4295 env=checkCppUnit(env)
439 caltinay 3597
440 caltinay 4295 ######## optional python modules (sympy, pyproj)
441     env=checkOptionalModules(env)
442 caltinay 3597
443 caltinay 4295 ######## optional dependencies (netCDF, PAPI, MKL, UMFPACK, Lapack, Silo, ...)
444     env=checkOptionalLibraries(env)
445 caltinay 3975
446 caltinay 3604 ######## PDFLaTeX (for documentation)
447 caltinay 4295 env=checkPDFLatex(env)
448 caltinay 3604
449 jfenwick 3259 # keep some of our install paths first in the list for the unit tests
450     env.PrependENVPath(LD_LIBRARY_PATH_KEY, env['libinstall'])
451     env.PrependENVPath('PYTHONPATH', prefix)
452     env['ENV']['ESCRIPT_ROOT'] = prefix
453 ksteube 1705
454 jfenwick 3259 if not env['verbose']:
455     env['CXXCOMSTR'] = "Compiling $TARGET"
456     env['SHCXXCOMSTR'] = "Compiling $TARGET"
457     env['ARCOMSTR'] = "Linking $TARGET"
458     env['LINKCOMSTR'] = "Linking $TARGET"
459     env['SHLINKCOMSTR'] = "Linking $TARGET"
460 caltinay 3271 env['PDFLATEXCOMSTR'] = "Building $TARGET from LaTeX input $SOURCES"
461     env['BIBTEXCOMSTR'] = "Generating bibliography $TARGET"
462     env['MAKEINDEXCOMSTR'] = "Generating index $TARGET"
463     env['PDFLATEXCOMSTR'] = "Building $TARGET from LaTeX input $SOURCES"
464 jfenwick 3259 #Progress(['Checking -\r', 'Checking \\\r', 'Checking |\r', 'Checking /\r'], interval=17)
465 ksteube 1705
466 jfenwick 3259 ####################### Configure the subdirectories #########################
467 ksteube 1247
468 caltinay 4295 # remove obsolete files
469     if not env['usempi']:
470     Execute(Delete(os.path.join(env['libinstall'], 'pythonMPI')))
471     Execute(Delete(os.path.join(env['libinstall'], 'pythonMPIredirect')))
472    
473 jfenwick 2235 from grouptest import *
474     TestGroups=[]
475    
476 jfenwick 3259 # keep an environment without warnings-as-errors
477     dodgy_env=env.Clone()
478 jfenwick 2827
479 jfenwick 3259 # now add warnings-as-errors flags. This needs to be done after configuration
480     # because the scons test files have warnings in them
481     if ((fatalwarning != '') and (env['werror'])):
482     env.Append(CCFLAGS = fatalwarning)
483 jfenwick 2827
484 phornby 2027 Export(
485 jfenwick 3259 ['env',
486     'dodgy_env',
487     'IS_WINDOWS',
488     'TestGroups'
489     ]
490     )
491 ksteube 1705
492 caltinay 3349 env.SConscript(dirs = ['tools/escriptconvert'], variant_dir='$BUILD_DIR/$PLATFORM/tools/escriptconvert', duplicate=0)
493     env.SConscript(dirs = ['paso/src'], variant_dir='$BUILD_DIR/$PLATFORM/paso', duplicate=0)
494     env.SConscript(dirs = ['weipa/src'], variant_dir='$BUILD_DIR/$PLATFORM/weipa', duplicate=0)
495 jfenwick 4508 env.SConscript(dirs = ['escript/py_src'], variant_dir='$BUILD_DIR/$PLATFORM/escript', duplicate=0)
496    
497     #This will pull in the escriptcore/py_src and escriptcore/test
498     env.SConscript(dirs = ['escriptcore/src'], variant_dir='$BUILD_DIR/$PLATFORM/escriptcore', duplicate=0)
499     #env.SConscript(dirs = ['escript/test'], variant_dir='$BUILD_DIR/$PLATFORM/escript/test', duplicate=0)
500 caltinay 3349 env.SConscript(dirs = ['esysUtils/src'], variant_dir='$BUILD_DIR/$PLATFORM/esysUtils', duplicate=0)
501 jfenwick 3675 env.SConscript(dirs = ['pasowrap/src'], variant_dir='$BUILD_DIR/$PLATFORM/pasowrap', duplicate=0)
502 caltinay 3349 env.SConscript(dirs = ['dudley/src'], variant_dir='$BUILD_DIR/$PLATFORM/dudley', duplicate=0)
503     env.SConscript(dirs = ['finley/src'], variant_dir='$BUILD_DIR/$PLATFORM/finley', duplicate=0)
504 caltinay 3792 env.SConscript(dirs = ['ripley/src'], variant_dir='$BUILD_DIR/$PLATFORM/ripley', duplicate=0)
505 caltinay 3947 env.SConscript(dirs = ['downunder/py_src'], variant_dir='$BUILD_DIR/$PLATFORM/downunder', duplicate=0)
506 caltinay 3349 env.SConscript(dirs = ['modellib/py_src'], variant_dir='$BUILD_DIR/$PLATFORM/modellib', duplicate=0)
507     env.SConscript(dirs = ['pycad/py_src'], variant_dir='$BUILD_DIR/$PLATFORM/pycad', duplicate=0)
508     env.SConscript(dirs = ['pythonMPI/src'], variant_dir='$BUILD_DIR/$PLATFORM/pythonMPI', duplicate=0)
509 caltinay 3947 env.SConscript(dirs = ['doc'], variant_dir='$BUILD_DIR/$PLATFORM/doc', duplicate=0)
510 caltinay 3349 env.SConscript(dirs = ['paso/profiling'], variant_dir='$BUILD_DIR/$PLATFORM/paso/profiling', duplicate=0)
511 phornby 1243
512 jfenwick 3892
513 jfenwick 3259 ######################## Populate the buildvars file #########################
514 jfenwick 2235
515 caltinay 4295 write_buildvars(env)
516 phornby 1243
517 jfenwick 3259 ################### Targets to build and install libraries ###################
518 jfenwick 2302
519 caltinay 3604 target_init = env.Command(os.path.join(env['pyinstall'],'__init__.py'), None, Touch('$TARGET'))
520 ksteube 1705 env.Alias('target_init', [target_init])
521 caltinay 3604 # delete buildvars upon cleanup
522     env.Clean('target_init', os.path.join(env['libinstall'], 'buildvars'))
523 ksteube 1705
524 jfenwick 3259 # The headers have to be installed prior to build in order to satisfy
525     # #include <paso/Common.h>
526     env.Alias('build_esysUtils', ['install_esysUtils_headers', 'build_esysUtils_lib'])
527     env.Alias('install_esysUtils', ['build_esysUtils', 'install_esysUtils_lib'])
528 ksteube 1705
529 jfenwick 3259 env.Alias('build_paso', ['install_paso_headers', 'build_paso_lib'])
530     env.Alias('install_paso', ['build_paso', 'install_paso_lib'])
531 ksteube 1705
532 jfenwick 3259 env.Alias('build_escript', ['install_escript_headers', 'build_escript_lib', 'build_escriptcpp_lib'])
533 jfenwick 4508 env.Alias('install_escript', ['build_escript', 'install_escript_lib', 'install_escriptcpp_lib', 'install_escriptcore_py', 'install_escript_py'])
534 caltinay 2810
535 jfenwick 3675 env.Alias('build_pasowrap', ['install_pasowrap_headers', 'build_pasowrap_lib', 'build_pasowrapcpp_lib'])
536     env.Alias('install_pasowrap', ['build_pasowrap', 'install_pasowrap_lib', 'install_pasowrapcpp_lib', 'install_pasowrap_py'])
537    
538 jfenwick 3259 env.Alias('build_dudley', ['install_dudley_headers', 'build_dudley_lib', 'build_dudleycpp_lib'])
539     env.Alias('install_dudley', ['build_dudley', 'install_dudley_lib', 'install_dudleycpp_lib', 'install_dudley_py'])
540 caltinay 3096
541 jfenwick 3259 env.Alias('build_finley', ['install_finley_headers', 'build_finley_lib', 'build_finleycpp_lib'])
542     env.Alias('install_finley', ['build_finley', 'install_finley_lib', 'install_finleycpp_lib', 'install_finley_py'])
543 caltinay 2910
544 caltinay 3792 env.Alias('build_ripley', ['install_ripley_headers', 'build_ripley_lib', 'build_ripleycpp_lib'])
545     env.Alias('install_ripley', ['build_ripley', 'install_ripley_lib', 'install_ripleycpp_lib', 'install_ripley_py'])
546    
547 jfenwick 3259 env.Alias('build_weipa', ['install_weipa_headers', 'build_weipa_lib', 'build_weipacpp_lib'])
548     env.Alias('install_weipa', ['build_weipa', 'install_weipa_lib', 'install_weipacpp_lib', 'install_weipa_py'])
549 ksteube 1705
550 jfenwick 3259 env.Alias('build_escriptreader', ['install_weipa_headers', 'build_escriptreader_lib'])
551     env.Alias('install_escriptreader', ['build_escriptreader', 'install_escriptreader_lib'])
552 ksteube 1705
553 jfenwick 3259 # Now gather all the above into some easy targets: build_all and install_all
554 ksteube 1705 build_all_list = []
555     build_all_list += ['build_esysUtils']
556     build_all_list += ['build_paso']
557     build_all_list += ['build_escript']
558 jfenwick 3675 build_all_list += ['build_pasowrap']
559 jfenwick 3259 build_all_list += ['build_dudley']
560 ksteube 1705 build_all_list += ['build_finley']
561 caltinay 3792 build_all_list += ['build_ripley']
562 jfenwick 3259 build_all_list += ['build_weipa']
563     if not IS_WINDOWS: build_all_list += ['build_escriptreader']
564     if env['usempi']: build_all_list += ['build_pythonMPI']
565     build_all_list += ['build_escriptconvert']
566 ksteube 1705 env.Alias('build_all', build_all_list)
567    
568     install_all_list = []
569     install_all_list += ['target_init']
570     install_all_list += ['install_esysUtils']
571     install_all_list += ['install_paso']
572     install_all_list += ['install_escript']
573 jfenwick 3675 install_all_list += ['install_pasowrap']
574 jfenwick 3259 install_all_list += ['install_dudley']
575 ksteube 1705 install_all_list += ['install_finley']
576 caltinay 3792 install_all_list += ['install_ripley']
577 jfenwick 3259 install_all_list += ['install_weipa']
578     if not IS_WINDOWS: install_all_list += ['install_escriptreader']
579 caltinay 3947 install_all_list += ['install_downunder_py']
580 jfenwick 3259 install_all_list += ['install_modellib_py']
581     install_all_list += ['install_pycad_py']
582     if env['usempi']: install_all_list += ['install_pythonMPI']
583     install_all_list += ['install_escriptconvert']
584 ksteube 1705 env.Alias('install_all', install_all_list)
585    
586     # Default target is install
587     env.Default('install_all')
588    
589 jfenwick 3259 ################## Targets to build and run the test suite ###################
590 ksteube 1705
591 caltinay 3597 if not env['cppunit']:
592 caltinay 4520 test_msg = env.Command('.dummy.', None, '@echo "Cannot run C++ unit tests, CppUnit not found!";exit 1')
593 caltinay 3597 env.Alias('run_tests', test_msg)
594 caltinay 4249 env.Alias('build_tests', '')
595 caltinay 3597 env.Alias('run_tests', ['install_all'])
596     env.Alias('all_tests', ['install_all', 'run_tests', 'py_tests'])
597 jfenwick 2286 env.Alias('build_full',['install_all','build_tests','build_py_tests'])
598 caltinay 3349 env.Alias('build_PasoTests','$BUILD_DIR/$PLATFORM/paso/profiling/PasoTests')
599 ksteube 1705
600 jfenwick 3259 ##################### Targets to build the documentation #####################
601 artak 2820
602 jfenwick 4244 env.Alias('pdfdocs',['user_pdf', 'install_pdf', 'cookbook_pdf', 'inversion_pdf'])
603     env.Alias('basedocs', ['pdfdocs','examples_tarfile', 'examples_zipfile', 'api_doxygen'])
604 jfenwick 4167 env.Alias('docs', ['basedocs', 'sphinxdoc'])
605 jfenwick 3259 env.Alias('release_prep', ['docs', 'install_all'])
606 jfenwick 4167 env.Alias('release_prep_old', ['basedocs', 'api_epydoc', 'install_all'])
607 ksteube 1705
608 jfenwick 4078 # The test scripts are always generated, this target allows us to
609     # generate the testscripts without doing a full build
610     env.Alias('testscripts',[])
611    
612 jfenwick 3259 if not IS_WINDOWS:
613 caltinay 4295 generateTestScripts(env, TestGroups)
614 jfenwick 2879
615 caltinay 3604
616 jfenwick 2235
617 caltinay 4295 ######################## Summarize our environment ###########################
618     def print_summary():
619     print("")
620 caltinay 4299 print("*** Config Summary (see config.log and <prefix>/lib/buildvars for details) ***")
621 caltinay 4295 print("Escript/Finley revision %s"%global_revision)
622     print(" Install prefix: %s"%env['prefix'])
623     print(" Python: %s"%sysconfig.PREFIX)
624     print(" boost: %s"%env['boost_prefix'])
625 caltinay 4299 if env['numpy_h']:
626     print(" numpy: YES (with headers)")
627     else:
628     print(" numpy: YES (without headers)")
629 caltinay 4295 if env['usempi']:
630     print(" MPI: YES (flavour: %s)"%env['mpi'])
631     else:
632     print(" MPI: DISABLED")
633     if env['uselapack']:
634     print(" LAPACK: YES (flavour: %s)"%env['lapack'])
635     else:
636     print(" LAPACK: DISABLED")
637     d_list=[]
638     e_list=[]
639 caltinay 4300 for i in 'debug','openmp','boomeramg','gdal','mkl','netcdf','papi','parmetis','pyproj','scipy','silo','sympy','umfpack','visit','vsl_random':
640 caltinay 4295 if env[i]: e_list.append(i)
641     else: d_list.append(i)
642     for i in e_list:
643     print("%16s: YES"%i)
644     for i in d_list:
645     print("%16s: DISABLED"%i)
646     if env['cppunit']:
647     print(" CppUnit: FOUND")
648     else:
649     print(" CppUnit: NOT FOUND")
650     if env['gmsh']=='m':
651     print(" gmsh: FOUND, MPI-ENABLED")
652     elif env['gmsh']=='s':
653     print(" gmsh: FOUND")
654     else:
655     print(" gmsh: NOT FOUND")
656 caltinay 4299
657 caltinay 4295 if ((fatalwarning != '') and (env['werror'])):
658     print(" Treating warnings as errors")
659     else:
660     print(" NOT treating warnings as errors")
661     print("")
662     for w in env['warnings']:
663     print("WARNING: %s"%w)
664    
665     atexit.register(print_summary)
666    

  ViewVC Help
Powered by ViewVC 1.1.26