diff --git a/SConstruct b/SConstruct index d9ad04c..6d0796b 100644 --- a/SConstruct +++ b/SConstruct @@ -1,108 +1,124 @@ 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(CXX= 'g++', ENV = os.environ) 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(BoolVariable('timer', 'Activate the timer possibilities', False)) vars.Add(BoolVariable('verbose', 'Activate verbosity', False)) vars.Update(main_env) Help(vars.GenerateHelpText(main_env)) build_type = main_env['build_type'] build_dir = 'build-' + main_env['build_type'] print "Building in ", build_dir 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.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(CPPDEFINES=['USING_TIMER']) cxxflags_dict = { "debug":Split("-g -O0"), "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_INCLUDE' in main_env['ENV']: + fftw_include = main_env['ENV']['FFTW_INCLUDE'] +if 'FFTW_LIBRARY' in main_env['ENV']: + fftw_library = main_env['ENV']['FFTW_LIBRARY'] + +main_env = main_env.Clone( + tools = [fftw], + FFTW_LIBRARY_WISH = ['main', 'omp'], + FFTW_INCLUDE_DIR = fftw_include, + FFTW_LIBRARY_DIR = fftw_library, +) + + # 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) SConscript('tests/SConscript',variant_dir=os.path.join(build_dir,'tests'),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 2029cda..b952d52 100644 --- a/python/SConscript +++ b/python/SConscript @@ -1,28 +1,34 @@ Import('main_env') import distutils.sysconfig from distutils.version import StrictVersion env_swig = main_env.Clone( tools = ['swig'], SWIG = 'swig3.0', SHLIBPREFIX = '', ) +if env_swig['SWIGVERSION'] is None: + print "Could not find swig version" + print env_swig.Dictionary() + print env_swig.Environment + Exit(1) + 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()]) env_swig.AppendUnique(SWIGPATH=['$CPPPATH']) env_swig.AppendUnique(SWIGFLAGS=['-python', '-c++']) verbose = main_env['verbose'] if not verbose: env_swig.AppendUnique(SWIGFLAGS=['-w401','-w362','-w315']) env_swig.SharedLibrary( target = '_tamaas.so', source = ['tamaas.i'], LIBS = ['Tamaas'] ) diff --git a/src/SConscript b/src/SConscript index 1dcf3e9..ae586c3 100644 --- a/src/SConscript +++ b/src/SConscript @@ -1,81 +1,67 @@ Import('main_env') -import distutils.sysconfig import os -fftw_include = "" -fftw_library = "" - -if 'FFTW_INCLUDE' in main_env['ENV']: - fftw_include = main_env['ENV']['FFTW_INCLUDE'] -if 'FFTW_LIBRARY' in main_env['ENV']: - fftw_library = main_env['ENV']['FFTW_LIBRARY'] - -env = main_env.Clone( - tools = [fftw], - FFTW_LIBRARY_WISH = ['main', 'omp'], - FFTW_INCLUDE_DIR = fftw_include, - FFTW_LIBRARY_DIR = fftw_library, -) +env = main_env # 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_gigipol.cpp bem_penalty.cpp bem_uzawa.cpp bem_fft_base.cpp functional.cpp elastic_energy_functional.cpp adhesion_functional.cpp fftransform.cpp fftransform_fftw.cpp fft_plan_manager.cpp """.split() #env.SharedLibrary('BEM',bem_list) rough_contact_list = generator_list + surface_list + percolation_list + bem_list current_files = set(os.listdir(Dir('.').srcnode().abspath)) 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 : {}".format(unexpected_files) #print "Include path : {}".format([str(x) for x in env['CPPPATH']]) #print unexpected_headers env.SharedLibrary('Tamaas',rough_contact_list)