1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
|
from os.path import join as pjoin
import sys
from numscons import GetNumpyEnvironment
from numscons import CheckF77LAPACK
from numscons import write_info
from numscons.core.misc import built_with_mstools, built_with_gnu_f77
env = GetNumpyEnvironment(ARGUMENTS)
#=======================
# Starting Configuration
#=======================
config = env.NumpyConfigure(custom_tests = {'CheckLapack' : CheckF77LAPACK})
#-----------------
# Checking Lapack
#-----------------
st = config.CheckLapack()
if not st:
raise RuntimeError("no lapack found, necessary for dsolve module")
config.Finish()
write_info(env)
# Build superlu lib
superlu_env = env.Clone()
superlu_def = []
if sys.platform == 'win32':
superlu_def.append((('NO_TIMER'), 1))
superlu_def.append((('USE_VENDOR_BLAS'), 2))
superlu_env.Append(CPPDEFINES = superlu_def)
superlu_src = [pjoin('SuperLU', 'SRC', s) for s in [ "ccolumn_bmod.c",
"ccolumn_dfs.c", "ccopy_to_ucol.c", "cgscon.c", "cgsequ.c", "cgsrfs.c",
"cgssv.c", "cgssvx.c", "cgstrf.c", "cgstrs.c", "clacon.c", "clangs.c",
"claqgs.c", "cmemory.c", "colamd.c", "cpanel_bmod.c", "cpanel_dfs.c",
"cpivotL.c", "cpivotgrowth.c", "cpruneL.c", "creadhb.c", "csnode_bmod.c",
"csnode_dfs.c", "csp_blas2.c", "csp_blas3.c", "cutil.c", "dGetDiagU.c",
"dcolumn_bmod.c", "dcolumn_dfs.c", "dcomplex.c", "dcopy_to_ucol.c", "dgscon.c",
"dgsequ.c", "dgsrfs.c", "dgssv.c", "dgssvx.c", "dgstrf.c", "dgstrs.c",
"dgstrsL.c", "dlacon.c", "dlamch.c", "dlangs.c", "dlaqgs.c", "dmemory.c",
"dpanel_bmod.c", "dpanel_dfs.c", "dpivotL.c", "dpivotgrowth.c", "dpruneL.c",
"dreadhb.c", "dsnode_bmod.c", "dsnode_dfs.c", "dsp_blas2.c", "dsp_blas3.c",
"dutil.c", "dzsum1.c", "get_perm_c.c", "heap_relax_snode.c", "icmax1.c",
"izmax1.c", "memory.c", "mmd.c", "relax_snode.c", "scolumn_bmod.c",
"scolumn_dfs.c", "scomplex.c", "scopy_to_ucol.c", "scsum1.c", "sgscon.c",
"sgsequ.c", "sgsrfs.c", "sgssv.c", "sgssvx.c", "sgstrf.c", "sgstrs.c",
"slacon.c", "slamch.c", "slangs.c", "slaqgs.c", "smemory.c", "sp_coletree.c",
"sp_ienv.c", "sp_preorder.c", "spanel_bmod.c", "spanel_dfs.c", "spivotL.c",
"spivotgrowth.c", "spruneL.c", "sreadhb.c", "ssnode_bmod.c", "ssnode_dfs.c",
"ssp_blas2.c", "ssp_blas3.c", "superlu_timer.c", "sutil.c", "util.c",
"xerbla.c", "zcolumn_bmod.c", "zcolumn_dfs.c", "zcopy_to_ucol.c", "zgscon.c",
"zgsequ.c", "zgsrfs.c", "zgssv.c", "zgssvx.c", "zgstrf.c", "zgstrs.c",
"zlacon.c", "zlangs.c", "zlaqgs.c", "zmemory.c", "zpanel_bmod.c",
"zpanel_dfs.c", "zpivotL.c", "zpivotgrowth.c", "zpruneL.c", "zreadhb.c",
"zsnode_bmod.c", "zsnode_dfs.c", "zsp_blas2.c", "zsp_blas3.c", "zutil.c"]]
# XXX: we should detect whether lsame is already defined in BLAS/LAPACK. Here,
# when using MSVC + MKL, lsame is already in MKL
if not (built_with_mstools(env) and (not built_with_gnu_f77(env))):
superlu_src.append(pjoin("SuperLU", "SRC", "lsame.c"))
superlu = superlu_env.DistutilsStaticExtLibrary('superlu_src', source = superlu_src)
# Build python extensions
pyenv = env.Clone()
pyenv.Append(CPPPATH = [pjoin('SuperLU', 'SRC')])
pyenv.Prepend(LIBS = superlu)
common_src = ['_superlu_utils.c', '_superluobject.c']
for prec in ['z', 'd', 'c', 's']:
pyenv.NumpyPythonExtension('_%ssuperlu' % prec,
source = common_src + \
['_%ssuperlumodule.c' % prec])
|