爱分享

Windows下编译Chromium

奶瓶 · 7月9日 · 2021年 10次已读

一、系统要求
1、Windows 7或更新的64位系统,至少有8GB内存,强烈推荐超过16GB;
2、源码必须存放在NTFS格式的驱动器上,至少有100GB的空闲磁盘空间;
3、安装合适版本的Visual Studio

二、配置Visual Studio
。截止到2017年9月(R503915),Chromium需要Visual Studio 2017 (15.7.2)编译。必须安装“桌面开发用C++”组件和“MFC和ATL支持”的子组件。

三、代理设置(如有需要)
1、Git代理设置;

git config --global https.proxy socks5://localhost:1080git config --global core.proxy socks5://localhost:1080git config --global http.proxy socks5://localhost:1080git config --global http.sslVerify false

Git取消代理;

git config --global --unset http.proxygit config --global --unset httpx.proxygit config --global --unset core.proxy

2、Python代理设置;

set http_proxy=http://localhost:1080set https_proxy=https://localhost:1080

建议购置阿里云Windows香港服务器,同步好代码之后直接打包下载。
 

四、安装配置depot_tools

下载depot_tools压缩包https://src.chromium.org/svn/trunk/tools/depot_tools.zip解压, 把depot_tools设置为环境变量, 并且设置环境变量DEPOT_TOOLS_WIN_TOOLCHAIN的值为0;

五、源码下载

1、创建一个chromium目录存放源码(可以在任何地方,只要路径是英文且没空格就行);

mkdir chromium && cd chromium

2、运行depot_tools检查依赖项与检出源码;

fetch chromium

如果不需要历史记录可以添加参数--no-history

fetch chromium --no-history

当fetch完成,会在工作目录创建src目录与一个隐藏的文件.gclient。

六、编译

set CEF_USE_GN=0set GYP_DEFINES=buildtype=Official proprietary_codecs=1 ffmpeg_branding=Chromeset GYP_GENERATORS=ninja,msvs-ninjaset GYP_MSVS_VERSION=2015set CEF_ARCHIVE_FORMAT=tar.bz2set DEPOT_TOOLS_WIN_TOOLCHAIN=0 cd srcgn gen --ide=vs out\Defaultdevenv out\Default\all.sln

7、问题

(1)使用代理的情况下,gclient runhooks下载gs://xxx出错,设置 .boto内容

[Boto]proxy = 127.0.0.1proxy_port = 1080

执行命令

set NO_AUTH_BOTO_CONFIG=E:\Working\ChromiumSrc\.boto

 
(2)、直接使用国外Windows服务器情况下,gclient runhooks下载gs://xxx出错,

错误1:download_from_google_storage src\buildtools\win\gn.exe.sha1 returned non-zero exit

处理:

修改文件depot_tools\download_from_google_storage.py,增加

import urllib

增加函数

def download_url(src, target):  """ the contents of src, which may be a URL or local file, to the      target directory. """  if src[:4] == 'http':    # Attempt to download a URL.    opener = urllib.FancyURLopener({})    response = opener.open(src)    CHUNK = 16 * 1024    with open(target, 'wb') as f:        while True:            chunk = response.read(CHUNK)            if not chunk:                break            f.write(chunk)  else:    raise Exception('Path type is unsupported or does not exist: ' + src)

查找# Check if file exists,如下注释部分代码,如:

    # Check if file exists.    file_url = '%s/%s' % (base_url, input_sha1_sum)    #(code, _, err) = gsutil.check_call('ls', file_url)    #if code != 0:    #  if code == 404:    #    out_q.put('%d> File %s for %s does not exist, skipping.' % (    #        thread_num, file_url, output_filename))    #    ret_codes.put((1, 'File %s for %s does not exist.' % (    #        file_url, output_filename)))    #  else:    #    # Other error, probably auth related (bad ~/.boto, etc).    #    out_q.put('%d> Failed to fetch file %s for %s, skipping. [Err: %s]' % (    #        thread_num, file_url, output_filename, err))    #    ret_codes.put((1, 'Failed to fetch file %s for %s. [Err: %s]' % (    #        file_url, output_filename, err)))    #  continue

查找# Fetch the file,如下注释部分代码,如:

    # Fetch the file.    out_q.put('%d> Downloading %s...' % (thread_num, output_filename))    try:      if delete:        os.remove(output_filename)  # Delete the file if it exists already.    except OSError:      if os.path.exists(output_filename):        out_q.put('%d> Warning: deleting %s failed.' % (            thread_num, output_filename))    #code, _, err = gsutil.check_call('cp', file_url, output_filename)    #if code != 0:    #  out_q.put('%d> %s' % (thread_num, err))    #  ret_codes.put((code, err))    #  continue    download_url(file_url, output_filename)


错误2:src\build\get_syzygy_binaries.py
处理:
修改文件chromium\src\build\get_syzygy_binaries.py,增加

import urllib

增加函数

def download_url(src, target):  """ the contents of src, which may be a URL or local file, to the      target directory. """  if src[:4] == 'http':    # Attempt to download a URL.    opener = urllib.FancyURLopener({})    response = opener.open(src)    CHUNK = 16 * 1024    with open(target, 'wb') as f:        while True:            chunk = response.read(CHUNK)            if not chunk:                break            f.write(chunk)  else:    raise Exception('Path type is unsupported or does not exist: ' + src)

将函数 _Download修改为

def _Download(resource):  """Downloads the given GS resource to a temporary file, returning its path."""  tmp = tempfile.mkstemp(suffix='syzygy_archive')  os.close(tmp[0])  tmp_file = tmp[1]  url = 'gs://syzygy-archive' + resource  if sys.platform == 'cygwin':    # Change temporary path to Windows path for gsutil    def winpath(path):      return subprocess.check_output(['cygpath', '-w', path]).strip()    tmp_file = winpath(tmp_file)  #_GsUtil('cp', url, tmp_file)  url=url.replace("gs://","https://storage.googleapis.com/")  download_url(url,tmp_file)  return tmp[1]

参考:https://blog.csdn.net/sanve/article/details/80882562

0 条回应