[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: [ANN] Lake 1.2, a Lua-based Build Tool
- From: David Manura <dm.lua@...>
- Date: Sat, 21 Jan 2012 23:44:37 -0500
On Sat, Jan 21, 2012 at 4:24 AM, steve donovan
<steve.j.donovan@gmail.com> wrote:
>> IMO, memoized build systems [4] also look interesting.
> You mean CMake's ability to remember where it found things, so it
> doesn't do extra work each time?
No, I mean like fabricate [1], which was inspired by Bill McCloskey's
memoize.py. I'm not aware of a Lua implementation of this type of
build system, so I wrote an initial implementation today [2]. You can
build Lua 5.2 like this:
#!/usr/bin/env lua
-- Example mbuild for Lua 5.2.0.
local MB = require 'mbuild'
local gcc_deps = require 'mbuild_gcc'.gcc_deps
local qw = require 'mbuild_list'.qw
local CORE_O = qw[[
lapi.o lcode.o lctype.o ldebug.o ldo.o ldump.o lfunc.o lgc.o llex.o
lmem.o lobject.o lopcodes.o lparser.o lstate.o lstring.o ltable.o
ltm.o lundump.o lvm.o lzio.o
]]
local LIB_O = qw[[
lauxlib.o lbaselib.o lbitlib.o lcorolib.o ldblib.o liolib.o
lmathlib.o loslib.o lstrlib.o ltablib.o loadlib.o linit.o
]]
local BASE_O = CORE_O + LIB_O + qw'lua.c'
for obj in (BASE_O + qw'lua.o luac.o'):iter() do
local src = obj:gsub('%.o$', '%.c')
MB.run('gcc -c '..src, {obj}, {src, defer=gcc_deps})
end
MB.run('ar rcu liblua.a '..BASE_O:string(), {'liblua.a'}, BASE_O)
MB.run('gcc -o lua lua.o liblua.a -lm', {'lua'}, {'lua.o', 'liblua.a'})
MB.run('gcc -o luac luac.o liblua.a -lm', {'luac'}, {'luac.o', 'liblua.a'})
Rules could be added to further abstract away the toolchain-specific
code (the core implementation knows nothing about toolchains). strace
support could easily be added too to eliminate the explicit
dependencies.
[1] http://code.google.com/p/fabricate/
[2] https://github.com/davidm/lua-mbuild