how_to_build_chromium_project_for_win

前言

这周用业余时间,编译了一次chromium工程. 中间有点自己挖的坑.
编译环境: win10x64(cpu = i7-2600k, memory = 16GB, harddisk = ssd-512mb + 2T机械硬盘) + vs2017 + depot_tools

编译了chromium, 才知道自己的开发机有多渣 :(

参考文档

主要看官方编译帮助(不同版本的chromium编译环境和编译步骤都不一样), 然后看看走在前面的同学怎么弄的(编译的是旧版chromium也没关系, 有参考价值)。
(官方)
https://chromium.googlesource.com/chromium/src/+/master/docs/windows_build_instructions.md#Get-the-code
(非官方)
https://www.cnblogs.com/Forever-Kenlen-Ja/p/7653144.html

编译步骤

下载的网络环境

需要连外网,自备小梯子。

下载官方的代码下载和编译工具集

下载depot_tools bundle https://storage.googleapis.com/chrome-infra/depot_tools.zip
depot_tools.zip => D:\3rd\for_chromium_build
D:\3rd\for_chromium_build\depot_tools.zip => unzip to d:\depot_tools
添加 d:\depot_tools 到环境变量path的头一条

卸载和编译chromium相关的软件

depot_tools会下载和运行除了vs2017外所有相关的软件, 只保留vs2017.

我的vs2017(Microsoft Visual Studio Enterprise 2017 v15.5.2)很久以前装的,将c开发相关的内容都装齐了. 是不是符合编译要求也没去看,如果因为vs2017版本问题编译不过,回头再升级.

如果不卸载除vs2017之外的相关软件,如果版本不符合编译要求,会编译失败.

卸载python3(如果装过)
卸载python2.7(如果装过)
卸载Tortoisegit(如果装过)
卸载git for win(如果装过)

设置环境变量

DEPOT_TOOLS_WIN_TOOLCHAIN = 0

初始化下载环境

在新开的cmd.exe(以管理员身份)中运行gclient
d:
cd d:\
gclient

// gclient的作用是初始化下载环境,大概需要10分钟,然后出以下提示,说明可以下一步了

Bootstrapping cipd client for windows-amd64 from https://chrome-infra-packages.appspot.com/client?platform=windows-amd64&version=git_revision:4d19637ec2c3d1efd8c6a1b05285118b786919e2...
Usage: gclient.py <command> [options]

配置git

git config –global user.name “My Name”
git config –global user.email “[email protected]
git config –global core.autocrlf false
git config –global core.filemode false
git config –global branch.autosetuprebase always

下载工程

cd d:\
d:
mkdir chromium && cd chromium
fetch chromium

// fetch chromium 作用是下载代码(10GB), 这需要几个小时的,看网速.

我这,第一次下载代码不成功,会报错。
估计是小梯子出了问题,或是fetch的bug.

Error: Command 'D:\\depot_tools\\win_tools-2_7_6_bin\\python\\bin\\python.exe src/third_party/depot_tools/download_from_google_storage.py --no_resume --no_auth --bucket chromium-gn -s src/buildtools/win/gn.exe.sha1' returned non-zero exit status 1 in d:\chromium
Hook ''D:\depot_tools\win_tools-2_7_6_bin\python\bin\python.exe' src/third_party/depot_tools/download_from_google_storage.py --no_resume --no_auth --bucket chromium-gn -s src/buildtools/win/gn.exe.sha1' took 16.23 secs
Traceback (most recent call last):
  File "D:\depot_tools\\fetch.py", line 306, in <module>
    sys.exit(main())
  File "D:\depot_tools\\fetch.py", line 301, in main
    return run(options, spec, root)
  File "D:\depot_tools\\fetch.py", line 295, in run
    return checkout.init()
  File "D:\depot_tools\\fetch.py", line 137, in init
    self.run_gclient(*sync_cmd)
  File "D:\depot_tools\\fetch.py", line 82, in run_gclient
    return self.run(cmd_prefix + cmd, **kwargs)
  File "D:\depot_tools\\fetch.py", line 71, in run
    subprocess.check_call(cmd, **kwargs)
  File "D:\depot_tools\win_tools-2_7_6_bin\python\bin\lib\subprocess.py", line 540, in check_call
    raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '('D:\\depot_tools\\win_tools-2_7_6_bin\\python\\bin\\python.exe', 'D:\\depot_tools\\gclient.py', 'sync')' returned non-zero exit status 2

重新下载代码

计算机重启,将网络环境搞好。
gclient sync
这次代码还是没同步完,报以下错误:

..................................................
INFO: Extracting package (pnacl_translator) to directory: D:\chromium\src\native_client\toolchain\win_x86\pnacl_translator
INFO: Extracting sandboxed_translators.tgz (1/1)
|------------------------------------------------|
..................................................
Hook ''D:\depot_tools\win_tools-2_7_6_bin\python\bin\python.exe' src/build/download_nacl_toolchains.py --mode nacl_core_sdk sync --extract' took 1553.40 secs
Running hooks:  22% (14/62) clang
________ running 'D:\depot_tools\win_tools-2_7_6_bin\python\bin\python.exe src/tools/clang/scripts/update.py' in 'D:\chromium'
Downloading https://commondatastorage.googleapis.com/chromium-browser-clang/Win/clang-330570-2.tgz .......... Done.
Copying C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\DIA SDK\bin\amd64\msdia140.dll to D:\chromium\src\third_party\llvm-build\Release+Asserts\bin
Hook ''D:\depot_tools\win_tools-2_7_6_bin\python\bin\python.exe' src/tools/clang/scripts/update.py' took 476.28 secs
Running hooks:  30% (19/62) gn_win
________ running 'D:\depot_tools\win_tools-2_7_6_bin\python\bin\python.exe src/third_party/depot_tools/download_from_google_storage.py --no_resume --no_auth --bucket chromium-gn -s src/buildtools/win/gn.exe.sha1' in 'D:\chromium'
0> Failed to fetch file gs://chromium-gn/eb69be2d984b4df60a8c21f598135991f0ad1742 for src/buildtools/win/gn.exe, skipping. [Err: [E2018-05-08T05:31:17.474440+08:00 24828 0 venv.go:942] Command (cwd=C:\Users\LOSTSP~1\AppData\Local\Temp\vpython_bootstrap912476286\packages\virtualenv-15.1.0): [D:\depot_tools\win_tools-2_7_6_bin\python\bin\python.exe -B -E -s virtualenv.py --no-download C:\Users\LostSpeed\.vpython-root\52f7db]
Process output:
New python executable in C:\Users\LostSpeed\.vpython-root\52f7db\Scripts\python.exe
Installing setuptools, pip, wheel...
  Complete output from command C:\Users\LostSpeed\....b\Scripts\python.exe - setuptools pip wheel:
  Collecting setuptools
Exception:
Traceback (most recent call last):
  File "C:\Users\LOSTSP~1\AppData\Local\Temp\vpython_bootstrap912476286\packages\virtualenv-15.1.0\virtualenv_support\pip-9.0.1-py2.py3-none-any.whl\pip\basecommand.py", line 215, in main
    status = self.run(options, args)
  File "C:\Users\LOSTSP~1\AppData\Local\Temp\vpython_bootstrap912476286\packages\virtualenv-15.1.0\virtualenv_support\pip-9.0.1-py2.py3-none-any.whl\pip\commands\install.py", line 324, in run
    requirement_set.prepare_files(finder)
  File "C:\Users\LOSTSP~1\AppData\Local\Temp\vpython_bootstrap912476286\packages\virtualenv-15.1.0\virtualenv_support\pip-9.0.1-py2.py3-none-any.whl\pip\req\req_set.py", line 380, in prepare_files
    ignore_dependencies=self.ignore_dependencies))
  File "C:\Users\LOSTSP~1\AppData\Local\Temp\vpython_bootstrap912476286\packages\virtualenv-15.1.0\virtualenv_support\pip-9.0.1-py2.py3-none-any.whl\pip\req\req_set.py", line 554, in _prepare_file
    require_hashes
  File "C:\Users\LOSTSP~1\AppData\Local\Temp\vpython_bootstrap912476286\packages\virtualenv-15.1.0\virtualenv_support\pip-9.0.1-py2.py3-none-any.whl\pip\req\req_install.py", line 278, in populate_link
    self.link = finder.find_requirement(self, upgrade)
  File "C:\Users\LOSTSP~1\AppData\Local\Temp\vpython_bootstrap912476286\packages\virtualenv-15.1.0\virtualenv_support\pip-9.0.1-py2.py3-none-any.whl\pip\index.py", line 465, in find_requirement
    all_candidates = self.find_all_candidates(req.name)
  File "C:\Users\LOSTSP~1\AppData\Local\Temp\vpython_bootstrap912476286\packages\virtualenv-15.1.0\virtualenv_support\pip-9.0.1-py2.py3-none-any.whl\pip\index.py", line 386, in find_all_candidates
    self.find_links, expand_dir=True)
  File "C:\Users\LOSTSP~1\AppData\Local\Temp\vpython_bootstrap912476286\packages\virtualenv-15.1.0\virtualenv_support\pip-9.0.1-py2.py3-none-any.whl\pip\index.py", line 236, in _sort_locations
    sort_path(os.path.join(path, item))
  File "C:\Users\LOSTSP~1\AppData\Local\Temp\vpython_bootstrap912476286\packages\virtualenv-15.1.0\virtualenv_support\pip-9.0.1-py2.py3-none-any.whl\pip\index.py", line 217, in sort_path
    if mimetypes.guess_type(url, strict=False)[0] == 'text/html':
  File "D:\depot_tools\win_tools-2_7_6_bin\python\bin\Lib\mimetypes.py", line 297, in guess_type
    init()
  File "D:\depot_tools\win_tools-2_7_6_bin\python\bin\Lib\mimetypes.py", line 358, in init
    db.read_windows_registry()
  File "D:\depot_tools\win_tools-2_7_6_bin\python\bin\Lib\mimetypes.py", line 258, in read_windows_registry
    for subkeyname in enum_types(hkcr):
  File "D:\depot_tools\win_tools-2_7_6_bin\python\bin\Lib\mimetypes.py", line 249, in enum_types
    ctype = ctype.encode(default_encoding) # omit in 3.x!
