chromium 编译

chromium 编译

无咎 28 2023-01-28

编译 chromium(目录 E:\chromium)

官网步骤说明
https://chromium.googlesource.com/chromium/src/+/master/docs/windows_build_instructions.md

vs安装网址
https://my.visualstudio.com/Downloads/Featured?mkt=zh-cn

git安装网址
https://git-scm.com/download/win

chromium 109 版本之后

新建目录

mkdir chromium_116.0.5845.89_new

解压下载好的 depot_tools.zip 或者clone

解压:打开 powershell 执行
powershell Expand-Archive -Path depot_tools.zip -DestinationPath E:\chromium_116.0.5845.89_new\depot_tools

clone:打开 git 执行
git config --global http.proxy 'http://proxy.lansha.app:33052'
git config --global https.proxy 'http://proxy.lansha.app:33052'
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git

设置系统变量(之前设置过可以忽略)

在系统变量的 path 里面添加 E:\chromium_116.0.5845.89_new\depot_tools 并且置顶。

在系统变量里面新建一个值,名字是 DEPOT_TOOLS_WIN_TOOLCHAIN,值是 0

设置代理

打开 depot_tools/.cipd_impl.ps1 文件 ,
找到 115 行左右  ,看到: 
Invoke-WebRequest -UserAgent $UserAgent -Uri $URL -OutFile $TmpPath 
添加代理信息:-Proxy "http://proxy.lansha.app:33052" ,
添加后结果如下:
Invoke-WebRequest -UserAgent $UserAgent -Uri $URL -OutFile $TmpPath -Proxy "http://proxy.lansha.app:33052"

打开 cmd 执行以下命令

cd E:\chromium_116.0.5845.89_new
set http_proxy=http://proxy.lansha.app:33052
set https_proxy=http://proxy.lansha.app:33052

mkdir chromium && cd chromium

直接获取最新版本:
fetch chromium

获取指定版本:
git clone --depth 10 -b 109.0.5407.1 https://chromium.googlesource.com/chromium/src.git src
git describe --tags
gclient config --unmanaged https://chromium.googlesource.com/chromium/src.git

创建并设置 .boto 文件(之前创建过可直接设置路径)

在 depot_tools 目录新建 .boto
[Boto]
proxy=proxy.lansha.app
proxy_port=33052

返回 cmd 设置路径
set NO_AUTH_BOTO_CONFIG=E:\chromium_116.0.5845.89_new\depot_tools\.boto

更改一处 bat 脚本(不改会报错)

进入 chromium\src\third_party\depot_tools 打开 dirmd.bat
将  call "%~dp0\cipd_bin_setup.bat" > nul 2>&1
改为  call "%~dp0\cipd_bin_setup.bat"

添加代理

进入 chromium\src\third_party\depot_tools 打开 .cipd_impl.ps1 文件 
找到 115 行左右,看到: 
Invoke-WebRequest -UserAgent $UserAgent -Uri $URL -OutFile $TmpPath 
添加代理信息:  -Proxy "http://proxy.lansha.app:33052" ,
添加后结果如下:
Invoke-WebRequest -UserAgent $UserAgent -Uri $URL -OutFile $TmpPath -Proxy "http://proxy.lansha.app:33052"
(
如果没有这个,就是另一种方法
找到 108 行左右,看到: 
    $wc.DownloadFile($Url, $Path)
在其上添加如下代码:
    $proxy = (New-Object System.Net.WebProxy)
    $proxy.Address = "http://proxy.lansha.app:33052"
    $wc.proxy = $proxy
)

对更改内容进行测试提交

测试一下还有没有问题
python3 src/testing/generate_location_tags.py --out src/testing/location_tags.json

cd src\third_party\depot_tools
git add .
git commit -m "test"

cd ../../../
git add .
git commit -m "test"
gclient sync

这里插入一个小补丁,允许不同电脑的 chromium 配置共享(不需要可以直接跳过)

需要改两个文件,引入两个包并更改三个地方
1、components/metrics/machine_id_provider_win.cc
添加:
#include "base/command_line.h"

// static
bool MachineIdProvider::HasId() {
  添加:
  if (!base::CommandLine::ForCurrentProcess()->HasSwitch("enable-machine-id")) {
    return false;
  }
  return true;
}

