OC-MultICE/build.lua

132 lines
2.6 KiB
Lua
Raw Normal View History

2017-05-08 09:55:48 +10:00
#!/usr/bin/env lua5.2
2017-04-19 02:40:25 +10:00
-- Initialization
log = ""
oldprint=print
function print(...)
oldprint(...)
2017-04-19 02:40:25 +10:00
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 = {...}
for k,v in ipairs(tA) do
if type(v) == "string" then
if v:sub(1,10) == "--cfgfile=" then
cfgfile = v:sub(11)
elseif v:sub(1,10) == "--modfile=" then
modfile = v:sub(11)
end
end
end
2017-04-19 02:40:25 +10:00
ss=""
cfgfile = cfgfile or "build.cfg"
modfile = modfile or "modules.cfg"
2017-04-19 02:40:25 +10:00
cfg={}
f=io.open(cfgfile,"rb")
2017-04-19 02:40:25 +10:00
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 == ""
cfg.opath = cfg.opath or "kernel.lua"
cfg.ospath = cfg.ospath or "skernel.lua"
2017-04-19 02:40:25 +10:00
print()
-- Module list
print("Reading modules to load")
tm={}
f=io.open(modfile,"rb")
2017-04-19 02:40:25 +10:00
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")
2017-04-20 19:11:20 +10:00
if cfg.optimise == "yes" then
2017-04-19 02:40:25 +10:00
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")
if cfg.listmods == "yes" then
2017-05-15 01:46:40 +10:00
ss=ss.."_MOD,_OSVERSION,_BD={"
for k,v in ipairs(tm) do
ss=ss..'"'..v..'",'
end
ss=ss.."},"
if _OSVERSION == nil then
2017-05-15 01:46:40 +10:00
ss=ss..'"MultICE '..io.popen("git rev-parse HEAD"):read("*a"):sub(1,7)..'","'..os.date("%Y/%m/%d %H:%M %z")..'"\n'
else
ss=ss..'"MultICE DR0"\n'
end
end
2017-04-19 02:40:25 +10:00
for k,v in pairs(ts) do
ss=ss..v
io.write(".")
end
print()
-- Output
print("Outputting to "..cfg.opath)
f=io.open(cfg.opath,"wb")
f:write(ss)
f:close()
print("Total size: "..tostring(ss:len()).."\n")
-- Optimise for space
if cfg.optimise == "yes" then
if _OSVERSION ~= nil then
if _OSVERSION:sub(1,6) == "OpenOS" then
os.execute("strip "..cfg.opath.." "..cfg.ospath)
end
else
os.execute("lua strip.lua "..cfg.opath.." "..cfg.ospath)
end
end
2017-04-19 02:40:25 +10:00
-- Check syntax
if cfg.test == "yes" then
print("Checking for errors...")
err={pcall(load,ss)}
if err[1] ~= true then
print(table.unpack(err))
2017-04-19 02:40:25 +10:00
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