diff --git a/xmake/core/base/utils.lua b/xmake/core/base/utils.lua index 8f1f9a3d04..99add99bc6 100644 --- a/xmake/core/base/utils.lua +++ b/xmake/core/base/utils.lua @@ -324,7 +324,7 @@ end -- generate c/c++ code from the binary file function utils.bin2c(binaryfile, outputfile, opt) opt = opt or {} - return utils._bin2c(binaryfile, outputfile, opt.linewidth or 0x20, opt.nozeroend or false) + return utils._bin2c(binaryfile, outputfile, opt.linewidth or 32, opt.nozeroend or false) end -- return module diff --git a/xmake/modules/private/utils/bin2c.lua b/xmake/modules/private/utils/bin2c.lua index 987a478f72..29c89338ee 100644 --- a/xmake/modules/private/utils/bin2c.lua +++ b/xmake/modules/private/utils/bin2c.lua @@ -35,7 +35,7 @@ function _do_dump(binarydata, outputfile, opt) local p = 0 local e = binarydata:size() local line = nil - local linewidth = opt.linewidth or 0x20 + local linewidth = opt.linewidth or 32 local first = true while p < e do line = "" @@ -81,6 +81,22 @@ function _do_bin2c(binarypath, outputpath, opt) -- trace print("generating code data file from %s ..", binarypath) + -- optimize the default linewidth for reading large file + if not opt.linewidth then + local filesize = os.filesize(binarypath) + if filesize > 1024 * 1024 * 1024 then + opt.linewidth = 512 + elseif filesize > 100 * 1024 * 1024 then + opt.linewidth = 256 + elseif filesize > 10 * 1024 * 1024 then + opt.linewidth = 128 + elseif filesize > 1024 * 1024 then + opt.linewidth = 64 + else + opt.linewidth = 32 + end + end + -- do dump if utils.bin2c then utils.bin2c(binarypath, outputpath, opt)