Loading files
This file is pinned to the selected release. Download the original to open it in your design tool.
437d66f9bThis file is pinned to the selected release. Download the original to open it in your design tool.
function stringifyKernel(filenameIn, filenameOut, kernelMethod)
local BUFSIZE = 10*1024*1024 -- 10MB
local f = io.open(filenameIn,"r");
local fw = io.open(filenameOut,"w");
fw:write("//this file is autogenerated using stringify.bat (premake --stringify) in the build folder of this project\n")
fw:write("static const char* " .. kernelMethod .. "= \\\n")
local cc, lc, wc = 0, 0, 0 -- char, line, and word counts
while true do
local lines, rest = f:read(BUFSIZE, "*line")
if not lines then break end
local i = 0
local startpos = 0
local slen = string.len(lines)
local endpos = 0
while true do
i = string.find(lines, "\n", i+1) -- find 'next' newline
if i == nil then
endpos = slen
else
endpos = i
end
oneline = string.sub(lines,startpos,endpos)
oneline = string.gsub(oneline,"\n","")
oneline = string.gsub(oneline,"\"","\\\"");
oneline = '\"' .. oneline .. '\\n\"'
oneline = string.gsub(oneline,"\\\\n","")
oneline = oneline .. "\n"
--print(oneline)
fw:write(oneline);
if i == nil then break end
startpos = i+1
end
if rest then lines = lines .. rest .. '\n' end
cc = cc + string.len(lines)
-- count words in the chunk
local _,t = string.gsub(lines, "%S+", "")
wc = wc + t
-- count newlines in the chunk
_,t = string.gsub(lines, "\n", "\n")
lc = lc + t
end
--print("stringified " .. filenameIn .. " into " .. filenameOut .. " processed " .. lc .. " lines")
print(filenameIn .. " (" .. lc .. " lines)")
f:close()
fw:write(";\n")
fw:close()
end
function preprocessKernel(kernelfile, filenameOut, kernelMethod)
lcpp=require('lcpp');
local out=lcpp.compileFile(kernelfile);
local embedFileName = kernelfile .. ".embed"
local fw = io.open(embedFileName,"w");
fw:write(out)
fw:close()
stringifyKernel(embedFileName,filenameOut, kernelMethod);
end
newoption {
trigger = "kernelfile",
value = "kernelpath",
description = "full path to the kernel source input file"
}
newoption {
trigger = "headerfile",
value = "path",
description = "full path to the header output file"
}
newoption {
trigger = "stringname",
value = "var",
description = "name of the kernel string variable"
}
newaction {
trigger = "stringify",
description = "stringify kernels source code into strings",
execute = function()
preprocessKernel( _OPTIONS["kernelfile"] , _OPTIONS["headerfile"], _OPTIONS["stringname"])
end
}