Add func KATI_visibility_prefix

syntax: $(KATI_visibility_prefix var, prefix)

1, Add a func KATI_visibility_prefix that takes a variable
name and a list of strings, set this variable's visibility
to these strings. Each string represents the relative path
from the root, and is considered as prefix.

e.g. $(KATI_visibility_prefix VAR, vendor/ device/b baz.mk)
--> VAR is visible to "vendor/foo.mk", "device/bar.mk",
"device/baz.mk", "baz.mk", but not visible to "bar.mk",
"vendor.mk" or "vendor/baz.mk".

If variable visibility is set more than once, and with a
different list of strings, an error will occur.

2. When a variable is being referenced, if this variable has
visibility prefix set, check if the current referencing file
matches the visibility prefix. Throw an error if not.

3. In $(KATI_visibility_prefix FOO, prefix)
If FOO is not defined, create a variable FOO with empty value.
The prefix can also be reference to variable.
If so, this function will expand the reference and set the
visibility_prefix.
17 files changed
tree: c004a87a6ffda4fa32750fbbdc25a7678e1757d8
  1. .github/
  2. src/
  3. testcase/
  4. .clang-format
  5. .dockerignore
  6. .gitignore
  7. AUTHORS
  8. clang-format-check
  9. CODEOWNERS
  10. CONTRIBUTING.md
  11. CONTRIBUTORS
  12. Dockerfile
  13. go.mod
  14. go.sum
  15. INTERNALS.md
  16. LICENSE
  17. Makefile
  18. Makefile.ckati
  19. README.md
  20. 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 22.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

If you are working on a machine that does not provide make in the same version as kati is currently compatible with, you might want to download a prebuilt version instead. For example to use the prebuilt version of Ubuntu 20.04 LTS:

  $ mkdir tmp/ && cd tmp/
  $ wget http://mirrors.kernel.org/ubuntu/pool/main/m/make-dfsg/make_4.2.1-1.2_amd64.deb
  $ ar xv make_4.2.1-1.2_amd64.deb
  $ tar xf data.tar.xz
  $ cd ..
  $ PATH=$(pwd)/tmp/usr/bin/:$PATH make 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.