opts.Add('EXTRA_DEFINES', 'Additional preprocessor defines', '')
opts.Add('EXTRA_LIBS', 'Additional libraries to link against', '')
opts.Add(SCons.Options.BoolOption('final','Enable optimization',0))
+ opts.Add(SCons.Options.BoolOption('debug','Enable debug symbols in binaries',0))
+ opts.Add(SCons.Options.BoolOption('profile','Enable profiling',0))
opts.Add('PREFIX', 'Installation prefix', '/usr/local')
opts.Add('LIBINSTALLDIR', 'Library install dir', '$PREFIX/lib')
opts.Add('BININSTALLDIR', 'Executable install dir', '$PREFIX/bin')
env['BOOSTREGEXLIB'] = 'boost_regex' + env['BOOST_VARIANT']
env['BOOSTFSLIB'] = 'boost_filesystem' + env['BOOST_VARIANT']
env['BOOSTIOSTREAMSLIB'] = 'boost_iostreams' + env['BOOST_VARIANT']
+ env['BOOSTSIGNALSLIB'] = 'boost_signals' + env['BOOST_VARIANT']
if env['BOOST_PREFIX']:
env['BOOST_LIBDIR'] = os.path.join(env['BOOST_PREFIX'], 'lib')
if env['final']:
env.Append(CXXFLAGS = [ '-O3' ])
+ if env['profile']:
+ env.Append(CXXFLAGS = [ '-g', '-pg' ],
+ LINKFLAGS = [ '-g', '-pg' ])
else:
# The boost-regex library is not compiled with _GLIBCXX_DEBUG so this fails:
# CPPDEFINES = [ '_GLIBCXX_DEBUG' ],
env.Append(CXXFLAGS = [ '-O0', '-g' ],
- CPPDEFINES = { 'SENF_DEBUG': ''},
- LINKFLAGS = [ '-g', '-rdynamic' ])
+ CPPDEFINES = { 'SENF_DEBUG': ''})
+ if env['profile']:
+ env.Append(CXXFLAGS = [ '-pg' ],
+ LINKFLAGS = [ '-pg' ])
+ if env['debug'] or env['profile']:
+ env.Append(LINKFLAGS = [ '-g', '-rdynamic' ])
+ else:
+ env.Append(LINKFLAGS = [ '-Wl,-S', '-rdynamic' ])
env.Append(CPPDEFINES = [ '$EXTRA_DEFINES' ],
LIBS = [ '$EXTRA_LIBS' ],
# \internal
def LibPath(lib): return '${LOCALLIBDIR}/${LIBPREFIX}%s${LIBADDSUFFIX}${LIBSUFFIX}' % lib
+## \brief Add explicit test
+#
+# This target helper will add an explicit test. This is like a unit test but is
+# built directly against the completed library
+#
+# \ingroup target
def Test(env, sources, LIBS = [], OBJECTS = []):
test = [ env.BoostUnitTests(
target = 'test',
objects = [],
test_sources = sources,
- LIBS = [ x + '$LIBADDSUFFIX' for x in LIBS ],
+ LIBS = [ '$LIBSENF' ],
OBJECTS = OBJECTS,
DEPENDS = [ env.File(LibPath(x)) for x in LIBS ]) ]
compileTestSources = [ src for src in sources
target = 'test',
objects = objects,
test_sources = testSources,
- LIBS = [ x + '$LIBADDSUFFIX' for x in LIBS ],
+ LIBS = [ '$LIBSENF' ],
OBJECTS = OBJECTS,
DEPENDS = [ env.File(LibPath(x)) for x in LIBS ]) ]
compileTestSources = [ src for src in testSources
#\ingroup target
def Lib(env, library, sources, testSources = None, LIBS = [], OBJECTS = [], no_includes = False):
objects = Objects(env,sources,testSources,LIBS=LIBS,OBJECTS=OBJECTS)
- lib = None
if objects:
- lib = env.Library(env.File(LibPath(library)),objects)
- env.Default(lib)
- env.Append(ALLLIBS = library)
- env.Alias('default', lib)
- InstallWithSources(env, lib, '$LIBINSTALLDIR', sources, testSources, no_includes)
- return lib
+ env.Append(ALLOBJECTS = objects)
+ InstallSourceIncludes(env, sources)
+ return objects
## \brief Build Object from multiple sources
def Object(env, target, sources, testSources = None, LIBS = [], OBJECTS = [], no_includes = False):
ob = env.Command(target+"${OBJADDSUFFIX}${OBJSUFFIX}", objects, "ld -r -o $TARGET $SOURCES")
env.Default(ob)
env.Alias('default', ob)
- InstallWithSources(env, ob, '$OBJINSTALLDIR', sources, testSources, no_includes)
+ InstallSourceIncludes(env, sources)
return ob
## \brief Build executable
program = None
if objects:
progEnv = env.Clone()
- progEnv.Prepend(LIBS = [ x + '$LIBADDSUFFIX' for x in LIBS ])
+ progEnv.Prepend(LIBS = [ '$LIBSENF' ])
program = progEnv.ProgramNoScan(target=binary,source=objects+OBJECTS)
env.Default(program)
- env.Depends(program, [ env.File(LibPath(x)) for x in LIBS ])
+ env.Depends(program, [ '$LIBSENF' ])
env.Alias('default', program)
InstallWithSources(env, program, '$BININSTALLDIR', sources, testSources, no_includes)
return program