Win10編譯chromium


Win10編譯chromium

1部署工具depot_tools和gclient

  1. 參考文檔

  2. 下載depot_tools: 下載地址

  3. 解壓depot_tools,並將路徑寫到PATH環境變量;

同時在環境變量中設置:DEPOT_TOOLS_WIN_TOOLCHAIN 值為:0

  1. 設置代理

     # git的代理設置
     git config --global http.proxy 127.0.0.1:1081
     git config --global https.proxy 127.0.0.1:1081
      
     # winhttp的代理設置
     netsh winhttp set proxy 127.0.0.1:1081 (控制台運行時需要以管理員權限打開)
     # [netsh winhttp擴展知識](https://blog.csdn.net/t1993ing/article/details/53517144)
      
     # cipd_client的代理設置
     cipd_client項目來源於
     https://github.com/luci/luci-go/tree/master/cipd/client/cipd
     通過源碼分析使用的是golong的net/http庫訪問http/https,可通過環境變量設置代理
      
     set HTTP_PROXY=127.0.0.1:1081   (注意不要加http://或者https://)
     set HTTPS_PROXY=127.0.0.1:1081  (注意不要加http://或者https://)
      
     本地代理(VPN)要求1081端口是本地http/https代理服務,
     如果是socks5代理cipd_client是不支持的,
     需要使用privoxy.exe再做一層http/https代理
    
     參考:https://blog.csdn.net/TDGX2004/article/details/66965675
    
  2. 首次運行gclient

From a cmd.exe shell, run the command gclient (without arguments). On first run, gclient will install all the Windows-specific bits needed to work with the code, including msysgit and python.

If you run gclient from a non-cmd shell (e.g., cygwin, PowerShell), it may appear to run properly, but msysgit, python, and other tools may not get installed correctly.
If you see strange errors with the file system on the first run of gclient, you may want to disable Windows Indexing.

大約執行時間為40分鍾

  1. 下載chromium源代碼

    fetch --no-history chromium

使用了depot_tools下的fetch獲取chromium代碼。

若是中間掉網了,可以使用gclient sync進行同步下載。

  1. 發現問題

Q:沒有Debug文件

A:需要安裝Win10 Debugging Tools

參考1-WIN10編譯chromium

參考2-Install tools for Windows app development

參考2為官方文檔,比參考1多了".Net桌面開發"的選項,少了"用於DirectX的圖形調試器和GPU探查器"。當使用vs2019調試chromium代碼時,使用參考2需要安裝容量為21.53GB。

先使用參考2下完,在利用參考1,下載win10 sdk,運行sdk之后選中debug tools單獨安裝,sdk下載鏈接為:

Windows 10 SDK

2 編譯

  1. 執行gn gen --ide=vs out/Default

在執行該命令之前,可考慮設置一下環境變量或者直接使用下面A3中的設置:

	set vs2019_install=C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional
	set WINDOWSSDKDIR=D:\Windows Kits\10
	set TMP=C:\Windows\TEMP
	set NUMBER_OF_PROCESSORS=4	# 表明有多少個CPU
	set DEPOT_TOOLS_WIN_TOOLCHAIN=0

	可以修改out/Default/args.gn設置編譯參數,如設置enable_nacl=false,設置多了編譯容易出錯
  1. 編譯: autoninja -C out\Default chrome

若有問題,再執行一次:src>ninja -C out/Default

  1. 等待...

編譯成功之后會在chromium/src/out/Default找到chrome.exe,該chrome是與本機環境匹配生成的。

3使用vs2019調試

  1. 使用VS2019打開out/Default/all.sln;
  2. 將chrome項目設置為啟動項目;
  3. 添加啟動參數--single-process,設置為單進程啟動,不然可能進不了斷點;
  4. 添加斷點;
  5. 開始調試

4問題錦集

Q1:git clone 出錯: RPC failed

	error: RPC failed; result=52, HTTP code = 0
	fatal: The remote end hung up unexpectedly

A2:文件太大,加大httpBuffer,設置為500M,方法如下:

	git config --global http.postBuffer 524288000

同時可以修改如下配置(可選), 可大幅度提升git克隆速度

	export GIT_TRACE_PACKET=1
	export GIT_TRACE=1
	export GIT_CURL_VERBOSE=1   

Q2:gclient是什么?

A2:gclient是谷歌開發的一套跨平台git倉庫管理工具,用來將多個git倉庫組成一個solution進行管理。總體上,其核心功能是根據一個Solution的DEPS文件所定義的規則,將多個git倉庫拉取到指定目錄。例如:chromium就有80多個獨立倉庫組成。

參考文檔

5相關概念:

  • hooks:當gclient拉完代碼之后,可執行額外腳本;
  • solution:一個包含DEPS文件的倉庫,可認為是一個完整的項目;
  • DEPS:一個特殊文件,規定了項目依賴關系;
  • .gclient:一個特殊文件,規定了要拉取的solution,可由gclient config命令創建出來
  • include_rules:指定當前目錄下哪些目錄/文件可以被其他代碼include包含,哪些不可以被include
  • 幫助命令:gclient --help

5.1gclient常用命令

5.1.1gclient config

Q3:gn.py: Could not find gn executable at: D:\workspace\chromium\src\buildtools\win\gn.exe

A3:環境變量中需要做如下設置(如下的2017可以改成2019):

set DEPOT_TOOLS_WIN_TOOLCHAIN=0
set GYP_MSVS_VERSION=2017
set GYP_GENERATORS=ninja,msvs-ninja
set GYP_MSVS_OVERRIDE_PATH=D:\Program Files (x86)\Microsoft Visual Studio\2017\Professional

5.2框架學習

GN 是一種元構建系統,是 GYP 的下一代產物,類似於 CMake、AutoTools;
ninja 是用來取代 GNU make 的,據谷歌官方的說法是速度有了好幾倍的提升。

5.3額外問題

Q4:由於編譯chromium需要80G+,磁盤空間不足,怎么辦?
A4:VS的過程文件.sdf.pch占據很多的空間,可以先刪除該文件,釋放空間。批處理方法:

	顯示sdf文件
	for /r "D:\code\c++\workspace\" %%i in (*.sdf) do (
	    echo %%i
	)
	pause

	刪除sdf文件
	for /r "D:\code\c++\workspace\" %%i in (*.sdf) do (
	    del %%i
	)
	pause

Q5:如何批處理刪除文件夾
A5:rd /s /q %DST_PATH%

	@echo off 表示不顯示執行的命令
	@echo on 打卡命令顯示
	set SRC_PATH=..\1
	set DST_PATH=..\1\

	復制文件夾
	/B 二進制 /E 覆蓋目錄和子目錄,包含空目錄 /Y 禁止確認直接寫一個已經存在的文件
	xcopy /B /E /Y %SRC_PATH%*.txt %DST_PATH%
	xcopy /B /E /Y %SRC_PATH%*a.* %DST_PATH%
	通過命令行刪除,效率太高了!!!
	
	:: rd 刪除目錄(包含空目錄) /s 目錄及其子目錄 /q 不需要確認
	!!!刪除操作,一定要看清當前所在目錄

Q6:按上述方法,出現如下編譯錯誤:

[30552/49806] CXX obj/services/network/public/mojom/url_loader_base_blink/url_loader.mojom-blink.obj

A6:重新再來一遍:src>ninja -C out/Default


免責聲明!

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



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