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 Studio2019Professional
	set WINDOWSSDKDIR=D:Windows Kits10
	set TMP=C:WindowsTEMP
	set NUMBER_OF_PROCESSORS=4	# 表明有多少个CPU
	set DEPOT_TOOLS_WIN_TOOLCHAIN=0

	可以修改out/Default/args.gn设置编译参数,如设置enable_nacl=false,设置多了编译容易出错
  1. 编译: autoninja -C outDefault 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:workspacechromiumsrcuildtoolswingn.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 Studio2017Professional

5.2框架学习

GN 是一种元构建系统,是 GYP 的下一代产物,类似于 CMake、AutoTools;
ninja 是用来取代 GNU make 的,据谷歌官方的说法是速度有了好几倍的提升。

5.3额外问题

Q4:由于编译chromium需要80G+,磁盘空间不足,怎么办?
A4:VS的过程文件.sdf.pch占据很多的空间,可以先删除该文件,释放空间。批处理方法:

	显示sdf文件
	for /r "D:codec++workspace" %%i in (*.sdf) do (
	    echo %%i
	)
	pause

	删除sdf文件
	for /r "D:codec++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

原文地址:https://www.cnblogs.com/gwzz/p/15331443.html