// static
std::string MachineIdProvider::GetMachineId() {
  添加:
  if (!base::CommandLine::ForCurrentProcess()->HasSwitch("enable-machine-id")) {
    return std::string();
  }

2、services/preferences/tracked/device_id_win.cc

添加:
#include "base/command_line.h"

MachineIdStatus GetDeterministicMachineSpecificId(std::string* machine_id) {
  DCHECK(machine_id);

  添加:
  if (!base::CommandLine::ForCurrentProcess()->HasSwitch("enable-machine-id")) {
    return MachineIdStatus::NOT_IMPLEMENTED;
  }

设置编译参数

进入 cmd 执行
cd src
gn args out/Default

这时会弹出一个记事本,让你写参数,我使用的参数如下:

enable_platform_ac3_eac3_audio = true
enable_platform_hevc = true
enable_iterator_debugging = false
enable_mse_mpeg2ts_stream_parser = true
enable_nacl = true
ffmpeg_branding = "Chrome"
is_component_build = false
is_debug = false
proprietary_codecs = true
symbol_level = 0
target_cpu = "x64"
enable_hangout_services_extension = true
enable_widevine = false
rtc_use_h264 = false
use_openh264 = true
chrome_pgo_phase = 0
is_official_build = true
current_cpu = "x64"
visual_studio_version = "2022"
blink_symbol_level = 0
enable_platform_mpeg_h_audio = true
pgo_build = true
rtc_build_examples = false
thin_lto_enable_optimizations = true
is_chrome_branded = false
fieldtrial_testing_like_official_build = true
use_thin_lto = true
use_lld = true
enable_profiling = false
google_api_key = "no"
google_default_client_id = "no"
google_default_client_secret = "no"
use_official_google_api_keys = false
enable_nacl = false

写完之后保存关闭即可

开始编译

ninja -C out/Default chrome mini_installer -j 12

运行测试

在 src/out/Default 目录中可以找到 chrome.exe 双击运行即可
里面的几个重要文件:
chrome.exe (可执行文件)
mini_installer.exe (最小安装包)
setup.exe (升级程序)


chromium 109 版本之前(含 109 版本)

新建目录

mkdir build
cd build

设置 git 代理 (进入 git bash)

git config --global http.proxy 'http://proxy.lansha.app:33052'
git config --global https.proxy 'http://proxy.lansha.app:33052'

git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
git clone -b 105.0.5180.1 --depth=5 https://chromium.googlesource.com/chromium/src

取消 git 代理

git config --global --unset http.proxy
git config --global --unset https.proxy

在 build 目录新建 .boto

[Boto]
proxy=proxy.lansha.app
proxy_port=33052

在 build 目录新建 .gclient

solutions = [
  {
    "managed": False,
    "name": "src",
    "url": "https://chromium.googlesource.com/chromium/src.git",
    "custom_deps": {},
    "deps_file": ".DEPS.git",
    "safesync_url": "",
  },
]

进入 depot_tools 找到 .cipd_impl.ps1

进入第 102 行,添加
  $proxy = (New-Object System.Net.WebProxy)
  $proxy.Address = "http://proxy.lansha.app:33052"
  $wc.proxy = $proxy
进入 cmd
设置中文输出
chcp 65001

设置代理和环境变量

set DEPOT_TOOLS_WIN_TOOLCHAIN = 0
set NO_AUTH_BOTO_CONFIG=E:\chromium\build\.boto 
set http_proxy=http://proxy.lansha.app:33052
set https_proxy=http://proxy.lansha.app:33052
gclient sync

进入 src\third_party\depot_tools

找到 .cipd_impl.ps1
进入第 102 行,添加
  $proxy = (New-Object System.Net.WebProxy)
  $proxy.Address = "http://proxy.lansha.app:33052"
  $wc.proxy = $proxy
右键打开 git 
git config --global --add safe.directory '*'
git add .
git commit -m "test"

回到 cmd

gclient runhooks

cd src

(vs安装路径不在c盘)

进入 E:\chromium\src\build , 找到 vs_toolchain.py

1、将 大概 163 行中的

path = os.path.expandvars('%ProgramFiles(x86)%' +
'/Microsoft Visual Studio/%s' % version)
直接修改为vs的路径
path = os.path.expandvars('E:/vs2019/Microsoft Visual Studio/%s' % version)

2、将 大概 217 行中的 program_files_path_variable 改成

program_files_path_variable = 'E:/vs2019'
gn args out/Default

这时会弹出一个记事本,让你写参数:

enable_platform_ac3_eac3_audio = true
enable_platform_hevc = true
enable_iterator_debugging = false
enable_mse_mpeg2ts_stream_parser = true
enable_nacl = true
ffmpeg_branding = "Chrome"
is_component_build = false
is_debug = false
proprietary_codecs = true
symbol_level = 0
target_cpu = "x64"
enable_hangout_services_extension = true
enable_widevine = false
rtc_use_h264 = false
chrome_pgo_phase = 0
is_official_build = true
current_cpu = "x64"
visual_studio_version = "2019"
blink_symbol_level = 0
enable_platform_mpeg_h_audio = true
rtc_build_examples = false
thin_lto_enable_optimizations = true
is_chrome_branded = false
use_thin_lto = true
use_lld = true
enable_profiling = false
google_api_key = "no"
google_default_client_id = "no"
google_default_client_secret = "no"
use_official_google_api_keys = false
enable_nacl = false

保存关掉

ninja -C out/Default chrome mini_installer -j 12

(如果编译报错,进行如下操作)

打开浏览器链接
https://developer.microsoft.com/zh-cn/windows/downloads/sdk-archive/

找到 Windows 10 SDK 版本 2104 (10.0.20348.0) 下载 SDK 

进入目录 E:\chromium\src\build\toolchain\win

打开文件 setup_toolchain.py
找到  args.append('10.0.20348.0')  将里面的版本号改成 10.0.20348.0
保存,重新在 E:\chromium\src 目录打开cmd

执行命令

gn args out/Default
ninja -C out/Default chrome mini_installer -j 12