diff --git a/SConstruct b/SConstruct index 69a8c06..4606bcd 100644 --- a/SConstruct +++ b/SConstruct @@ -1,10 +1,11 @@ # vim: set ft=python: -# -# Toplevel Scons build script. This should be mostly complete and generic enough -# for most builds. -# # Eryn Wells +''' +Toplevel Scons build script. This should be mostly complete and generic enough +for most builds. +''' + import logging setup_logging() diff --git a/site_scons/site_init.py b/site_scons/site_init.py index cb25ecf..12b7b3c 100644 --- a/site_scons/site_init.py +++ b/site_scons/site_init.py @@ -184,7 +184,7 @@ class Environment(SCons.Environment.Environment): def _append_custom_tools(self, kwargs): '''Add custom tools to the `kwargs`.''' tools = kwargs.setdefault('tools', ['default']) - for tool in ['lib', 'test', 'program', 'sconscript']: + for tool in ['lib', 'test', 'program', 'sconscript', 'swiftc']: if tool in tools: continue tools.append(tool) diff --git a/site_scons/site_tools/sconscript.py b/site_scons/site_tools/sconscript.py index b898481..12c0015 100644 --- a/site_scons/site_tools/sconscript.py +++ b/site_scons/site_tools/sconscript.py @@ -9,12 +9,15 @@ import SCons.Script def _do_sconscript(env): original_sconscript = env.SConscript - + def sconscript(env, sconscript, clone=False, *args, **kwargs): exports = {'Library': env.Library, 'StaticLibrary': env.StaticLibrary, 'SharedLibrary': env.SharedLibrary, - 'Program': env.Program} + 'Program': env.Program, + + 'Append': env.Append, + 'Replace': env.Replace} SCons.Script._SConscript.GlobalDict.update(exports) env.log('Reading {}'.format(sconscript)) return original_sconscript(sconscript, diff --git a/site_scons/site_tools/swiftc.py b/site_scons/site_tools/swiftc.py new file mode 100644 index 0000000..5d2766d --- /dev/null +++ b/site_scons/site_tools/swiftc.py @@ -0,0 +1,33 @@ +# swiftc.py +# vim: set ft=python: +# Eryn Wells + +''' +SCons plugin for building Swift files with swiftc. +''' + +import SCons.Action +import SCons.Tool +import SCons.Util + +SwiftSuffix = '.swift' +SwiftAction = SCons.Action.Action("$SWIFTCCOM", "$SWIFTCCOMSTR") + +compilers = ['swiftc'] + +def generate(env): + static_obj, shared_obj = SCons.Tool.createObjBuilders(env) + static_obj.add_action(SwiftSuffix, SwiftAction) + static_obj.add_emitter(SwiftSuffix, SCons.Defaults.SharedObjectEmitter) + shared_obj.add_action(SwiftSuffix, SwiftAction) + shared_obj.add_emitter(SwiftSuffix, SCons.Defaults.SharedObjectEmitter) + + if 'SWIFTC' not in env: + compiler = env.Detect(compilers) + env['SWIFTC'] = compiler if compiler else compilers[0] + env['SWIFTFLAGS'] = SCons.Util.CLVar('') + env['SWIFTCCOM'] = '$SWIFTC -o $TARGET -c $SWIFTFLAGS $SOURCES' + env['SWIFTFILESUFFIX'] = SwiftSuffix + +def exists(env): + return env.Detect(compilers)