Cantera no longer requires BLAS / LAPACK (but can use them if available), so it is never necessary to compile any of the external Fortran or f2c-converted code.
77 lines
2.9 KiB
Python
77 lines
2.9 KiB
Python
from buildutils import *
|
|
|
|
Import('env', 'build', 'install', 'libraryTargets')
|
|
localenv = env.Clone()
|
|
|
|
def prep_default(env):
|
|
localenv = env.Clone()
|
|
|
|
# Suppress warnings from external code and auto-generated code
|
|
if 'g++' in localenv['CXX'] or 'clang' in localenv['CXX']:
|
|
localenv.Append(CCFLAGS='-w')
|
|
|
|
return localenv
|
|
|
|
|
|
def prep_gtest(env):
|
|
localenv = prep_default(env)
|
|
localenv.Prepend(CPPPATH=[Dir('#ext/googletest'),
|
|
Dir('#ext/googletest/include')],
|
|
CPPDEFINES={'GTEST_HAS_PTHREAD': 0})
|
|
return localenv
|
|
|
|
def prep_fmt(env):
|
|
localenv = prep_default(env)
|
|
build(localenv.Command("#include/cantera/ext/format.h",
|
|
"#ext/fmt/fmt/format.h",
|
|
Copy('$TARGET', '$SOURCE')))
|
|
return localenv
|
|
|
|
# each element of libs is: (subdir, (file extensions), prepfunction)
|
|
libs = [('libexecstream', ['cpp'], prep_default),
|
|
('fmt/fmt', ['cc'], prep_fmt)]
|
|
|
|
for subdir, extensions, prepFunction in libs:
|
|
localenv = prepFunction(env)
|
|
objects = localenv.SharedObject(mglob(localenv, subdir, *extensions))
|
|
libraryTargets.extend(objects)
|
|
|
|
if env['system_sundials'] == 'n':
|
|
localenv = prep_default(env)
|
|
localenv.Prepend(CPPPATH=Dir('#include/cantera/ext'))
|
|
|
|
# Generate sundials_config.h
|
|
sundials_configh = {}
|
|
if env['OS'] != 'Windows':
|
|
sundials_configh['SUNDIALS_USE_GENERIC_MATH'] = 1
|
|
if env['use_lapack']:
|
|
sundials_configh['SUNDIALS_BLAS_LAPACK'] = 1
|
|
localenv.AlwaysBuild(env.Command('#include/cantera/ext/sundials/sundials_config.h',
|
|
'sundials_config.h.in',
|
|
ConfigBuilder(sundials_configh)))
|
|
|
|
# Copy sundials header files into common include directory
|
|
for subdir in ('sundials', 'nvector', 'cvodes', 'ida'):
|
|
for header in mglob(env, 'sundials/include/'+subdir, 'h'):
|
|
build(localenv.Command('#include/cantera/ext/%s/%s' % (subdir, header.name),
|
|
'#ext/sundials/include/%s/%s' % (subdir, header.name),
|
|
Copy('$TARGET', '$SOURCE')))
|
|
|
|
# Compile Sundials source files
|
|
exclude = ['_klu', '_superlumt']
|
|
if not env['use_lapack']:
|
|
exclude.append('_lapack')
|
|
for subdir in ('sundials', 'nvec_ser', 'cvodes', 'ida'):
|
|
libraryTargets.extend(localenv.SharedObject(
|
|
[f for f in mglob(localenv, 'sundials/src/'+subdir, 'c')
|
|
if not any(pattern in f.name for pattern in exclude)]))
|
|
|
|
if not env['system_eigen']:
|
|
build(localenv.Command('#include/cantera/ext/Eigen', '#ext/eigen/Eigen',
|
|
Copy('$TARGET', '$SOURCE')))
|
|
|
|
# Google Test: Used internally for Cantera unit tests.
|
|
if not env['system_googletest']:
|
|
localenv = prep_gtest(env)
|
|
gtest = build(localenv.Library('../lib/gtest',
|
|
source=['googletest/src/gtest-all.cc']))
|