从“获取代码”页面链接了其他平台的说明。
你是谷歌员工吗?请参见go/building-chrome。
谷歌员工须知
系统需求
安装
获取代码
安装附加的生成依赖项
运行钩子
设置构建
更快的构建
构建chromium
运行chromium
运行测试目标
更新您的检出
提示、技巧和故障排除
链接器崩溃
更多链接
下一步
其他发行版的注释
Arch Linux
Crostini (Debian based)
Fedora
Gentoo
OpenSUSE
Fedora 28 Lemote for Loongson
具有至少8GB内存的64位龙芯机器。强烈建议超过16GB。
至少100GB的可用磁盘空间。
您必须已经安装了Git和Python v2。
chromium的大多数开发是在Ubuntu上完成的(目前是16.04,Xenial Xerus)。下面是其他发行版的一些说明,但它们大多不受支持。
克隆depot_tools存储库:
$ git clone https://chrome.googlesource.com/chrome/tools/depot_tools. git
将depot_tools添加到您的PATH的末尾(您可能希望将它放入您的~/.bashrc或~/.zshrc)。假设您克隆了depot _ tools到/path/to/depot_tools:
$ export PATH = " $ PATH:/PATH/to/depot_tools "
将depot_tools克隆到主目录时,不要在PATH使用“~”,否则gclient runhooks将无法运行。相反,您应该使用$HOME或绝对路径:
$ export PATH = " $ PATH:$ { HOME }/depot_tools "
为检出创建一个chromium目录并对其进行更改(只要完整路径没有空格,您可以随意将其命名并放在任意位置):
注意:不要把chromium目录放到其他gclient项目的目录中。因为这样会造成.gclient配置文件冲突,从而导致fetch和gclient在执行过程中报错。
$ mkdir chromium && cd chromium
运行从depot_tools获取工具来检查代码及其依赖关系。
$ fetch --nohooks --no-history chromium
如果您想要完整的repo历史记录,可以通过删除--no-history标志来fetch,不过这样会更加消耗时间。
即使是快速连接,命令也要花30分钟,慢速连接要花几个小时。
如果您已经在机器上安装了构建依赖项(例如,从另一个检出),您可以省略--nohooks标志,fetch将在最后自动执行gclient runhooks。
注意:如果在下载过程中发生了异常(比较常见的是断网,因为vpn),再次执行fetch命令可能会报错:
Your current directory appears to already contain, or be part of, a checkout. "fetch" is used only to get new checkouts. Use "gclient sync" to update existing checkouts.
Fetch also does not yet deal with partial checkouts, so if fetch failed, delete the checkout and start over (crbug.com/230691).
这时,可以在chromium目录下执行:
$ gclient sync
提取完成后,它将创建一个隐藏的.gclient文件和工作目录中名为src的目录。指南的其余部分,假设您已经切换到src目录:
$ cd src
一旦您检出了代码。这里使用的是Fedora,所以,需要运行以下命令。如果您正在使用Ubuntu,运行
build/install-build-deps.sh。
su -c 'yum install git python bzip2 tar pkgconfig atk-devel alsa-lib-devel /
bison binutils brlapi-devel bluez-libs-devel bzip2-devel cairo-devel /
cups-devel dbus-devel dbus-glib-devel expat-devel fontconfig-devel /
freetype-devel gcc-c++ glib2-devel glibc gperf glib2-devel /
gtk3-devel java-1.*.0-openjdk-devel libatomic libcap-devel libffi-devel /
libgcc libgnome-keyring-devel libjpeg-devel libstdc++ libX11-devel /
libXScrnSaver-devel libXtst-devel libxkbcommon-x11-devel ncurses-compat-libs /
nspr-devel nss-devel pam-devel pango-devel pciutils-devel /
pulseaudio-libs-devel zlib httpd mod_ssl php php-cli python-psutil wdiff /
xorg-x11-server-Xvfb'
Blink的web测试所需的字体可以按照以下指南获得。对于可选包:
php-cgi由php-cli包提供。
sun-java6-fonts包含在上面链接的说明中。
注意:您可能需要调整其他Linux发行版的构建依赖关系。本文末尾有一些注释,但我们不能保证它们的准确性。
运行钩子
一旦您至少运行了一次install-build-deps,您现在可以运行chromium特定的钩子,它将下载额外的二进制文件和其他您可能需要的东西:
$ gclient runhooks
可选:如果您想让您的构建与一些谷歌服务对话,您也可以安装应用编程接口密钥,但是对于大多数开发和测试目的来说,这不是必需的。
设置构建
chromium使用忍者作为它的主要构建工具以及一个名为GN的工具来生成。忍者档案。您可以使用不同的配置创建任意数量的构建目录。要创建生成目录,请运行:
$ gn gen out/Default
你只需要为每个新的构建目录运行一次,忍者会根据需要更新构建文件。
您可以用另一个名称替换默认值,但它应该是out的子目录。
有关其他构建参数,包括发布设置,请参见GN构建配置。默认值是与当前主机操作系统和中央处理器匹配的调试组件版本。
有关gn的更多信息,请在命令行运行GN帮助或阅读快速入门指南。
更快的构建
这一部分包含一些可以改变的东西来加速你的构建,排序使得最大的不同首先出现。
巨型/统一构建
巨型构建将许多翻译单元(“源文件”)合并并编译在一起。因为chromium的大部分代码在共享头文件中,这大大减少了所需的工作量。有关更多信息,请查看巨型/统一构建。
通过设置GN参数use_jumbo_build=true来启用巨型构建。
禁用氯化钠
默认情况下,构建包括对本地客户端(氯化钠)的支持,但是大多数时候您都不需要它。您可以将GN参数enable_nacl设置为false,但它不会被构建。
包括更少的调试符号
默认情况下,GN生成一个启用了所有调试断言(is_debug=true)并包含完整调试信息(符号_level=2)的构建。将symbol_level=1设置为堆栈跟踪将产生足够的信息,但不是逐行调试。将symbol_level=0设置为完全不包含调试符号。与完整符号相比,这两种方法都可以加快构建速度。
禁用闪烁的调试符号
sudo mkdir-p/usr/share/font/truetype/TTF-lucida sudo find/usr/lib */JVM/Java-1.6。*-sun-*/jr
由于模板的广泛使用,闪烁代码产生了大约一半的调试符号。如果您不需要调试闪烁,您可以将GN参数闪烁_符号_级别设置为0。
使用Icecc
Icecc是分布式编译器,具有中央调度程序来共享构建负载。目前,许多外部贡献者使用它。例如英特尔、Opera、三星(谷歌公司使用一个名为戈马的内部系统)。
为了使用icecc,设置以下GN参数:
Linux _ use _ bundled _ binutils = false
使用调试裂变=假
is _铿锵=假
有关捆绑的binutils限制、调试裂变限制的更多信息,请参见这些链接。
当使用glibc 2.21或更高版本时,使用系统链接器可能也是必要的。查看相关错误。
ccache
你可以使用ccache来加速本地构建(同样,如果你是一个使用戈马的谷歌人,这是没有用的)。
通过将ccache_BASEDIR设置为工作目录共有的父目录(例如/home/您的用户名/开发),提高您的CCACHE命中率。考虑使用CCACHE _ SLOPPINESS = include _ file _ mtime(因为如果您使用多个工作目录,树的svn同步部分的头时间将会不同,有关更多信息,请参见CCACHE故障排除部分)。如果您使用主目录中的符号链接来到达本地物理磁盘目录,在那里保存这些工作的开发目录,请考虑将
别名cd="cd -P "
在你的。这样cwd或cwd总是指物理目录,而不是逻辑目录(并确保CCACHE_BASEDIR也指物理父目录)。
如果您对ccache进行了正确的调整,那么使用分支跟踪中继并与中继保持同步的第二个工作目录应该在大约1/3的时间内构建chromium,ccache -s报告的缓存缺失应该不会增加。
如果您使用git-new-workdir并保持多个本地工作目录同时运行,这尤其有用。
使用tmpfs
您可以将tmpfs用于生成输出,以减少所需的磁盘写入量。即,将tmpfs装载到生成输出所在的输出目录:
作为根:
mount -t tmpfs -o大小=20G,nr_inodes=40k,模式=1777 tmpfs /path/to/out
注意:您需要有足够的内存+交换来支持tmpfs。对于完整的调试版本,您将需要大约20 GB。对于构建chromium目标或发布版本来说更少。
惠普Z600(英特尔酷睿i7、16核超线程、12 GB内存)上的快速和脏基准数据
使用tmpfs:
12m:20s
没有tmpfs
15m:40s
制造chromium
使用以下命令用忍者建造chromium(“chromium”目标):
$ autoinja-C输出/默认镀chromium
(autoninja是一个包装器,它自动为传递给ninja的参数提供最佳值。)
通过从命令行运行gn ls out/Default,可以从GN中获得所有其他构建目标的列表。要编译一个,将GN标签传递给前面没有“//”的忍者(因此,对于//chrome/test:unit_tests使用autoinja-C out/Default chrome/test:unit _ tests)。
运行chromium
一旦构建完成,您可以简单地运行浏览器:
$ out/Default/chrome
运行测试目标
你可以用同样的方法进行测试。您还可以使用- gtest_filter参数来限制运行哪些测试,例如:
$ out/Default/unit _ Tests-gtest _ filter = " PushClientTest。* "
你可以在谷歌博客网站上找到更多关于谷歌测试的信息。
更新您的结帐
要更新现有签出,您可以运行
$ git rebase-更新
$ gclient同步
第一个命令更新主chromium源库,并在树梢(也称为Git分支源/主)上重设任何本地分支的基础。如果不想使用这个脚本,也可以使用git pull或其他通用git命令来更新回购。
第二个命令将依赖项同步到适当的版本,并根据需要重新运行挂钩。
提示、技巧和故障排除
链接器崩溃
如果在最终链接阶段:
链接输出/调试/镀chromium
您会得到如下错误:
collect2: ld终止,信号6中止终止在引发“std::bad_alloc”实例后调用
collect2: ld终止于信号11[分段故障],内核转储
链接时,您可能会耗尽内存。您必须使用64位系统来构建。尝试以下生成设置(有关其他设置,请参见GN生成配置):
在发布模式下构建(调试符号需要更多内存):is_debug = false
关闭符号:符号_级别= 0
在组件模式下构建(这仅用于开发,它将会更慢,并且可能具有中断的功能):组件构建=真吗
更多链接
关于铿锵建筑的信息。
您可能想要使用chroot来隔离您自己,避免版本控制或打包冲突。
ARM的交叉编译?请参见LinuxChromiumArm。
想使用Eclipse作为您的集成开发环境吗?请参见LinuxEclipseDev。
想要使用您的内置版本作为默认浏览器吗?请参见LinuxDevBuildAsDefaultBrowser。
下一步
如果你想为开发基于chromium的浏览器做出贡献,请查看Linux开发页面了解更多信息。
Gentoo
你可以运行浮现www-client/chrome。
OpenSUSE
使用zypper命令安装依赖项:
(openSUSE 11.1及更高版本)
subversion pkg-config python perl bison flex gperf /
Mozilla-NSS-dev gli B2-dev GTK-dev wdiff light tpd gcc gcc-c++
Mozilla-nspr Mozilla-nspr-dev php5-fastcgi alsa-dev lib expat-dev /
libjpeg-dev libb z2-dev
对于11.0,使用libnspr4-0d和libnspr4-dev代替mozilla-nspr和Mozilla-nspr-dev,并使用php5-cgi代替php5-fastcgi。
(openSUSE 11.0)
subversion pkg-config python perl /
bison flex gperf Mozilla-NSS-dev gli B2-dev GTK-dev /
libnspr 4-0d libnspr 4-dev wdiff light tpd gcc gcc-c++ lib expat-dev /
PHP 5-CGI alsa-develop GTK 3-develop JPEG-develop
Ubuntu包sun-java6-字体包含所用字体的一个java子集。因为这个包需要Java作为先决条件,所以我们可以通过安装等效的openSUSE Sun Java包来做同样的事情:
java-1_6_0-sun中的sudo zypper
网络工具包目前与微软字体硬链接。使用zypper安装这些
fetchmsttfonts字体中的sudo zypper
为了使上面安装的字体工作,因为路径是为Ubuntu硬编码的,所以创建指向适当位置的符号链接:
sudo mkdir-p/usr/share/font/truetype/msttcorefonts
sudo ln-s/usr/share/font/truetype/Arial . TTF/usr/share/font/truetype/msttcorefonts/Arial . TTF
sudo ln-s/usr/share/font/truetype/Arial BD . TTF/usr/share/font/truetype/msttcorefonts/Arial _ Bold . TTF
sudo ln-s/usr/share/font/truetype/Arial bi . TTF/usr/share/font/truetype/msttcorefonts/Arial _ Bold _ Italic . TTF
sudo ln-s/usr/share/font/truetype/Arial I . TTF/usr/share/font/truetype/msttcorefonts/Arial _ Italic . TTF
sudo ln-s/usr/share/font/truetype/Comic . TTF/usr/share/font/truetype/msttcorefonts/Comic _ Sans _ MS . TTF
sudo ln-s/usr/share/font/truetype/com icbd . TTF/usr/share/font/truetype/msttcorefonts/Comic _ Sans _ MS _ Bold . TTF
sudo ln-s/usr/share/font/truetype/cour . TTF/usr/share/font/truetype/msttcorefont/Courier _ new . TTF
sudo ln-s/usr/share/font/truetype/courbd . TTF/usr/share/font/truetype/msttcorefont/Courier _ New _ bold . TTF
sudo ln-s/usr/share/font/truetype/courbi . TTF/usr/share/font/truetype/msttcorefont/Courier _ New _ Bold _ Italic . TTF
sudo ln-s/usr/share/font/truetype/couri . TTF/usr/share/font/truetype/msttcorefonts/Courier _ New _ Italic . TTF
sudo ln-s/usr/share/font/truetype/impact . TTF/usr/share/font/truetype/msttcorefonts/impact . TTF
sudo ln-s/usr/share/font/truetype/Times . TTF/usr/share/font/truetype/msttcorefonts/Times _ New _ Roman . TTF
sudo ln-s/usr/share/font/truetype/timebd . TTF/usr/share/font/truetype/msttcorefont/Times _ New _ Roman _ bold . TTF
sudo ln-s/usr/share/font/truetype/timebi . TTF/usr/share/font/truetype/msttcorefonts/Times _ New _ Roman _ Bold _ Italic . TTF
sudo ln-s/usr/share/font/truetype/Times . TTF/usr/share/font/truetype/msttcorefonts/Times _ New _ Roman _ Italic . TTF
sudo ln -s /usr/share/fonts/truetype/verdana.ttf /usr/share/fonts/truetype/msttcorefonts/Verdana.ttf
sudo ln -s /usr/share/fonts/truetype/verdanab.ttf /usr/share/fonts/truetype/msttcorefonts/Verdana_Bold.ttf
sudo ln -s /usr/share/fonts/truetype/verdanai.ttf /usr/share/fonts/truetype/msttcorefonts/Verdana_Italic.ttf
sudo ln -s /usr/share/fonts/truetype/verdanaz.ttf /usr/share/fonts/truetype/msttcorefonts/Verdana_Bold_Italic.ttf
然后对于Java字体: e/lib -iname '*。TTF '-print /-exec ln-s { }/usr/share/font/truetype/TTF-lucida /;
参考文献:https://chromium.googlesource.com/chromium/src/+/master/docs/linux_build_instructions.md