Page MenuHomec4science

SConstruct
No OneTemporary

File Metadata

Created
Mon, Jun 24, 16:03

SConstruct

from __future__ import print_function
import os, sys
from version import write_info_file
# Compilation colors
colors = {}
colors['cyan'] = '\033[96m'
colors['purple'] = '\033[95m'
colors['blue'] = '\033[94m'
colors['green'] = '\033[92m'
colors['yellow'] = '\033[93m'
colors['red'] = '\033[91m'
colors['end'] = '\033[0m'
# Inherit all environment variables (for CXX detection, etc.)
main_env = Environment(ENV = os.environ)
main_env['COLOR_DICT'] = colors
# Compiler detection
compiler_default = 'g++'
if 'CXX' in os.environ:
compiler_default = os.environ['CXX']
# Build variables
vars = Variables('build-setup.conf')
vars.Add(EnumVariable('build_type', 'Build type', 'release',
allowed_values=('release', 'profiling', 'debug'),
ignorecase=2))
vars.Add('prefix', 'Prefix where to install', '/usr/local')
vars.Add('CXX', 'Compiler', compiler_default)
vars.Add(BoolVariable('timer', 'Activate the timer possibilities', False))
vars.Add(BoolVariable('verbose', 'Activate verbosity', False))
vars.Add(BoolVariable('build_doc', 'Build documentation', False))
vars.Add(BoolVariable('color', 'Color the non-verbose compilation output', False))
vars.Update(main_env)
Help(vars.GenerateHelpText(main_env))
# Save all options, not just those that differ from default
with open('build-setup.conf', 'w') as setup:
for key in vars.keys():
setup.write("{} = '{}'\n".format(key, main_env[key]))
# instead of
#vars.Save('build-setup.conf', main_env)
build_type = main_env['build_type']
build_dir = 'build-' + main_env['build_type']
print("Building in " + build_dir)
verbose = main_env['verbose']
# Remove colors if not set
if not main_env['color']:
for key in colors:
colors[key] = ''
if not verbose:
main_env['SHCXXCOMSTR'] = unicode('{0}[Compiling] {1}$SOURCE{2}'.format(colors['green'],
colors['blue'],
colors['end']))
main_env['SHLINKCOMSTR'] = unicode('{0}[Linking] {1}$TARGET{2}'.format(colors['purple'],
colors['blue'],
colors['end']))
main_env['SWIGCOMSTR'] = unicode('{0}[Swig] {1}$SOURCE{2}'.format(colors['yellow'],
colors['blue'],
colors['end']))
# Include paths
main_env.AppendUnique(CPPPATH=['#/src',
'#/src/core',
'#/src/surface',
'#/src/bem',
'#/src/python',
'#/python'])
# Treating Intel compiler for OpenMP
if main_env['CXX'] != 'icpc':
omp_libs = ['gomp']
omp_flag = '-fopenmp'
else:
omp_libs = ['']
omp_flag = '-qopenmp'
main_env.AppendUnique(LIBS=omp_libs)
main_env.AppendUnique(LINKFLAGS=[omp_flag])
# Flags and options
main_env.AppendUnique(CXXFLAGS=['-std=c++11',
'-Wall',
omp_flag])
# Adding compile flags defined in evironment
if 'CXXFLAGS' in os.environ:
main_env.AppendUnique(CXXFLAGS = Split(os.environ['CXXFLAGS']))
if main_env['timer']:
main_env.AppendUnique(CPPDEFINES=['USING_TIMER'])
cxxflags_dict = {
"debug":Split("-g -O0 -DTAMAAS_DEBUG"),
"profiling":Split("-g -pg -O2"),
"release":Split("-O3")
}
shlinkflags_dict = {
"debug":[],
"profiling":['-pg'],
"release":[]
}
main_env.AppendUnique(CXXFLAGS=cxxflags_dict[build_type])
main_env.AppendUnique(SHLINKFLAGS=shlinkflags_dict[build_type])
main_env['LIBPATH'] = [os.path.abspath(os.path.join(build_dir,'src'))]
main_env['RPATH'] = "$LIBPATH"
fftw_include = ""
fftw_library = ""
# If FFTW is provided by module system (on clusters)
if 'FFTW_ROOT' in main_env['ENV']:
fftw_include = os.path.join(main_env['ENV']['FFTW_ROOT'], 'include')
fftw_library = os.path.join(main_env['ENV']['FFTW_ROOT'], 'lib')
main_env = main_env.Clone(
tools = [fftw],
FFTW_LIBRARY_WISH = ['main', 'omp'],
FFTW_INCLUDE_DIR = fftw_include,
FFTW_LIBRARY_DIR = fftw_library,
)
# Writing information file
write_info_file("src/tamaas_info.cpp")
Export('main_env')
# Compiling sources
SConscript('src/SConscript',variant_dir=os.path.join(build_dir,'src'),duplicate=False)
# Building python wrapper
SConscript('python/SConscript',variant_dir=os.path.join(build_dir,'python'),duplicate=False)
# Copying tests
SConscript('tests/SConscript',variant_dir=os.path.join(build_dir,'tests'),duplicate=False)
# Building documentation
if main_env['build_doc']:
SConscript('doc/SConscript', variant_dir=os.path.join(build_dir, 'doc'), duplicate=False)
# Saving the env file
env_content = """export PYTHONPATH=$PYTHONPATH:{0}/python
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:{0}/src"""
with open(os.path.join(build_dir, 'tamaas_environement.sh'), 'w') as env_file:
env_file.write(env_content.format(os.path.abspath(build_dir)))

Event Timeline