天天看點

chromium windows compile 浏覽器編譯 vs2017 win10

https://blog.csdn.net/longji/article/details/80967225

01 閱讀官方文檔

https://chromium.googlesource.com/chromium/src/+/master/docs/windows_build_instructions.md

一個中文翻譯文檔:https://blog.csdn.net/Vincent95/article/details/78469807

02 安裝python2.7.*

depot_tools需要使用python2.7。

https://www.python.org/ftp/python/2.7.15/python-2.7.15.amd64.msi

03 配置 depot_tools

下載下傳depot_tools,加壓到d:\git\chromium\depot_tools,并把d:\git\chromium\depot_tools加入環境變量。

https://storage.googleapis.com/chrome-infra/depot_tools.zip

把depot_tools的路徑加到 PATH 環境變量的最前面,至少要加到python環境變量的前面

04 配置必要的資訊

設定git全局配置資訊

# user.name 和 user.email 需要使用自己的。

git config --global user.name "5455945"

git config --global user.email "[email protected]"

git config --global core.autocrlf false

git config --global core.filemode false

git config --global branch.autosetuprebase always

# 這個可以在系統環境變量裡面設定,也可以在指令行視窗設定

set GYP_MSVS_VERSION=2017

set DEPOT_TOOLS_WIN_TOOLCHAIN=0

set GYP_MSVS_OVERRIDE_PATH="D:\install\Microsoft Visual Studio\2017\Community"

1

2

3

4

5

6

7

8

9

10

11

05 下載下傳代碼

參考:https://chromium.googlesource.com/chromium/src/+/master/docs/windows_build_instructions.md#Using-the-Visual-Studio-IDE

fetch chromium

# 不下載下傳曆史版本資訊,速度較快,後續切換分支時略慢

fetch chromium --no-history

# 如果下載下傳失敗

gclient sync --nohooks --with_branch_heads --with_tags --output-json="log.json"

gclient runhooks # 或者 gclient runhooks --force

# 上面成功後,

cd src

git fetch --all

git fetch --tags

git pull

# 到此為止,是master的最新代碼

12

13

14

15

16

06 切換到相對穩定分支

參考:

https://omahaproxy.appspot.com/

http://www.chromium.org/developers/how-tos/get-the-code/working-with-release-branches

cd src # 在src目錄

# 建立新的分支b3440

git checkout -b b3440 branch-heads/3440

# 也可以考慮直接使用tag。比如:git checkout -b b3440 68.0.3440.54

cd .. # zai src的上一級目錄(chromium目錄)

gclient sync --with_branch_heads --with_tags

07 build時的設定參數

target_cpu=“x86”:指明生成的針對X86架構的CPU。

is_debug=false:指明生成的是Release版本可執行程式。

is_official_build=true:指明使用Chrome官方的編譯優化建議。

proprietary_codecs:指明支援H264編碼,編譯時,自動H264相關元件,打包PE檔案中。

enable_nacl=false:指明關閉支援NACL,這是一種Chrome插件,因為安全性,穩定性存在問題,已經很少使用了。

remove_webcore_debug_symbols=true:指明删除核心層支援調試的符号檔案,這樣,有助于減少檔案體積,提高運作速度。

檢視gn args 所有可用參數

gn 說明 https://www.chromium.org/developers/gn-build-configuration

:: 很重要的參考資料

gn args --list out\Debug

::去掉顯示頭檔案的包含樹

::修改src\build\toolchain\win\BUILD.gn,将/showIncludes删除掉

使用 --filters=//chrome , 會過濾掉一些工程,比如:setup,mini_installer 兩個工程,在設定 --filters=//chrome 支援ninja編譯,不會生成vs2017的工程。

是以是否使用 --filters=chrome,還需要根據自己的實際需要斟酌。

gn gen out/Debug --ide=vs2017 --filters=//chrome --args="target_os=\"win\" target_cpu=\"x86\" is_component_build=true is_debug=true is_official_build=false google_api_key=false google_default_client_id=false google_default_client_secret=false proprietary_codecs=true media_use_ffmpeg=true ffmpeg_branding=\"Chrome\" remove_webcore_debug_symbols=true enable_nacl=false enable_hevc_demuxing=true enable_dolby_vision_demuxing=true enable_mse_mpeg2ts_stream_parser=true enable_hls_sample_aes=true enable_ac3_eac3_audio_demuxing=true"

ninja -C out\Debug chrome setup mini_installer

:: 35025檔案

gn gen out/Release --ide=vs2017 --filters=//chrome --args="target_os=\"win\" target_cpu=\"x86\" is_component_build=false is_debug=false is_official_build=true google_api_key=false google_default_client_id=false google_default_client_secret=false proprietary_codecs=true media_use_ffmpeg=true ffmpeg_branding=\"Chrome\" remove_webcore_debug_symbols=true enable_nacl=false enable_hevc_demuxing=true enable_dolby_vision_demuxing=true enable_mse_mpeg2ts_stream_parser=true enable_hls_sample_aes=true enable_ac3_eac3_audio_demuxing=true"

