1 |
libinstall = None |
import os |
|
|
|
2 |
Import('*') |
Import('*') |
3 |
|
|
4 |
import os |
local_env=env.Copy() |
5 |
import string |
py_wrapper_local_env=env.Copy() |
6 |
|
# Remove the sharedlibrary prefix on all platform - we don't want 'lib' mucking with our python modules |
7 |
|
del py_wrapper_local_env['SHLIBPREFIX'] |
8 |
|
|
9 |
|
lib_name = 'finley' |
10 |
|
py_wrapper_name = lib_name+'cpp' |
11 |
|
py_wrapper_source = 'CPPAdapter/'+py_wrapper_name+'.cpp' # FIXME: In need of a source tree refactor |
12 |
|
py_wrapper_lib_name = py_wrapper_name |
13 |
|
|
14 |
|
src_dir = local_env.Dir('.').srcnode().abspath |
15 |
|
filenames = [ x for x in os.listdir(src_dir) if os.path.splitext(x)[1] in [".h", ".c", ".cpp"] ] |
16 |
|
|
17 |
|
sources = [x for x in filenames if os.path.splitext(x)[1] in ['.cpp', '.c']] |
18 |
|
headers = [x for x in filenames if os.path.splitext(x)[1] in ['.h']] |
19 |
|
|
20 |
|
|
21 |
|
# finleycpp has additional source in the CPPAdapter sub-directory. Append these to the list |
22 |
|
cppadapter_filenames = [ 'CPPAdapter/'+x for x in os.listdir(src_dir+'/CPPAdapter') if os.path.splitext(x)[1] in [".h", ".c", ".cpp"] ] |
23 |
|
sources += [ x for x in cppadapter_filenames if os.path.splitext(x)[1] in ['.cpp', '.c']] |
24 |
|
cppadapter_headers = [x for x in cppadapter_filenames if os.path.splitext(x)[1] in ['.h']] |
25 |
|
|
26 |
|
sources.remove(py_wrapper_source) # FIXME: should probably refactor the source tree so the python wrapper isn't colocated with c++ sources |
27 |
|
local_env.Append(LIBS = [boost_lib, python_lib, sys_libs, 'escript', 'esysUtils', 'paso']) |
28 |
|
py_wrapper_local_env.Append(LIBS = [boost_lib, python_lib, sys_libs, lib_name, 'escript', 'esysUtils', 'paso']) |
29 |
|
|
30 |
|
if mkl_libs: |
31 |
|
local_env.Append(CPPDEFINES=['MKL',]) |
32 |
|
local_env.Append(LIBS = mkl_libs) |
33 |
|
if scsl_libs: |
34 |
|
local_env.Append(CPPDEFINES=['SCSL',]) |
35 |
|
local_env.Append(LIBS = scsl_libs) |
36 |
|
if umf_libs: |
37 |
|
local_env.Append(CPPDEFINES=['UMFPACK',]) |
38 |
|
local_env.Append(LIBS = umf_libs) |
39 |
|
if papi_libs: |
40 |
|
local_env.Append(CPPDEFINES=['PAPI',]) |
41 |
|
local_env.Append(LIBS = papi_libs) |
42 |
|
|
43 |
|
|
44 |
|
lib = local_env.SharedLibrary(lib_name, sources) |
45 |
|
py_wrapper_lib = py_wrapper_local_env.SharedLibrary( py_wrapper_lib_name, py_wrapper_source) |
46 |
|
|
47 |
|
include_path = Dir(lib_name, incinstall) |
48 |
|
cppadapter_include_path = Dir('CppAdapter', include_path) |
49 |
|
|
50 |
|
local_env.Install(include_path, headers ) |
51 |
|
local_env.Install(cppadapter_include_path, cppadapter_headers ) |
52 |
|
local_env.Install(libinstall, lib) |
53 |
|
py_wrapper_local_env.Install(pyinstall+'/finley', py_wrapper_lib) |
54 |
|
|
55 |
|
# export the lib target since tests will depend on it |
56 |
|
# the lib target is a list of file nodes (why? win32 produces more than one output file: .lib, .dll, .pdb) |
57 |
|
# FIXME: This list handling produces the desired result but can this be done directly with scons File nodes? |
58 |
|
dep_lib = [libinstall+'/'+str(x) for x in lib] |
59 |
|
Export('dep_lib') |
60 |
|
|
61 |
|
# add source files to release |
62 |
|
release_srcfiles = [ env.File(x) for x in filenames + cppadapter_filenames ] + [env.File("SConscript"), ] |
63 |
|
env.Zip(src_zipfile, release_srcfiles) |
64 |
|
env.Tar(src_tarfile, release_srcfiles) |
65 |
|
|
66 |
finley_path = str(esysroot) + '/finley/src/finley' |
# Call the python sconscript |
67 |
finley_cppadapter_path = str(esysroot) + '/finley/src/finley/CPPAdapter' |
env.SConscript(dirs = ['#/finley/py_src'], build_dir='py', duplicate=0) |
|
paso_path = str(esysroot) + '/paso/inc' |
|
|
escript_path = str(esysroot) + '/escript/inc' |
|
|
esysUtils_path = str(esysroot) + '/esysUtils/inc' |
|
|
|
|
|
cpp_path = [finley_path, |
|
|
finley_cppadapter_path, |
|
|
paso_path, |
|
|
escript_path, |
|
|
esysUtils_path, |
|
|
python_path, |
|
|
boost_path] |
|
|
|
|
|
lib = 'finleycpp' |
|
|
|
|
|
sources = ['Assemble_addToSystemMatrix.c', |
|
|
'Assemble_CopyElementData.c', |
|
|
'Assemble_CopyNodalData.c', |
|
|
'Assemble_getAssembleParameters.c', |
|
|
'Assemble_getSize.c', |
|
|
'Assemble_gradient.c', |
|
|
'Assemble_handelShapeMissMatch.c', |
|
|
'Assemble_integrate.c', |
|
|
'Assemble_interpolate.c', |
|
|
'Assemble_NodeCoordinates.c', |
|
|
'Assemble_PDE.c', |
|
|
'Assemble_PDEMatrix_Single2.c', |
|
|
'Assemble_PDEMatrix_System2.c', |
|
|
'Assemble_PDE_RHS.c', |
|
|
'Assemble_RHSMatrix_Single.c', |
|
|
'Assemble_RHSMatrix_System.c', |
|
|
'Assemble_RobinCondition.c', |
|
|
'Assemble_RobinCondition_RHS.c', |
|
|
'Assemble_setNormal.c', |
|
|
'ElementFile_allocTable.c', |
|
|
'ElementFile.c', |
|
|
'ElementFile_copyTable.c', |
|
|
'ElementFile_gather.c', |
|
|
'ElementFile_improveColoring.c', |
|
|
'ElementFile_markNodes.c', |
|
|
'ElementFile_optimizeDistribution.c', |
|
|
'ElementFile_prepare.c', |
|
|
'ElementFile_relableNodes.c', |
|
|
'ElementFile_scatter.c', |
|
|
'ElementFile_setNodeRange.c', |
|
|
'Finley.c', |
|
|
'IndexList.c', |
|
|
'Mesh.c', |
|
|
'Mesh_findMatchingFaces.c', |
|
|
'Mesh_getPattern.c', |
|
|
'Mesh_glueFaces.c', |
|
|
'Mesh_hex20.c', |
|
|
'Mesh_hex8.c', |
|
|
'Mesh_joinFaces.c', |
|
|
'Mesh_line2.c', |
|
|
'Mesh_line3.c', |
|
|
'Mesh_markNodes.c', |
|
|
'Mesh_merge.c', |
|
|
'Mesh_prepare.c', |
|
|
'Mesh_prepareNodes.c', |
|
|
'Mesh_print.c', |
|
|
'Mesh_read.c', |
|
|
'Mesh_rec4.c', |
|
|
'Mesh_rec8.c', |
|
|
'Mesh_relabelElementNodes.c', |
|
|
'Mesh_resolveNodeIds.c', |
|
|
'Mesh_saveDX.c', |
|
|
'Mesh_saveVTK.c', |
|
|
'Mesh_write.c', |
|
|
'NodeFile_allocTable.c', |
|
|
'NodeFile.c', |
|
|
'NodeFile_copyTable.c', |
|
|
'NodeFile_gatter.c', |
|
|
'NodeFile_scatter.c', |
|
|
'NodeFile_setCoordinates.c', |
|
|
'NodeFile_setIdRange.c', |
|
|
'Quadrature.c', |
|
|
'ReferenceElements.c', |
|
|
'ShapeFunctions.c', |
|
|
'Util.c', |
|
|
'CPPAdapter/FinleyError.cpp', |
|
|
'CPPAdapter/MeshAdapter.cpp', |
|
|
'CPPAdapter/MeshAdapterFactory.cpp', |
|
|
'CPPAdapter/SystemMatrixAdapter.cpp', |
|
|
'CPPAdapter/finleycpp.cpp'] |
|
|
|
|
|
finley_env = Environment(ENV = os.environ) |
|
|
|
|
|
finley_env.Replace(CC = cc) |
|
|
finley_env.Replace(CXX = cxx) |
|
|
finley_env.Replace(CCFLAGS = cc_flags) |
|
|
finley_env.Replace(CXXFLAGS = cxx_flags) |
|
|
finley_env.Replace(SHOBJSUFFIX = '.lo') |
|
|
finley_env.Replace(CPPPATH = cpp_path) |
|
68 |
|
|
69 |
finley_lib = finley_env.SharedLibrary(lib, sources) |
# Call the unit tests SConscript |
70 |
finley_env.Install(libdir, finley_lib) |
local_env.SConscript(dirs = ['#/finley/test'], build_dir='#/build/$PLATFORM/finley/test', duplicate=0) |
71 |
|
|
|
if libinstall != None: |
|
|
finley_env.Install(libinstall, finley_lib) |
|