NazaraEngine/xmake/rules/embed_resources.lua

55 lines
1.5 KiB
Lua

-- Turns resources into includables headers
rule("embed.resources")
before_build(function (target, opt)
import("core.base.option")
if xmake.version():ge("2.5.9") then
import("utils.progress")
elseif not import("utils.progress", { try = true }) then
import("private.utils.progress")
end
local function GenerateEmbedHeader(filepath, targetpath)
local bufferSize = 1024 * 1024
progress.show(opt.progress, "${color.build.object}embedding %s", filepath)
local resource = assert(io.open(filepath, "rb"))
local targetFile = assert(io.open(targetpath, "w+"))
local resourceSize = resource:size()
local remainingSize = resourceSize
local headerSize = 0
while remainingSize > 0 do
local readSize = math.min(remainingSize, bufferSize)
local data = resource:read(readSize)
remainingSize = remainingSize - readSize
local headerContentTable = {}
for i = 1, #data do
table.insert(headerContentTable, string.format("%d,", data:byte(i)))
end
local content = table.concat(headerContentTable)
headerSize = headerSize + #content
targetFile:write(content)
end
resource:close()
targetFile:close()
end
for _, sourcebatch in pairs(target:sourcebatches()) do
if sourcebatch.rulename == "embed.resources" then
for _, sourcefile in ipairs(sourcebatch.sourcefiles) do
local targetpath = sourcefile .. ".h"
if option.get("rebuild") or os.mtime(sourcefile) >= os.mtime(targetpath) then
GenerateEmbedHeader(sourcefile, targetpath)
end
end
end
end
end)