1. 程式人生 > >GN 編譯配置

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"