UnicodeDecodeError: 'ascii' codec can't decode byte 0xcf in position 1: ordinal not in range(128)

修正mimetypes.py

走在前面的同学已经给出了解决方法,注释掉# omit in 3.x!那个分支的实现

原始代码
D:\depot_tools\win_tools-2_7_6_bin\python\bin\Lib\mimetypes.py:241
        def enum_types(mimedb):
            i = 0
            while True:
                try:
                    ctype = _winreg.EnumKey(mimedb, i)
                except EnvironmentError:
                    break
                """
                try:
                    ctype = ctype.encode(default_encoding) # omit in 3.x!
                except UnicodeEncodeError:
                    pass
                """
                else:
                    yield ctype
                i += 1

修正后的代码

        def enum_types(mimedb):
            i = 0
            while True:
                try:
                    ctype = _winreg.EnumKey(mimedb, i)
                except EnvironmentError:
                    break
                else:
                    yield ctype
                i += 1

再次同步代码

gclient sync
这回代码下载完了
下载完成后,还会做一些事情,没有报错信息, 就说明下载代码这步成功了。
最后会有成功的提示

Running hooks: 100% (62/62), done.

备份下载好的代码和编译环境

代码下载用时太长了,再来一次受不了.
备份一下,如果代码有更新,从这份备份的干净代码上,同步代码花的时间短。

d:\chromium => d:\chromium_src_bk_2018_0508_0608.7z.001 ~ d:\chromium_src_bk_2018_0508_0608.7z.033
d:\depot_tools => d:\depot_tools_bk_2018_0508_0633.7z

压缩时,7zip报错, 显示有几个目录找不到. 不影响压缩.
// 这几个文件是快捷方式, 如果影响编译,自己建立这几个文件夹快捷方式出来
// 指向 D:\chromium\src\native_client\toolchain\win_x86\nacl_x86_glibc\x86_64-nacl\lib
        d:\chromium\src\native_client\toolchain\win_x86\nacl_x86_glibc\x86_64-nacl\lib\32\

// D:\chromium\src\native_client\toolchain\win_x86\nacl_x86_glibc\x86_64-nacl
   d:\chromium\src\native_client\toolchain\win_x86\nacl_x86_glibc\x86_64-nacl\lib64\

// D:\chromium\src\native_client\toolchain\win_x86\nacl_x86_newlib\x86_64-nacl\lib
   d:\chromium\src\native_client\toolchain\win_x86\nacl_x86_newlib\x86_64-nacl\lib\32\

// D:\chromium\src\native_client\toolchain\win_x86\nacl_x86_newlib\x86_64-nacl   
   d:\chromium\src\native_client\toolchain\win_x86\nacl_x86_newlib\x86_64-nacl\lib64\

安装win10sdk中的调试工具

如果不装win10sdk中的windbg, 工程文件不能产生.
// You must install the “Debugging Tools for Windows” feature from the Windows 10 SDK.
// 我传了一份到csdn上(https://blog.csdn.net/LostSpeed/article/details/77431458)

设置计算机的软件环境

  • 让win10自己管理虚拟内存, 非常重要!
    编译的时候,需要的内存16GB显然不够, 已经实验过了。必须要使用虚拟内存,还不能自己指定(自己指定的虚拟内存参数非常不合适). 如果不让win10自己管理虚拟内存,最后会因为内存不足,引起编译失败.
  • 关掉,杀掉,卸载掉对内存有影响或有注入行为, 监控行为的程序和服务。
    几次因为内存不足编译失败,给我整急了.
    在系统设置中,将虚拟内存自动管理,将视觉效果改为最优性能.(要重新启动计算机了)
    开机后:
    将win10杀毒软件选项都关掉(有监控,拦截行为)。
    将托盘中不需要的程序都关掉(节约内存)。
    将爱奇艺卸载(是个进程就注入…).
    将占用内存多(超过100MB)的程序,从内存管理器里面都杀掉。
    将不需要的服务关掉(e.g. 块级备份引擎),有的服务关不掉(e.g. MS杀毒引擎的服务).

产生工程文件

将vs2017的devenv全路径加入环境变量
C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE

delete D:\chromium\src\out\Default
run cmd.exe as administrator
d:
cd D:\chromium
gclient sync
set NINJA_SUMMARIZE_BUILD=1

cd src
gn gen –ide=vs out\Default
autoninja -C out\Default chrome
// 要用autoninja或ninja编译,不能使用vs2017打开all.sln编译,重要! vs2017直接编译不过.
// 不知道是不是虚拟内存的设置问题?不过在vs2017打开all.sln,没看到chromium工程中有依赖的.h和.c.
// 不确定是不是ninja编译完,才会重写all.sln和其他工程文件?

编译成功

[332/332] STAMP obj/chrome/chrome.stamp
    Longest build steps:
          29.4 weighted s to build obj/chrome/browser/browser_3.lib (147.0 s CPU time)
          32.0 weighted s to build obj/chrome/browser/browser_1.lib (154.8 s CPU time)
          32.8 weighted s to build obj/chrome/browser/browser_0.lib (156.4 s CPU time)
          34.6 weighted s to build obj/chrome/browser/browser_4.lib (158.1 s CPU time)
          40.4 weighted s to build obj/chrome/browser/extensions/extensions.lib (86.8 s CPU time)
          67.2 weighted s to build headless.dll, headless.dll.lib, headless.dll.pdb (217.6 s CPU time)
         134.9 weighted s to build blink_modules.dll, blink_modules.dll.lib, blink_modules.dll.pdb (134.9 s CPU time)
         282.7 weighted s to build content.dll, content.dll.lib, content.dll.pdb (282.7 s CPU time)
         302.7 weighted s to build chrome.dll, chrome.dll.lib, chrome.dll.pdb (302.7 s CPU time)
        1915.7 weighted s to build blink_core.dll, blink_core.dll.lib, blink_core.dll.pdb (1915.7 s CPU time)
    Time by build-step type:
           8.0 s weighted time to generate 200 .stamp files (63.0 s CPU time)
          13.9 s weighted time to generate 1 .bin files (27.7 s CPU time)
         424.0 s weighted time to generate 114 .lib files (2263.1 s CPU time)
        2753.8 s weighted time to generate 17 PEFile (linking) files (3016.6 s CPU time)
    3200.1 s weighted time (5370.4 s CPU time, 1.7x parallelism)
    332 build steps completed, average of 0.10/s

