Update to current master (pre-3.0), and change remote repository to reflect name change from cppformat to fmt. Needed to be updated now because one of the submodules referenced in the 1.1.0 release no longer exists due to the change in the Github organization name from cppformat to fmtlib.
118 lines
4.2 KiB
Python
118 lines
4.2 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_fortran(env):
|
|
localenv = prep_default(env)
|
|
localenv.Prepend(CPPPATH='#include/cantera/base') # for config.h
|
|
return localenv
|
|
|
|
|
|
def prep_f2c(env):
|
|
localenv = prep_default(env)
|
|
|
|
localenv.Prepend(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'])
|
|
if env['VERBOSE']:
|
|
print "INFO 2: prep_f2c: adding MSDOS to CPPDEFINES"
|
|
print "INFO 2: CPPDEFINES ", localenv['CPPDEFINES']
|
|
|
|
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)]
|
|
|
|
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')
|
|
|
|
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))
|
|
|
|
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 not env['BUILD_BLAS_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
|
|
for subdir in ('sundials', 'nvec_ser', 'cvodes', 'ida'):
|
|
libraryTargets.extend(localenv.SharedObject(
|
|
[f for f in mglob(localenv, 'sundials/src/'+subdir, 'c')
|
|
if '_klu' not in f.name and '_superlumt' not in f.name]))
|
|
|
|
# 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']))
|