Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F67841003
SConstruct
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Mon, Jun 24, 16:03
Size
4 KB
Mime Type
text/x-python
Expires
Wed, Jun 26, 16:03 (2 d)
Engine
blob
Format
Raw Data
Handle
18418631
Attached To
rTAMAAS tamaas
SConstruct
View Options
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
Log In to Comment