系统要求

  • 一台64位Intel机器,至少有8GB RAM。强烈推荐超过16GB。
  • NTFS格式的硬盘驱动器上至少有100GB的可用磁盘空间。FAT32不起作用,因为一些Git打包文件大于4GB。
  • 适当版本的Visual Studio,如下所述。
  • Windows 7或更高版本。

设置Windows

视觉工作室

截至2017年9月(R503915)Chromium需要Visual Studio 2017(15.7.2)才能构建。使用了clang-cl编译器,但是Visual Studio的头文件,库和一些工具是必需的。如果适用于您的许可证,Visual Studio Community Edition应该可以正常工作。您必须安装“使用C ++进行桌面开发”组件和“MFC和ATL支持”子组件。这可以通过将这些参数传递给您下载的Visual Studio安装程序从命令行完成:

--add Microsoft.VisualStudio.Workload.NativeDesktop
    --add Microsoft.VisualStudio.Component.VC.ATLMFC --includeRecommended

您必须安装版本10.0.17134 Windows 10 SDK。这可以单独安装,也可以通过选中Visual Studio Installer中的相应框来安装。

还必须安装SDK调试工具。如果通过Visual Studio安装程序安装了Windows 10 SDK,则可以通过以下方式安装它们:控制面板→程序→程序和功能→选择“Windows软件开发工具包”→更改→更改→检查“Windows调试工具” “→改变。或者,您可以下载独立SDK安装程序并使用它来安装调试工具。

安装 depot_tools

下载depot_tools包并将其解压缩到某处。

警告: 不要使用资源管理器中的drag-n-drop或copy-n-paste提取,这不会提取隐藏的“.git”文件夹,这是depot_tools自动更新自身所必需的。您可以使用上下文菜单中的“Extract all ...”。
将depot_tools添加到PATH的开头(必须先于任何Python安装)。假设您将软件包解压缩到C: src depot_tools,请打开:

控制面板→系统和安全→系统→高级系统设置

如果您具有管理员访问权限,请修改PATH系统变量并放在C:srcdepot_tools前面(或至少在任何可能已有Python或Git副本的目录前面)。

如果您没有管理员访问权限,则可以添加用户级PATH环境变量并放在C:srcdepot_tools前面,但如果您的系统PATH中包含Python,那么您将失去运气。

另外,以相同的方式添加DEPOT_TOOLS_WIN_TOOLCHAIN系统变量,并将其设置为0.这告诉depot_tools使用本地安装的Visual Studio版本(默认情况下,depot_tools将尝试使用google内部版本)。

从cmd.exe shell运行命令gclient(不带参数)。首次运行时,gclient将安装使用代码所需的所有Windows特定位,包括msysgit和python。

  • 如果你从非cmd shell(例如,cygwin,PowerShell)运行gclient,它可能看起来运行正常,但msysgit,python和其他工具可能无法正确安装。
  • 如果在第一次运行gclient时看到文件系统出现奇怪错误,则可能需要禁用Windows索引。
    运行gclient后打开命令提示符并键入where python并确认depot_tools python.bat位于python.exe的任何副本之前。在使用gn时未能确保这会导致过度构建 - 请参阅crbug.com/611087。

获取代码

首先,配置Git:

$ git config --global user.name "My Name"
$ git config --global user.email "my-name@chromium.org"
$ git config --global core.autocrlf false
$ git config --global core.filemode false
$ git config --global branch.autosetuprebase always

chromium为结帐创建一个目录并更改为它(您可以随意调用它并将其放在任何您喜欢的位置,只要完整路径没有空格):

$ mkdir chromium && cd chromium

运行该fetch工具depot_tools以检查代码及其依赖项。

$ fetch chromium

如果您不想要完整的仓库历史记录,可以通过添加--no-history标记来节省大量时间fetch。

即使快速连接,命令也需要30分钟,而较慢的连接则需要数小时。

当fetch完成时,它会创建一个隐藏的.gclient文件和一个名为目录src在工作目录。其余说明假设您已切换到src目录:

$ cd src

可选:如果您希望构建与某些Google服务进行通信,也可以安装API密钥,但对于大多数开发和测试目的而言,这不是必需的。

设置构建

Chromium使用Ninja作为其主要构建工具以及一个名为GN的工具来生成.ninja文件。您可以使用不同的配置创建任意数量的构建目录。要创建构建目录:

