Redo the _whooollleee_ build system
Following the tutorials on http://www.ostricher.com/tag/scons/, I rebuilt the build system so that SConscript files are *much* easier to write.
This commit is contained in:
parent
10b650c9a4
commit
c56cc557f8
6 changed files with 335 additions and 146 deletions
56
SConstruct
56
SConstruct
|
@ -6,59 +6,15 @@
|
|||
#
|
||||
# Eryn Wells <eryn@erynwells.me>
|
||||
|
||||
import os
|
||||
|
||||
import erw
|
||||
import logging
|
||||
|
||||
setup_logging()
|
||||
|
||||
BUILD_CMDS = get_bool_argument(ARGUMENTS.get('BUILD_CMDS', False))
|
||||
MODE = ARGUMENTS.get('MODE', None)
|
||||
|
||||
BUILD_DIR = Dir('#build')
|
||||
LIB_DIR = Dir('#lib')
|
||||
SRC_DIR = Dir('#src')
|
||||
TEST_DIR = Dir('#test')
|
||||
|
||||
|
||||
modes = {
|
||||
'debug': erw.DebugEnvironment(succinct=not BUILD_CMDS),
|
||||
'beta': erw.BetaEnvironment(succinct=not BUILD_CMDS),
|
||||
'release': erw.ReleaseEnvironment(succinct=not BUILD_CMDS),
|
||||
}
|
||||
|
||||
for mode in (MODE.split(',') if MODE else ['debug']):
|
||||
try:
|
||||
env = modes[mode]
|
||||
except KeyError:
|
||||
print 'Skipping invalid mode: {}'.format(mode)
|
||||
break
|
||||
|
||||
out_dir = BUILD_DIR.Dir(env['NAME'])
|
||||
|
||||
# Allow same directory includes.
|
||||
env.Append(CPPPATH=['.'])
|
||||
|
||||
# Process all lib dirs.
|
||||
env['AVAILABLE_LIBS'] = {}
|
||||
for lib in os.listdir(LIB_DIR.abspath):
|
||||
lib_dir = LIB_DIR.Dir(lib)
|
||||
if not lib_dir.isdir():
|
||||
print 'Skipping {} in lib directory: is not a directory'.format(lib)
|
||||
continue
|
||||
lib_out_dir = out_dir.Dir('lib').Dir(lib)
|
||||
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
|
||||
env.Append(LIBPATH=[lib_out_dir])
|
||||
|
||||
# Get source files.
|
||||
src_out_dir = out_dir.Dir('src')
|
||||
do_sconscript(env, SRC_DIR, src_out_dir)
|
||||
env.Append(LIBPATH=[src_out_dir],
|
||||
CPPPATH=[SRC_DIR])
|
||||
|
||||
# Get test binaries.
|
||||
test = do_sconscript(env, TEST_DIR, out_dir.Dir('test'))
|
||||
run_tests = env.Alias('test', [test], '{} --gtest_color=yes'.format(test[0].path))
|
||||
env.AlwaysBuild(run_tests)
|
||||
env = Environment.for_mode(mode)
|
||||
env.process_lib_dirs()
|
||||
env.process_src()
|
||||
env.process_tests()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue