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.
152 lines
4.9 KiB
Python
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']))
|
|
|
|
|
|
|