$ gn gen out/Default

  • 您只需为每个新的构建目录运行一次,Ninja将根据需要更新构建文件。
  • 您可以替换Default为其他名称,但它应该是一个子目录out。
  • 对于其他构建参数,包括发布设置,请参阅GN构建配置。默认情况下,调试组件构建与当前主机操作系统和CPU匹配。
  • 有关GN的更多信息,请gn help在命令行上运行或阅读快速入门指南。

使用Visual Studio IDE

如果要使用Visual Studio IDE,请在生成输出目录时使用--ide命令行参数gn gen(如获取代码页所述):

$ gn gen --ide=vs outDefault
$ devenv outDefaultall.sln

GN将all.sln在您的构建目录中生成一个文件。它将在内部使用Ninja进行编译,同时仍允许大多数IDE功能工作(没有本机Visual Studio编译模式)。如果再次手动运行“gen”,则需要重新提供此参数,但通常GN会在构建时自动保持构建和IDE文件的最新状态。

生成的解决方案将包含数千个项目,加载速度非常慢。使用--filters参数来限制仅为您感兴趣的代码生成项目文件。虽然这也将限制项目资源管理器中显示的文件,但调试仍然有效,您可以在手动打开的文件中设置断点。一个最小的解决方案,可让您在IDE中编译和运行Chrome,但不会显示任何源文件:

$ gn gen --ide=vs --filters=//chrome --no-deps outDefault

您可以选择性地将您关心的其他目录添加到过滤器中,如下所示: --filters=//chrome;//third_party/WebKit/;//gpu/

还有其他选项可用于控制解决方案的生成方式,并gn help gen针对当前文档运行。

默认情况下,在Visual Studio中开始调试时,调试器将仅附加到主浏览器进程。要调试所有Chrome,请安装Microsoft的Child Process Debugging Power Tool。您还需要以管理员身份运行Visual Studio,否则它将无法连接到Chrome的某些子进程。

也可以在没有解决方案文件的情况下在Visual Studio中调试和开发Chrome。只需“打开”您的chrome.exe二进制文件File->Open->Project/Solution,或者从Visual Studio命令提示符中“打开” ,如下所示:devenv /debugexe outDebugchrome.exe <your arguments>。许多Visual Studio的代码编辑功能在此配置中不起作用,但通过安装VsChromium Visual Studio扩展,您可以获得源代码以及其他有用的功能(如代码搜索)。

更快的构建

  • 通过从防病毒和索引软件中排除构建目录来减少文件系统开销。
  • 将构建树存储在快速磁盘(最好是SSD)上。
  • 核心越多越好(20+不过量),需要大量的RAM(64 GB并不过量)。

有一些gn标志可以提高构建速度。您可以在创建输出目录(gn args out/Default)或gn gen命令行(gn gen out/Default --args="is_component_build = true is_debug = true")时出现的编辑器中指定这些。要考虑使用的一些有用设置包括:

  • use_jumbo_build = true- 实验 Jumbo / unity构建。
  • is_component_build = true - 这使用更多,更小的DLL和增量链接。
  • enable_nacl = false - 这会禁用本地构建通常不需要的Native Client。
  • target_cpu = "x86" - x86版本比x64版本略快,并支持更多目标的增量链接。请注意,如果您设置此但不设置enable_nacl = false,则构建时间可能会变得更糟。
  • remove_webcore_debug_symbols = true - 关闭闪烁的源级调试以减少构建时间,如果您不打算调试闪烁则适当。

为了加快链接速度,您可以设置symbol_level = 1- 此选项可以减少链接器必须执行的工作,但是当设置此选项时,您无法进行源级调试。从symbol_level = 2(默认)切换到symbol_level = 1需要重新编译所有内容。

此外,Google员工应该使用分布式编译系统goma。详细信息可在内部获得,但相关的gn arg是:

  • use_goma = true

要从goma获得任何好处,将一个大的-j值传递给ninja是很重要的。一个好的默认值是10 numCores到20 numCores。如果你运行autoninja然后它将自动将适当的-j值传递给ninja以用于goma或不用。

$ autoninja -C outDefault chrome

在调用ninja时,指定'chrome'作为目标,以避免构建所有测试二进制文件。

但是,许多机器上的构建需要花费很多时间。

