mirror of
https://github.com/Cantera/cantera.git
synced 2025-02-25 18:55:29 -06:00
168 lines
5.3 KiB
Python
168 lines
5.3 KiB
Python
from buildutils import *
|
|
|
|
Import('env', 'build', 'install', 'libraryTargets')
|
|
localenv = env.Clone()
|
|
|
|
#
|
|
# prep function seem to return the environment
|
|
#
|
|
|
|
def prep_default(env):
|
|
return env.Clone()
|
|
|
|
def prep_fortran(env):
|
|
localenv = env.Clone()
|
|
localenv.Prepend(CPPPATH='#include/cantera/base') # for config.h
|
|
return localenv
|
|
|
|
def prep_f2c(env):
|
|
localenv = env.Clone()
|
|
|
|
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"
|
|
|
|
if env['VERBOSE'] :
|
|
localenv.Append(CPPDEFINES=['added'])
|
|
print "INFO 2: CPPDEFINES ", localenv['CPPDEFINES']
|
|
#print "localenv", localenv.Dump()
|
|
#exit(0)
|
|
|
|
|
|
# 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.Prepend(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.Prepend(CPPPATH=[Dir('#ext/gtest'),
|
|
Dir('#ext/gtest/include')],
|
|
CPPDEFINES={'GTEST_HAS_PTHREAD': 0})
|
|
return localenv
|
|
|
|
# libs is a list of length 3
|
|
# 0 subdir for execution
|
|
# 1 file extension
|
|
# 2 function pointer
|
|
# (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:
|
|
|
|
if env['VERBOSE']:
|
|
print "INFO 2: Prep the environment for ", subdir, ' with extensions ', extensions, ' by calling func ', prepFunction.__name__
|
|
|
|
localenv = prepFunction(env)
|
|
|
|
if localenv['single_library']:
|
|
objects = localenv.SharedObject(mglob(localenv, subdir, *extensions))
|
|
libraryTargets.extend(objects)
|
|
else:
|
|
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
|
|
|
|
if env['VERBOSE'] :
|
|
print "INFO 2:" , subdir , ' with ', extensions
|
|
print " libName = ", libName, " sharedLibName = ", sharedLibName
|
|
|
|
objects = localenv.SharedObject(mglob(localenv, subdir, *extensions))
|
|
|
|
# Build the static library
|
|
lib = build(localenv.StaticLibrary(pjoin('..', 'lib', libName), objects))
|
|
install('$inst_libdir', lib)
|
|
|
|
# Build the shared library
|
|
liby = build(localenv.SharedLibrary(pjoin('..', 'lib', sharedLibName), objects))
|
|
install('$inst_libdir', liby)
|
|
|
|
|
|
localenv = env.Clone()
|
|
localenv.Prepend(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']))
|
|
|
|
|
|
|