1. 程式人生 > >離線編譯chromium 59.0.3071.104,方法適合任意版本

離線編譯chromium 59.0.3071.104,方法適合任意版本

離線編譯chromium 59.0.3071.104,方法適合任意版本

離線編譯任意版本chromium

沒錯, **離線 **且 **任意版本 ** chromium。離線還是要下載必要的程式碼的,但是可以分步進行,極大的提高編譯成功率。

準備

chromium在牆內的git地址可以直接訪問 https://github.com/chromium/chromium,但是穩定的tag限於73以後,73以前的tag程式碼可以從

https://chromium.googlesource.com/chromium/src/+refs 下載指定的版本。

  1. 我以59.0.3071.104為例,下載好tar包:chromium-59.0.3071.104.tar.xz,大小500多M,直接翻牆下載很穩定

  2. 下載最新depot_toolshttp://commondatastorage.googleapis.com/chrome-infra-docs/flat/depot_tools/docs/html/depot_tools_tutorial.html#_setting_up

  3. 安裝vs2015社群版,注意必須是update3,設定好INCLUDE環境變數:

C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include;C:\Program Files (x86)\Windows Kits\10\Include\10.0.14393.0\um;C:\Program Files (x86)\Windows Kits\10\Include\10.0.14393.0\winrt;C:\Program 

Files (x86)\Windows Kits\10\Include\10.0.14393.0\shared;C:\Program Files (x86)\Windows Kits\10\Include\10.0.14393.0\ucrt;C:\Program Files (x86)\Windows Kits\10\Include\10.0.14393.0
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include;C:\Program Files (x86)\Windows Kits\10\Include\10.0.14393.0\um;C:\Program Files (x86)\Windows Kits\10\Include\10.0.14393.0\winrt;C:\Program 

Files (x86)\Windows Kits\10\Include\10.0.14393.0\shared;C:\Program Files (x86)\Windows Kits\10\Include\10.0.14393.0\ucrt

安裝了別的版本vs的,建議完全解除安裝掉再安裝此版本,否則後再編譯連結的時候報錯,甚至執行的時候出現異常。

  1. cmd設定環境
set GYP_GENERATORS=msvs-ninja,ninja<kdb>set GYP_GENERATORS=msvs-ninja,ninja
set GYP_DEFINES=component=shared_library
set GYP_MSVS_VERSION=2015
set DEPOT_TOOLS_WIN_TOOLCHAIN=0
set GYP_DEFINES=windows_sdk_path="C:\Program Files (x86)\Windows Kits\10" component=shared_library disable_nacl=1 enable_automation=0 enable_captive_portal_detection=0 enable_google_now=0 enable_hidpi=0 

fastbuild=0 ffmpeg_branding=Chrome incremental_chrome_dll=0 proprietary_codecs=1 remoting=0
  1. 設定代理, 檢視瀏覽器的代理設定,將其配置到cmd/git環境:
git config --global http.proxy http://127.0.0.1:1080
git config --global https.proxy https://127.0.0.1:1080
set HTTP_PROXY=http://127.0.0.1:1080
set HTTPS_PROXY=https://127.0.0.1:1080
netsh winhttp set proxy 127.0.0.1:1080
set NO_AUTH_BOTO_CONFIG=E:\tmp\chromium59\src\.boto
set BOTO_CONFIG=E:\tmp\chromium59\src\.boto
  1. 目錄初始化 , 新建編譯目錄 例如:E:\tmp\chromium59, 把chromium-59.0.3071.104.tar.xz解壓到該目錄裡作為src資料夾,再新建.gclient檔案初始化專案(.gclient與src同級):
    echo "" >.gclient, 修改.gclient檔案內容:
{
  "url": "https://github.com/chromium/chromium.git",
  "managed": False,
  "name": "src",
  "deps_file": ".DEPS.git",
  "custom_deps": {},
  "safesync_url": "", 
},
]
  1. 安裝python2.7.9,這個版本才開始有pip支援,2.7.6沒有,否則後面又是提示你安裝。cmd中直接執行python和pip能成功
  2. 安裝wget的windows版本,推薦把curl和gnuwin32 也安裝了,過程不詳述,cmd中直接執行wget和curl能成功。
    驗證步驟5代理是否成功: curl https://www.google.com 是否正確返回頁面

修改

  1. google的下載不能很好的在代理環境下工作(我嘗試過NO_AUTH_BOTO_CONFIG 好像也不行),可以藉助wget工具下載。
    先手動測試wget下載 https://storage.googleapis.com/syzygy-archive/builds/official/b8aa6a6d09dadd385a1afed5e71c3bb3514a4c0f/benchmark.zip
    是否成功來檢查環境是否安裝正確。
    修改depot_tools下的download_from_google_storage.py檔案 download_from_google_storage.py(已修改)下載
#增加一個方法,採用wget方式下載,注意cmd中的環境變數
#set HTTP_PROXY=http://127.0.0.1:1080
#set HTTPS_PROXY=https://127.0.0.1:1080

def download_url2(src, target):
  cmd = "wget  --tries=3 --timeout=60 --connect-timeout=30 --no-check-certificate --force-directories " +  src  + "  --output-document=" + target
  print "cmd:" + cmd
  os.system(cmd)

把原來的下載流程註釋掉,並用該方法:

 download_url2(file_url, 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 </kbd>

把原來的檔案檢查流程也註釋掉:

    # Check if file exists.
    file_url = '%s/%s' % (base_url, input_sha1_sum)
    print 'Check if file exists. file_url:' + file_url
    #(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

再把gn://協議下載改成https://下載,具體參考我修改後的 download_from_google_storage.py 檔案

  1. 修改 src/build/get_syzygy_binaries.py 檔案:方法同上,增加download_url2方法,替換原來的
    get_syzygy_binaries.py (已修改)下載

執行&編譯

  1. gclient runhooks
  2. gn gen --ide=vs --filters=//chrome --no-deps out\Default
  3. ninja -C out\Default chrome

可能出現的問題及解決

  1. 在gclient runhooks這一步,如果報類似這樣的錯:
Error: Command 'download_from_google_storage --no_resume --no_auth -u --bucket v8-wasm-fuzzer -s src/v8/test/fuzzer/wasm.tar.gz.sha1' returned non-zero exit status 1 in E:\tmp\chromium59

sha1檔案找不到,直接在DEPS檔案中搜索對應的,將其對應項去掉

{
    'action': [
      'download_from_google_storage',
      '--no_resume',
      '--no_auth',
      '-u',
      '--bucket',
      'v8-wasm-fuzzer',
      '-s',
      'src/v8/test/fuzzer/wasm.tar.gz.sha1'
    ],
    'pattern':
      '.',
    'name':
      'wasm_fuzzer'
  },