为什么我的构建速度慢?

许多事情可能会使构建变得缓慢,Windows Defender减缓了流程初创公司成为常见的罪魁祸首。您是否确保从防病毒扫描中排除整个Chromium src目录(在Google计算机上,这意味着将其放在src驱动器根目录中)?您是否尝试过上面列出的不同设置,包括不同的链接设置和-j值?您是否曾在chrome-dev邮件列表中询问您的构建是否比您的机器规格要慢?

下一步是收集一些数据。有几种选择。设置NINJA_STATUS可以配置Ninja的输出,例如,您可以看到在任何给定时间运行了多少进程,构建运行了多长时间等,如下所示:

> $ set NINJA_STATUS=[%r processes, %f/%t @ %o/s : %es ] 
> $ autoninja -C out\Default base
> ninja: Entering directory `out\Default'
[1 processes, 86/86 @ 2.7/s : 31.785s ] LINK(DLL) base.dll base.dll.lib base.dll.pdb

此外,如果将NINJA_SUMMARIZE_BUILD环境变量设置为1,则autoninja将在构建完成时打印构建性能摘要,显示最慢的构建步骤和构建步骤类型,如下所示:

$ set NINJA_SUMMARIZE_BUILD=1
$ autoninja -C out\Default base
    Longest build steps:
...
           1.2 weighted s to build base.dll, base.dll.lib, base.dll.pdb (1.2 s CPU time)
           8.5 weighted s to build obj/base/base/base_jumbo_38.obj (30.1 s CPU time)
    Time by build-step type:
...
           1.2 s weighted time to generate 1 PEFile (linking) files (1.2 s CPU time)
          30.3 s weighted time to generate 45 .obj files (688.8 s CPU time)
    31.8 s weighted time (693.8 s CPU time, 21.8x parallelism)
    86 build steps completed, average of 2.71/s

您还可以通过在构建后手动运行脚本来生成这些报告:

$ python depot_toolspost_build_ninja_summary.py -C outDefault

您还可以使用ninjatracing获取构建性能的可视化报告。这会将.ninja_log文件转换为.json文件,该文件可以加载到chrome:// tracing:

$ python ninjatracing outDefault.ninja_log >build.json

最后,Ninja可以报告自己的开销,这可能会有所帮助,例如,如果进程创建使构建变慢,可能是由于clang-cl不在排除目录中而导致的防病毒干扰:

$ autoninja -d stats -C out\Default base
metric                  count   avg (us)        total (ms)
.ninja parse            3555    1539.4          5472.6
canonicalize str        1383032 0.0             12.7
canonicalize path       1402349 0.0             11.2
lookup node             1398245 0.0             8.1
.ninja_log load         2       118.0           0.2
.ninja_deps load        2       67.5            0.1
node stat               2516    29.6            74.4
depfile load            2       1132.0          2.3
StartEdge               88      3508.1          308.7
FinishCommand           87      1670.9          145.4
CLParser::Parse         45      1889.1          85.0

建立Chromium

使用以下命令使用Ninja构建Chromium(“chrome”目标):

$ autoninja -C outDefault chrome

autoninja是一个包装器,它自动为传递给的参数提供最佳值ninja。

您可以通过gn ls out/Default从命令行运行从GN获取所有其他构建目标的列表。要编译一个,将N标签传递给Ninja,前面没有“//”(因此//chrome/test:unit_tests使用ninja -C out / Default chrome / test:unit_tests`)。

运行Chromium

构建完成后,您只需运行浏览器即可:

$ outDefaultchrome.exe

(命令中的“.exe”后缀实际上是可选的)。

运行测试目标

您可以以相同的方式运行测试。您还可以使用--gtest_filterarg 限制运行哪些测试,例如:

$ outDefaultunit_tests.exe --gtest_filter="PushClientTest.*"

您可以在GitHub页面上找到有关GoogleTest的更多信息。

更新您的结帐

校验更新

要更新现有结帐,您可以运行
要校验更新,您可以运行

$ git rebase-update
$ gclient sync

第一个命令更新主Chromium源存储库并在树顶(也称为Git分支origin/master)之上重新绑定任何本地分支。如果您不想使用此脚本,您还可以使用git pull或其他常见的Git命令来更新存储库。

第二个命令将子存储库同步到适当的版本,并根据需要重新运行挂钩。