Chromium源码学习(1)—— 拉取源码,编译

2024-05-30 17:36

本文主要是介绍Chromium源码学习(1)—— 拉取源码,编译,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

阅读建议:先简单过一下整个文章目录结构,大致了解一下各个步骤在干什么,然后在上手操作可能会事半功倍。也许你遇到的有些问题文章中已经提及到了,但是由于你没有往下看导致卡进度。

Chromium简介

Chromium项目于2008年发布,作为Google Chrome浏览器的开源部分。Google的Chrome浏览器基于Chromium开发,但添加了Google品牌、自动更新、内置Flash播放器、PDF阅读器等一些闭源的功能和服务。

除了Chorm,近几年微软大火的Edge浏览器也是基于Chromium进行开发的。

Chromium开源项目有活跃的社区和丰富的学习资源,官方也有详细的开发者文档,涵盖了从环境设置到代码贡献的各个方面。
Chromium官方网站

学习chromium源码并不是很适合编程初学者,初学者应该从编程语言,数据结构,操作系统,网络等知识进行学习。

而chromium主要使用C++语言进行编写,所以,学习chromium需要对C++语言比较熟悉。

这篇文章主要介绍如何拉取chrmmium源码以及如何使用vs系列的编译器进行编译。当然你也可以参照官方文档进行拉取源码以编译。

注意:官方建议环境

  • 硬件和软件需求
    • 具有至少 8GB RAM 的 64 位 Intel 计算机。强烈建议 16GB 以上。
    • NTFS 格式的硬盘上至少有 100GB 的可用磁盘空间。不能使用FAT32格式 ,因为某些 Git 包文件大于 4GB。
    • Windows 10 或更高版本。

如果自己的电脑配置不满足需求,就没必要继续向下进行了。

1.拉取源码

一般公司或者学校都使用Git维护代码,而chromium使用Google自己开发的Depot Tools管理代码仓库工具来维护chromium项目。在整个学习chromium的过程会看到很多东西都是Google自己开发的,并没有使用现有的。比如chromium的UI界面,由于Goolgle看不惯window提供的UI界面,于是自己开发了Views框架做为chormium的ui组件。

depot_tools是个工具包(depot是仓库的意思),里面包含gclientgclgnninja等工具,这些根据都是使用python写的。其主要的功能是对git的增强,让代码管理和编译更加简单,如果熟悉Git的话就很容易上手了。不熟悉也没关系,就一些常用的命令,用的时间久了,自然就会了。

Git不同的是:Depot Tools 更专注于大型项目的管理,提供了一些额外的功能和工具来满足大型项目的开发需求;而 Git 则是一种通用的版本控制系统,可以用于管理各种规模的项目,提供了丰富的版本控制和分支管理功能。

所以在拉取源码之前需要先下载Depot Tools

1.1 安装Depot Tools

下载Depot Tools。https://storage.googleapis.com/chrome-infra/depot_tools.zip
将其解压到指定的文件夹下(不要有中文路径)。

比如我解压在本地E盘下dev文件夹
image.png

注意:解压的时候,请务必使用“全部解压缩”选项或是其他的第三方软件解压缩。,千万不要双击打开复制文件,到文件加中,会丢失隐藏的.git 文件夹,导致工具无法更新

可以在你解压的文件夹中查看是否有.git文件夹。如果没有,则说明你可能解压错了,也有可能是你没有显示隐藏文件。
按照下图打开隐藏文件即可。

image.png
下载完Depot Tools后,顺便把环境变量配置好。按照下面的步骤即可

  • 1.win+i快捷键打开设置
  • 2.搜索框搜索环境变量(我是win11系统,win10界面会不一样)
    image.png
  • 3.选择编辑系统环境变量
  • 4.选择环境变量
    image.png
  • 5.在环境变量设置窗体中,下方的系统变量 选择中 “PATH”项,然后点击编辑。(一定是系统环境变量不要选择位用户环境变量)

image.png

  • 6.点击新建,然后选择刚才解压的depot tools路径。

image.png

  • 7.选中刚才新建的环境变量,使用上移移动到环境变量最顶部。(官方建议,有些电脑已经安装了python环境,而depot tools内置了python环境。)

image.png

  • 8.依次点击“确定”按钮保存(每一层都需要确定)

recording.gif

1.2验证depot_tools是否安装成功

按win键,搜索Windows PowerShell。打开即可。
(windows powershell也适用一些linux命令,比如ls,cd等等)
image.png
在打开的Windows PowerShell工具的窗体中输入glcient

注意:后续拉取源码等操作需要代理。

  • 如果出现下面这种情况,则说明是代理的问题,关于代理自行解决。
    image.png

  • 如果报错,那么在安装Depot Tools时或者环境变量配置出错了,重新安装配置即可。

  • 如果显示如下,恭喜您安装成功了,并且已经初始化升级成功。
    image.png

