summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTony Theodore <tonyt@logyst.com>2021-01-12 05:33:33 (GMT)
committerTony Theodore <tonyt@logyst.com>2021-01-12 05:33:33 (GMT)
commit36b3fe43452a7e3c4d579ad405380ab6e4bace6c (patch)
tree0dc16f3d2c0f413947a311163866fb60fc59b3a6
parentb17ea55ead98b9f3ca60e5a7205e21d3fefb4ec2 (diff)
downloadmxe-36b3fe43452a7e3c4d579ad405380ab6e4bace6c.zip
mxe-36b3fe43452a7e3c4d579ad405380ab6e4bace6c.tar.gz
mxe-36b3fe43452a7e3c4d579ad405380ab6e4bace6c.tar.bz2
build-pkg: add buildtime_calc.lua and update timing table
-rwxr-xr-xtools/build-pkg.lua16
-rw-r--r--tools/buildtime_calc.lua92
2 files changed, 101 insertions, 7 deletions
diff --git a/tools/build-pkg.lua b/tools/build-pkg.lua
index ed1b15a..a40d9e0 100755
--- a/tools/build-pkg.lua
+++ b/tools/build-pkg.lua
@@ -908,14 +908,16 @@ end
-- script building HUGE_TIMES from MXE main log
-- https://gist.github.com/starius/3ea9d953b0c30df88aa7
+-- cat build.log | lua tools/buildtime_calc.lua
local HUGE_TIMES = {
- [7] = {"ocaml-native", "ffmpeg", "boost"},
- [9] = {"openssl", "qtdeclarative", "ossim", "wxwidgets"},
- [12] = {"ocaml-core", "itk", "wt"},
- [19] = {"gcc", "qtbase", "llvm"},
- [24] = {"vtk", "vtk6", "openscenegraph"},
- [36] = {"openblas", "pcl", "oce"},
- [51] = {"qt"},
+ [6] = {"ffmpeg", "coin", "gst-libav", "openssl"},
+ [7] = {"gtk3", "ossim", "hyperscan"},
+ [8] = {"opencv", "gdal", "mesa"},
+ [9] = {"cmake", "osgearth", "wxwidgets"},
+ [14] = {"itk", "qt3d", "gcc", "qtdeclarative"},
+ [20] = {"openscenegraph", "vtk", "qtbase"},
+ [27] = {"openblas", "qt", "llvm"},
+ [53] = {"oce", "pcl", "qtwebkit"},
}
local PROGRESS = "[%3d/%d] " ..
diff --git a/tools/buildtime_calc.lua b/tools/buildtime_calc.lua
new file mode 100644
index 0000000..54a68a3
--- /dev/null
+++ b/tools/buildtime_calc.lua
@@ -0,0 +1,92 @@
+local function round(x)
+ return math.floor(x + 0.5)
+end
+
+local pkg2sum = {}
+local pkg2n = {}
+
+for line in io.stdin:lines() do
+ if line:match("%[done%]") then
+ local _, pkg, _, _, time = assert(line:match("(%[done%]) +([^ ]+) +([^ ]+) +([^ ]+) KiB +([^ ]+)"))
+ local minutes, seconds = assert(time:match("(%d+)m([%d%.]+)"))
+ local total_seconds = minutes * 60 + seconds
+ pkg2sum[pkg] = (pkg2sum[pkg] or 0) + total_seconds
+ pkg2n[pkg] = (pkg2n[pkg] or 0) + 1
+ end
+end
+
+local pkg2avg = {}
+for pkg, sum in pairs(pkg2sum) do
+ local n = assert(pkg2n[pkg])
+ local avg = sum / n
+ pkg2avg[pkg] = avg
+ --print(avg)
+end
+
+local sum = 0
+local n = 0
+for pkg, time in pairs(pkg2avg) do
+ sum = sum + time
+ n = n + 1
+end
+
+local AVG1 = sum / n
+print("Average: " .. AVG1)
+
+local MIN_FACTOR = 3.0
+
+local sum2 = 0
+local n2 = 0
+for pkg, time in pairs(pkg2avg) do
+ local factor = time / AVG1
+ if factor < MIN_FACTOR then
+ sum2 = sum2 + time
+ n2 = n2 + 1
+ end
+end
+
+local AVG2 = sum2 / n2
+local max_factor = 0
+
+local factor2pkgs = {}
+for pkg, time in pairs(pkg2avg) do
+ local factor = time / AVG1
+ if factor >= MIN_FACTOR then
+ local factor2 = round(time / AVG2)
+ factor2pkgs[factor2] = factor2pkgs[factor2] or {}
+ table.insert(factor2pkgs[factor2], '"' .. pkg .. '"')
+ max_factor = math.max(max_factor, factor2)
+ end
+end
+
+local MIN_GROUP = 3
+
+-- group
+local group = {}
+local sum = 0
+local factor2pkgs2 = {}
+for factor = 0, max_factor do
+ local pkgs = factor2pkgs[factor]
+ if pkgs then
+ for _, pkg in ipairs(pkgs) do
+ table.insert(group, pkg)
+ sum = sum + factor
+ end
+ if #group >= MIN_GROUP or factor == max_factor then
+ local factor3 = round(sum / #group)
+ assert(not factor2pkgs2[factor3])
+ factor2pkgs2[factor3] = group
+ sum = 0
+ group = {}
+ end
+ end
+end
+
+print("local HUGE_TIMES = {")
+for factor = 0, max_factor do
+ local pkgs = factor2pkgs2[factor]
+ if pkgs then
+ print(("[%d] = {%s},"):format(factor, table.concat(pkgs, ', ')))
+ end
+end
+print("}")