GN 编译配置

GN build configuration

本文档提供一些常用的GN编译步骤。假设你已经got a Chromium checkout
另请参阅

理解GN编译标志(flags)

重新调用GN的时候,你需要选择自己的编译目录。这个目录通常情况下都是src/out的子目录。你可以通过以下命令来设置编译目录的编译参数:

gn args out/mybuild

这个命令首先会弹出一个编辑器。编辑器默认保存为一个文本文件,文件的内容就相当于编译参数,这些内容其实就是GN代码,我们需要根据GN的语法来设置这些参数变量的值(布尔变量用 true/false,字符串用双引号,#用于注释)。

你可以通过以下命令来获取给出的编译目录的编译参数变量的列表:

$ gn args out/mybuild --list

获取某一个标志文档说明(这里是 is_component_build):

$ gn args out/mybuild --list=is_component_build

你必须在第一个参数中指定你的编译目录,因为在不同的编译环境和平台下,这些参数变量的默认值可能是不同的。举个例子,设置Android为目标系统,显示的可能是与Android相关的编译参数,并且这些参数的有不同的默认值。

这个页面上“GN args”的意思,不是将命令行中的参数传递给GN。而是将args.gn文件当作一个单独的参数传给GN,并且将文件中的内容作为--args参数的内容。

常用编译变量

Release编译

默认GN编译的是debug版本,通过以下参数改成release编译:

is_debug = false

release编译下启用DCHECK宏,来发现潜在的bugs。

dcheck_always_on = true

分散链接编译(Component build)

Component build是将最后一步本来很长的链接操作,改为链接成很多个分离的共享库的操作。它是默认的debug版的编译方式(除iOS编译),并且大多数开发者使用这种模式用于每天的编译及调试。这种模式启动会很慢,而且一些链接优化会被禁用,所以这不是测试的标准。有些人喜欢在release编译启用这种模式,来获取更快的链接速度和合理的运行性能。

is_component_build = true

不生成符号文件的快速编译

不生成符号文件将使调试几乎成为不可能,但编译确实会更快。当你想尽快编译的时候会很有用。

symbol_level = 0

禁用 Native Client

大多数开发者不需要测试 Native Client的功能,可以禁用它来提高编译速度。

enable_nacl = false

移除WebCore(内核)符号

WebCore有很多模版,导致会生成大量的符号文件。如果你不需要调试WebCore,可以不生成这些符号文件使编译更小更快。

remove_webcore_debug_symbols = true

Warning: 在Windows上,这将会导致许多blink的dll每次都会重新链接,因为丢失pdb文件,所以重新编译时可能会更慢。

重新指定CPU系列(Overriding the CPU architecture)

默认情况下,GN会使用和当前系统和CPU结构匹配的设置。重新设置:

target_cpu = "x86"

target_cpu可能的值:

  • Windows支持“x86”和“x64”。自从Chromium只支持在64位机器上编译时,默认的值总是“x64”。
  • Mac和桌面Linux只支持“x64”。在桌面Linux上你理论上可以使用ARM或MIPS结构的格式化字符串,但现在还不支持和验证。
  • Chrome OS支持“x86”和“x64”,但是在64位机器上编译32位文件需要是sysroot(管理员账户)。
  • 如果你编译Android包(下面介绍),默认的CPU结构是“arm”。你可以尝试将它重置为”arm64”, “x86”, “mipsel”, or “mips64el”,but the GN builds for these aren’t regularly tested.

Goma(一种分布式编译器)

Googlers可以使用它来分布式编译。 goma_dir仅当你将Goma工具放在非标准的路径时才需要指定(默认的路径为:~/goma or C:\goma\goma-win)。

use_goma = true
goma_dir = "/home/me/somewhere/goma"  # Optional

Chrome官方编译(Official Chrome build)

当你是Google员工且有内容的src源码检出时使用此类编译。在Linux上,运行gn args之前,先运行命令:

$ export GYP_DEFINES='buildtype=Official branding=Chrome'
$ gclient runhooks

The GYP_DEFINES and gclient runhooks steps are required on Linux because the hook that fetches the Linux sysroot still looks at GYP_DEFINES, even though the GYP tool is not actually used.非Linux平台,你可以跳过这步。

正式编译使用下面的参数:

is_official_build = true
is_chrome_branded = true
is_debug = false

编译32位正式版时,使用:

$ export GYP_DEFINES='buildtype=Official branding=Chrome target_arch=ia32'

替换第一步中Linux下的命令,并且将下面的参数添加到上面的参数设置中:

target_cpu = "x86"

Windows

有一个“gn gen”参数(–ide)用来生成Visual Studio项目和解决方案。

$ gn gen out\mybuild --ide=vs

默认生成的是VS 2015的工程文件。

编译Android版本(在Linux上)

假设你已经跟着Android build instructions的步骤检出了源码。

target_os = "android"

在Linux上使用相同的检出源码编译Android和Linux版本的Chrome是很容易的。你的.gclient文件中必须指出是Android,但必须有对应的SDK。如果你是按照Android文档的指示来检出代码的话,这些都会自动完成。如果已经存在的源码是Linux版本的检出,将下面的内容添加到.gclient文件中(在src上层目录中),并且运行gclient runhooks

solutions = [
  ...existing stuff in here...
]
target_os = [ 'android' ]  # Add this to get Android stuff checked out.

编译Chrome OS版本(在Linux上)

This will build the Chrome OS variant of the browser that is distributed with the operating system. You can run it on your Linux desktop for feature development.

target_os = "chromeos"

猜你喜欢

转载自blog.csdn.net/Vincent95/article/details/78477597