2014-01-30 14:08:11 -08:00
|
|
|
# SConstruct
|
|
|
|
# vim: set ft=python:
|
|
|
|
#
|
2014-01-30 15:42:25 -08:00
|
|
|
# Toplevel Scons build script. This should be mostly complete and generic enough
|
|
|
|
# for most builds.
|
2014-01-30 14:08:11 -08:00
|
|
|
#
|
|
|
|
# Eryn Wells <eryn@erynwells.me>
|
|
|
|
|
2014-01-30 15:09:28 -08:00
|
|
|
import os
|
2014-01-30 20:36:38 -08:00
|
|
|
|
2015-09-22 14:44:30 -07:00
|
|
|
import erw
|
2014-02-27 22:20:29 -08:00
|
|
|
|
2014-07-04 11:09:39 -07:00
|
|
|
|
2015-10-03 10:36:17 -07:00
|
|
|
BUILD_CMDS = get_bool_argument(ARGUMENTS.get('BUILD_CMDS', False))
|
|
|
|
MODE = ARGUMENTS.get('MODE', None)
|
|
|
|
|
2014-07-04 10:55:32 -07:00
|
|
|
BUILD_DIR = Dir('#build')
|
|
|
|
LIB_DIR = Dir('#lib')
|
|
|
|
SRC_DIR = Dir('#src')
|
|
|
|
TEST_DIR = Dir('#test')
|
2014-01-30 15:09:28 -08:00
|
|
|
|
2014-01-31 08:42:41 -08:00
|
|
|
|
2014-01-31 08:27:37 -08:00
|
|
|
modes = {
|
2015-09-22 14:44:30 -07:00
|
|
|
'debug': erw.DebugEnvironment(succinct=not BUILD_CMDS),
|
|
|
|
'beta': erw.BetaEnvironment(succinct=not BUILD_CMDS),
|
|
|
|
'release': erw.ReleaseEnvironment(succinct=not BUILD_CMDS),
|
2014-01-31 08:27:37 -08:00
|
|
|
}
|
|
|
|
|
2015-09-22 14:44:30 -07:00
|
|
|
for mode in (MODE.split(',') if MODE else ['debug']):
|
2014-01-31 08:27:37 -08:00
|
|
|
try:
|
|
|
|
env = modes[mode]
|
|
|
|
except KeyError:
|
2014-02-28 17:39:41 -08:00
|
|
|
print 'Skipping invalid mode: {}'.format(mode)
|
2014-07-04 10:55:32 -07:00
|
|
|
break
|
|
|
|
|
2015-10-03 10:41:15 -07:00
|
|
|
out_dir = BUILD_DIR.Dir(env['NAME'])
|
2014-07-04 10:55:32 -07:00
|
|
|
|
2015-10-03 10:40:07 -07:00
|
|
|
# Allow same directory includes.
|
|
|
|
env.Append(CPPPATH=['.'])
|
|
|
|
|
2014-07-04 10:55:32 -07:00
|
|
|
# Process all lib dirs.
|
2015-10-03 10:43:18 -07:00
|
|
|
env['AVAILABLE_LIBS'] = {}
|
2014-07-04 10:55:32 -07:00
|
|
|
for lib in os.listdir(LIB_DIR.abspath):
|
2015-10-03 10:43:18 -07:00
|
|
|
lib_dir = LIB_DIR.Dir(lib)
|
|
|
|
if not lib_dir.isdir():
|
|
|
|
print 'Skipping {} in lib directory: is not a directory'.format(lib)
|
|
|
|
continue
|
2014-07-04 10:55:32 -07:00
|
|
|
lib_out_dir = out_dir.Dir('lib').Dir(lib)
|
2015-10-03 10:43:18 -07:00
|
|
|
output = do_sconscript(env, LIB_DIR.Dir(lib), lib_out_dir)
|
|
|
|
if not output:
|
|
|
|
print "Lib {} didn't return any object".format(lib)
|
|
|
|
env['AVAILABLE_LIBS'][lib] = output
|
2014-07-04 10:55:32 -07:00
|
|
|
env.Append(LIBPATH=[lib_out_dir])
|
|
|
|
|
|
|
|
# Get source files.
|
|
|
|
src_out_dir = out_dir.Dir('src')
|
2015-09-22 14:44:30 -07:00
|
|
|
do_sconscript(env, SRC_DIR, src_out_dir)
|
2015-10-03 10:37:23 -07:00
|
|
|
env.Append(LIBPATH=[src_out_dir],
|
|
|
|
CPPPATH=[SRC_DIR])
|
2014-07-04 10:55:32 -07:00
|
|
|
|
|
|
|
# Get test binaries.
|
2015-10-03 19:30:44 -07:00
|
|
|
test = do_sconscript(env, TEST_DIR, out_dir.Dir('test'))
|
2015-10-03 19:40:53 -07:00
|
|
|
run_tests = env.Alias('test', [test], '{} --gtest_color=yes'.format(test[0].path))
|
2015-10-03 19:30:44 -07:00
|
|
|
env.AlwaysBuild(run_tests)
|