Comparison between Scons and Waf on no-op build times (targets are up-to-date). The previous version of this document is available at: http://freehackers.org/~tnagy/bench2.txt ------------------------------------------------------------- The values measured below are the runtime in a folder that contains all built targets up-to-date. They represent more or less the time to wait for the build tool before a file that was modified starts compiling Waf and Scons use a similar signature-based scheme to decide if a target needs to be rebuilt: file md5 + command-line + other dependencies The following script was used: http://freehackers.org/~tnagy/genbench.py with the following command-line: ./genbench.py /tmp/build 50 100 15 5 The benchmark generates 50 static libraries using 100 cpp classes, with 15 includes from the same folder and 5 includes from different folders in each header file, this makes approximately 22 header dependencies for each cpp file, in 5000 cpp files The time values were measured using "time" The hardware is a laptop with 512Mb of ram and a pentium 4 The same operating system was used (OpenSuse 10.2) ------------------------------------------------------------- Waf 1.4.0 available as a single script http://freehackers.org/~tnagy/waf (93KB) or as source http://freehackers.org/~tnagy/waf-1.4.0.tar.bz2 real 0m3.485s user 0m3.304s sys 0m0.164s real 0m3.444s user 0m3.212s sys 0m0.216s real 0m3.469s user 0m3.296s sys 0m0.156s real 0m3.492s user 0m3.324s sys 0m0.136s Using scons 0.98.1 (scons: `.' is up to date.) real 1m3.955s user 1m2.504s sys 0m0.984s real 1m3.140s user 1m1.960s sys 0m0.892s real 1m4.649s user 1m2.792s sys 0m1.012s Waf is about 18 times faster than Scons. Using options that degrade build accuracy: time scons --implicit-deps-unchanged --max-drift=1 real 0m41.375s user 0m40.803s sys 0m0.420s Waf is only about 12 times faster. ------------------------------------------------------------ Comparison against GNU/Make (recursive version) Waf runtimes are close to those of make, using "time make": real 0m3.537s user 0m2.432s sys 0m0.816s real 0m3.474s user 0m2.436s sys 0m0.792s By suppressing the make output (not the default), a speedup can be obtained: "time make>/dev/null" real 0m3.011s user 0m2.256s sys 0m0.732s real 0m3.003s user 0m2.252s sys 0m0.744s Unlike Waf or Scons, Make does only track timestamps (no task signatures, and no hashing of the files using md5).