The isysroot and mmacosx-min-version flags are needed to build the Cantera library, but not to actually use it on macOS. They should be removed because users don't need these and should use the SDK installed with XCode.
94 lines
4.5 KiB
Python
94 lines
4.5 KiB
Python
from buildutils import *
|
|
|
|
Import('env', 'build', 'install', 'buildSample')
|
|
|
|
# (subdir, program name, [source extensions], openmp_flag)
|
|
samples = [
|
|
('combustor', 'combustor', ['cpp'], False),
|
|
('flamespeed', 'flamespeed', ['cpp'], False),
|
|
('kinetics1', 'kinetics1', ['cpp'], False),
|
|
('NASA_coeffs', 'NASA_coeffs', ['cpp'], False),
|
|
('rankine', 'rankine', ['cpp'], False),
|
|
('LiC6_electrode', 'LiC6_electrode', ['cpp'], False),
|
|
('openmp_ignition', 'openmp_ignition', ['cpp'], True),
|
|
('bvp', 'blasius', ['cpp'], False)
|
|
]
|
|
|
|
for subdir, name, extensions, openmp in samples:
|
|
localenv = env.Clone()
|
|
if openmp:
|
|
localenv.Append(CXXFLAGS=env['openmp_flag'], LINKFLAGS=env['openmp_flag'])
|
|
localenv['cmake_extra'] = """
|
|
find_package(OpenMP REQUIRED)
|
|
set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS})
|
|
set(CMAKE_EXE_LINKER_FLAGS ${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS})
|
|
"""
|
|
elif env["OS"] == "Darwin":
|
|
localenv["cmake_extra"] = "find_library(ACCELERATE_FRAMEWORK Accelerate)"
|
|
else:
|
|
localenv['cmake_extra'] = ''
|
|
|
|
buildSample(localenv.Program, pjoin(subdir, name),
|
|
mglob(localenv, subdir, *extensions),
|
|
CPPPATH=['#include'],
|
|
LIBS=env['cantera_libs'])
|
|
|
|
# Note: These Makefiles and SConstruct files are automatically installed
|
|
# by the "RecursiveInstall" that grabs everything in the cxx directory.
|
|
|
|
incdirs = (localenv['ct_incroot'], localenv['sundials_include'],
|
|
localenv['boost_inc_dir']) + tuple(localenv['extra_inc_dirs'])
|
|
libdirs = ((localenv['ct_libdir'], localenv['sundials_libdir'],
|
|
localenv['blas_lapack_dir']) + tuple(localenv['extra_lib_dirs']))
|
|
# Remove sysroot and macOS min version flags in templated output files
|
|
# Users should compile against their local SDKs, which should be backwards
|
|
# compatible with the SDK used for building. This only applies to the
|
|
# conda package for now.
|
|
if env['OS'] == 'Darwin' and os.environ.get('CONDA_BUILD', False):
|
|
ccFlags = []
|
|
for flag in localenv['CCFLAGS'] + localenv['CXXFLAGS']:
|
|
if not flag.startswith(('-isysroot', '-mmacosx', '/App')):
|
|
ccFlags.append(flag)
|
|
else:
|
|
ccFlags = localenv['CCFLAGS'] + localenv['CXXFLAGS']
|
|
localenv['tmpl_compiler_flags'] = repr(ccFlags)
|
|
localenv['tmpl_cantera_frameworks'] = repr(localenv['FRAMEWORKS'])
|
|
localenv['tmpl_cantera_incdirs'] = repr([x for x in incdirs if x])
|
|
localenv['cmake_cantera_incdirs'] = ' '.join(quoted(x) for x in incdirs if x)
|
|
localenv['tmpl_cantera_libs'] = repr(localenv['cantera_libs'])
|
|
localenv['cmake_cantera_libs'] = ' '.join(localenv['cantera_libs'])
|
|
if env['OS'] == 'Darwin':
|
|
localenv['cmake_cantera_libs'] += ' ${ACCELERATE_FRAMEWORK}'
|
|
localenv['cmake_cantera_incdirs'] += ' "/usr/local/include"'
|
|
localenv['tmpl_cantera_libdirs'] = repr([x for x in libdirs if x])
|
|
localenv['cmake_cantera_libdirs'] = ' '.join(quoted(x) for x in libdirs if x)
|
|
localenv['tmpl_cantera_linkflags'] = repr(localenv['LINKFLAGS'])
|
|
localenv['tmpl_progname'] = name
|
|
localenv['tmpl_sourcename'] = name + '.cpp'
|
|
env_args = []
|
|
|
|
## Generate SConstruct files to be installed
|
|
if localenv['TARGET_ARCH'] is not None:
|
|
env_args.append('TARGET_ARCH={0!r}'.format(localenv['TARGET_ARCH']))
|
|
if 'MSVC_VERSION' in localenv:
|
|
env_args.append('MSVC_VERSION={0!r}'.format(localenv['MSVC_VERSION']))
|
|
localenv['tmpl_env_args'] = ', '.join(env_args)
|
|
|
|
sconstruct = localenv.SubstFile(pjoin(subdir, 'SConstruct'), 'SConstruct.in')
|
|
install(pjoin('$inst_sampledir', 'cxx', subdir), sconstruct)
|
|
|
|
## Generate CMakeList.txt files to be installed
|
|
cmakelists = localenv.SubstFile(pjoin(subdir, 'CMakeLists.txt'), 'CMakeLists.txt.in')
|
|
install(pjoin('$inst_sampledir', 'cxx', subdir), cmakelists)
|
|
|
|
## Generate Makefiles to be installed
|
|
mak_path = pjoin(localenv['ct_incroot'], 'cantera', 'Cantera.mak')
|
|
localenv['mak_compiler_flags'] = ' '.join(ccFlags)
|
|
if ' ' in mak_path:
|
|
# There is no reasonable way to handle spaces in Makefile 'include'
|
|
# statement, so we fall back to using the relative path instead
|
|
mak_path = os.path.relpath(mak_path, pjoin(localenv['ct_sampledir'], 'cxx', subdir))
|
|
localenv['make_Cantera_dot_mak'] = mak_path
|
|
|
|
makefile = build(localenv.SubstFile(pjoin(subdir, 'Makefile'), 'Makefile.in'))
|
|
install(pjoin('$inst_sampledir', 'cxx', subdir), makefile)
|