前言
这周用业余时间,编译了一次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