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

Annotation of /branches/ROBW_XPLATFORM/SConstruct

Parent Directory Parent Directory | Revision Log Revision Log


Revision 650 - (hide annotations)
Fri Mar 24 06:13:52 2006 UTC (16 years, 8 months ago) by phornby
File size: 10944 byte(s)
Builds and passes on linux (debian)


1 jgs 214 # top-level Scons configuration file for all esys13 modules
2 robwdcock 623 # Begin initialisation Section
3     # all of this section just intialises default environments and helper
4     # scripts. You shouldn't need to modify this section.
5     EnsureSConsVersion(0,96,91)
6     EnsurePythonVersion(2,3)
7 jgs 455
8 robwdcock 623 import sys, os
9     # Add our extensions
10     if sys.path.count('scons')==0: sys.path.append('scons')
11     import scons_extensions
12 jgs 455
13 robwdcock 623 # Default options and options help text
14     # These are defaults and can be overridden using command line arguments or an options file.
15     # if the options_file or ARGUMENTS do not exist then the ones listed as default here are used
16     # DO NOT CHANGE THEM HERE
17     if ARGUMENTS.get('options_file',0):
18     options_file = ARGUMENTS.get('options_file',0)
19     else:
20     import socket
21     from string import ascii_letters,digits
22     hostname=""
23     for s in socket.gethostname().split('.')[0]:
24     if s in ascii_letters+digits:
25     hostname+=s
26     else:
27     hostname+="_"
28     options_file = "scons/"+hostname+"_options.py"
29 jgs 214
30 robwdcock 623 opts = Options(options_file, ARGUMENTS)
31     opts.AddOptions(
32     # Where to install esys stuff
33 robwdcock 635 ('incinstall', 'where the esys headers will be installed', Dir('#.').abspath+'/include'),
34     ('libinstall', 'where the esys libraries will be installed', Dir('#.').abspath+'/lib'),
35     ('pyinstall', 'where the esys python modules will be installed', Dir('#.').abspath+'/esys'),
36 robwdcock 623 # Compilation options
37 robwdcock 639 BoolOption('dodebug', 'Do you want a debug build?', 'yes'),
38 robwdcock 623 ('options_file', "Optional file containing preferred options. Ignored if it doesn't exist (default: scons/hostname_options.py)", options_file),
39     ('cc_defines','C/C++ defines to use', None),
40     ('cc_flags','C compiler flags to use (Release build)', None),
41     ('cc_flags_debug', 'C compiler flags to use (Debug build)', None),
42     ('cxx_flags', 'C++ compiler flags to use (Release build)', None),
43     ('cxx_flags_debug', 'C++ compiler flags to use (Debug build)', None),
44     ('ar_flags', 'Static library archiver flags to use', None),
45     ('sys_libs', 'System libraries to link with', None),
46     # MKL
47     PathOption('mkl_path', 'Path to MKL includes', None),
48     PathOption('mkl_lib_path', 'Path to MKL libs', None),
49     ('mkl_libs', 'MKL libraries to link with', None),
50     # SCSL
51     PathOption('scsl_path', 'Path to SCSL includes', None),
52     PathOption('scsl_lib_path', 'Path to SCSL libs', None),
53     ('scsl_libs', 'SCSL libraries to link with', None),
54     # UMFPACK
55     PathOption('umf_path', 'Path to UMF includes', None),
56     PathOption('umf_lib_path', 'Path to UMF libs', None),
57     ('umf_libs', 'UMF libraries to link with', None),
58     # Python
59     PathOption('python_path', 'Path to Python includes', '/usr/include'),
60     PathOption('python_lib_path', 'Path to Python libs', '/usr/lib'),
61     ('python_lib', 'Python libraries to link with', ['python2.3',]),
62     # Boost
63     PathOption('boost_path', 'Path to Boost includes', '/usr/include'),
64     PathOption('boost_lib_path', 'Path to Boost libs', '/usr/lib'),
65     ('boost_lib', 'Boost libraries to link with', ['boost_python',]),
66 robwdcock 635 # CppUnit
67     PathOption('cppunit_path', 'Path to CppUnit includes', Dir('#.').abspath+'/tools/CppUnitTest/inc'),
68     PathOption('cppunit_lib_path', 'Path to CppUnit libs', Dir('#.').abspath+'/lib'),
69     ('cppunit_lib', 'CppUnit libraries to link with', ['CppUnitTest',]),
70 robwdcock 623 # Doc building
71     PathOption('doxygen_path', 'Path to Doxygen executable', None),
72     PathOption('epydoc_path', 'Path to Epydoc executable', None),
73     PathOption('epydoc_pythonpath', 'Path to Epydoc python files', None),
74     # PAPI
75     PathOption('papi_path', 'Path to PAPI includes', None),
76     PathOption('papi_lib_path', 'Path to PAPI libs', None),
77     ('papi_libs', 'PAPI libraries to link with', None),
78     )
79 jgs 192
80 robwdcock 623 # Initialise Scons Build Environment
81     # Note: On the Altix the intel compilers are not automatically
82     # detected by scons intelc.py script. The Altix has a different directory
83     # path and in some locations the "modules" facility is used to support
84     # multiple compiler versions. This forces the need to import the users PATH
85     # environment which isn't the "scons way"
86     # This doesn't impact linux and windows which will use the default compiler (g++ or msvc, or the intel compiler if it is installed on both platforms)
87     # FIXME: Perhaps a modification to intelc.py will allow better support for ia64 on altix
88 robwdcock 632 if os.name != "nt" and os.uname()[4]=='ia64':
89 robwdcock 623 env = Environment(ENV = {'PATH' : os.environ['PATH']}, tools = ['default', 'intelc'], options = opts)
90     if env['CXX'] == 'icpc':
91     env['LINK'] = env['CXX'] # version >=9 of intel c++ compiler requires use of icpc to link in C++ runtimes (icc does not). FIXME: this behaviour could be directly incorporated into scons intelc.py
92 robwdcock 641 elif os.name == "nt":
93     env = Environment(tools = ['default', 'intelc'], options = opts)
94 robwdcock 623 else:
95 robwdcock 641 env = Environment(tools = ['default'], options = opts)
96 robwdcock 623
97     # Setup help for options
98     Help(opts.GenerateHelpText(env))
99    
100     # Add some customer builders
101     py_builder = Builder(action = scons_extensions.build_py, suffix = '.pyc', src_suffix = '.py', single_source=True)
102     env.Append(BUILDERS = {'PyCompile' : py_builder});
103    
104     if env['PLATFORM'] == "win32":
105     runUnitTest_builder = Builder(action = scons_extensions.runUnitTest, suffix = '.passed', src_suffix='.exe', single_source=True)
106     else:
107     runUnitTest_builder = Builder(action = scons_extensions.runUnitTest, suffix = '.passed', single_source=True)
108     env.Append(BUILDERS = {'RunUnitTest' : runUnitTest_builder});
109    
110     # FIXME: Copy this builder from the win32 branch
111     #runPyUnitTest_builder = Builder(action = scons_extensions.runPyUnitTest, suffix = '.passed', src_suffic='.py', single_source=True)
112     #env.Append(BUILDERS = {'RunPyUnitTest' : runPyUnitTest_builder});
113    
114     # Convert the options which are held in environment variable into python variables for ease of handling and configure compilation options
115     try:
116     incinstall = env['incinstall']
117     env.Append(CPPPATH = [incinstall,])
118     except KeyError:
119     incinstall = None
120     try:
121     libinstall = env['libinstall']
122     env.Append(LIBPATH = [libinstall,])
123     except KeyError:
124     libinstall = None
125     try:
126     pyinstall = env['pyinstall']
127     except KeyError:
128     pyinstall = None
129     try:
130     dodebug = env['dodebug']
131     except KeyError:
132     dodebug = None
133     try:
134     cc_defines = env['cc_defines']
135     env.Append(CPPDEFINES = [cc_defines,])
136     except KeyError:
137     pass
138     if dodebug:
139     try:
140     flags = env['cc_flags_debug']
141 robwdcock 632 env.Append(CCFLAGS = flags)
142 robwdcock 623 except KeyError:
143     pass
144     else:
145     try:
146     flags = env['cc_flags']
147 robwdcock 632 env.Append(CCFLAGS = flags)
148 robwdcock 623 except KeyError:
149     pass
150    
151     if dodebug:
152     try:
153     flags = env['cxx_flags_debug']
154 robwdcock 632 env.Append(CXXFLAGS = flags)
155 robwdcock 623 except KeyError:
156     pass
157     else:
158     try:
159     flags = env['cxx_flags']
160 robwdcock 632 env.Append(CXXFLAGS = flags)
161 robwdcock 623 except KeyError:
162     pass
163    
164     try:
165     flags = env['ar_flags']
166     env.Append(ARFLAGS = flags)
167     except KeyError:
168     ar_flags = None
169     try:
170     sys_libs = env['sys_libs']
171     except KeyError:
172 robwdcock 641 sys_libs = ''
173 robwdcock 623
174     try:
175     includes = env['mkl_path']
176     env.Append(CPPPATH = [includes,])
177     except KeyError:
178     pass
179     try:
180     lib_path = env['mkl_lib_path']
181     env.Append(LIBPATH = [lib_path,])
182     except KeyError:
183     pass
184     try:
185     mkl_libs = env['mkl_libs']
186     except KeyError:
187 robwdcock 641 mkl_libs = ''
188 robwdcock 623 try:
189     includes = env['scsl_path']
190     env.Append(CPPPATH = [includes,])
191     except KeyError:
192     pass
193     try:
194     lib_path = env['scsl_lib_path']
195     env.Append(LIBPATH = [lib_path,])
196     except KeyError:
197     pass
198     try:
199     scsl_libs = env['scsl_libs']
200     except KeyError:
201 robwdcock 641 scsl_libs = ''
202 robwdcock 623 try:
203     includes = env['umf_path']
204     env.Append(CPPPATH = [includes,])
205     except KeyError:
206     pass
207     try:
208     lib_path = env['umf_lib_path']
209     env.Append(LIBPATH = [lib_path,])
210     except KeyError:
211     pass
212     try:
213     umf_libs = env['umf_libs']
214     except KeyError:
215 robwdcock 641 umf_libs = ''
216 robwdcock 623 try:
217     includes = env['boost_path']
218     env.Append(CPPPATH = [includes,])
219     except KeyError:
220     pass
221     try:
222     lib_path = env['boost_lib_path']
223     env.Append(LIBPATH = [lib_path,])
224     except KeyError:
225     pass
226     try:
227     boost_lib = env['boost_lib']
228     except KeyError:
229     boost_lib = None
230     try:
231 robwdcock 635 includes = env['cppunit_path']
232     env.Append(CPPPATH = [includes,])
233     except KeyError:
234     pass
235     try:
236     lib_path = env['cppunit_lib_path']
237     env.Append(LIBPATH = [lib_path,])
238     except KeyError:
239     pass
240     try:
241     cppunit_lib = env['cppunit_lib']
242     except KeyError:
243     boost_lib = None
244     try:
245 robwdcock 623 includes = env['python_path']
246     env.Append(CPPPATH = [includes,])
247     except KeyError:
248     pass
249     try:
250     lib_path = env['python_lib_path']
251     env.Append(LIBPATH = [lib_path,])
252     except KeyError:
253     pass
254     try:
255     python_lib = env['python_lib']
256     except KeyError:
257     python_lib = None
258     try:
259     doxygen_path = env['doxygen_path']
260     except KeyError:
261     doxygen_path = None
262     try:
263     epydoc_path = env['epydoc_path']
264     except KeyError:
265     epydoc_path = None
266     try:
267     epydoc_pythonpath = env['epydoc_pythonpath']
268     except KeyError:
269     epydoc_pythonpath = None
270     try:
271     includes = env['papi_path']
272     env.Append(CPPPATH = [includes,])
273     except KeyError:
274     pass
275     try:
276     lib_path = env['papi_lib_path']
277     env.Append(LIBPATH = [lib_path,])
278     except KeyError:
279     pass
280     try:
281     papi_libs = env['papi_libs']
282     except KeyError:
283     papi_libs = None
284    
285     # Targets
286     env.Default(libinstall)
287     env.Default(incinstall)
288     env.Alias('py_test')
289    
290     # Allow sconscripts to see the env
291     Export(["env", "incinstall", "libinstall", "pyinstall", "dodebug", "mkl_libs", "scsl_libs", "umf_libs",
292 robwdcock 635 "boost_lib", "python_lib", "doxygen_path", "epydoc_path", "epydoc_pythonpath", "papi_libs", "cppunit_lib", "sys_libs" ])
293 robwdcock 623
294     # End initialisation section
295     # Begin configuration section
296     # Insert new components to be build here
297     # FIXME: might be nice to replace this verbosity with a list of targets and some
298     # FIXME: nifty python to create the lengthy but very similar env.Sconscript lines
299     # Third Party libraries
300     env.SConscript(dirs = ['tools/CppUnitTest/src'], build_dir='build/$PLATFORM/tools/CppUnitTest', duplicate=0)
301     # C/C++ Libraries
302     env.SConscript(dirs = ['paso/src'], build_dir='build/$PLATFORM/paso', duplicate=0)
303     env.SConscript(dirs = ['bruce/src'], build_dir='build/$PLATFORM/bruce', duplicate=0)
304     env.SConscript(dirs = ['escript/src'], build_dir='build/$PLATFORM/escript', duplicate=0)
305     env.SConscript(dirs = ['esysUtils/src'], build_dir='build/$PLATFORM/esysUtils', duplicate=0)
306     env.SConscript(dirs = ['finley/src'], build_dir='build/$PLATFORM/finley', duplicate=0)
307    
308     # Python
309     #env.SConscript(dirs = ['esys/py_src'], build_dir='build/$PLATFORM/esys/py', duplicate=0)# call appropriate SConscripts
310     # FIXME:modelib and pyvisi need to be incorporated into build system for it to match original one
311     #'modellib/SConstruct',
312     #'pyvisi/SConstruct']
313     # 'doc/SConstruct']
314     # 'doc/SConstruct']
315    
316     # FIXME: REMOVE THIS OLD STUFF
317     # Original SConstruct file contents (minus the bits that have been replaced)
318     #target_scripts = [
319     # 'modellib/SConstruct',
320     # 'pyvisi/SConstruct']
321 gross 584 # 'doc/SConstruct']
322 gross 602 # 'doc/SConstruct']
323 jgs 214
324 robwdcock 623 #SConscript(target_scripts, duplicate=0)
325    

  ViewVC Help
Powered by ViewVC 1.1.26