ninja -C out\Release chrome

ninja -C out\Release mini_installer

gn gen out/DebugX64 --ide=vs2017 --filters=//chrome --args="target_os=\"win\" target_cpu=\"x64\" is_component_build=true is_debug=true is_official_build=false google_api_key=false google_default_client_id=false google_default_client_secret=false proprietary_codecs=true media_use_ffmpeg=true ffmpeg_branding=\"Chrome\" remove_webcore_debug_symbols=true enable_nacl=false enable_hevc_demuxing=true enable_dolby_vision_demuxing=true enable_mse_mpeg2ts_stream_parser=true enable_hls_sample_aes=true enable_ac3_eac3_audio_demuxing=true"

ninja -C out\DebugX64 chrome

:: is_component_build=false 和 is_official_build=true 不能同時為true

gn gen out/ReleaseX64 --ide=vs2017 --filters=//chrome --args="target_os=\"win\" target_cpu=\"x64\" is_component_build=false is_debug=false is_official_build=true google_api_key=false google_default_client_id=false google_default_client_secret=false proprietary_codecs=true media_use_ffmpeg=true ffmpeg_branding=\"Chrome\" remove_webcore_debug_symbols=true enable_nacl=false enable_hevc_demuxing=true enable_dolby_vision_demuxing=true enable_mse_mpeg2ts_stream_parser=true enable_hls_sample_aes=true enable_ac3_eac3_audio_demuxing=true"

ninja -C out\ReleaseX64 chrome

:: 生成安裝包

ninja -C out\ReleaseX64 mini_installer

ninja -C out\ReleaseX64 setup

:: 34416檔案

:: 關掉clang選項 is_clang=false,需要停用掉vs的頭檔案警告,修改src\build\toolchain\win\BUILD.gn,将/showIncludes删除掉

gn gen out/DebugX64 --ide=vs2017 --filters=//chrome --args="target_os=\"win\" target_cpu=\"x64\" is_component_build=true is_debug=true is_official_build=false google_api_key=false google_default_client_id=false google_default_client_secret=false proprietary_codecs=true media_use_ffmpeg=true ffmpeg_branding=\"Chrome\" remove_webcore_debug_symbols=true enable_nacl=false enable_hevc_demuxing=true enable_dolby_vision_demuxing=true enable_mse_mpeg2ts_stream_parser=true enable_hls_sample_aes=true enable_ac3_eac3_audio_demuxing=true is_clang=false"

:: 指定winsdk版本。如果本機按照多個版本的sdk,可以明确指定使用sdk的版本,目前官網說明使用10.0.17134

:: 注意,winsdk版本号不要加引号

gn gen out/DebugX64 --ide=vs2017 --filters=//chrome --args="target_os=\"win\" target_cpu=\"x64\" --winsdk=10.0.17134.12 is_component_build=true is_debug=true is_official_build=false google_api_key=false google_default_client_id=false google_default_client_secret=false proprietary_codecs=true media_use_ffmpeg=true ffmpeg_branding=\"Chrome\" remove_webcore_debug_symbols=true enable_nacl=false enable_hevc_demuxing=true enable_dolby_vision_demuxing=true enable_mse_mpeg2ts_stream_parser=true enable_hls_sample_aes=true enable_ac3_eac3_audio_demuxing=true"

:: 使用eclipse調試,指定ide=eclipse,使用 Eclipse IDE for C/C++ Developers x64版本

:: https://www.eclipse.org/downloads/packages/

:: https://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/2018-09/R/eclipse-cpp-2018-09-win32-x86_64.zip

gn gen out/eclipse --ide=eclipse --winsdk=10.0.17134.12 --filters=//chrome --args="target_os=\"win\" target_cpu=\"x64\" is_component_build=true is_debug=true is_official_build=false google_api_key=\"zdx-client-oauth-id\" google_default_client_id=\"761449048278-g5uovi72654mi09043umi634r03ms6h7.apps.googleusercontent.com\" google_default_client_secret=\"MPf1fXdwyTp9218HABi1fzyx\" proprietary_codecs=true media_use_ffmpeg=true ffmpeg_branding=\"Chrome\" remove_webcore_debug_symbols=true enable_nacl=false enable_hevc_demuxing=true enable_dolby_vision_demuxing=true enable_mse_mpeg2ts_stream_parser=true enable_hls_sample_aes=true enable_ac3_eac3_audio_demuxing=true"

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

chromium能夠支援的html5選項,可以參考: http://html5test.com/

*在gclient sync的時候遇到了錯誤,根據提示手動修改了 .py檔案。

後來編譯的時候又出現錯誤。解除安裝了windows wdk,編譯正常通過

