diff --git a/Sconstruct b/Sconstruct index eb5aa0c..de700f4 100644 --- a/Sconstruct +++ b/Sconstruct @@ -1,79 +1,81 @@ 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() vars = Variables('build-setup.conf') vars.Add('build_type', 'Could be RELEASE or DEBUG', 'release') vars.Add('prefix', 'Prefix where to install', '/usr/local') vars.Add('verbose', 'Activate verbosity', False) vars.Update(main_env) build_type = main_env['build_type'].lower() build_dir = 'build-' + main_env['build_type'].lower() 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) 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['include_dirs'] = ['src','python'] -main_env['CXXFLAGS'] = ['-std=c++11', '-Wall', '-fopenmp'] -if build_type == 'debug': main_env['CXXFLAGS'] += ['-g'] -else : main_env['CXXFLAGS'] += ['-O3'] +main_env.AppendUnique(CPPPATH=[Dir('#/src'),Dir('#/python')]) +main_env.AppendUnique(CXXFLAGS=['-std=c++11', '-Wall', '-fopenmp']) + +if build_type == 'debug': main_env.AppendUnique(CXXFLAGS='-g') +else : main_env.AppendUnique(CXXFLAGS='-O3') main_env['LIBPATH'] = [os.path.abspath(os.path.join(build_dir,'src'))] main_env['RPATH'] = "$LIBPATH" +main_env.AppendUnique(SHLINKFLAGS='-fopenmp') # 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:${HOME}/repositories/tamaas/build-release/python/ """) env_file.close() except: - pass \ No newline at end of file + pass diff --git a/python/SConscript b/python/SConscript index 729d837..62b41a6 100644 --- a/python/SConscript +++ b/python/SConscript @@ -1,18 +1,17 @@ Import('main_env') import distutils.sysconfig env_swig = main_env.Clone( tools=['swig'], - CPPPATH=[distutils.sysconfig.get_python_inc()], SWIG = 'swig3.0', SHLIBPREFIX = '', ) -include_flags = ["-I{0}".format(i) for i in main_env['include_dirs']] +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['CXXFLAGS'] += include_flags env_swig.SharedLibrary( target = '_tamaas.so', source = ['tamaas.i' ], LIBS= ['Tamaas'] ) diff --git a/site_scons/site_init.py b/site_scons/site_init.py index 485eb0c..4c8e482 100644 --- a/site_scons/site_init.py +++ b/site_scons/site_init.py @@ -1,45 +1,45 @@ def fftw(env): """A Tool to search for fftw headers and libraries""" if env.GetOption('clean'): return - if 'FFTW_VERSION' not in env: env['FFTW_VERSION'] = "3" - env['FFTW_VERSION'] = str(env['FFTW_VERSION']) + env.SetDefault(FFTW_VERSION='3') + env.SetDefault(FFTW_LIBRARY_WISH=[]) + + print("FFTW_VERSION={0}".format(env['FFTW_VERSION'])) if 'FFTW_INCLUDE_DIR' in env: - env['CXXFLAGS'].append('-I{0}'.format(env['FFTW_INCLUDE_DIR'])) - env['CFLAGS'].append('-I{0}'.format(env['FFTW_INCLUDE_DIR'])) + env.AppendUnique(CPPPATH=env['FFTW_INCLUDE_DIR']) - if 'FFTW_LIBRARY_WISH' not in env: env['FFTW_LIBRARY_WISH'] = ['main'] - if 'main' not in env['FFTW_LIBRARY_WISH']: - env['FFTW_LIBRARY_WISH'] = env['FFTW_LIBRARY_WISH'] + ['main'] - if 'FFTW_LIBRARY_DIR' in env: - if 'LIBPATH' not in env: env['LIBPATH'] = [] - env['LIBPATH'] += [env['FFTW_LIBRARY_DIR']] - + env.AppendUnique(LIBPATH=env['FFTW_LIBRARY_DIR']) + version = env['FFTW_VERSION'] if version == "2": lib_names = {'main':'fftw'} inc_names = ['fftw.h'] else: lib_names = {'main':'fftw3','thread':'fftw3_threads','omp':'fftw3_omp'} inc_names = ['fftw3.h'] try: libs = [lib_names[i] for i in env['FFTW_LIBRARY_WISH']] except: - print 'Incompatible wishlist {0} from version {1}'.format(env['FFTW_WISH_LIST'], - env['FFTW_VERSION']) - Exit(1) + raise SCons.Errors.StopError( + 'Incompatible wishlist {0} from version {1}'.format( + env['FFTW_LIBRARY_WISH'], env['FFTW_VERSION'])) + + env.AppendUnique(LIBS=libs) + if version == "2": + env.Append(LIBS='m') + conf = Configure(env) + if not conf.CheckLibWithHeader(libs, inc_names, 'c'): + raise SCons.Errors.StopError( + 'Failed to find libraries {0} or ' + 'headers {1}.'.format(str(lib_names), str(inc_names))) - for l in libs: - conf = Configure(env) - if not conf.CheckLibWithHeader(l,inc_names,'c'): - print 'Did not find {0}, exiting!'.format(l) - Exit(1) - env = conf.Finish() - env['FFTW_LIBRARIES'] = lib_names + env = conf.Finish() + diff --git a/src/SConscript b/src/SConscript index 4df970f..2ddb14f 100644 --- a/src/SConscript +++ b/src/SConscript @@ -1,60 +1,61 @@ Import('main_env') import distutils.sysconfig env = main_env.Clone( tools=[fftw], FFTW_INCLUDE_DIR = '/home/anciaux/src/fftw-3.3.4/api', FFTW_LIBRARY_DIR = '/home/anciaux/src/fftw-3.3.4/.libs', FFTW_LIBRARY_WISH = ['main','thread', 'omp'] ) # 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 """.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_fft_base.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_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)