1 |
# Copyright 2006 by ACcESS MNRF |
2 |
# |
3 |
# http://www.access.edu.au |
4 |
# Primary Business: Queensland, Australia |
5 |
# Licensed under the Open Software License version 3.0 |
6 |
# http://www.opensource.org/licenses/osl-3.0.php |
7 |
# |
8 |
import os |
9 |
Import('*') |
10 |
|
11 |
local_env=env.Copy() |
12 |
py_wrapper_local_env=env.Copy() |
13 |
# Remove the sharedlibrary prefix on all platform - we don't want 'lib' mucking with our python modules |
14 |
del py_wrapper_local_env['SHLIBPREFIX'] |
15 |
|
16 |
lib_name = 'finley' |
17 |
py_wrapper_name = lib_name+'cpp' |
18 |
py_wrapper_source = 'CPPAdapter/'+py_wrapper_name+'.cpp' # FIXME: In need of a source tree refactor |
19 |
py_wrapper_lib_name = py_wrapper_name |
20 |
|
21 |
src_dir = local_env.Dir('.').srcnode().abspath |
22 |
filenames = [ x for x in os.listdir(src_dir) if os.path.splitext(x)[1] in [".h", ".c", ".cpp"] ] |
23 |
|
24 |
sources = [x for x in filenames if os.path.splitext(x)[1] in ['.cpp', '.c']] |
25 |
headers = [x for x in filenames if os.path.splitext(x)[1] in ['.h']] |
26 |
|
27 |
|
28 |
# finleycpp has additional source in the CPPAdapter sub-directory. Append these to the list |
29 |
cppadapter_filenames = [ 'CPPAdapter/'+x for x in os.listdir(src_dir+'/CPPAdapter') if os.path.splitext(x)[1] in [".h", ".c", ".cpp"] ] |
30 |
sources += [ x for x in cppadapter_filenames if os.path.splitext(x)[1] in ['.cpp', '.c']] |
31 |
cppadapter_headers = [x for x in cppadapter_filenames if os.path.splitext(x)[1] in ['.h']] |
32 |
|
33 |
sources.remove(py_wrapper_source) # FIXME: should probably refactor the source tree so the python wrapper isn't colocated with c++ sources |
34 |
local_env.Append(LIBS = [boost_lib, python_lib, 'escript', 'esysUtils', 'paso'] + sys_libs + mpi_libs ) |
35 |
py_wrapper_local_env.Append(LIBS = [boost_lib, python_lib, lib_name, 'escript', 'esysUtils', 'paso'] + sys_libs + mpi_libs ) |
36 |
|
37 |
if mkl_libs: |
38 |
local_env.Append(CPPDEFINES=['MKL',]) |
39 |
local_env.Append(LIBS = mkl_libs) |
40 |
if scsl_libs: |
41 |
local_env.Append(CPPDEFINES=['SCSL',]) |
42 |
local_env.Append(LIBS = scsl_libs) |
43 |
if umf_libs: |
44 |
local_env.Append(CPPDEFINES=['UMFPACK',]) |
45 |
local_env.Append(LIBS = umf_libs) |
46 |
|
47 |
if blas_libs: |
48 |
local_env.Append(LIBS = blas_libs) |
49 |
|
50 |
if papi_instrument_solver: |
51 |
local_env.Append(CPPDEFINES=['PAPI',]) |
52 |
if papi_libs: |
53 |
local_env.Append(LIBS = papi_libs) |
54 |
local_env.Append(CPPDEFINES=['BLOCKPAPI',]) |
55 |
|
56 |
if trilinos_libs: |
57 |
local_env.Append(CPPDEFINES=['TRILINOS',]) |
58 |
local_env.Append(LIBS = trilinos_libs) |
59 |
|
60 |
local_env.Append(CPPDEFINES = ['FINLEY_EXPORTS']) |
61 |
|
62 |
lib = local_env.SharedLibrary(lib_name, sources) |
63 |
py_wrapper_lib = py_wrapper_local_env.SharedLibrary( py_wrapper_lib_name, py_wrapper_source) |
64 |
|
65 |
include_path = Dir(lib_name, incinstall) |
66 |
cppadapter_include_path = Dir('CppAdapter', include_path) |
67 |
|
68 |
local_env.Install(include_path, headers ) |
69 |
local_env.Install(cppadapter_include_path, cppadapter_headers ) |
70 |
local_env.Install(libinstall, lib) |
71 |
py_wrapper_local_env.Install(pyinstall+'/finley', py_wrapper_lib) |
72 |
|
73 |
#windows specific mod |
74 |
if os.name == 'nt': |
75 |
py_wrapper_local_env.InstallAs(target = [ pyinstall+'/finley/'+py_wrapper_lib_name+'.pyd', \ |
76 |
pyinstall+'/finley/'+py_wrapper_lib_name+'.lib', \ |
77 |
pyinstall+'/finley/'+py_wrapper_lib_name+'.exp' ], \ |
78 |
source = py_wrapper_lib ) |
79 |
|
80 |
|
81 |
# export the lib target since tests will depend on it |
82 |
# the lib target is a list of file nodes (why? win32 produces more than one output file: .lib, .dll, .pdb) |
83 |
# FIXME: This list handling produces the desired result but can this be done directly with scons File nodes? |
84 |
dep_lib = [libinstall+'/'+str(x) for x in lib] |
85 |
Export('dep_lib') |
86 |
|
87 |
# add source files to release |
88 |
release_srcfiles = [ env.File(x) for x in filenames + cppadapter_filenames ] + [env.File("SConscript"), ] |
89 |
env.Zip(src_zipfile, release_srcfiles) |
90 |
env.Tar(src_tarfile, release_srcfiles) |
91 |
|
92 |
# Call the python sconscript |
93 |
env.SConscript(dirs = ['#/finley/py_src'], build_dir='py', duplicate=0) |
94 |
|
95 |
# Call the unit tests SConscript |
96 |
local_env.SConscript(dirs = ['#/finley/test'], build_dir='#/build/$PLATFORM/finley/test', duplicate=0) |
97 |
|