Windows下编译Chromium

一、系统要求
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:1080
git config --global core.proxy socks5://localhost:1080
git config --global http.proxy socks5://localhost:1080
git config --global http.sslVerify false

Git取消代理;

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

2、Python代理设置;

set http_proxy=http://localhost:1080
set 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=0
set GYP_DEFINES=buildtype=Official proprietary_codecs=1 ffmpeg_branding=Chrome
set GYP_GENERATORS=ninja,msvs-ninja
set GYP_MSVS_VERSION=2015
set CEF_ARCHIVE_FORMAT=tar.bz2
set DEPOT_TOOLS_WIN_TOOLCHAIN=0

cd src
gn gen --ide=vs out\Default
devenv out\Default\all.sln

 

7、问题

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

[Boto]
proxy = 127.0.0.1
proxy_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://www.jianshu.com/p/08aa03e8ce18

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值