mirror of
https://github.com/Cantera/cantera.git
synced 2025-02-25 18:55:29 -06:00
109 lines
4.1 KiB
Python
109 lines
4.1 KiB
Python
from buildutils import *
|
|
|
|
Import('env', 'build', 'install', 'libraryTargets')
|
|
|
|
def defaultSetup(env, subdir, extensions):
|
|
env.Append(CCFLAGS=env['pch_flags'])
|
|
return mglob(env, subdir, *extensions)
|
|
|
|
def applicationSetup(env, subdir, extensions):
|
|
# Add #define variables unique to application.cpp
|
|
escaped_datadir = '\\"' + env['ct_datadir'].replace('\\', '\\\\') + '\\"'
|
|
env.Append(CPPDEFINES={'CANTERA_DATA': escaped_datadir})
|
|
return defaultSetup(env, subdir, extensions)
|
|
|
|
def globalSetup(env, subdir, extensions):
|
|
# Add #define variables unique to global.cpp
|
|
env.Append(CPPDEFINES={'GIT_COMMIT': '\\"{0}\\"'.format(env['git_commit'])})
|
|
return defaultSetup(env, subdir, extensions)
|
|
|
|
def baseSetup(env, subdir, extensions):
|
|
# All files in base except for application.cpp
|
|
return [f for f in defaultSetup(env, subdir, extensions)
|
|
if f.name != 'application.cpp' and f.name != 'global.cpp']
|
|
|
|
# (subdir, (file extensions), (extra setup(env)))
|
|
libs = [('base', ['cpp'], baseSetup),
|
|
('base', ['^application.cpp'], applicationSetup),
|
|
('base', ['^global.cpp'], globalSetup),
|
|
('thermo', ['cpp'], defaultSetup),
|
|
('tpx', ['cpp'], defaultSetup),
|
|
('equil', ['cpp','c'], defaultSetup),
|
|
('numerics', ['cpp'], defaultSetup),
|
|
('kinetics', ['cpp'], defaultSetup),
|
|
('transport', ['cpp'], defaultSetup),
|
|
('oneD', ['cpp'], defaultSetup),
|
|
('zeroD', ['cpp'], defaultSetup),
|
|
('clib', ['cpp'], defaultSetup),
|
|
]
|
|
|
|
localenv = env.Clone()
|
|
localenv.Prepend(CPPPATH=[Dir('#include'), Dir('#include/cantera/ext'), Dir('.')])
|
|
localenv.Append(CCFLAGS=env['warning_flags'])
|
|
|
|
if env['CC'] == 'cl' and env['debug']:
|
|
env['use_pch'] = False # PCH doesn't work with per-file PDB
|
|
|
|
if env['use_pch']:
|
|
if env['CC'] == 'cl':
|
|
env.Command('#build/src/pch/system.h', '#src/pch/system.h',
|
|
Copy('$TARGET', '$SOURCE'))
|
|
localenv['PCH'], pchobj = localenv.PCH('pch/system.cpp')
|
|
pch = localenv['PCH']
|
|
libraryTargets.append(pchobj)
|
|
localenv['PCHSTOP'] = 'pch/system.h'
|
|
else:
|
|
localenv['precompiled_header'] = File('pch/system.h')
|
|
pch = localenv.GchSh('#src/pch/system.h.gch',
|
|
localenv['precompiled_header'])
|
|
else:
|
|
removeFile('src/pch/system.h.gch')
|
|
localenv['pch_flags'] = []
|
|
pch = None
|
|
|
|
for subdir, extensions, setup in libs:
|
|
env2 = localenv.Clone()
|
|
source = setup(env2, subdir, extensions)
|
|
objects = env2.SharedObject(source)
|
|
env2.Depends(objects, env2['config_h_target'])
|
|
if pch:
|
|
env2.Requires(objects, pch)
|
|
libraryTargets.extend(objects)
|
|
|
|
|
|
# build the Cantera static library
|
|
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
|
|
|
|
if (localenv['system_sundials'] == 'y'):
|
|
localenv.Append(LIBS=localenv['sundials_libs'],
|
|
LIBPATH=localenv['sundials_libdir'])
|
|
if localenv['blas_lapack_libs']:
|
|
localenv.Append(LIBS=localenv['blas_lapack_libs'],
|
|
LIBPATH=localenv['blas_lapack_dir'])
|
|
|
|
if localenv['system_yamlcpp']:
|
|
localenv.Append(LIBS=['yaml-cpp'])
|
|
|
|
# Build the Cantera shared library
|
|
if localenv['layout'] != 'debian':
|
|
if localenv['renamed_shared_libraries']:
|
|
sharedName = '../lib/cantera_shared'
|
|
else:
|
|
sharedName = '../lib/cantera'
|
|
|
|
if localenv['versioned_shared_library']:
|
|
lib = build(localenv.SharedLibrary(sharedName, libraryTargets,
|
|
SPAWN=getSpawn(localenv),
|
|
SHLIBVERSION=localenv['cantera_pure_version']))
|
|
install(localenv.InstallVersionedLib, '$inst_libdir', lib)
|
|
else:
|
|
lib = build(localenv.SharedLibrary(sharedName, libraryTargets,
|
|
SPAWN=getSpawn(localenv)))
|
|
install('$inst_libdir', lib)
|
|
env['cantera_shlib'] = lib
|
|
localenv.Depends(lib, localenv['config_h_target'])
|