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分钟以下)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/662257.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一个小技巧轻松提升量化精度!IntactKV:保持关键词元无损的大语言模型量化方法

目录 摘要关键词元(Pivot Tokens)方法概述实验验证1. 权重量化2. KV Cache 量化3. 权重和激活值量化 参考文献 本文介绍我们针对大语言模型量化的工作 IntactKV,可以作为插件有效提升 GPTQ、AWQ、QuaRot 等现有主流量化方法效果。论文作者来自…

Hadoop伪分布式安装教程

Hadoop伪分布式安装教程 一、安装背景1.1 软件列表1.2 系统软件列表 二、安装Hadoop2.1 安装 Java 环境2.1.1 前期准备2.1.2 文件传输2.1.3 解压文件2.1.4 配置 jdk 的环境变量2.1.5 输入 java、javac、java -version 命令检验 jdk 是否安装成功 2.2 Hadoop 下载地址[hadoop](h…

C语言序列化和反序列化--TPL(一)

TPL TPL说明网站 C语言中高效的序列化 您可以使用tpl快速轻松地存储和重新加载C数据。Tpl是一个用于序列化C数据的库。数据以自然二进制形式存储。该API很小,并试图保持“不碍事”。Tpl可以序列化许多C数据类型,包括结构。Tpl与文件、内存缓冲区和文件…

观成科技:Play勒索软件组织加密流量分析

1.概述 近年来,勒索软件组织的作业链条逐渐从“加密数据->收取赎金”转变到“数据窃取->加密数据->暗网披露窃取数据大小和内容描述->收取赎金”[1]。勒索软件组织在获取到受害者的访问权限后,不会立刻进行勒索,而是进行横向移动…

【ONE·Git || 基本用法入门】

总言 主要内容:主要介绍Git中常用的指令。   PS:多人协作与企业开发模型使用,此部分内容不作博文总结。             文章目录 总言1、初识Git1.1、版本控制器1.2、git安装 2、基本操作2.1、Git本地仓库2.1.1、创建Git本地仓库&…

【算法工程师】(三年面试五年模拟版)总结

写在前面: WeThinkIn (公主号) 学习经验分享 目录 1、机器学习基础 2、深度学习基础 2.1 1*1卷积的作用 注:卷积核的个数对应输出的通道数(channels),比如输入6*6*64,卷积核1…

Keil5 ~STM32报错Solutions#1

一、error: #268: declaration may not appear after executable statement in block

朋友圈定时发送设置

人日常中不可缺少的一件事,同时也是企业用来触达客户的重要渠道,下面一起来了解下微信朋友圈怎么定时发送呢?

生态农业:引领未来农业新篇章

生态农业,正以其独特的魅力和创新理念,引领着未来农业发展的新篇章。在这个充满变革的时代,我们需要更加关注农业的可持续发展,而生态农业正是实现这一目标的重要途径。 生态农业产业的王总说:生态农业强调生态平衡和可…

五种不寻常的身份验证绕过技术

身份验证绕过漏洞是现代web应用程序中普遍存在的漏洞,也是隐藏最深很难被发现的漏洞。 为此安全防护人员不断在开发新的认证方法,保障组织的网络安全。尽管单点登录(SSO)等工具通常是对旧的登录用户方式的改进,但这些技术仍然可能包含严重的…

Ubuntu22.04之解决:Flameshot无法截图问题(二百三十五)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

qt中实现多语言功能

qt中实现多语言功能 原理: 其本质就是生成ts文件,然后使用Linguist软件手工翻译,再生成qm文件,最后在主程序的开始加载不同的qm文件,实现多语言。 步骤: 修改程序文件 在pro文件中加入说明 TRANSLATI…

Android环境下Mesa初始化流程重学习之eglCreateContext

Mesa初始化流程重学习之eglCreateContext 引言 没有啥好说的了,直接上手撸代码!总得找点事情干不是!我打工我快乐!我奋斗,我快乐! 一. 核心结构体之间的关联 二. eglCreateContext流程分析 eglCreateContext(...)//s…

docker-compose jira、bugzilla

一、jira 同这篇文章: linux docker 部署破解版本jira:8.4.0——测试体验(非商用)_jira docker-CSDN博客 直到构建完破解版本的镜像就可以了~ 二、bugzilla 1. 拉取镜像: 官网镜像搜索bugzilla,第一个就是: 直接…

OLED写入指令和数据

1.OLED写命令 写命令/数据的代码 / * 1. start() 2. 写入 b0111 1000 0x78 3. ACK 4. cotrol byte: (0)(0)000000 写入命令 (0)(1)000000写入数据 5. ACK 6. 写入指令/数据 7. ACK 8. STOP */ void Oled_Write_Cmd(char dataCmd)5.1.4 OLED的寻址模式 如何显示一个点&#x…

信息系统项目管理师0136:工具与技术(8项目整合管理—8.9结束项目或阶段—8.9.2工具与技术)

点击查看专栏目录 文章目录 8.9.2 工具与技术 8.9.2 工具与技术 专家判断 结束项目或阶段过程中,应征求具备如下领域相关专业知识或接受过相关培训的个人或小组的意见,涉及领域包括:管理控制;审计;法规与采购&#xf…

实验八 单区域OSPF路由协议配置

一、实验目的 掌握 OSPF 动态路由协议的配置、诊断方法。 二、实验步骤 1、 运行Cisco Packet Tracer软件,在逻辑工作区放入三台路由器、两台工作站PC及一台笔记本,分别点击各路由器,打开其配置窗口,关闭电源,分别加…

小红书广告如何推广?投放费用是多少?

小红书以其独特的社区文化和用户粘性,成为了众多品牌争相推广的热门平台,如何在小红书上有效推广广告,让品牌信息精准触达目标用户,成为了众多营销人员关注的焦点,云衔科技为企业提供专业的开户和代运营服务。 一、小…

音乐传奇告别之作:《杰作》未解之谜❗❗

坂本龙一的《杰作》不仅是一部音乐会纪录电影,更是他赠予世界的一封深情告别信。 这部影片精心收录了这位音乐巨匠生前最后一场钢琴独奏音乐会的珍贵瞬间, 其中涵盖了《圣诞快乐,劳伦斯先生》、《末代皇帝》、《水》等二十首令人陶醉的经典…

爬虫的福音-移动蜂窝代理

在爬虫与反爬虫斗争愈演愈烈的情况下,各大网站和 App 的风控检测越来越强,其中一项就是 IP 封禁。 为了解决 IP 封禁的困扰,一个有效的方式就是设置代理,设置代理之后,爬虫可以借助代理的 IP 来伪装自己的真实 IP 地址…