bullet3/build3/stringifyKernel.lua
erwincoumans ac23dbc4be contact normal should point from B to A (to be consistent with Bullet 2.x)
stringify: pre-allocate bigger buffer (10MB, workaround)
2013-08-10 12:08:15 -07:00

99 lines
2.6 KiB
Lua

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
}