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).
80 lines
2.9 KiB
Python
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'])
|