以外と知られていないことですが、lua.exeがあれば、luac.exeは必要ありません。
-- compile the input file(s)
local chunk = {}
for _, file in ipairs(arg) do
chunk[#chunk + 1] = assert(loadfile(file))
end
if #chunk == 1 then
chunk = chunk[1]
else
-- combine multiple input files into a single chunk
for i, func in ipairs(chunk) do
chunk[i] = ("%sloadstring%q(...);"):format(
i==#chunk and "return " or " ",
string.dump(func))
end
chunk = assert(loadstring(table.concat(chunk)))
end
local out = assert(io.open("luac.lua.out", "wb"))
out:write(string.dump(chunk))
out:close()