編譯windows下chromium,時間:20170619, 官方地址:https://chromium.googlesource.com/chromium/src/+/master/docs/windows_build_instructions.md 一. 系統要求: 1. 64位機器,至少8G ...
編譯windows下chromium,時間:20170619,
官方地址:https://chromium.googlesource.com/chromium/src/+/master/docs/windows_build_instructions.md
一. 系統要求:
1. 64位機器,至少8GB的記憶體,推薦16GB以上。(我用的Win10 64位虛擬機,記憶體按照8G來的);
2. 至少100GB的硬碟存儲空間,格式為NTFS。FAT32不支持大於4GB的文件,而在git下載時的文件可能會有20GB+;
3. Visual studio 2015 update 3;
4. Win7+ (我用的Win10編譯,此處可能有個坑,下文介紹);
二. 系統配置:
1. 安裝Visual studio 2015 update3,並安裝window sdk 14393,vs需要安裝Visual C++的三個選項包括MFC,Universal Windows Apps Development Tools > Tools (1.4.1) and Windows 10 SDK (10.0.14393);
2. 14393的SDK安裝時要安裝Debugging Tools For Windows,我一開始安裝的時候,不知為何沒有安裝這個,修複了下後,才有的;
三. 安裝depot_tools:
1. 下載depot_tools bundle,然後解壓,地址:https://storage.googleapis.com/chrome-infra/depot_tools.zip;
2. 將depot_tools放到PATH環境變數的開始位置,至少在你安裝的python和git的前面,因為depot_tools裡面會下載python,如果在你安裝的python後面的話,可能會出一些不可預期的問題;
3. 添加環境變數DEPOT_TOOLS_WIN_TOOLCHAIN,並設為0;
4. 打開cmd.exe,運行gclient,在第一次運行的時候,gclient會安裝python/msysgit等必要組件;
四. 獲取源碼:
1. 打開cmd,在你想放置源碼的位置,創建chromium文件夾併進入,mkdir chromium && cd chromium;
2. fetch chromium;
ps:這裡有個問題,我用的Win10帶的預設的windows defender是開啟的,此時在下載完源碼後會出現:
- Traceback (most recent call last):
- File "D:\git\google\depot_tools\gclient_scm.py", line 965, in _Clone
- os.path.join(self.checkout_path, '.git'))
- File "D:\git\google\depot_tools\gclient_utils.py", line 158, in safe_rename
- os.rename(old, new)
- WindowsError: [Error 5]
- [0:22:25] _____ removing non-empty tmp dir D:\google\_gclient_src_byzfvs
- ----------------------------------------
- Traceback (most recent call last):
- File "D:\git\google\depot_tools\gclient.py", line 2378, in <module>
- sys.exit(main(sys.argv[1:]))
- File "D:\git\google\depot_tools\gclient.py", line 2364, in main
- return dispatcher.execute(OptionParser(), argv)
- File "D:\git\google\depot_tools\subcommand.py", line 252, in execute
- return command(parser, args[1:])
- File "D:\git\google\depot_tools\gclient.py", line 2117, in CMDsync
- ret = client.RunOnDeps('update', args)
- File "D:\git\google\depot_tools\gclient.py", line 1568, in RunOnDeps
- work_queue.flush(revision_overrides, command, args, options=self._options)
- File "D:\git\google\depot_tools\gclient_utils.py", line 1112, in run
- self.item.run(*self.args, **self.kwargs)
- File "D:\git\google\depot_tools\gclient.py", line 867, in run
- file_list)
- File "D:\git\google\depot_tools\gclient_scm.py", line 166, in RunCommand
- return getattr(self, command)(options, args, file_list)
- File "D:\git\google\depot_tools\gclient_scm.py", line 450, in update
- self._Clone(revision, url, options)
- File "D:\git\google\depot_tools\gclient_scm.py", line 965, in _Clone
- os.path.join(self.checkout_path, '.git'))
- File "D:\git\google\depot_tools\gclient_utils.py", line 158, in safe_rename
- os.rename(old, new)
- WindowsError: [Error 5]
- Traceback (most recent call last):
- File "D:\git\google\depot_tools\\fetch.py", line 353, in <module>
- sys.exit(main())
- File "D:\git\google\depot_tools\\fetch.py", line 348, in main
- return run(options, spec, root)
- File "D:\git\google\depot_tools\\fetch.py", line 342, in run
- return checkout.init()
- File "D:\git\google\depot_tools\\fetch.py", line 142, in init
- self.run_gclient(*sync_cmd)
- File "D:\git\google\depot_tools\\fetch.py", line 76, in run_gclient
- return self.run(cmd_prefix + cmd, **kwargs)
- File "D:\git\google\depot_tools\\fetch.py", line 66, in run
- return subprocess.check_output(cmd, **kwargs)
- File "D:\git\google\depot_tools\python276_bin\lib\subprocess.py", line 573, in check_output
- raise CalledProcessError(retcode, cmd, output=output)
- subprocess.CalledProcessError: Command '('D:\\git\\google\\depot_tools\\python276_bin\\python.exe', 'D:\\git\\google\\depot_tools\\gclient.py', 'sync', '--no-history')' returned non-zero exit status 1
這樣的問題,主要是殺軟攔截導致刪除文件目錄失敗,禁用掉WinDefender就好了,其他殺軟或許有類似的情況,請註意,參考https://bugs.chromium.org/p/chromium/issues/detail?id=464132)
3. 源碼下載成功後,cd src,進入src目錄;
五. 編譯(最期待的時候到了):
1. 首先使用預設的編譯方式吧,使用gn gen out/Default,會在src目錄下創建out/Default目錄,並配置些編譯需要的文件;
2. 使用ninja -C out\Default chrome命令行編譯chrome,此時需要等待漫長的時間;
ps:在使用ninja編譯的時候,我這裡出現了
ninja: Entering directory `out/Default'
ninja: error: '../../native_client/toolchain/mac_x86/pnacl_newlib/bin/x86_64-nacl-objcopy', needed by 'irt_x64/obj/ppapi/native_client/nacl_irt_debuglink.inputdeps.stamp', missing and no known rule to make it
這種類似的錯誤,在src目錄下使用cmd執行gclient sync,順利解決,參考https://groups.google.com/a/chromium.org/forum/#!topic/chromium-dev/tQGuR7Ur0i8;
3. 編譯好了,運行Default下的chrome.exe吧。