mirror of
https://gitee.com/openLuat/LuatOS
synced 2025-08-17 22:18:03 +08:00
136 lines
3.4 KiB
Lua
136 lines
3.4 KiB
Lua
|
|
--[[
|
|
本文件用于生成内嵌到固件里的脚本
|
|
|
|
默认是corelib目录里的全部.lua文件
|
|
|
|
如需新增或更新, 把.lua文件放入corelib目录, 在当前目录下执行:
|
|
luatos_32bit.exe update_inline_libs.lua
|
|
|
|
相关exe文件可以在 https://gitee.com/openLuat/LuatOS/attach_files 下载
|
|
]]
|
|
|
|
-- 主要配置项, lua分需要区分两种编译环境:
|
|
-- lua_Integer的大小, 受 LUA_32BITS控制, 默认是启用
|
|
-- size_t 大小, 与平台相关, MCU上通常为32bit
|
|
-- 虽然可以两两组成, 但实际情况只有2种,当前:
|
|
|
|
-- local bittype = "64bit_size32"
|
|
local bittype = "32bit"
|
|
-- local bittype = "source"
|
|
|
|
|
|
local typename = bittype
|
|
if bittype == "32bit" then
|
|
typename = ""
|
|
else
|
|
typename = "_" .. bittype
|
|
end
|
|
|
|
local function lsdir(path, files, shortname)
|
|
local cmd = "dir /b " .. (shortname and " " or " /s ") .. path
|
|
log.info("cmd", cmd)
|
|
local exe = io.popen(cmd)
|
|
if exe then
|
|
for line in exe:lines() do
|
|
if string.endsWith(line, ".lua") then
|
|
log.info("found", line)
|
|
table.insert(files, line)
|
|
end
|
|
end
|
|
exe:close()
|
|
end
|
|
end
|
|
|
|
|
|
local function oscall(cmd, quite, cwd)
|
|
if cwd and Base_CWD then
|
|
lfs.chdir(cwd)
|
|
end
|
|
if tool_debug then
|
|
log.info("cmd", cmd)
|
|
end
|
|
local exe = io.popen(cmd)
|
|
if exe then
|
|
for line in exe:lines() do
|
|
if not quite then
|
|
log.info("cmd", line)
|
|
end
|
|
end
|
|
exe:close()
|
|
end
|
|
if cwd and Base_CWD then
|
|
lfs.chdir(Base_CWD)
|
|
end
|
|
end
|
|
|
|
function TLD(buff, T, D)
|
|
buff:pack("bb", T, D:len())
|
|
buff:write(D)
|
|
end
|
|
|
|
local files = {}
|
|
lsdir("corelib", files, true)
|
|
oscall("mkdir tmp")
|
|
|
|
local path = "..\\luat\\vfs\\luat_inline_libs".. typename .. ".c"
|
|
local f = io.open(path, "wb")
|
|
|
|
if not f then
|
|
log.info("can't write", path)
|
|
os.exit(-1)
|
|
end
|
|
|
|
f:write([[#include "luat_base.h"]])
|
|
f:write("\r\n")
|
|
f:write([[#include "luat_fs.h"]])
|
|
f:write("\r\n")
|
|
f:write([[#include "luat_luadb.h"]])
|
|
f:write("\r\n\r\n")
|
|
|
|
|
|
kvs = {}
|
|
for _, value in ipairs(files) do
|
|
local data = nil
|
|
if bittype == "source" then
|
|
data = io.readFile("corelib\\" .. value)
|
|
else
|
|
local lf = loadfile("corelib\\" .. value)
|
|
data = string.dump(lf, true)
|
|
end
|
|
-- local cmd =
|
|
-- io.popen("luac_" .. bittype .. ".exe -s -o tmp.luac " .. "core\\" .. value):read("*a")
|
|
-- local data = io.readFile("tmp.luac")
|
|
local buff = zbuff.create(256*1024)
|
|
-- local data = io.readFile("tmp\\" .. value .. "c")
|
|
buff:write(data)
|
|
f:write("//------- " .. value .. "\r\n")
|
|
|
|
local k = "luat_inline2_" .. value:sub(1, value:len() - 4) .. typename
|
|
print(value, #data, k)
|
|
table.insert(kvs, {size=#data,ptr=k, name=value})
|
|
|
|
f:write("const char ".. k .."[] = {\r\n")
|
|
local index = 0
|
|
local max = #data
|
|
while index < max do
|
|
if index % 8 == 0 then
|
|
f:write("\r\n")
|
|
end
|
|
f:write(string.format("0x%02X, ", buff[index]))
|
|
index = index + 1
|
|
end
|
|
f:write("};\r\n\r\n")
|
|
end
|
|
|
|
f:write("const luadb_file_t luat_inline2_libs".. typename .. "[] = {\r\n")
|
|
for _, value in ipairs(kvs) do
|
|
f:write(" {.name=\"" .. value.name .. "\",.size=" .. tostring(value.size) .. ", .ptr=" .. value.ptr .. "},\r\n")
|
|
end
|
|
f:write(" {.name=\"\",.size=0,.ptr=NULL}\r\n")
|
|
f:write("};\r\n\r\n")
|
|
f:close()
|
|
|
|
log.info("all done")
|
|
os.exit(0)
|