总结

原来想16GB内存还是够大,就将虚拟内存值改了。没想到chromium的编译需要这么多内存. 官方手册上推荐是64GB内存 + 工程所在的硬盘是SSD. 虚拟内存让OS来管理还是靠谱。

如果不让OS来管理虚拟内存,妄图全部在内存中完成所有操作,会出现cpu和内存占用率都到达100%的情况, 恐怖。

gclient sync 和 autoninja -C out\Default chrome 都是有增量功能的。
如果编译不过,前面已经做过的下载和编译任务还能用,这点比较人性.

实验记录

做本地实验的原始记录,供自己以后参考.
记录的有点乱,想不乱也有点难,好多次的编译不过.
本地实验总结,是从这个实验记录中整理出来的。

实现环境 : win10-64bits + vs2017
文档和原始档位置 : D:\3rd\for_chromium_build
建议:
    编译环境太娇气了(depot_tools, PATH环境变量, python2.7, git, 很多第三方的工具链),和日常开发环境整到一台计算机上,有可能过一段时间就编译不成功了。
    还是搞一个高配置的虚拟机靠谱.

工程的下载和编译过程实验

chromium 编译资料
(官方)
    https://chromium.googlesource.com/chromium/src/+/master/docs/windows_build_instructions.md#Get-the-code
(非官方)
https://www.cnblogs.com/Forever-Kenlen-Ja/p/7653144.html

vs2017有要求,先没管,如果build不了,会有错误提示。再装新版,很久以前,已经装了一个。

install depot_tools bundle
https://storage.googleapis.com/chrome-infra/depot_tools.zip
下载depot_tools.zip => D:\3rd\for_chromium_build
D:\3rd\for_chromium_build\depot_tools.zip => unzip to d:\depot_tools

添加 d:\depot_tools 到环境变量path的头一条

// gclient会安装所有需要的软件(除了vs2017),先卸载掉无关软件,否则后续下载后,软件同步失败.
卸载python3(如果装过)
卸载python2.7(如果装过)
卸载Tortoisegit(如果装过)
卸载git for win(如果装过)

设置环境变量
DEPOT_TOOLS_WIN_TOOLCHAIN = 0

初始化下载环境
在新开的cmd.exe(以管理员身份)中运行gclient
d:
cd d:\
gclient

要运行10分钟左右,然后会有一个新的gclient命令行出来, 这时可以下载源码了。
C:\WINDOWS\system32>gclient
Bootstrapping cipd client for windows-amd64 from https://chrome-infra-packages.appspot.com/client?platform=windows-amd64&version=git_revision:4d19637ec2c3d1efd8c6a1b05285118b786919e2...
Usage: gclient.py <command> [options]

Meta checkout dependency manager for Git.

配置git
git config --global user.name "My Name"
git config --global user.email "[email protected]"
git config --global core.autocrlf false
git config --global core.filemode false
git config --global branch.autosetuprebase always

cd d:\
d:
mkdir chromium && cd chromium
fetch chromium
这个操作要N久, 网上说要2个小时,主要是下载chromium, 10GB代码。
下载速度是2MB~4MB/S.开始时间是2018-5-7 22:33. 下载结束时间是 2018-5-7 23:27, 一个小时下载完成,速度还挺威武的:)
下载完, 自动将下载的文件合并, 同步第三方工程,下载工具链, 要等一段时间(2个小时)。

当gclient.py结束时,报错如下,但是src文件夹已经生成. 没有严格按照说明来配置开发环境,就是这下场, 不知道是否影响后续的编译..., 先试试.

Downloading 1 files took 15.464000 second(s)
 705864 0 annotate.go:242] #4 go.chromium.org/luci/vpython/venv/venv.go:497 - venv.(*Env).createLocked()