Chrome浏覽器内置功能指令

https://wiki.deepin.io/mediawiki/index.php?title=Chrome浏覽器内置功能指令

08 設定遠端分支與本地分支對應關系

建立對應遠端分支的本地分支,比如:建立對應68的正式釋出版本的本地分支,68.0.3440.54,分支為b3440。

git checkout -b b3440 remotes/branch-heads/3440

建立本地分支與遠端分支的對應關系,遠端分支變化,切換到本地分支時,能夠直接觀察的到,或者使用 git fetch --all時,能夠拉到對應分支的變更内容

# git branch --set-upstream-to=遠端分支名詞 本地分支名稱

git branch --set-upstream-to=remotes/branch-heads/3440 b3440

09 檢視分支對應關系

git branch -vv

10 取消遠端分支對應關系

# git branch --set-unupstream-to=遠端分支名詞

git branch --set-unupstream-to=remotes/branch-heads/3440

11 編譯生成安裝包

ninja -C out/Release chrome setup mini_installer

out\Release\setup.exe --chrome --multi-install

12 幾個有用的指令

# 查找目前目錄下所有.gn檔案 是否包含 executable("chrome")

findstr /S "executable(\"chrome\")" *.gn

删除d:\path1目錄及子目錄下所有*.lock檔案

forfiles /P "d:\path1" /S /M "*.lock" -C "cmd /c del @path"

# 清楚不用的檔案

git clean -df # 注意,這個指令同時會清除git倉庫下面的submodule内容,慎用!!

git reset --hard

git reset --hard

git clean -xdf

:: 解決沖突

git rebase --continue

如果vs2017安裝路徑不是預設的,runhooks的時候提示的錯誤中含有 vs2017_install,需要自己在系統環境變量中添加一下vs2017_install環境變量。比如:我的vs2017安裝在D:\install\Microsoft Visual Studio\2017\Community。需要這樣設定:

set vs2017_install="D:\install\Microsoft Visual Studio\2017\Community"

13 關于google api key

如果需要使用google api key,可以在gn中指定 google api key 相關的參數。

擷取密鑰(ID)教程:

https://www.chromium.org/developers/how-tos/api-keys

擷取密鑰(ID)位址:

https://cloud.google.com/console

https://console.cloud.google.com/start

google_api_key

google_default_client_id

google_default_client_secret

也可以把這幾個參數直接寫在檔案src\google_apis\BUILD.gn 中的

對于同一個分支的 gclient sync,我們自己修改代碼前和修改代碼後不會影響gclient sync的。

git checkout -b bb3578_1 branch-heads/3578

git merge b3578

gclient sync

git checkout -b bb3578_2 branch-heads/3578

14 關于branch-heads/3578問題

在編譯branch-heads/3578後,debug x86版本。vs2017調試會出現崩潰現象,單獨運作debug release版本都正常。隻有調試的時候,出現崩潰。而且很頻繁。使用vs2017的15.9.1版本不行,回退到15.8版本,也不行。一次删除擴充插件也沒緩解。該問題為解決。

切換到 branch-heads/3538 穩定分支。70.0.3538.110,不修改任何代碼,vs2017調試,依然崩潰。

vs2017 社群版本,15.8 14.15 toolset。

最初使用vs2017 老版本,68.0.3440.105調試時,偶爾有崩潰問題 ,頻率不高。

後來,代碼更新到branch-heads/3578,調試登陸問題,崩潰頻率很高。于是更新vs2017到最新版本 15.9.1。崩潰頻率更高。

于是各種更新vs2017版本。包括:更好sdk版本15.8 14.15 toolset;14.14 toolset;解除安裝擴充插件。

重新完整安裝15.9.2版本。問題依然存在。

vs2017崩潰無提示。看vs2017報告顯示記憶體不足,觀察任務管理器或者ProcessHacker檢視,調試是記憶體最高占用4BG左右。

調試的chromium是x86版本。

目前沒找到解決辦法。

15 chrome://net-internals

chrome://net-internals/#proxy

chrome://net-internals/#dns

16 插件商店下載下傳相關的源碼

顯示安裝視窗的部分

void DashboardPrivateShowPermissionPromptForDelegatedInstallFunction::

OnWebstoreParseSuccess

kDashboardInvalidManifestError

ExtensionInstallPrompt::GetLocalizedExtensionForDisplay

安裝vs的環境要求

https://blog.csdn.net/LostSpeed/article/details/81405462

記得上次弄68版本的時候,一開始好像也遇到過上面部落格說的情況。

如果發現vs編譯或者調試chromium不行,那就完全解除安裝vs和sdk,然後用官網的安裝工具安裝。

————————————————

版權聲明:本文為CSDN部落客「longji」的原創文章,遵循CC 4.0 BY-SA版權協定,轉載請附上原文出處連結及本聲明。

原文連結:https://blog.csdn.net/longji/article/details/80967225