cantera/src/SConscript
Ray Speth 04fb86b1ea Added a new SCons configuration variable 'warning_flags'
This allows use of more extensive warning settings for the code that's actually
part of Cantera without generating excessive warnings on code automatically
generated code (e.g. f2c) or code that isn't part of Cantera proper (e.g. gtest,
libexecstream).
2012-11-14 21:07:03 +00:00

80 lines
2.9 KiB
Python

from buildutils import *
Import('env', 'build', 'install', 'libraryTargets')
def defaultSetup(env, subdir, extensions):
return mglob(env, subdir, *extensions)
def baseSetup(env, subdir, extensions):
escaped_datadir = '\\"' + env['ct_datadir'].replace('\\', '\\\\') + '\\"'
env.Append(CPPDEFINES={'CANTERA_DATA': escaped_datadir})
return defaultSetup(env, subdir, extensions)
def equilSetup(env, subdir, extensions):
env.Append(CPPPATH=['#ext/f2c_libs'])
return defaultSetup(env, subdir, extensions)
def numericsSetup(env, subdir, extensions):
if env['use_sundials'] == 'y':
remove = 'CVodeInt.cpp'
else:
remove = 'CVodesIntegrator.cpp'
return [s for s in mglob(env, subdir, *extensions)
if s.name != remove]
# (subdir, (file extensions), (extra setup(env)))
libs = [('base', ['cpp'], baseSetup),
('thermo', ['cpp'], defaultSetup),
('tpx', ['cpp'], defaultSetup),
('equil', ['cpp','c'], equilSetup),
('numerics', ['cpp'], numericsSetup),
('kinetics', ['cpp'], defaultSetup),
('transport', ['cpp'], defaultSetup),
('spectra', ['cpp'], defaultSetup),
('oneD', ['cpp'], defaultSetup),
('zeroD', ['cpp'], defaultSetup),
('clib', ['cpp'], defaultSetup),
]
for subdir, extensions, setup in libs:
localenv = env.Clone()
localenv.Prepend(CPPPATH=Dir('#include'))
localenv.Prepend(CPPPATH=Dir('#src')) # todo: remove when not needed
localenv.Append(CCFLAGS=env['warning_flags'])
source = setup(localenv, subdir, extensions)
objects = localenv.SharedObject(source)
localenv.Depends(objects, localenv['config_h_target'])
libraryTargets.extend(objects)
# build the Cantera static library
localenv = env.Clone()
lib = build(localenv.StaticLibrary('../lib/cantera', libraryTargets,
SPAWN=getSpawn(localenv)))
localenv.Depends(lib, localenv['config_h_target'])
install('$inst_libdir', lib)
env['cantera_staticlib'] = lib
# Windows and OS X require shared libraries at link time
if localenv['OS'] in ('Darwin', 'Windows'):
localenv.Append(LIBS=localenv['FORTRANSYSLIBS'])
if (localenv['use_sundials'] == 'y'):
localenv.Append(LIBS=localenv['sundials_libs'],
LIBPATH=localenv['sundials_libdir'])
if localenv['toolchain'] == 'mingw':
localenv.Append(LINKFLAGS=['-static-libgcc', '-static-libstdc++'])
# Build the Cantera shared library using the correct name
if localenv['layout'] != 'debian':
# Define the name according to the environmental variable
if localenv['renamed_shared_libraries'] == True:
sharedName = '../lib/cantera_shared'
else:
sharedName = '../lib/cantera'
lib = build(localenv.SharedLibrary(sharedName, libraryTargets,
SPAWN=getSpawn(localenv)))
install('$inst_libdir', lib)
env['cantera_shlib'] = lib
localenv.Depends(lib, localenv['config_h_target'])