diff --git a/Sconstruct b/SConstruct similarity index 61% rename from Sconstruct rename to SConstruct index 6508324..bdd3a42 100644 --- a/Sconstruct +++ b/SConstruct @@ -1,94 +1,107 @@ import os,sys path = '/usr/lib/scons/' sys.path.append(path) #from SCons import * #from SCons.Environment import * #from SCons.Variables import * #from SCons.Util import * #script_dir = GetOption('file') #if script_dir == []: # script_dir = '.' #else: # script_dir = script_dir[0] colors = {} colors['cyan'] = '' colors['purple'] = '' colors['blue'] = '' colors['green'] = '' colors['yellow'] = '' colors['red'] = '' colors['end'] = '' #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' -main_env = Environment(CC = 'g++', ENV = os.environ) + +main_env = Environment(CXX= 'g++', ENV = os.environ) vars = Variables('build-setup.conf') -vars.Add('build_type', 'Could be RELEASE or DEBUG', 'release') +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('timer', 'Activate the timer possibilities', False) -vars.Add('verbose', 'Activate verbosity', False) +vars.Add(BoolVariable('timer', 'Activate the timer possibilities', False)) +vars.Add(BoolVariable('verbose', 'Activate verbosity', False)) vars.Update(main_env) -build_type = main_env['build_type'].lower() -build_dir = 'build-' + main_env['build_type'].lower() +Help(vars.GenerateHelpText(main_env)) + +build_type = main_env['build_type'] +build_dir = 'build-' + main_env['build_type'] print "Building in ", build_dir -if type(main_env['verbose']) is not bool: - main_env['verbose'] = (main_env['verbose'].lower() == 'true' or main_env['verbose'] == 1) timer_flag = main_env['timer'] verbose = main_env['verbose'] 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'])) -main_env['build_dir'] = build_dir -main_env.AppendUnique(CPPPATH=[Dir('#/src'),Dir('#/python')]) -main_env.AppendUnique(CXXFLAGS=['-std=c++11', '-Wall', '-fopenmp']) +main_env.AppendUnique(CPPPATH=['#/src', '#/python']) +main_env.AppendUnique(LIBS='gomp') + +# Flags and options +main_env.AppendUnique(CXXFLAGS=['-std=c++11', + '-Wall', + '-fopenmp']) +main_env.AppendUnique(SHLINKFLAGS=['-fopenmp']) + if timer_flag: - main_env.AppendUnique(CXXFLAGS=['-DUSING_TIMER']) + main_env.AppendUnique(CPPDEFINES=['USING_TIMER']) + +cxxflags_dict = { + "debug":Split("-g -O0"), + "profiling":Split("-g -pg -O2"), + "release":Split("-O3") +} + +shlinkflags_dict = { + "debug":[], + "profiling":['-pg'], + "release":[] +} -# Build type options -if build_type == 'debug': - main_env.AppendUnique(CXXFLAGS=['-g']) -elif build_type == 'profiling': - main_env.AppendUnique(CXXFLAGS=['-O2', '-g', '-pg']) - main_env.AppendUnique(SHLINKFLAGS=['-pg']) -else: - main_env.AppendUnique(CXXFLAGS=['-O3', '-fPIC']) +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'))] -if 'LD_LIBRARY_PATH' in os.environ: - main_env['LIBPATH'] += os.environ['LD_LIBRARY_PATH'].split(":") main_env['RPATH'] = "$LIBPATH" -main_env.AppendUnique(SHLINKFLAGS=['-fopenmp', '-lgomp', '-fPIC']) # save new values vars.Save('build-setup.conf', main_env) Export('main_env') SConscript('src/SConscript',variant_dir=os.path.join(build_dir,'src'),duplicate=False) SConscript('python/SConscript',variant_dir=os.path.join(build_dir,'python'),duplicate=False) # saving the env file try: env_file = open(os.path.join(build_dir,'tamaas_environement.sh'),'w') env_file.write(""" export PYTHONPATH=$PYTHONPATH:{0}/python +export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:{0}/src """.format(os.path.abspath(build_dir))) env_file.close() except: pass diff --git a/python/SConscript b/python/SConscript index 62b41a6..771e549 100644 --- a/python/SConscript +++ b/python/SConscript @@ -1,17 +1,22 @@ Import('main_env') import distutils.sysconfig +from distutils.version import StrictVersion env_swig = main_env.Clone( - tools=['swig'], - SWIG = 'swig3.0', + tools = ['swig'], SHLIBPREFIX = '', ) + +if StrictVersion(env_swig['SWIGVERSION']) < StrictVersion("3.0"): + print "Swig version {} is not supported by tamaas".format(env_swig['SWIGVERSION']) + Exit(1) + env_swig.AppendUnique(CPPPATH=[distutils.sysconfig.get_python_inc()]) -include_flags = ["-I{0}".format(i) for i in main_env['CPPPATH'] ] -env_swig['SWIGFLAGS'] = ['-python','-c++'] + include_flags +env_swig.AppendUnique(SWIGPATH=['$CPPPATH']) +env_swig.AppendUnique(SWIGFLAGS=['-python', '-c++']) env_swig.SharedLibrary( - target = '_tamaas.so', - source = ['tamaas.i' ], - LIBS= ['Tamaas'] + target = '_tamaas.so', + source = ['tamaas.i'], + LIBS = ['Tamaas'] ) diff --git a/src/SConscript b/src/SConscript index 83d238f..55ffd9c 100644 --- a/src/SConscript +++ b/src/SConscript @@ -1,63 +1,67 @@ Import('main_env') + import distutils.sysconfig +import os env = main_env.Clone( - tools=[fftw], - FFTW_LIBRARY_WISH = ['main', 'omp'] + tools = [fftw], + FFTW_LIBRARY_WISH = ['main', 'omp'], + FFTW_INCLUDE_DIR = "$FFTW_INCLUDE", + FFTW_LIBRARY_DIR = "$FFTW_LIBRARY" ) # Lib roughcontact generator_list = """ surface_generator.cpp surface_generator_voss.cpp surface_generator_crenel.cpp surface_generator_ellipsoid.cpp surface_generator_filter.cpp surface_generator_filter_bessel.cpp surface_generator_filter_fft.cpp """.split() #env.SharedLibrary('Generator',generator_list) # Lib SURFACE surface_list = """ map_2d.cpp map_2d_square.cpp surface.cpp surface_timer.cpp +tamaas.cpp """.split() #env.SharedLibrary('Surface',surface_list) # Lib PERCOLATION percolation_list = """ cluster_grow.cpp contact_area.cpp contact_cluster.cpp contact_cluster_collection.cpp """.split() #env.SharedLibrary('Percolation',percolation_list) # BEM PERCOLATION bem_list = """ bem_kato.cpp bem_polonski.cpp bem_gigi.cpp bem_fft_base.cpp functional.cpp elastic_energy_functional.cpp adhesion_functional.cpp """.split() #env.SharedLibrary('BEM',bem_list) rough_contact_list = generator_list + surface_list + percolation_list + bem_list -import os current_files = set(os.listdir(Dir('.').srcnode().abspath)) -unexpected_files = list(current_files - set(rough_contact_list)) +unexpected_files = list(current_files - set(rough_contact_list + ['SConscript'])) unexpected_headers = [ f for f in unexpected_files if os.path.splitext(f)[1] == '.hh' ] unexpected_files = [ f for f in unexpected_files if not os.path.splitext(f)[1] == '.hh' ] print unexpected_files print [str(i) for i in env['CPPPATH'] ] #print unexpected_headers env.SharedLibrary('Tamaas',rough_contact_list)