[E2018-05-08T00:41:09.579919+08:00 705864 0 annotate.go:242] #5 go.chromium.org/luci/vpython/venv/venv.go:272 - venv.(*Env).ensure.func1()
[E2018-05-08T00:41:09.579919+08:00 705864 0 annotate.go:242]   reason: failed to create new VirtualEnv
[E2018-05-08T00:41:09.579919+08:00 705864 0 annotate.go:242]
[E2018-05-08T00:41:09.579919+08:00 705864 0 annotate.go:242] #6 go.chromium.org/luci/vpython/venv/venv.go:957 - venv.mustReleaseLock()
[E2018-05-08T00:41:09.579919+08:00 705864 0 annotate.go:242] #7 go.chromium.org/luci/vpython/venv/venv.go:258 - venv.(*Env).ensure()
[E2018-05-08T00:41:09.579919+08:00 705864 0 annotate.go:242] #8 go.chromium.org/luci/vpython/venv/venv.go:154 - venv.With()
[E2018-05-08T00:41:09.579919+08:00 705864 0 annotate.go:242]   reason: failed to create empty probe environment
[E2018-05-08T00:41:09.579919+08:00 705864 0 annotate.go:242]
[E2018-05-08T00:41:09.579919+08:00 705864 0 annotate.go:242] #9 go.chromium.org/luci/vpython/run.go:63 - vpython.Run()
[E2018-05-08T00:41:09.579919+08:00 705864 0 annotate.go:242] #10 go.chromium.org/luci/vpython/application/application.go:318 - application.(*application).mainImpl()
[E2018-05-08T00:41:09.579919+08:00 705864 0 annotate.go:242] #11 go.chromium.org/luci/vpython/application/application.go:402 - application.(*Config).Main.func1()
[E2018-05-08T00:41:09.579919+08:00 705864 0 annotate.go:242] #12 go.chromium.org/luci/vpython/application/support.go:47 - application.run()
[E2018-05-08T00:41:09.579919+08:00 705864 0 annotate.go:242] #13 go.chromium.org/luci/vpython/application/application.go:401 - application.(*Config).Main()
[E2018-05-08T00:41:09.579919+08:00 705864 0 annotate.go:242] #14 vpython/main.go:92 - main.mainImpl()
[E2018-05-08T00:41:09.580920+08:00 705864 0 annotate.go:242] #15 vpython/main.go:98 - main.main()
[E2018-05-08T00:41:09.580920+08:00 705864 0 annotate.go:242] #16 runtime/proc.go:198 - runtime.main()
[E2018-05-08T00:41:09.580920+08:00 705864 0 annotate.go:242] #17 runtime/asm_amd64.s:2361 - runtime.goexit()
]
Error: Command 'D:\\depot_tools\\win_tools-2_7_6_bin\\python\\bin\\python.exe src/third_party/depot_tools/download_from_google_storage.py --no_resume --no_auth --bucket chromium-gn -s src/buildtools/win/gn.exe.sha1' returned non-zero exit status 1 in d:\chromium
Hook ''D:\depot_tools\win_tools-2_7_6_bin\python\bin\python.exe' src/third_party/depot_tools/download_from_google_storage.py --no_resume --no_auth --bucket chromium-gn -s src/buildtools/win/gn.exe.sha1' took 16.23 secs
Traceback (most recent call last):
  File "D:\depot_tools\\fetch.py", line 306, in <module>
    sys.exit(main())
  File "D:\depot_tools\\fetch.py", line 301, in main
    return run(options, spec, root)
  File "D:\depot_tools\\fetch.py", line 295, in run
    return checkout.init()
  File "D:\depot_tools\\fetch.py", line 137, in init
    self.run_gclient(*sync_cmd)
  File "D:\depot_tools\\fetch.py", line 82, in run_gclient
    return self.run(cmd_prefix + cmd, **kwargs)
  File "D:\depot_tools\\fetch.py", line 71, in run
    subprocess.check_call(cmd, **kwargs)
  File "D:\depot_tools\win_tools-2_7_6_bin\python\bin\lib\subprocess.py", line 540, in check_call
    raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '('D:\\depot_tools\\win_tools-2_7_6_bin\\python\\bin\\python.exe', 'D:\\depot_tools\\gclient.py', 'sync')' returned non-zero exit status 2

////////////////////////////////////////////////////////////
Syncing projects: 100% (84/84), done.
Running hooks:   6% ( 4/62) nacltools
________ running 'D:\depot_tools\win_tools-2_7_6_bin\python\bin\python.exe src/build/download_nacl_toolchains.py --mode nacl_core_sdk sync --extract' in 'D:\chromium'
INFO: --Syncing nacl_arm_glibc to revision 053185d68ed3b96640f15c4ae457b1ff373c6cac--
INFO: Downloading package archive: binutils_arm_i686_w64_mingw32.tgz (1/6)
INFO: Downloading package archive: gcc_arm_i686_w64_mingw32.tgz (2/6)
INFO: Downloading package archive: gcc_libs_arm.tgz (3/6)
INFO: Downloading package archive: gdb_i686_w64_mingw32.tgz (4/6)
INFO: Downloading package archive: glibc_arm.tgz (5/6)
INFO: Downloading package archive: sdk_libs_arm.tgz (6/6)
INFO: --Syncing nacl_x86_glibc to revision 9ff1dc0c05b45941b86bed303a87a9eac17192ea--
INFO: Downloading package archive: core_sdk.tar.bz2 (1/3)
INFO: Downloading package archive: gdb_i686_w64_mingw32.tgz (2/3)
INFO: Downloading package archive: toolchain.tar.bz2 (3/3)
INFO: --Syncing nacl_x86_newlib to revision 11953a35fcd4f999b097a343bc49d89f94af21a8--
INFO: Downloading package archive: core_sdk.tgz (1/3)
INFO: Downloading package archive: gdb_i686_w64_mingw32.tgz (2/3)
INFO: Downloading package archive: naclsdk.tgz (3/3)

