Android编译系统的学习(二)

学习计划

  • 了解编译系统的历史
  • 了解各个历史的工具
  • 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还是做了一些特殊处理不同阶段产生了一些工具

Android编译系统的学习(二)_第1张图片

名称 作用
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:[email protected]

参考文献

GNU-维基百科
GCC-维基百科
xmake

你可能感兴趣的:(安卓编译)