Merge branch upstream into master

* aosp/upstream:
  strutil: replace SSE4 specialization with libc call
  Add diagnostic make file targets
  EvalIf: Consider any whitespace in variable names an error
  Expression Parser: Retain single '$' signs before terminators
  Update github actions to accommodate recent changes
  CommandEvaluator: Correct Makefile location for multi statement blocks
  cleanup: use [[fallthrough]] unconditionally
  Add support for -C <directory>
  Fix outstanding clang-format issues
  Fix github action to not use 'add-path' anymore
  Revert of code change in 97d8f1deb62d ("[C++] Fail for newlines in expanded rule statement")
  tests: ignore the error location that GNUMake emits
  testcases/tools/findleaves.py: migrate to python3

Signed-off-by: Matthias Maennich <maennich@google.com>
Change-Id: I9e718fb9ab95bae768dac4c0e16588749e732654
tree: 0ea60413261fbfba02f64082dd93c1e20287c691
  1. .github/
  2. golang/
  3. src/
  4. testcase/
  5. .clang-format
  6. .dockerignore
  7. .gitignore
  8. AUTHORS
  9. clang-format-check
  10. CODEOWNERS
  11. CONTRIBUTING.md
  12. CONTRIBUTORS
  13. Dockerfile
  14. go.mod
  15. go.sum
  16. INTERNALS.md
  17. LICENSE
  18. Makefile
  19. Makefile.ckati
  20. Makefile.kati
  21. OWNERS
  22. README.md
  23. run_test.go
README.md

kati

Build and Test

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

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

Development

Building:

$ make ckati

The above command produces a ckati binary in the project root.

Testing (best ran in a Ubuntu 18.04 environment):

$ make test
$ go test --ckati
$ go test --ckati --ninja
$ go test --ckati --ninja --all

The above commands run all cKati and Ninja tests in the testcases/ directory.

Alternatively, you can also run the tests in a Docker container in a prepared test enviroment:

$ docker build -t kati-test . && docker run kati-test

How to use for Android

For Android-N+, ckati and ninja is used automatically. There is a prebuilt checked in under prebuilts/build-tools that is used.

All Android's build commands (m, mmm, mmma, etc.) should just work.