第二次重新开始做时,下载那就停住了. 重新同步 gclient sync
还好,可以从下载naclsdk.tgz开始,虽然没有进度提示,但是看任务管理器中的网卡流量,下载速度为600KB/S. 等着下载完成.
决策很英明, 可能是网络连接卡住了,或gclient有bug, 在重新同步前,在下载naclsdk.tgz那卡了好久,重新同步后,2分钟就下载完了naclsdk.tgz.
下载naclsdk.tgz成功后,去看了size, 30MB, 不大,确实是gclient或网络有问题.

////////////////////////////
还是同步不完
..................................................
INFO: Extracting package (pnacl_translator) to directory: D:\chromium\src\native_client\toolchain\win_x86\pnacl_translator
INFO: Extracting sandboxed_translators.tgz (1/1)
|------------------------------------------------|
..................................................
Hook ''D:\depot_tools\win_tools-2_7_6_bin\python\bin\python.exe' src/build/download_nacl_toolchains.py --mode nacl_core_sdk sync --extract' took 1553.40 secs
Running hooks:  22% (14/62) clang
________ running 'D:\depot_tools\win_tools-2_7_6_bin\python\bin\python.exe src/tools/clang/scripts/update.py' in 'D:\chromium'
Downloading https://commondatastorage.googleapis.com/chromium-browser-clang/Win/clang-330570-2.tgz .......... Done.
Copying C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\DIA SDK\bin\amd64\msdia140.dll to D:\chromium\src\third_party\llvm-build\Release+Asserts\bin
Hook ''D:\depot_tools\win_tools-2_7_6_bin\python\bin\python.exe' src/tools/clang/scripts/update.py' took 476.28 secs
Running hooks:  30% (19/62) gn_win
________ running 'D:\depot_tools\win_tools-2_7_6_bin\python\bin\python.exe src/third_party/depot_tools/download_from_google_storage.py --no_resume --no_auth --bucket chromium-gn -s src/buildtools/win/gn.exe.sha1' in 'D:\chromium'
0> Failed to fetch file gs://chromium-gn/eb69be2d984b4df60a8c21f598135991f0ad1742 for src/buildtools/win/gn.exe, skipping. [Err: [E2018-05-08T05:31:17.474440+08:00 24828 0 venv.go:942] Command (cwd=C:\Users\LOSTSP~1\AppData\Local\Temp\vpython_bootstrap912476286\packages\virtualenv-15.1.0): [D:\depot_tools\win_tools-2_7_6_bin\python\bin\python.exe -B -E -s virtualenv.py --no-download C:\Users\LostSpeed\.vpython-root\52f7db]
Process output:
New python executable in C:\Users\LostSpeed\.vpython-root\52f7db\Scripts\python.exe
Installing setuptools, pip, wheel...
  Complete output from command C:\Users\LostSpeed\....b\Scripts\python.exe - setuptools pip wheel:
  Collecting setuptools
Exception:
Traceback (most recent call last):
  File "C:\Users\LOSTSP~1\AppData\Local\Temp\vpython_bootstrap912476286\packages\virtualenv-15.1.0\virtualenv_support\pip-9.0.1-py2.py3-none-any.whl\pip\basecommand.py", line 215, in main
    status = self.run(options, args)
  File "C:\Users\LOSTSP~1\AppData\Local\Temp\vpython_bootstrap912476286\packages\virtualenv-15.1.0\virtualenv_support\pip-9.0.1-py2.py3-none-any.whl\pip\commands\install.py", line 324, in run
    requirement_set.prepare_files(finder)
  File "C:\Users\LOSTSP~1\AppData\Local\Temp\vpython_bootstrap912476286\packages\virtualenv-15.1.0\virtualenv_support\pip-9.0.1-py2.py3-none-any.whl\pip\req\req_set.py", line 380, in prepare_files
    ignore_dependencies=self.ignore_dependencies))
  File "C:\Users\LOSTSP~1\AppData\Local\Temp\vpython_bootstrap912476286\packages\virtualenv-15.1.0\virtualenv_support\pip-9.0.1-py2.py3-none-any.whl\pip\req\req_set.py", line 554, in _prepare_file
    require_hashes
  File "C:\Users\LOSTSP~1\AppData\Local\Temp\vpython_bootstrap912476286\packages\virtualenv-15.1.0\virtualenv_support\pip-9.0.1-py2.py3-none-any.whl\pip\req\req_install.py", line 278, in populate_link
    self.link = finder.find_requirement(self, upgrade)
  File "C:\Users\LOSTSP~1\AppData\Local\Temp\vpython_bootstrap912476286\packages\virtualenv-15.1.0\virtualenv_support\pip-9.0.1-py2.py3-none-any.whl\pip\index.py", line 465, in find_requirement
    all_candidates = self.find_all_candidates(req.name)
  File "C:\Users\LOSTSP~1\AppData\Local\Temp\vpython_bootstrap912476286\packages\virtualenv-15.1.0\virtualenv_support\pip-9.0.1-py2.py3-none-any.whl\pip\index.py", line 386, in find_all_candidates
    self.find_links, expand_dir=True)
  File "C:\Users\LOSTSP~1\AppData\Local\Temp\vpython_bootstrap912476286\packages\virtualenv-15.1.0\virtualenv_support\pip-9.0.1-py2.py3-none-any.whl\pip\index.py", line 236, in _sort_locations
    sort_path(os.path.join(path, item))
  File "C:\Users\LOSTSP~1\AppData\Local\Temp\vpython_bootstrap912476286\packages\virtualenv-15.1.0\virtualenv_support\pip-9.0.1-py2.py3-none-any.whl\pip\index.py", line 217, in sort_path
    if mimetypes.guess_type(url, strict=False)[0] == 'text/html':
  File "D:\depot_tools\win_tools-2_7_6_bin\python\bin\Lib\mimetypes.py", line 297, in guess_type
    init()
  File "D:\depot_tools\win_tools-2_7_6_bin\python\bin\Lib\mimetypes.py", line 358, in init
    db.read_windows_registry()
  File "D:\depot_tools\win_tools-2_7_6_bin\python\bin\Lib\mimetypes.py", line 258, in read_windows_registry
    for subkeyname in enum_types(hkcr):
  File "D:\depot_tools\win_tools-2_7_6_bin\python\bin\Lib\mimetypes.py", line 249, in enum_types
    ctype = ctype.encode(default_encoding) # omit in 3.x!
