从0开始的Chrome源码安装配置(Windows环境配置指南)
前言
笔者最近被推介去读一下Chrome View的源码,这也就意味着我需要下载Chrome的源码进行研究。笔者这里也打算记录一下这个重要的过程,整理成笔记发布在这里给后来的人进行参考。尽管Chrome文档说的很详细了,但是对于初学者,仍然要花费不少的时间进行配置。还是比较折腾精力的。所以笔者在这里提供一个
需要准备的东西
Chrome的源码非常的吃我们的硬存,我们有必要单独准备一块外置的SSD硬盘(您可能问为什么不是机械的呢?答案是后续我们还要在这个盘上进行编译,笔者还没有完全拉取就至少霸占了60G多了,后续进行全量的编译显然还会更加的要看磁盘的IO速度),笔者目前准备的是一块1T的SSD硬盘。
另外,由于是国外的项目,您需要准备相应的网络工具保证至少可以拉取足够的
拉去源码
Chrome的源码和关系依赖可以说是笔者见过最为复杂的项目了,好在Google为我们准备了一份Python脚本,需要注意的是,在Windows上,你务必需要保证python3是可用的,然后需要做的就是拉取相应的工具。需要提示的是,笔者建议您直接在移动的SSD硬盘上进行安装。这样的话,我们的硬盘就可以作为一个天然的物理独立环境了。
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
下载之后,将您的depot_tools的目录添加到PATH中去,咱们后续会使用的。
DEPOT_TOOLS_WIN_TOOLCHAIN也需要被设置为0.这个事情在我们的Powershell中就是
$Env:DEPOT_TOOLS_WIN_TOOLCHAIN=0
vs2022_install这个变量也需要设置,指向的是我们的VS的下载地址(顺手吐槽一下VS和MSVC的捆绑行为属于是不太光彩)
下面是配置Git,由于咱们的源码非常的庞大,为了我们的克隆效率达到最优,我们设置一下
$ git config --global user.name "My Name" # 设置过了就别搞,第一次用Git的朋友设置
$ git config --global user.email "my-name@chromium.org" # 设置过了就别搞,第一次用Git的朋友设置
$ git config --global core.autocrlf false
$ git config --global core.filemode false
$ git config --global core.preloadindex true
$ git config --global core.fscache true
$ git config --global branch.autosetuprebase always
下面,咱们就准备开始长期的拉取源码了,这个时候务必设置你的电脑不要休眠,不要息屏导致下载中断(笔者被干好几次了)
mkdir chromium && cd chromium
我们创建一个chromium并且进入,下一步就是调用deptools中的fetch可执行文件
fetch chromium
就要这个,有朋友会尝试更加清量的fetch chromium --no-history
这会导致第三方的依赖不会被拉取,代价就是后续构建无法跑起来(气笑了,笔者研究的View依赖属于Third Party),到时候自己补依赖就会出现各种神奇的问题(我的出现了好几个拉一半不拉的情况,导致后续输出构建目录的时候我自己要手动补,天坑啊。。。)
所以你需要做的就是耐心的干别的事情,安静的等他下载完成。(笔者的平均网速是6MB/s,代价是一整天都在下,把我的梯子都榨干了。。。)
下载结束之后,我们就会在chromium目录下多一个src,**进入这个文件夹,之后我们的命令都会在这里执行!**这个就是咱们的Chrome源码了,想要进行编译,事情也很简单。只需要我们使用gn构建工具生成ninja的构建文件夹。下面的指令就是让我们在src/out/Default目录下生成ninja的构建文件夹,哦,补充一点,你必须在out文件夹下创建build目录。Default这个名称是随意的,无关紧要。只需要记住你的构建文件夹名称就好。
gn gen out\Default
下一步其实就是构建。
autoninja -C out\Default chrome
就好了,这个时候咱们默认生成的build文件夹就会在src/out/Default
,当然,Default这个名字你不太喜欢咱们可以换成别的,开心就好。
Tips:建议在autoninja后面追加-j参数。笔者建议是核心数的一半,我试过全CPU的编译,代价就是我的电脑直接卡到动不了了。。。
补充:在VSCode下阅读源码
下载源码不是为了别的,而是研究Chrome的机制。笔者认为,VS在阅读超大型的工程不算很给力,这一点VSCode的轻量很舒服。但是我们都知道他需要配置大量的插件才能有一个良好舒适的工作环节。好在咱们的Chrome贴心的给我们了vscode的各种配置json的模板,甚至开箱即可用。
复制所有tools/vscode下的json到咱们的src/.vscode(没有.vscode文件自己创建一个),然后安装他推介下载的插件(Tips:笔者特别exclude了C/C++插件,Microsoft的这个插件使用体验很难评价),注意到我们跳转代码使用的是clangd,为此,咱们还需要compile_commands.json来指导clangd生成正确的跳转索引。gn工具封装了生成compile_commands的功能。还记得我们之前写下的gn gen out\Default
嘛?只需要我们小小的补充一下:
gn gen out/Default --export-compile-commands
需要等待不少时间,笔者等待了小几分钟,生成了小半个G的文件,把他挪动到src文件夹下(他之前是在out/Default下的),然后咱们就可以继续打开VSCode了,clangd正常工作的时候会读取咱们的根文件夹来展开对符号的关系解析的。
Reference
实际上只有一个是最权威的,那就是:
Chromium Docs - Checking out and Building Chromium for Windows