chromium的gyp构建过程

来源:互联网 发布:ssh框架项目源码下载 编辑:程序博客网 时间:2024/04/28 15:52

下载完chromium代码后开始编译,这就引出了chromium 的gyp 构建过程,即由gyp文件生成Makefile文件。gyp构建系统没有采用递归make。

两步完成构建过程,在src目录下

src$ .  build/android/envsetup.sh  // 环境设置src$ android_gyp // 生成工程文件,进而可以生成Makefile文件
开始的gyp文件是build/all_android.gyp,它包含了最顶层的目标,并包含其他gpy文件。默认目标是ALL。

当然也可以只编译某一个目标,例如content_shell_apk就是其中一个目标,在content/content_shell.gypi中,这样就只编译content_shel及其依赖模块。


可以分析一下build/android/envsetup.sh脚本文件

该文件最后声明了一个函数就是android_gyp(该函数是build/gyp_chromiumd得封装), 所以也在最后直接调用该函数,这样就不在运行android_gyp了。

了解了all_android.gyp就可以进行必要的裁剪了,而不是所有的模块都编译,例如去掉test模块的编译。


gyp构建系统参考:http://blog.csdn.net/qq295445028/article/details/7859103

简单列一下gyp/gypi文件格式

gyp文件就是一个JSON格式的文件,一般包含如下字段:(参考build/all.gyp文件)

conditions(条件判断),includes(包含的构建文件),target_defaults(构建目标默认属性),targets(构建目标列表),variables(构建文件使用的变量)

1. conditions

分为普通的conditions(在load构建文件之后立即计算)和target_conditions(在计算完成依赖之后然后来进行计算),两个过程分别就是early and late phases阶段。对于conditions写法非常简单:
'conditions':[
    ['OS==Linux',{'sources':['linux_interface.cc']}], // 系统环境变量的判断 linux平台下,变量sources加入linux_interface.cc文件

   ['notifications==0', {'sources!': [   // 用户自定义变量的判断
        'renderer/notification_provider.cc',
        'renderer/active_notification_tracker.cc',
      ],
]

2.  target


3. includes

4. actions

5. variables


以content shell为例,如何编译cc/cpp文件时加入某个宏(以ENABLE_PLUGINS为例)呢?相当于全局宏

首先要找对gyp文件,先找到target 为so的地方,很容易在content_shell.gypi中找到下面的target_name

'target_name': 'libcontent_shell_content_view', 它又依赖与“content_shell_lib”

而content_shell_lib依赖于chromium各目录下gyp文件的某一个target(这些target最终生成.a文件)。所以

搜索ENABLE_PLUGINS后,发现都在content目录下使用,所以可以找到content.gyp文件,加入宏即可

部分代码如下(还需要加入用户自定义变量enable_plugins,这样plugin相关代码才会编译)

 'variables': {   'chromium_code': 1,  # Use higher warning level.   'enable_plugins': 1,   'chromium_enable_vtune_jit_for_v8%': 0,  # enable the vtune support for V8 engine.   'directxsdk_exists': '<!pymod_do_main(dir_exists ../third_party/directxsdk)', }, 'target_defaults': {   'defines': ['CONTENT_IMPLEMENTATION', 'ENABLE_PLUGINS=1'],...






参考:

GYP相关文档: https://code.google.com/p/gyp/w/list

build system: http://www.wy182000.com/2011/09/01/buildsystem/

0 0
原创粉丝点击