UnicodeDecodeError: 'ascii' codec can't decode byte 0xcf in position 1: ordinal not in range(128)

/////////////////////////////
原始代码
D:\depot_tools\win_tools-2_7_6_bin\python\bin\Lib\mimetypes.py:241
        def enum_types(mimedb):
            i = 0
            while True:
                try:
                    ctype = _winreg.EnumKey(mimedb, i)
                except EnvironmentError:
                    break
                """
                try:
                    ctype = ctype.encode(default_encoding) # omit in 3.x!
                except UnicodeEncodeError:
                    pass
                """
                else:
                    yield ctype
                i += 1

修改D:\depot_tools\win_tools-2_7_6_bin\python\bin\Lib\mimetypes.py如下,再运行gclient sync

        def enum_types(mimedb):
            i = 0
            while True:
                try:
                    ctype = _winreg.EnumKey(mimedb, i)
                except EnvironmentError:
                    break
                else:
                    yield ctype
                i += 1

// 这回成功了
Downloading 4 files took 10.957000 second(s)
Hook ''D:\depot_tools\win_tools-2_7_6_bin\python\bin\python.exe' src/third_party/depot_tools/download_from_google_storage.py --no_resume --no_auth --num_threads=4 --bucket chromium-binary-patching/zucchini_testdata --recursive -d src/components/zucchini' took 12.45 secs
Running hooks: 100% (62/62), done.

/////////////////////////////////
git config --global user.name "My Name"
git config --global user.email "[email protected]"
git config --global core.autocrlf false
git config --global core.filemode false
git config --global branch.autosetuprebase always

gclient
// git rebase-update // 这句不好使
gclient sync // 这里还是返回失败, 现在知道,这里失败是由于D:\depot_tools\win_tools-2_7_6_bin\python\bin\Lib\mimetypes.py:241有问题.

因为发生了错误,导致工程文件产生不成功,重新增量更新工程
// 可能下载太长时间了,网络出了问题,重启计算机后,连上网络

// 将刚下载好的工程目录分卷压缩下,备用, 编译的不合适了或还需要实验重新增量下载,还可以从头来,这时要是虚拟机就好了,这个点做个快照.
压缩(只保存)一份.7z备用

最初的原始工具包 : D:\3rd\for_chromium_build\depot_tools.zip
d:\chromium => d:\chromium_src_bk_2018_0508_0608.7z.001 ~ d:\chromium_src_bk_2018_0508_0608.7z.033
d:\depot_tools => d:\depot_tools_bk_2018_0508_0633.7z

压缩时,7zip报错, 显示有几个目录找不到. 不影响压缩.
// 这几个文件是快捷方式, 如果影响编译,自己建立这几个文件夹快捷方式出来
// 指向 D:\chromium\src\native_client\toolchain\win_x86\nacl_x86_glibc\x86_64-nacl\lib
        d:\chromium\src\native_client\toolchain\win_x86\nacl_x86_glibc\x86_64-nacl\lib\32\

// D:\chromium\src\native_client\toolchain\win_x86\nacl_x86_glibc\x86_64-nacl
   d:\chromium\src\native_client\toolchain\win_x86\nacl_x86_glibc\x86_64-nacl\lib64\

// D:\chromium\src\native_client\toolchain\win_x86\nacl_x86_newlib\x86_64-nacl\lib
   d:\chromium\src\native_client\toolchain\win_x86\nacl_x86_newlib\x86_64-nacl\lib\32\

// D:\chromium\src\native_client\toolchain\win_x86\nacl_x86_newlib\x86_64-nacl   
   d:\chromium\src\native_client\toolchain\win_x86\nacl_x86_newlib\x86_64-nacl\lib64\

产生工程文件
cd src
gn gen --ide=vs out\Default

下载之前的环境没有配置好,导致gn.exe没有, 拷贝一个以前vs2015版的gn.exe => D:\chromium\src\buildtools\win\gn.exe
运行下列语句报错, 无法生成工程文件.

// 要安装win10sdk中的调试工具.
// You must install the "Debugging Tools for Windows" feature from the Windows 10 SDK.
// 我传了一份到csdn上(https://blog.csdn.net/LostSpeed/article/details/77431458)

gn gen --ide=vs out\Default

D:\chromium\src>gn gen --ide=vs out\Default
Generating Visual Studio projects took 7838ms
Done. Made 8398 targets from 1540 files in 18583ms