2.拉取源码

在本地创建一个文件夹,用于存放Chromium的源代码。建议空闲空间在200G以上。

比如我这里在本地创建了一个chromium文件夹用来存放源码(忽略已存在的文件,新建的是一个空白什么都没有的文件夹)

image.png
在此处打开Windows PowerShell工具shitf+右键选择在此处打开Powershell窗口即可。

image.png
在Windows PowerShell工具 使用 fetch chromium 命令拉取Chromium的源代码。

这里为了节约时间,我们添加 “–no-history”选项,不拉取历史记录,只拉取最新版Chromium
fetch --no-history chromium

image.png
如果出现下面这种情况,则说明你网络问题,没有设置代理,因为源码在国外,这个办法自己百度解决。(这个东西不敢教,多多包含…)一般设置为全局代理+TUN模式就可以了。如果你使用的是校园网,学校可能会拦截你,也是无法拉取的。
image.png
正常拉取源码如下图:
image.png
出现下面这种情况耐心等待即可。整个时长大概十分钟左右。
这是在向你的磁盘中写入数据, 打开你的存放chromium的文件夹,就可以看到在有新的文件夹被写入。
image.png
写入完成后就开始下载源码了。

image.png
整个源码大概40Gb左右,拉取时间非常长,耐心等待即可。
如果中途断掉了,不用删除全部文件重新拉取,使用gclient sync命令继续拉取即可。(gclient sync 是用于同步 Chromium 源代码的命令)
image.png
如果使用gclient sync进行同步时,出现错误,也是由于网络原因造成的,将你的windows PwoerShell设置代理即可。(我这里使用的使用clash for window,端口号使用的是默认的7890,你的端口号取决于你使用的代理。)

设置代理命令如下:

$env:HTTP_PROXY="http://127.0.0.1:7890"

$env:HTTPS_PROXY="http://127.0.0.1:7890"
image.png
设置完代理后,就可以正常的同步进行下载了

image.png

3.编译项目

3.1配置环境

编译项目使用官方推荐的vs2022即可,关于vs2022的安装,参考本人另一篇博客:
vs2022安装

安装完成后,也需要设置Visual Studio 2022 的安装路径的环境变量。
在系统环境变量中直接新建环境变量vs2022_install。变量值设置为vs2022的安装路径即可。

image.png

除了设置vs2022的安装环境变量,还需要设置DEPOT_TOOLS_WIN_TOOLCHAIN环境变量。

因为我们需要使用本地算力编译Chromium,所以需要添加 DEPOT_TOOLS_WIN_TOOLCHAIN 环境变量,并将其设置为 0。这告诉 depot_tools 使用本地安装的 Visual Studio 版本(默认情况下,depot_tools 将尝试使用 google 内部版本)

一样的,添加系统环境变量,变量名为:DEPOT_TOOLS_WIN_TOOLCHAIN,值为0即可。

image.png

3.2安装Windows SDK

Windows SDK - Windows app development | Microsoft Developer
因为在编译chrom时需要 10.0.22621.2428版本的Windows 11 SDK ,上面连接就是下载地址。
进入后点击下面下载即可。这里建议使用.ios镜像,直接在线下载完安装就行了。
image.png
下载完成后,安装即可

image.png
一路next即可,在安装组件的时候,选择Debugging Tools for Windows组件。

image.png

安装完成后,设置环境变量WINDOWSSDKDIR,值为安装Windows SDK 的安装路径。

image.png

3.3生成sln工程文件

Depot Tools工具包中提供了一个gn构建文件的工具。它的全称是 “Generate Ninja”,gn 工具的主要作用是将配置文件转化为 Ninja 构建系统可以使用的文件,从而管理项目的编译和链接。

通过gn工具,可以生成vs的工程文件。
按照一下步骤进行生成工程文件。

  • 1.打开Window PowerSheell,切换到chromium的src路径下。
  • 2.使用gn工具生成sln工程文件。gn args --ide=vs --filters=//chrome --no-deps .\out\vs_dev
    • 参数说明:

      • gn:调用 GN 工具。GN 是 “Generate Ninja” 的缩写,它用于生成构建文件(如 Ninja 构建系统的文件)。
      • args:GN 的一个子命令,用于生成或更新 args.gn 文件中的构建参数。
      • --ide=vs:指定生成适用于 Visual Studio 的项目文件。这个参数告诉 GN 生成 .sln 和 .vcxproj 文件,以便在 Visual Studio 中打开和编辑。
      • filters=//chrome:指定只生成 //chrome 目录下的项目文件。这个过滤器确保只有与 //chrome 模块相关的文件会被包括在生成的项目中。
      • --no-deps:指示 GN 不包括 //chrome 模块的依赖项。通常,模块可能依赖于其他许多库和组件,这个选项确保这些依赖项不会被包含,从而减少生成的项目文件数量。
    • 解释:

      • 由于整个chormium项目是非常庞大的,通过指定参数生成特定的模块项目,这里使用--filters=//chrome --no-deps选项只生成chrome相关的模块。
      • 这样做的好处就是能大幅度减少项目文件的数量,让开发和调式更高效。最直观的就是在第一次编译的时候,chrome相关的大概有五万多个文件,编译一般在6-8小时。如果全部都进行编译的话,时间只会更长。

