学习计划
- 了解编译系统的历史
- 了解各个历史的工具
- make阶段编译过程
- Soong阶段编译过程
- ninja阶段编译过程
了解各个历史的工具
配制文件:
文件名 | 作用 |
---|---|
Makefile | GNU Make开发的makefile |
mk | android编译系统特有的makefile |
bp | android编译系统特有的makefile |
build.ninja | ninja特有的makefile |
- Makefile详解
传送门 - build.ninja详解
Ninja的默认配制文件,其它文件也以.ninja为后缀。 - Makefile与mk的区别:
Makefile就是传统的gnu配制文件 ; mk/bp就是android特有的配制文件 - bp与mk的区别:
bp是纯粹的配置,没有分支/算数逻辑运算/循环等流程控制,
控制逻辑需要Go编写实现。
构建系统:
-
为什么google在android 7.0的时候把GNU make替换成ninja?
因为ninja专注核心功能、轻巧、速度快、并行编译、并行link可能还有其他。 -
ninja与GUN make的对比:
构建系统 | android后缀 | 编译时间 | clean是否需要编写 | android是否带 |
---|---|---|---|---|
ninja | build.ninja/.ninja | 第一次与增删文件时慢,后续快 | 否 | 是 |
make | Makefile/.mk/.bp | 反之 | 是 | 否 |
历史工具:
Makefile是GUN make的配制文件,build.ninja是ninja的配制文件
但是我们并不有看到Makefile mk bp这些文件直接替换成build.ninja
所以google还是做了一些特殊处理不同阶段产生了一些工具
名称 | 作用 |
---|---|
kati | Makefile or mk转换成build.ninja |
androidmk | mk转成bp |
Soong | 编译生成安装Blueprint |
Blueprint | 生成并解析bp文件 |
分享一组网上的对比数据:
- 多任务并行编译测试
构建系统 | Termux (8core/-j12) | 构建系统 | Termux (8core/-j12) |
---|---|---|---|
xmake | 24.890s | xmake | 12.264s |
ninja | 25.682s | ninja | 11.327s |
cmake(gen+make) | 5.416s+28.473s | cmake(gen+make) | 1.203s+14.030s |
cmake(gen+ninja) | 4.458s+24.842s | cmake(gen+ninja) | 0.988s+11.644s |
- 单任务编译测试
构建系统 | Termux (-j1) | 构建系统 | MacOS (-j1) |
---|---|---|---|
xmake | 1m57.707s | xmake | 39.937s |
ninja | 1m52.845s | ninja | 38.995s |
cmake(gen+make) | 5.416s+2m10.539s | cmake(gen+make) | 1.203s+41.737s |
cmake(gen+ninja) | 4.458s+1m54.868s | cmake(gen+ninja) | 0.988s+38.022s |
未完待续,敬请期待...
非常感谢您花费时间阅读这份稿件,感觉有用可以分享给更多的学习者,转载请标记出处。
作者: [Alin]
时间: 2021 年 02月 03日
email:380475066@qq.com