129 lines
2.3 KiB
Lua
129 lines
2.3 KiB
Lua
|
-- Initialization
|
||
|
log = ""
|
||
|
oldprint=print
|
||
|
function print(...)
|
||
|
oldprint(...)
|
||
|
logline = ""
|
||
|
if #{...} > 0 then
|
||
|
if #{...} > 1 then
|
||
|
for k,v in ipairs({...}) do
|
||
|
logline = logline .. "\t" .. tostring(v)
|
||
|
end
|
||
|
else
|
||
|
tA = {...}
|
||
|
logline = tostring(tA[1])
|
||
|
end
|
||
|
end
|
||
|
log = (log .. logline .. "\n"):sub(1,-1)
|
||
|
end
|
||
|
print("Initializing and reading configuration")
|
||
|
ts={}
|
||
|
tA = {...}
|
||
|
ss=""
|
||
|
cfg={}
|
||
|
f=io.open("build.cfg","rb")
|
||
|
repeat
|
||
|
line = f:read("*l")
|
||
|
if line ~= nil then
|
||
|
w={}
|
||
|
for wo in line:gmatch("%S+") do table.insert(w, wo) end
|
||
|
cfg[w[1]] = w[2]
|
||
|
end
|
||
|
until line == nil or line == ""
|
||
|
if cfg.opath == nil then cfg.opath = "kernel.lua" end
|
||
|
print()
|
||
|
-- Module list
|
||
|
print("Reading modules to load")
|
||
|
tm={}
|
||
|
f=io.open("modules.cfg","rb")
|
||
|
function nl()
|
||
|
return f:read("*l")
|
||
|
end
|
||
|
for line in nl do
|
||
|
print(" - "..line)
|
||
|
table.insert(tm,line)
|
||
|
end
|
||
|
f:close()
|
||
|
print(tostring(#tm).." modules to load.\n")
|
||
|
|
||
|
-- Loading modules
|
||
|
print("Loading modules")
|
||
|
for k,v in ipairs(tm) do
|
||
|
print(" - "..v.." - modules/"..v)
|
||
|
f=io.open("modules/"..v,"rb")
|
||
|
if cfg.optomise == "yes" then
|
||
|
data = f:read("*a")
|
||
|
else
|
||
|
data = "--"..v.."\n"..f:read("*a")
|
||
|
end
|
||
|
table.insert(ts,data)
|
||
|
f:close()
|
||
|
end
|
||
|
print(tostring(#tm).." modules loaded.\n")
|
||
|
|
||
|
-- Generate source
|
||
|
print("Generating source")
|
||
|
for k,v in pairs(ts) do
|
||
|
ss=ss..v
|
||
|
io.write(".")
|
||
|
end
|
||
|
print()
|
||
|
|
||
|
-- Optomise for space
|
||
|
if cfg.optomise == "yes" then
|
||
|
print("Optomising source")
|
||
|
sl=tostring(ss:len())
|
||
|
no=0
|
||
|
replacements={
|
||
|
{" "," "},
|
||
|
{"\n ","\n"},
|
||
|
{"\n\n","\n"},
|
||
|
{" == ","=="},
|
||
|
{" ~= ","~="},
|
||
|
{" >= ",">="},
|
||
|
{" <= ","<="},
|
||
|
{" > ",">"},
|
||
|
{" < ","<"},
|
||
|
{" = ","="},
|
||
|
{", ",","},
|
||
|
{" %+ ","+"},
|
||
|
{" %- ","-"},
|
||
|
{" %/ ","/"},
|
||
|
{" %* ","*"},
|
||
|
{" \n","\n"},
|
||
|
}
|
||
|
for k,v in ipairs(replacements) do
|
||
|
while ss:find(v[1]) ~= nil do
|
||
|
ss=ss:gsub(v[1],v[2])
|
||
|
io.write(".")
|
||
|
no=no+1
|
||
|
end
|
||
|
end
|
||
|
print("\nBefore: "..sl.."\nAfter: "..tostring(ss:len()).."\n"..tostring(no).." optomisations made.\n")
|
||
|
end
|
||
|
|
||
|
-- Output
|
||
|
print("Outputting to "..cfg.opath)
|
||
|
f=io.open(cfg.opath,"wb")
|
||
|
f:write(ss)
|
||
|
f:close()
|
||
|
print("Total size: "..tostring(ss:len()).."\n")
|
||
|
|
||
|
-- Check syntax
|
||
|
if cfg.test == "yes" then
|
||
|
print("Checking for errors...")
|
||
|
err={pcall(load,ss)}
|
||
|
if err[1] ~= true then
|
||
|
print(table.unpack(err))
|
||
|
else
|
||
|
print("No errors detected by load()")
|
||
|
end
|
||
|
end
|
||
|
|
||
|
-- Write log
|
||
|
if cfg.log == "yes" then
|
||
|
f=io.open("build.log","wb")
|
||
|
f:write(log)
|
||
|
f:close()
|
||
|
end
|