mirror of
https://github.com/bulletphysics/bullet3
synced 2024-12-15 06:00:12 +00:00
ac23dbc4be
stringify: pre-allocate bigger buffer (10MB, workaround)
99 lines
2.6 KiB
Lua
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
|
|
}
|
|
|
|
|
|
|