cantera/ext/SConscript
Harry Moffat 25ba149aab Sorry for monolithic commit. Will break it up in the future.
Moved the external libraries to separate library files so that libcantera.a just contains its own namespace externals.

Fixed several errors in the equilibrium program that occurred during the port. (int to size_t issues).

Moved some equilibrium program headers to the include file system, so that it can link with equilibrium program.

Worked on Cantera.mak. Needs more work.

Fixed an issue with the Residual virtual base classes within numerics. They didn't inherit due to int to size_t migration. This caused numerous test problems to fail (issue with backwards compatibility - do we want it and how much do we want?).

Added csvdiff back so that it's available for shell environment runtests.
2012-04-05 00:24:31 +00:00

152 lines
4.9 KiB
Python

from buildutils import *
Import('env', 'build', 'install', 'libraryTargets')
localenv = env.Clone()
def prep_default(env):
return env.Clone()
def prep_fortran(env):
localenv = env.Clone()
localenv.Append(CPPPATH='#include/cantera/base') # for config.h
return localenv
def prep_f2c(env):
localenv = env.Clone()
localenv.Append(CPPPATH=Dir('#ext/f2c_libs'))
if not localenv['HAS_TIMES_H']:
localenv.Append(CPPDEFINES=['USE_CLOCK'])
if not localenv['HAS_UNISTD_H']:
localenv.Append(CPPDEFINES=['MSDOS'])
# The F2C code generates a lot of warnings designed to catch
# programmer errors, but since this is autogenerated code, those
# warnings are irrelevant.
if '-Wall' in localenv['CCFLAGS']:
localenv['CCFLAGS'].remove('-Wall')
localenv['CCFLAGS'].append('-Wno-format-security')
elif '/W3' in localenv['CCFLAGS']:
localenv['CCFLAGS'].remove('/W3')
elif '-Wcheck' in localenv['CCFLAGS']:
localenv['CCFLAGS'].remove('-Wcheck')
if localenv['CC'] == 'clang':
localenv['CCFLAGS'].append('-w')
return localenv
def prep_sundials(env):
localenv = env.Clone()
localenv.Append(CPPPATH=Dir('#ext/cvode/include'))
# Suppress warnings from external code
if '-Wall' in localenv['CCFLAGS']:
localenv['CCFLAGS'].append('-Wno-format')
return localenv
def prep_gtest(env):
localenv = env.Clone()
localenv.Append(CPPPATH=[Dir('#ext/gtest'),
Dir('#ext/gtest/include')],
CPPDEFINES={'GTEST_HAS_PTHREAD': 0})
return localenv
# (subdir, (file extensions), prepfunction)
libs = [('libexecstream', ['cpp'], prep_default)]
if env['build_with_f2c']:
libs.append(('f2c_math', ['cpp','c'], prep_f2c))
# Create arith.h using the arithchk program
if not os.path.exists('arith.h'):
arithenv = prep_f2c(env)
# TODO: make link flag more general
arithenv.Append(CPPFLAGS='-DNO_FPINIT')
arithenv.Program('f2c_libs/arithchk/arithchk', source='f2c_libs/arithchk/arithchk.c',
LIBS=env['LIBM'])
arithenv.Command('#ext/f2c_libs/arith.h', 'f2c_libs/arithchk/arithchk$PROGSUFFIX',
'$SOURCE > $TARGET')
headerenv = prep_f2c(env)
# Possibly system-dependent headers
headerenv.Command('#ext/f2c_libs/signal1.h', 'f2c_libs/signal1.h0',
Copy('$TARGET', '$SOURCE'))
headerenv.Command('#ext/f2c_libs/sysdep1.h', 'f2c_libs/sysdep1.h0',
Copy('$TARGET', '$SOURCE'))
libs.append(('f2c_libs', 'c', prep_f2c))
if env['BUILD_BLAS_LAPACK']:
libs.append(('f2c_blas', ['c'], prep_f2c))
libs.append(('f2c_lapack', ['c'], prep_f2c))
else:
libs.append(('math', ['cpp','c','f'], prep_fortran))
if env['BUILD_BLAS_LAPACK']:
libs.append(('blas', ['f'], prep_default))
libs.append(('lapack', ['f'], prep_default))
if env['use_sundials'] == 'n':
libs.append(('cvode/source', ['c'], prep_sundials))
for subdir, extensions, prepFunction in libs:
localenv = prepFunction(env)
# objects = localenv.SharedObject(mglob(localenv, subdir, *extensions))
# libraryTargets.extend(objects)
libName = 'ct' + subdir
if libName == 'ctf2c_blas':
libName = 'ctblas'
if libName == 'ctf2c_lapack':
libName = 'ctlapack'
if libName == 'ctf2c_math' :
libName = 'ctmath'
if libName == 'ctcvode/source' :
libName = 'cvode'
if libName == 'ctlibexecstream' :
libName = 'execstream'
if libName == 'ctf2c_libs':
libName = 'ctf2c'
if localenv['renamed_shared_libraries'] :
sharedLibName = libName + '_shared'
else:
sharedLibName = libName
#
# Build the static library
#
slTargets = []
objects = localenv.SharedObject(mglob(localenv, subdir, *extensions))
slTargets.extend(objects)
# ttarget = pjoin('..', 'lib', libName)
ss = pjoin('..', 'lib', libName)
lib = build(localenv.StaticLibrary(ss, slTargets, SPAWN=getSpawn(localenv)))
#lib = build(localenv.StaticLibrary('../lib/cantera', libraryTargets,
# SPAWN=getSpawn(localenv)))
install('$inst_libdir', lib)
#
# Build the shared library
#
liby = build(localenv.SharedLibrary(target = pjoin('..', 'lib', sharedLibName), source = mglob(localenv, subdir, *extensions)))
#liby = build(localenv.SharedLibrary(target = pjoin('..', 'lib', sharedLibName), source = mglob(localenv, subdir, *extensions),
# SPAWN=getSpawn(localenv)))
install('$inst_libdir', liby)
localenv = env.Clone()
localenv.Append(CPPPATH=[Dir('#ext/gtest'),
Dir('#ext/gtest/include')],
CPPDEFINES={'GTEST_HAS_PTHREAD': 0})
build(localenv.Library(pjoin('../lib', 'gtest'),
source=['gtest/src/gtest-all.cc']))