image.png

  • 3.添加编译参数,方便调式
    • 执行上面的命令后,会自动弹出一个args文件,在弹出的args文件中添加is_debug = trueis_component_build = true
    • 添加完成后 关闭即可。
    • 这样你可以启用调试模式和组件构建模式。在后续使用vs中可以很好的调式代码。就不用在进行配置啦。

image.png

  • 4.等待工程文件生成即可。
    • 生成工程文件的时间并不会很长,生成后,使用vs2022打开即可。
    • 如果生成失败错误如下:说明环境变量搞错了。
    • 在window powershell 窗口中设置临时环境变量即可$env:WINDOWSSDKDIR = "D:\Windows Kits\10"替换为你的windows sdk安装路径。
      image.png
    • 成功生成如下:
      image.png
    • 同时,在你本地路径下就可看到sln工程文件了。

image.png

  • 5.使用vs2022 编译chromium项目

    • 右键all.sln工程文件,使用vs2022打开。

    image.png

    • 打开后 出现下面的信息,不用升级取消即可。升级后版本不匹配会带来问题的。

    image.png

    • 正常打开如下,点击运行即可进行编译。

    image.png

    • 如果出现下面的报错信息,下载ninja即可。

    image.png

    • nijia官网Ninja, a small build system with a focus on speed (ninja-build.org)下载nijia进行安装

    image.png

    image.png

    • 解压下载好的nijia即可
      image.png
    • 下载完nijia同样需要配置系统环境变量的PATH。需要保证在deptos_tools的上面即可。
      image.png
    • 然后重启vs2022重新进行编译即可。(不重启环境变量可能没生效)
    • 整个编译周期很长,CPU资源会被吃完,建议晚上进行编译,整个过程大概在6-8小时,不同配置的电脑存在区别。(不用担心,后续进行编译调式的时候用不了这么长时间,因为第一次已经成了ojb文件,后续直接进行连接即可,不用重新生成,后续进行调式编译的时候,大概是10分钟以下)

这篇关于Chromium源码学习(1)—— 拉取源码,编译的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1016616

相关文章

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、

Python实现无痛修改第三方库源码的方法详解

《Python实现无痛修改第三方库源码的方法详解》很多时候,我们下载的第三方库是不会有需求不满足的情况,但也有极少的情况,第三方库没有兼顾到需求,本文将介绍几个修改源码的操作,大家可以根据需求进行选择... 目录需求不符合模拟示例 1. 修改源文件2. 继承修改3. 猴子补丁4. 追踪局部变量需求不符合很

Spring 中 BeanFactoryPostProcessor 的作用和示例源码分析

《Spring中BeanFactoryPostProcessor的作用和示例源码分析》Spring的BeanFactoryPostProcessor是容器初始化的扩展接口,允许在Bean实例化前... 目录一、概览1. 核心定位2. 核心功能详解3. 关键特性二、Spring 内置的 BeanFactory

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx

IDEA编译报错“java: 常量字符串过长”的原因及解决方法

《IDEA编译报错“java:常量字符串过长”的原因及解决方法》今天在开发过程中,由于尝试将一个文件的Base64字符串设置为常量,结果导致IDEA编译的时候出现了如下报错java:常量字符串过长,... 目录一、问题描述二、问题原因2.1 理论角度2.2 源码角度三、解决方案解决方案①:StringBui

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题

《解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题》文章详细描述了在使用lombok的@Data注解标注实体类时遇到编译无误但运行时报错的问题,分析... 目录问题分析问题解决方案步骤一步骤二步骤三总结问题使用lombok注解@Data标注实体类,编译时

Go中sync.Once源码的深度讲解

《Go中sync.Once源码的深度讲解》sync.Once是Go语言标准库中的一个同步原语,用于确保某个操作只执行一次,本文将从源码出发为大家详细介绍一下sync.Once的具体使用,x希望对大家有... 目录概念简单示例源码解读总结概念sync.Once是Go语言标准库中的一个同步原语,用于确保某个操

Java汇编源码如何查看环境搭建

《Java汇编源码如何查看环境搭建》:本文主要介绍如何在IntelliJIDEA开发环境中搭建字节码和汇编环境,以便更好地进行代码调优和JVM学习,首先,介绍了如何配置IntelliJIDEA以方... 目录一、简介二、在IDEA开发环境中搭建汇编环境2.1 在IDEA中搭建字节码查看环境2.1.1 搭建步

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert