[C++] Convert initial echo command into ninja description

If the first command for a rule is an echo with no redirections,
strip any outer quotes and use the result as the ninja rule
description.

This makes Android builds much more readable by preventing every
successful rule from writing a single line, allowing ninja to
reuse the current line for its status.
1 file changed
tree: 164e4feb1acdab8e6dd25aa161f770a4710b82eb
  1. cmd/
  2. make-c/
  3. testcase/
  4. .gitignore
  5. ast.cc
  6. ast.go
  7. ast.h
  8. AUTHORS
  9. bootstrap.go
  10. buf.go
  11. buf_test.go
  12. command.cc
  13. command.h
  14. CONTRIBUTING.md
  15. CONTRIBUTORS
  16. dep.cc
  17. dep.go
  18. dep.h
  19. depgraph.go
  20. doc.go
  21. eval.cc
  22. eval.go
  23. eval.h
  24. evalcmd.go
  25. exec.cc
  26. exec.go
  27. exec.h
  28. expr.go
  29. expr_test.go
  30. file.cc
  31. file.h
  32. file_cache.cc
  33. file_cache.h
  34. fileutil.cc
  35. fileutil.go
  36. fileutil.h
  37. find.cc
  38. find.h
  39. flags.cc
  40. flags.go
  41. flags.h
  42. func.cc
  43. func.go
  44. func.h
  45. func_test.go
  46. LICENSE
  47. loc.h
  48. log.cc
  49. log.go
  50. log.h
  51. m2n
  52. main.cc
  53. make-c.sh
  54. Makefile
  55. ninja.cc
  56. ninja.go
  57. ninja.h
  58. ninja_test.cc
  59. ninja_test.go
  60. pack.sh
  61. parser.cc
  62. parser.go
  63. parser.h
  64. pathutil.go
  65. query.go
  66. README.md
  67. rule.cc
  68. rule.h
  69. rule_parser.go
  70. rule_parser_test.go
  71. run_integration_test.rb
  72. runtest.rb
  73. serialize.go
  74. shellutil.go
  75. shellutil_test.go
  76. stats.cc
  77. stats.go
  78. stats.h
  79. string_piece.cc
  80. string_piece.h
  81. string_piece_test.cc
  82. stringprintf.cc
  83. stringprintf.h
  84. strutil.cc
  85. strutil.go
  86. strutil.h
  87. strutil_test.cc
  88. strutil_test.go
  89. symtab.cc
  90. symtab.go
  91. symtab.h
  92. timeutil.cc
  93. timeutil.h
  94. value.cc
  95. value.h
  96. var.cc
  97. var.go
  98. var.h
  99. version.go
  100. version.h
  101. worker.go
README.md

kati

kati is an experimental GNU make clone. The main goal of this tool is to speed-up incremental build of Android.

How to use for Android

Currently, kati does not offer a faster build by itself. It instead converts your Makefile to a ninja file.

Set up kati:

% cd ~/src
% git clone https://github.com/google/kati
% cd kati
% make

Build Android:

% cd <android-directory>
% source build/envsetup.sh
% lunch <your-choice>
% ~/src/kati/m2n --kati_stats  # Use --goma if you are a Googler.
% ./ninja.sh

You need ninja in your $PATH.

More usage examples

"make clean"

% ./ninja.sh -t clean

Note ./ninja.sh passes all parameters to ninja.

Build a specific target

For example, the following is equivalent to "make cts":

% ./ninja.sh cts

Or, if you know the path you want, you can do:

% ./ninja.sh out/host/linux-x86/bin/adb

Specify the number of default jobs used by ninja

% ~/src/kati/m2n -j10
% ./ninja.sh

Or

% ./ninja.sh -j10

Note the latter kills the parallelism of goma.