1 |
libinstall = None |
import os |
|
incinstall = None |
|
|
|
|
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 |
|
# Call the python sconscript |
67 |
|
env.SConscript(dirs = ['#/finley/py_src'], build_dir='py', duplicate=0) |
68 |
|
|
69 |
libname = 'finleycpp' |
# Call the unit tests SConscript |
70 |
|
local_env.SConscript(dirs = ['#/finley/test'], build_dir='#/build/$PLATFORM/finley/test', duplicate=0) |
71 |
|
|
|
finley_path = Dir(str(esysroot) + '/finley/src') |
|
|
finley_cppadapter_path = Dir(str(esysroot) + '/finley/src/CPPAdapter') |
|
|
paso_path = Dir(str(esysroot) + '/paso/src') |
|
|
escript_path = Dir(str(esysroot) + '/escript/src') |
|
|
esysUtils_path = Dir(str(esysroot) + '/esysUtils/src') |
|
|
|
|
|
esys_lib_path = Dir(str(esysroot) + '/lib') |
|
|
mmio_lib_path = Dir(str(esysroot) + '/tools/mmio/lib') |
|
|
esysUtils_lib_path = Dir(str(esysroot) + '/esysUtils/lib') |
|
|
|
|
|
esysUtils_lib = str(esysUtils_lib_path) + '/libesysUtils.a' |
|
|
escript_lib = str(esys_lib_path) + '/libescriptcpp.so' |
|
|
paso_lib = str(esys_lib_path) + '/libpaso.a' |
|
|
mmio_lib = str(mmio_lib_path) + '/libmmio.a' |
|
|
|
|
|
cpp_path = [finley_path, |
|
|
finley_cppadapter_path, |
|
|
paso_path, |
|
|
escript_path, |
|
|
esysUtils_path, |
|
|
python_path, |
|
|
papi_path, |
|
|
boost_path] |
|
|
|
|
|
incs = ['Assemble.h', |
|
|
'ElementFile.h', |
|
|
'Finley.h', |
|
|
'FinleyVersion.h', |
|
|
'IndexList.h', |
|
|
'Mesh.h', |
|
|
'NodeFile.h', |
|
|
'Quadrature.h', |
|
|
'RectangularMesh.h', |
|
|
'ReferenceElements.h', |
|
|
'ShapeFunctions.h', |
|
|
'Util.h', |
|
|
# 'vtkCellType.h', |
|
|
'CPPAdapter/FinleyAdapterException.h', |
|
|
'CPPAdapter/FinleyError.h', |
|
|
'CPPAdapter/MeshAdapterFactory.h', |
|
|
'CPPAdapter/MeshAdapter.h', |
|
|
'CPPAdapter/SystemMatrixAdapter.h'] |
|
|
|
|
|
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', |
|
|
'ElementFile_setCoordinates.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', |
|
|
'Mesh_setCoordinates.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'] |
|
|
|
|
|
lib_path = [esys_lib_path, |
|
|
mmio_lib_path, |
|
|
esysUtils_lib_path, |
|
|
boost_lib_path, |
|
|
papi_lib_path] \ |
|
|
+ solver_lib_paths |
|
|
|
|
|
libs = ['escriptcpp', |
|
|
'esysUtils', |
|
|
'paso', |
|
|
'mmio', |
|
|
str(boost_lib), |
|
|
'dl', |
|
|
'util'] \ |
|
|
+ sys_libs \ |
|
|
+ solver_libs \ |
|
|
+ papi_libs |
|
|
|
|
|
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) |
|
|
finley_env.Replace(LIBPATH = lib_path) |
|
|
finley_env.Replace(LIBS = libs) |
|
|
|
|
|
finley_lib = finley_env.SharedLibrary(libname, sources) |
|
|
|
|
|
Depends(finley_lib, esysUtils_lib) |
|
|
Depends(finley_lib, escript_lib) |
|
|
Depends(finley_lib, paso_lib) |
|
|
Depends(finley_lib, mmio_lib) |
|
|
|
|
|
Default(finley_env.Install(incdir, incs)) |
|
|
Default(finley_env.Install(incdir2, incs)) |
|
|
if incinstall != None: |
|
|
Default(finley_env.Install(incinstall, incs)) |
|
|
|
|
|
Default(finley_env.Install(libdir, finley_lib)) |
|
|
Default(finley_env.Install(libdir2, finley_lib)) |
|
|
if libinstall != None: |
|
|
Default(finley_env.Install(libinstall, finley_lib)) |
|