将vs2017的devenv全路径加入环境变量
C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE

编译工程
devenv out\Default\all.sln
这个命令打开了vs2017UI, 载入了7105个工程, 就一个编译选项 GN x64
将工程清理一次(清理一个工程用1秒,要清理5600个工程,需要1个半小时),就开始编译. 
网上说要编译5个小时,不知道我这要编译多久...

这个编译了16个小时,告诉我编译不成功,杯具。编译成功了500多个工程,但是没有chromium

用命令行编译
gn gen out/Default

set NINJA_SUMMARIZE_BUILD=1
ninja -C out\Default chrome

// --------------------------------------------------------------------------------
// build on 2018-05-12 02:13
// --------------------------------------------------------------------------------
delete D:\chromium\src\out\Default
run cmd.exee as administrator
d:
cd D:\chromium
gclient sync
set NINJA_SUMMARIZE_BUILD=1

cd src
gn gen --ide=vs out\Default
autoninja -C out\Default chrome

//////////////////////////////
// 编译不过去,内存不足
///////////////////////////////
[33801/34187] LINK(DLL) blink_platform.dll blink_platform.dll.lib blink_platform.dll.pdb
  正在创建库 ./blink_platform.dll.lib 和对象 ./blink_platform.dll.exp
[33856/34187] LINK(DLL) blink_core.dll blink_core.dll.lib blink_core.dll.pdb
FAILED: blink_core.dll blink_core.dll.lib blink_core.dll.pdb
D:/depot_tools/win_tools-2_7_6_bin/python/bin/python.exe ../../build/toolchain/win/tool_wrapper.py link-wrapper environment.x64 False link.exe /nologo /IMPLIB:./blink_core.dll.lib /DLL /OUT:./blink_core.dll /PDB:./blink_core.dll.pdb @./blink_core.dll.rsp
LINK : fatal error LNK1102: 内存不足
ninja: build stopped: subcommand failed.

////////////////////////////////////////
此时内存使用情况 2GB/16GB
将win10杀毒软件选项都关掉。
将托盘中不需要的程序都关掉。

autoninja -C out\Default chrome

////////////////////////
还是内存不足
////////////////////////
D:\chromium\src>autoninja -C out\Default chrome
ninja.exe -C out\Default chrome -l 8
ninja: Entering directory `out\Default'
[1/332] LINK(DLL) blink_core.dll blink_core.dll.lib blink_core.dll.pdb
FAILED: blink_core.dll blink_core.dll.lib blink_core.dll.pdb
D:/depot_tools/win_tools-2_7_6_bin/python/bin/python.exe ../../build/toolchain/win/tool_wrapper.py link-wrapper environment.x64 False link.exe /nologo /IMPLIB:./blink_core.dll.lib /DLL /OUT:./blink_core.dll /PDB:./blink_core.dll.pdb @./blink_core.dll.rsp
LINK : fatal error LNK1102: 内存不足
ninja: build stopped: subcommand failed.

/////////////////////////////////
将爱奇艺卸载.
将占用内存多的程序,从内存管理器里面都杀掉。
在系统设置中,将虚拟内存自动管理,将视觉效果改为最优性能.(要重新启动计算机了)
开机后,将杀毒软件关掉,占用内存多的软件都关掉,杀掉。

run cmd.exee as administrator
d:
cd D:\chromium
set NINJA_SUMMARIZE_BUILD=1

cd src
autoninja -C out\Default chrome

///////////////////////////////////////
让win10自动管理内存后,编译成功了

[332/332] STAMP obj/chrome/chrome.stamp
    Longest build steps:
          29.4 weighted s to build obj/chrome/browser/browser_3.lib (147.0 s CPU time)
          32.0 weighted s to build obj/chrome/browser/browser_1.lib (154.8 s CPU time)
          32.8 weighted s to build obj/chrome/browser/browser_0.lib (156.4 s CPU time)
          34.6 weighted s to build obj/chrome/browser/browser_4.lib (158.1 s CPU time)
          40.4 weighted s to build obj/chrome/browser/extensions/extensions.lib (86.8 s CPU time)
          67.2 weighted s to build headless.dll, headless.dll.lib, headless.dll.pdb (217.6 s CPU time)
         134.9 weighted s to build blink_modules.dll, blink_modules.dll.lib, blink_modules.dll.pdb (134.9 s CPU time)
         282.7 weighted s to build content.dll, content.dll.lib, content.dll.pdb (282.7 s CPU time)
         302.7 weighted s to build chrome.dll, chrome.dll.lib, chrome.dll.pdb (302.7 s CPU time)
        1915.7 weighted s to build blink_core.dll, blink_core.dll.lib, blink_core.dll.pdb (1915.7 s CPU time)
    Time by build-step type:
           8.0 s weighted time to generate 200 .stamp files (63.0 s CPU time)
          13.9 s weighted time to generate 1 .bin files (27.7 s CPU time)
         424.0 s weighted time to generate 114 .lib files (2263.1 s CPU time)
        2753.8 s weighted time to generate 17 PEFile (linking) files (3016.6 s CPU time)
    3200.1 s weighted time (5370.4 s CPU time, 1.7x parallelism)
    332 build steps completed, average of 0.10/s

猜你喜欢

转载自blog.csdn.net/lostspeed/article/details/80290088