1.編譯chromium


1. 前言

做了兩年Chromium相關的開發,最近項目遇到瓶頸,自己有點迷茫。回顧之前做的工作,發現對chromium的認識還停留在非常表面的水平。因此,一直想對之前做的做個總結,只有總結反思才能提高。

2. 編譯環境

Label 推薦配置
系統版本 Ubuntu 18.04 64bit
處理器 x86_64
內存 8GB以上
硬盤 150GB以上空閑磁盤

這里采用Ubuntu編譯Linux版本,總體翻譯自:https://chromium.googlesource.com/chromium/src/+/master/docs/linux_build_instructions.md
如果想編譯Windows版本,請自行查閱google文檔:https://chromium.googlesource.com/chromium/src/+/master/docs/windows_build_instructions.md

此外由於谷歌很多網站國內無法訪問,還需自行准備上網工具。

3. 安裝工具軟件

3.1 git

安裝git:

$ sudo apt-get install git

做一下配置:

git config --global user.name "Your Name"
$ git config --global user.email "your-email"
$ git config --global core.autocrlf input
$ git config --global core.filemode false
$ git config --global branch.autosetuprebase always

需要提一下core.autocrlf的配置主要是解決Linux和Windows跨平台協作時文件換行符不統一的問題。它有三種取值:

  • input: git在提交時把CRLF轉換成LF,簽出時不轉換;
  • true: 提交時自動地把行結束符CRLF轉換成LF,而在簽出代碼時把LF轉換成CRLF;
  • false: 提交和簽出代碼均不會做更改。

在Linux上是建議設成input,windows上設置成true(當然如果你只是開發windows程序,設成false就可以了)。

3.2 python 2.7

sudo apt-get install python

3.3 depot_tools

git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git

添加到系統環境,編輯~/.bashrc,添加:

export PATH="$PATH:/path/to/depot_tools"

然后生效配置:source ~/.bashrc

此時你可以使用gclient等命令。

4. 獲取chromium源碼

首先創建一個chromium目錄用於存放代碼:

mkdir ~/chromium && cd ~/chromium

運行depot_tools的fetch工具來檢出源碼及其依賴項:

fetch --nohooks chromium [--no-history]

使用--no-history會讓下載的源碼不帶提交歷史信息,是最新的主分支代碼,代碼量會小很多。不使用該選項會獲取完整歷史信息的chromium源碼。

下載過程可能無法一番風順,經常出現下載中斷的情況,此時請使用:

gclient sync --nohooks

以繼續下載。

下載完成之后,進入到代碼目錄:

cd src

如果你沒有使用--no-history參數,那么此時你可以選擇切換指定分支,可以參考:https://dev.chromium.org/developers/calendar 找到當前最新的stable分支。以 77.0.3865.90為例:

git fetch --tags
git checkout -b stable_77 tags/77.0.3865.90
gclient sync --with_branch_heads --nohooks --job 16

5. 安裝依賴項

如果你是在Ubuntu下進行編譯,那么還在編譯之前需要安裝一些依賴工具,google已經寫好了腳本:

build/install-build-deps.sh

6. 運行hooks

hook直譯是鈎子。在chromium中代碼編譯是通過gclient來管理的,gclient 的核心功能是將項目中由DEPS文件定義的所有git倉庫拉取到指定的目錄或者運行指定腳本。為此添加了了hook功能。運行hook也即表示當前代碼並不完整,你可能需要的額外的二進制文件或者運行指定腳本。

gclient runhooks

7. 編譯

首先需要設置編譯選項:

gn args out/Default

這條命令會打開一個文件,我們需要在該文件中加入編譯選項:

is_debug = false
symbol_level = 0
enable_nacl = false
remove_webcore_debug_symbols = true

#ffmpeg setting
ffmpeg_branding = "Chrome" 
proprietary_codecs = true

可以通過gn args out/Default --list來查看具體有哪些編譯選項可選。

此外,如果你需要使用google服務,那么你需要在參數中加入你的google api key:

google_api_key = "your_api_key"
google_default_client_id = "your_client_id"
google_default_client_secret = "your_client_secret"

要申請請參考:https://www.chromium.org/developers/how-tos/api-keys

設置完編譯選項后,就可以開始進行編譯:

ninja -C out/Default chrome

時間比較久,不出意外,編譯成功后,你就可以運行:

out/Default/chrome

至此,就完成了chromium的編譯。由於chromium代碼量很大,再加上眾所周知的網絡原因,檢出代碼、運行hooks都會非常耗時,最后的編譯,如果你的機器配置不是很好,編譯會非常久,因此有條件一定要使用固態硬盤,否則你可能會抓狂。

8. 補充:如何編譯Linux上運行的chromeos版本

如果想編譯chromeos版本,需要向.gclient文件中加入平台信息:

echo target_os=[\"chromeos\"] >> .gclient

然后使用gclient sync更新代碼。

最后在編譯時,需要加上編譯參數:

target_os = "chromeos"

這樣編譯出來的chrome版本是一個模擬chromeos的版本。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM