Chromium源码下载与编译二

chromium是一个开源项目,同时也依赖于其他很多的开源库,因此google写了一个管理多项目的工具gclient,gclient是一个python程序,会根据目录下的DEPS文件下载依赖库到相应的目录中,分析DEPS文件,会发现依赖库都是从googlesource上下载的,这需要翻墙才能做到,但是同时也发现下载的库很多,有些可能是用于调试或测试的,而且有些功能不用,可以不下载相应的依赖库,那么哪些库是必须的?哪些库可以不用下载呢?是否可以通过编译来解决这个问题呢?

chromium编译分为两个阶段,首先通过gn工具生成编译文件,然后用ninja来执行生成的编译文件,如果用makefile来对比的话,那么gn就是生成makefile的过程,ninja就是make的过程,ninja比make快很多。

关于gn在github上找到了一个相关的使用文档:https://github.com/universeroc/gn/tree/master/docs

gn在google提供的depot_tools中,因此需要翻墙才能获取,但是在github上有一些相关的镜像,直接找了一个最近更新过的:https://github.com/wanggfu/depot_tools,下载后把相应的目录设置到PATH中,就可以使用了。

在chromium目录运行:gn args out/android,会报错

Traceback (most recent call last):
  File "/home/armite/google/depot_tools/gn.py", line 73, in <module>
    sys.exit(main(sys.argv))
  File "/home/armite/google/depot_tools/gn.py", line 49, in main
    'gn', 'gn' + gclient_utils.GetExeSuffix())
  File "/usr/lib/python2.7/posixpath.py", line 70, in join
    elif path == '' or path.endswith('/'):
AttributeError: 'NoneType' object has no attribute 'endswith'

从报错信息中可以看出gn.py用到了gclient,看gn.py发现,这个python脚本只是寻找gn,然后运行。在寻找过程中,先从gclient同步的那些目录中找,如果没有运行过gclient,就会报错。那么gclient不仅下载依赖库,还会下载编译工具。那么如果不用gclient下载gn,可以运行gn吗?
 

猜你喜欢

转载自blog.csdn.net/wzm012/article/details/83144532