AOSP与Ninja
Android N中,使用了ninja作为整个AOSP的编译工具
build/core/config.mk通过包含clang/versions.mk和clang/config.mk确定
CLANG_CXX = /prebuilts/clang/host/linux-x86/clang-2690385
而main.mk中包含了ninja.mk,该文件确定KATI_CXX和MAKEPARALLEL_CXX为CLANG_CXX
MAKEPARALLEL_CXX用于编译build/tools/makeparallel,该工具用于组织并行编译工作。
而KATI_CXX用于编译build/kati目录下的kati工具,kati工具可以将源码中的Makefile转换为*.ninja文件,后续使用ninja对源码树进行编译:
include build/kati/Makefile.ckati
同时build目录下还有使用Go编写的soong和blueprint,因此prebuild目录下新增了go目录,这两个工具共同作用,可以将*.bp文件转换为 *.ninja文件,AOSP计划后续不再使用Android.mk,转而使用Android.bp组织编译系统。
拿mm命令为例,在/package/apps/AppTest/工程下执行该命令,可以看到
Running kati to generate build-msm8909-mmm-packages_apps_AppTest_Android.mk.ninja...
out/build-msm8909-mmm-packages_apps_AppTest_Android.mk.ninja is missing, regenerating...
第一次模块编译会自动生成 build-<product_name>-mmm-<path_to_Android.mk>.ninja文件