• thakis@chromium.org's avatar
    Update ninja to v1.0.0 on Mac and Linux. · 79b09c47
    thakis@chromium.org authored
    On both mac and linux, I ran:
    git checkout v1.0.0
    ninja
    ./ninja ninja_test
    ./ninja_test  # all passed
    strip ninja
    
    Changes since the last push:
    * NINJA_STATUS can now print rates via the o and c format chars
    * The version switch is now --version, -V no longer works
    * -t list now works without a build.ninja
    * Old .ninja_log files now trigger a rebuild instead of an error
    * Missing .d files make the corresponding .o file dirty
    * Allow @ and = in paths in depfiles
    * Ninja's output is now lower-case ("error:" instead of "ERROR:" etc)
    * Lots of Windows features (which doesn't affect Mac and Linux)
    
    On Linux, I switched from gcc4.4.3 to clang r163126. The clang-built
    binary is 125856 bytes (compared to 129944 bytes previously), and it does
    an empty 'chrome' build about 70ms faster (0.94s instead of 1.01s).
    
    The speed difference is almost completely in faster depfile parsing:
    
    clang-built (0.943s):
    $ time ../../ninja/ninja -C out/Release chrome -d stats
    ninja: Entering directory `out/Release'
    ninja: no work to do.
    metric                  count   avg (us)        total (ms)
    .ninja parse            716     507.8           363.6
    canonicalize str        113486  0.2             27.7
    canonicalize path       1305641 0.1             184.1
    lookup node             1305641 0.2             200.9
    .ninja_log load         1       11144.0         11.1
    node stat               37828   2.6             98.0
    depfile load            9266    80.9            749.3
    
    path->node hash load 0.98 (48241 entries / 49157 buckets)
    
    real    0m1.162s
    user    0m0.980s
    sys     0m0.170s
    
    
    gcc-built (1.013s):
    $ time ninja -C out/Release chrome -d stats
    ninja: Entering directory `out/Release'
    ninja: no work to do.
    metric                  count   avg (us)        total (ms)
    .ninja parse            716     516.4           369.7
    canonicalize str        113486  0.2             27.6
    canonicalize path       1305641 0.1             181.0
    lookup node             1305641 0.2             260.0
    .ninja_log load         1       11012.0         11.0
    node stat               37828   2.6             98.2
    depfile load            9266    86.3            799.3
    
    path->node hash load 0.98 (48241 entries / 49157 buckets)
    
    real    0m1.220s
    user    0m0.970s
    sys     0m0.240s
    
    
    
    On Mac, I alsow used clang r163126. The binary size stayed at 125104 bytes,
    performance didn't change. An empty build of chrome takes 1.26s. While
    node stat is a bit slower, and there are more defiles to parse compared
    to linux, most of the time difference is in slower .ninja parsing:
    
    mac (1.263s):
    $ time ../../ninja/ninja -C out/Release/ chrome -d stats
    ninja: Entering directory `out/Release/'
    ninja: no work to do.
    metric                  count   avg (us)        total (ms)
    .ninja parse            687     823.4           565.7
    canonicalize str        115002  0.3             31.1
    canonicalize path       1120853 0.2             175.6
    lookup node             1120853 0.2             202.9
    .ninja_log load         1       54126.0         54.1
    node stat               38860   4.1             160.4
    depfile load            9649    86.1            830.8
    
    path->node hash load 0.99 (48522 entries / 49157 buckets)
    
    real    0m1.478s
    user    0m1.121s
    sys     0m0.351s
    
    TBR=scottmg
    Review URL: https://codereview.chromium.org/10918242
    
    git-svn-id: svn://svn.chromium.org/chrome/trunk/tools/depot_tools@156751 0039d316-1c4b-4281-b951-d872f2087c98
    79b09c47