源码编译CEF(branch=6045)+mp4+mp3笔记

接触Chromium已经过去多年了,一直都依赖别人编译的库,最近想自己整一个,所以有了这篇笔记。

环境要求:WIN10,内存16G,固态硬盘空间200G+,VS2022,科学上网(具体配置我这边不需要,我直接使用专线电脑跳板的,可以查看一些网页资料)

第一,最重要的告诫:不要有强迫症。

例如遇到 UnicodeDecodeError: 'gbk' codec can't decode byte 0x92 in position 241: illegal multibyte sequence 不要理它,主要编译不中断,啥提示先放一边。我一直想着让这些烦人的消息去掉,结果加了

set PYTHONLEGACYWINDOWSSTDIO=utf8
set PYTHONIOENCODING=utf8
set PYTHONUTF8=1

chcp 65001

然而没啥用,有时候还会自动中断。有人说这个是中文语言配置问题,可能吧。只要你不管它,不影响编译结果。

第二,如果仅仅开mp4,估计配置上就加这样一行代码就够了。


set GN_DEFINES=is_official_build=true proprietary_codecs=true ffmpeg_branding=Chrome chrome_pgo_phase=0 use_thin_lto=false use_jumbo_build=true

set GN_ARGUMENTS=--ide=vs2022 --sln=cef --filters=//cef/*

其中use_thin_lto=false没有的话,debug版本打包不进来,会中断的。chrome_pgo_phase=0如不关闭这个玩意,可能要修改文件,路径在“chromium\src\build\config\compiler\pgo\pgo.gni”,所以建议使用GN_DEFINES搞定。也有人建议is_component_build=false减少编译,我这里没配置,编译好像蛮久的。

第三,遇到out of memory的中断,如果已经是16G内存的,可以重试几次,如果没法解决,建议重启电脑,然后将其他的程序能关的都关了,重试。如果还是不行,可以在我的电脑-》属性-》高级系统设置-》“高级”页面中性能“设置”,将缓存内存也配置成16G,重启后再来一遍。如果是8G内存的,可能有点问题,只能看运气吧,我观察了一下,在最后link的时候内存飙升到16G的。

第四,如果只编译一个版本,例如x64,只需要编译out目录下的“Debug_GN_x64”,“Release_GN_x64”,“Debug_GN_x64_sandbox”,“Release_GN_x64_sandbox”。其中两个sandbox版本用时比较短,可以先编译的。

ninja -j8 -C out\Release_GN_x64_sandbox cef_sandbox
ninja -j8 -C out\Debug_GN_x64_sandbox cef_sandbox

我之前也犯错了,使用“ninja -j8 -C out\Release_GN_x64_sandbox cef”结果一直说找不到std的一些函数,其实“**_sandbox”这些目录一定是给cef_sandbox配置的,不要当它cef编译!

另外就是加-j8代表最多可以并发8个clang-cl.exe编译,最好根据自己的电脑配置一下,如果不填的话,应该是满核运行(例如我的电脑12核,就有12个并发,应该是做了检测的),我建议是:不要满核,可以避免卡住和内存崩掉,当然设置后效率没那么高。

最后将配置发一份

这里有两个文件夹 E:\cef\code\depot_tools (需要配置到Path里面) 和 E:\cef\code\chromium_git

一个文件E:\cef\code\automate\automate-git.py,这个玩意在CEF工程里面的(cef\tools\automate)。

在E:\cef\code\chromium_git下建一个update.bat文件,内容如下:

set GN_DEFINES=is_component_build=false
set GN_DEFINES=is_official_build=true proprietary_codecs=true ffmpeg_branding=Chrome
set GN_ARGUMENTS=--ide=vs2022 --sln=cef --filters=//cef/*
python3 ..\automate\automate-git.py --download-dir=E:\cef\code\chromium_git --depot-tools-dir=E:\cef\code\depot_tools --no-distrib --no-build --branch=6045

运行update.bat之后就是漫长的等待,直到完成,其中的艰辛不提也罢。最终在E:\cef\code\chromium_git 目录下会有两个文件夹 cef,chrome。而chrome/src下必须有cef目录,否则就是没下载完成,需要重新运行update.bat.

代码更新完毕就开始魔改一下。这个可以百度一下。我这里抄个简单的。

在GN运行之前(create,bat), 可以修改build_ffmpeg.py,位置大概在chromium\src\third_party\ffmpeg\chromium\scripts;

  原版:
configure_flags['Chrome'].extend([
      '--enable-decoder=aac,h264',
      '--enable-demuxer=aac',
      '--enable-parser=aac,h264',
  ])
修改:
  configure_flags['Chrome'].extend([
      '--enable-decoder=aac,h264,hevc,mp3,mpeg4,amrnb,amrwb,flv',
      '--enable-demuxer=aac,mp3,mov,avi,amr,flv',
      '--enable-parser=aac,h264,mpegaudio,mpeg4video,h263,hevc',
  ])

貌似这样修改,得到的文件也不支持h265(使用html5test.com测试),如果可以的话,还是在下面的方法配置一下试试(实验时间太久了,我放弃。这个py文件我改了一下,h265可能对应填hevc,可以尝试。)修改chromium\src\third_party\ffmpeg\ffmpeg_generated.gni等文件,看看参考网址里面的。我这边只编译出h264和mp4的,h265有点麻烦。(还在探索。。。

2023-11-27 H265尝试总结,看到这篇Chrome 浏览器支持4k/h265的定制开发提到html5test.com不能显示h265 support就明白自己做了一堆无用功,实际上跟着它修改就差不多了。唯一有点不一样的就是​​​​​​​libavcodec/autorename_libavcodec_hevcdec.c

xxx@yy-yyyy-W10 MINGW64 /e/cef/code/chromium_git/chromium/src/third_party/ffmpeg ((0ba3773340...))
$ git status
HEAD detached at 0ba3773340
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   chromium/config/Chrome/win-msvc/ia32/config.asm
        modified:   chromium/config/Chrome/win-msvc/ia32/config.h
        modified:   chromium/config/Chrome/win-msvc/ia32/libavcodec/codec_list.c
        modified:   chromium/config/Chrome/win-msvc/ia32/libavcodec/parser_list.c
        modified:   chromium/config/Chrome/win-msvc/ia32/libavformat/demuxer_list.c
        modified:   chromium/config/Chrome/win-msvc/x64/config.asm
        modified:   chromium/config/Chrome/win-msvc/x64/config.h
        modified:   chromium/config/Chrome/win-msvc/x64/libavcodec/codec_list.c
        modified:   chromium/config/Chrome/win-msvc/x64/libavcodec/parser_list.c
        modified:   chromium/config/Chrome/win-msvc/x64/libavformat/demuxer_list.c
        modified:   chromium/config/Chrome/win/ia32/config.asm
        modified:   chromium/config/Chrome/win/ia32/config.h
        modified:   chromium/config/Chrome/win/ia32/config_components.h
        modified:   chromium/config/Chrome/win/ia32/libavcodec/codec_list.c
        modified:   chromium/config/Chrome/win/ia32/libavcodec/parser_list.c
        modified:   chromium/config/Chrome/win/ia32/libavformat/demuxer_list.c
        modified:   chromium/config/Chrome/win/x64/config.asm
        modified:   chromium/config/Chrome/win/x64/config.h
        modified:   chromium/config/Chrome/win/x64/config_components.h
        modified:   chromium/config/Chrome/win/x64/libavcodec/codec_list.c
        modified:   chromium/config/Chrome/win/x64/libavcodec/parser_list.c
        modified:   chromium/config/Chrome/win/x64/libavformat/demuxer_list.c
        modified:   chromium/config/Chromium/win-msvc/ia32/config.h
        modified:   chromium/config/Chromium/win-msvc/x64/config.h
        modified:   chromium/config/Chromium/win/arm64/config_components.h
        modified:   chromium/config/Chromium/win/ia32/config.h
        modified:   chromium/config/Chromium/win/ia32/config_components.h
        modified:   chromium/config/Chromium/win/x64/config.h
        modified:   chromium/config/Chromium/win/x64/config_components.h
        modified:   chromium/scripts/build_ffmpeg.py
        modified:   ffmpeg_generated.gni
        modified:   ffmpeg_options.gni

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        libavcodec/autorename_libavcodec_hevcdec.c
        libavformat/autorename_libavformat_hevc.c

no changes added to commit (use "git add" and/or "git commit -a")
/*
libavcodec/autorename_libavcodec_hevcdec.c
编译了几次都是提示缺失函数,使用vscode将ffmpeg目录拉进来,搜索补全。方法和工具都很重要,别人能做到,就要反思自己了。
*/

#include "dynamic_hdr_vivid.c"
#include "dovi_rpu.c"
//#include "h2645_vui.c"  //ubuntu
//#include "h2645_sei.c"  //ubuntu
//#include "h274.c"  //ubuntu
#include "hevcdec.c"
/*
libavformat/autorename_libavformat_hevc.c
放置在libavformat目录下
*/
#include "hevc.c"
#修改ffmpeg_generated.gni文件 大概在440行前后。第一个ffmpeg_c_sources的配置是自动生成的。


if ((is_apple) || (is_win) || (use_linux_config)) {
  ffmpeg_c_sources += [
    "libavcodec/autorename_libavcodec_videodsp.c",
    "libavcodec/h264pred.c",
    "libavcodec/hpeldsp.c",
    "libavcodec/jpegquanttables.c",
    "libavcodec/vp3.c",
    "libavcodec/vp3_parser.c",
    "libavcodec/vp3dsp.c",
    "libavcodec/vp8.c",
    "libavcodec/vp8_parser.c",
    "libavcodec/vp8data.c",
    "libavcodec/vp8dsp.c",
    "libavcodec/vpx_rac.c",
  ]
  ffmpeg_c_sources += [
    "libavcodec/bswapdsp.c",
    "libavformat/avc.c",
    "libavcodec/hevc_sei.c",   //这个文件需要放这里,不然可能在编译linux-debug版本会报错,vs2022没有提示。
    "libavcodec/autorename_libavcodec_hevcdec.c",
    "libavcodec/hevc_cabac.c",
    "libavcodec/hevc_data.c",
    "libavcodec/hevc_filter.c",
    "libavcodec/hevc_mvs.c",
    "libavcodec/hevc_parse.c",
    "libavcodec/hevc_parser.c",
    "libavcodec/hevc_ps.c",
    "libavcodec/hevc_refs.c",
    "libavcodec/hevcdsp.c",
    "libavcodec/hevcpred.c",
    "libavcodec/x86/bswapdsp_init.c",
    "libavcodec/x86/hevcdsp_init.c",
    "libavformat/autorename_libavformat_hevc.c",
    "libavformat/hevcdec.c",
  ]
  ffmpeg_asm_sources += [
    "libavcodec/x86/bswapdsp.asm",
    "libavcodec/x86/hevc_deblock.asm",
    "libavcodec/x86/hevc_idct.asm",
    "libavcodec/x86/hevc_mc.asm",
    "libavcodec/x86/hevc_add_res.asm",
    "libavcodec/x86/hevc_sao.asm",
    "libavcodec/x86/hevc_sao_10bit.asm",
  ]
}

ffmpeg_options.gni其实不用改的,我们在配置就设定是Chrome的。然后是chrome子目录下的修改。要chrome/src/media下修改media_options.gni  enable_platform_hevc = true 。supported_types.cc应该是不用更改的,我看了6045分支的代码,已经更新了,会根据enable_platform_hevc和is_win进行判断返回true的。【最后很惊讶的发现,我之前编译的版本(见下面链接)能播放h265的视频,没有这些修改也可以!完全懵圈了。。。后来编译linux版本发现,将上面配置好,其实h264相关文件都有跳转函数,差点以为是灵异事件了。】

编译完后,html5test.com还是提示不支持h265,但是我用本地的文件试了,能播放的,所以不必理会它。

安装官方的说法是在chrome/src/cef下建议create.bat的。我查看了一下,实际上是运行python文件。所以我create.bat改成这样:


set GN_DEFINES=is_official_build=true proprietary_codecs=true ffmpeg_branding=Chrome chrome_pgo_phase=0 use_thin_lto=false use_jumbo_build=true
set GN_ARGUMENTS=--ide=vs2022 --sln=cef --filters=//cef/*

#call call cef_create_projects.bat
python3 E:\cef\code\chromium_git\chromium\src\cef\tools\gclient_hook.py

然后放到E:\cef\code\chromium_git运行,不要在cef里面运行。

运行完create.bat后,在\chromium\src\out下面得到8个文件夹,例如“Debug_GN_x64”等。

然后CD到\chromium\src目录下,运行下面代码

ninja -j8 -C out\Release_GN_x64_sandbox cef_sandbox
ninja -j8 -C out\Debug_GN_x64_sandbox cef_sandbox
ninja -j8 -C out\Release_GN_x86_sandbox cef_sandbox
ninja -j8 -C out\Debug_GN_x86_sandbox cef_sandbox

ninja -j8 -C out/Release_GN_x64 cef
ninja -j8 -C out/Debug_GN_x64 cef
ninja -j8 -C out/Release_GN_x86 cef
ninja -j8 -C out/Debug_GN_x86 cef

Sandbox部分可以优先编译,要一条一条来,没法一次完成,除非独立变成一个bat,然后使用call方法调用。

如果只编译x64,那就挑出一些编译,编译完成后,运行:

set CEF_VCVARS=C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat
python3 E:\cef\code\chromium_git\chromium\src\cef\tools\make_distrib.py --output-dir=E:\cef\code\chromium_git\out\x64 --allow-partial --x64-build --ninja-build

如果是x86,则

set CEF_VCVARS=C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars32.bat
python3 E:\cef\code\chromium_git\chromium\src\cef\tools\make_distrib.py --output-dir=E:\cef\code\chromium_git\out\x86 --allow-partial --ninja-build

最后机器翻译+人工整理了一份MasterBuildQuickStart,可以比对一下我前面的总结 (2023-09-28版)


cef / MasterBuildQuickStart 
https://bitbucket.org/chromiumembedded/cef/wiki/MasterBuildQuickStart#markdown-header-windows-setup

此 Wiki 页面提供了使用当前主(开发)分支创建 CEF/Chromium 调试版本的快速入门指南。

编辑请注意:未经CEF 论坛或问题跟踪器事先批准而对此 Wiki 页面所做的更改可能会丢失或恢复。

概述
文件结构
Windows 设置
Mac OS X 设置
Linux设置
下一步

概述
本页面提供了快速入门指南,用于设置最小开发环境并构建 Chromium/CEF 主分支以进行开发。有关可用工具和配置的全面讨论,请访问BranchesAndBuilding Wiki 页面。

本指南不适用于:

那些寻求在第三方应用程序中使用的预构建二进制发行版的人。去这里吧。
那些寻求以完全自动化的方式构建二进制发行版的人。去这里吧。
开发系统可以使用专用硬件或VMware、Parallels或VirtualBox虚拟机进行配置。

除了主分支之外,以下步骤通常可用于开发 CEF/Chromium 的最新版本分支。Chromium 构建要求会随着时间的推移而变化,因此在尝试构建发布分支之前,请先查看BranchesAndBuilding Wiki 页面上列出的构建要求。然后只需添加--branch=XXXX到automate-git.py命令行,其中“XXXX”是您想要构建的分支号。

文件结构
所有平台都将使用相同的文件结构。“~”可以是不包含空格或特殊字符的任何路径。我们将在以下部分中为每个平台构建此目录结构。

~/code/
  automate/
    automate-git.py   <-- CEF build script
  chromium_git/
    cef/              <-- CEF source checkout
    chromium/
      src/            <-- Chromium source checkout
    update.[bat|sh]   <-- Bootstrap script for automate-git.py
  depot_tools/        <-- Chromium build tools
使用此文件结构,您可以并行开发多个 CEF/Chromium 分支。例如,使用“chromium_git1”而不是“chromium_git”作为目录名称重复以下说明。

Windows 设置
需要什么

BranchesAndBuilding Wiki 页面上列出的 Windows 构建要求。
按照此处所述安装所需的 Visual Studio 子组件。
安装默认位置中指定的确切 Windows SDK 版本以避免构建问题。
至少 16GB RAM(建议 32GB+)和 150GB 可用磁盘空间(用于调试版本)。
使用快速互联网连接 (100Mbps) 和快速构建机器(2.4Ghz、16 个逻辑核心、SSD)大约需要 4 小时。
分步指南

以下所有命令都应使用系统“cmd.exe”运行,而不是使用 Cygwin shell。

1. 创建以下目录。

c:\code\automate
c:\code\chromium_git
警告:如果更改上述目录名称/位置,请确保 (a) 仅使用 ASCII 字符并 (b) 选择短文件路径(总共少于 35 个字符)。否则,由于文件路径无效或过长,某些工具可能会在构建过程中稍后失败。

2. 下载depot_tools.zip(https://chromium.googlesource.com/chromium/tools/depot_tools.git)并解压到“c:\code\depot_tools”。不要使用资源管理器中的拖放或复制粘贴提取,这不会提取隐藏的“.git”文件夹,而该文件夹是 depot_tools 自动更新所需的。不过,您可以从上下文菜单中使用“提取全部...”。7-zip也是一个很好的工具。

3. 运行“update_depot_tools.bat”安装Python和Git。

cd c:\code\depot_tools
update_depot_tools.bat
4. 将“c:\code\depot_tools”文件夹添加到系统路径中。例如,在 Windows 10 上:

运行“系统属性高级”命令。
单击“环境变量...”按钮。
双击“系统变量”下的“路径”以编辑值。

5. 将automate-git.py(https://bitbucket.org/chromiumembedded/cef/raw/master/tools/automate/automate-git.py)脚本下载到“c:\code\automate\automate-git.py”。


6. 使用以下内容创建“c:\code\chromium_git\update.bat”脚本。

set GN_DEFINES=is_component_build=true
set GN_ARGUMENTS=--ide=vs2022 --sln=cef --filters=//cef/*
python3 ..\automate\automate-git.py --download-dir=c:\code\chromium_git --depot-tools-dir=c:\code\depot_tools --no-distrib --no-build
运行“update.bat”脚本并等待 CEF 和 Chromium 源代码下载。CEF源代码将下载到“c:\code\chromium_git\cef”,Chromium源代码将下载到“c:\code\chromium_git\chromium\src”。下载完成后,CEF源代码将被复制到“c:\code\chromium_git\chromium\src\cef”。

cd c:\code\chromium_git
update.bat

7. 使用以下内容创建“c:\code\chromium_git\chromium\src\cef\create.bat”脚本。

set GN_DEFINES=is_component_build=true
set GN_ARGUMENTS=--ide=vs2022 --sln=cef --filters=//cef/*
call cef_create_projects.bat
运行“create.bat”脚本生成 Ninja 和 Visual Studio 项目文件。

cd c:\code\chromium_git\chromium\src\cef
create.bat

这将生成一个“c:\code\chromium_git\chromium\src\out\Debug_GN_x86\cef.sln”文件,可以在 Visual Studio 中加载该文件以调试和编译单个文件。将此路径中的“x86”替换为“x64”,以使用 64 位构建而不是 32 位构建。始终使用 Ninja 构建完整的项目。如果更改项目配置或在 GN 配置(BUILD.gn 文件)中添加/删除文件,请重复此步骤。

8. 使用 Ninja 创建 CEF/Chromium 的调试版本。编辑“c:\code\chromium_git\chromium\src\cef”处的 CEF 源代码,并多次重复此步骤以在开发时执行增量构建。

cd c:\code\chromium_git\chromium\src
ninja -C out\Debug_GN_x86 cef

将“Debug”替换为“Release”以生成发布版本而不是调试版本。将“x86”替换为“x64”以生成 64 位构建而不是 32 位构建。

9. 运行生成的 cefclient 示例应用程序。

cd c:\code\chromium_git\chromium\src
out\Debug_GN_x86\cefclient.exe
有关详细的调试说明,请参阅Windows 调试指南。

Mac OS X 设置
需要什么

BranchesAndBuilding Wiki 页面上列出了 macOS 构建要求。
所有版本都支持在 Intel Mac 上构建。从 M93(4577 分支)开始,支持在 Apple Silicon (ARM64) Mac 上构建。
至少 16GB RAM(建议 32GB+)和 150GB 可用磁盘空间(用于调试版本)。
使用快速互联网连接 (100Mbps) 和快速构建机器(2.4Ghz、16 个逻辑核心、SSD)大约需要 4 小时。
分步指南

在此示例中,“~”是“/Users/marshall”。请注意,在某些情况下必须使用绝对路径。本节中描述的环境变量可以添加到“~/.bash_profile”文件中,以在会话中保留它们。

1. 创建以下目录。

mkdir ~/code
mkdir ~/code/automate
mkdir ~/code/chromium_git

2. 使用 Git 下载“~/code/depot_tools”。

cd ~/code
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git

3. 将“~/code/depot_tools”目录添加到您的 PATH 中。注意这里使用的是绝对路径。

export PATH=/Users/marshall/code/depot_tools:$PATH

4. 将automate-git.py脚本下载到“~/code/automate/automate-git.py”。

5. 使用以下内容创建“~/code/chromium_git/update.sh”脚本。

#!/bin/bash
python3 ../automate/automate-git.py --download-dir=/Users/marshall/code/chromium_git --depot-tools-dir=/Users/marshall/code/depot_tools --no-distrib --no-build --x64-build
⚠如果使用 Apple Silicon Mac 而不是 Intel Mac,则替换--x64-build为--arm64-build

赋予其可执行权限。

cd ~/code/chromium_git
chmod 755 update.sh

运行“update.sh”脚本并等待 CEF 和 Chromium 源代码下载。CEF源代码将下载到“~/code/chromium_git/cef”,Chromium源代码将下载到“~/code/chromium_git/chromium/src”。下载完成后,CEF源代码将被复制到“~/code/chromium_git/chromium/src/cef”。

cd ~/code/chromium_git
./update.sh

6. 运行“~/code/chromium_git/chromium/src/cef/cef_create_projects.sh”脚本创建 Ninja 项目文件。如果更改项目配置或在 GN 配置(BUILD.gn 文件)中添加/删除文件,请重复此步骤。

cd ~/code/chromium_git/chromium/src/cef
./cef_create_projects.sh

⚠ 如果使用 Apple Silicon Mac 而不是 Intel Mac,请在运行前cef_create_projects.sh添加export GN_DEFINES=is_component_build=true.

7. 使用 Ninja 创建 CEF/Chromium 的调试版本。编辑“~/code/chromium_git/chromium/src/cef”中的 CEF 源代码,并多次重复此步骤以在开发时执行增量构建。

cd ~/code/chromium_git/chromium/src
ninja -C out/Debug_GN_x64 cef

⚠ 如果使用 Apple Silicon Mac 而不是 Intel Mac,请将“x64”替换为“arm64”。将“Debug”替换为“Release”以生成发布版本而不是调试版本。

8. 运行生成的 cefclient、cefsimple 和/或 ceftests 示例应用程序。

cd ~/code/chromium_git/chromium/src
open out/Debug_GN_x64/cefclient.app
# 或者直接在控制台运行查看日志输出:
./out/Debug_GN_x64/cefclient.app/Contents/MacOS/cefclient

有关详细的调试说明,请参阅Mac OS X 调试指南。

Linux设置
需要什么

BranchesAndBuilding Wiki 页面上列出了 Linux 构建要求。
使用其他版本或发行版构建尚未经过测试,可能会遇到问题。
至少 16GB RAM(推荐 32GB+)和 120GB 可用磁盘空间(用于调试版本)。
使用快速互联网连接 (100Mbps) 和快速构建机器(2.4Ghz、16 个逻辑核心、SSD)大约需要 4 小时。
分步指南

在此示例中,“~”是“/home/marshall”。请注意,在某些情况下必须使用绝对路径。本节中描述的环境变量可以添加到“~/.profile”或“~/.bashrc”文件中,以在会话中保留它们。

1. 创建以下目录。

mkdir ~/code
mkdir ~/code/automate
mkdir ~/code/chromium_git

2. 下载并运行“~/code/install-build-deps.py”以安装构建依赖项。对所有问题回答 Y(是)。

cd ~/code
sudo apt-get install curl file lsb-release procps python3 python3-pip
curl 'https://chromium.googlesource.com/chromium/src/+/main/build/install-build-deps.py?format=TEXT' | base64 -d > install-build-deps.py
sudo python3 ./install-build-deps.py --no-arm --no-chromeos-fonts --no-nacl
python3 -m pip install dataclasses importlib_metadata

3.使用Git下载“~/code/depot_tools”。

cd ~/code
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git

4. 将“~/code/depot_tools”目录添加到您的 PATH 中。注意这里使用的是绝对路径。

export PATH=/home/marshall/code/depot_tools:$PATH

5. 下载“~/automate/automate-git.py”脚本。

cd ~/code/automate
wget https://bitbucket.org/chromiumembedded/cef/raw/master/tools/automate/automate-git.py

6. 使用以下内容创建“~/code/chromium_git/update.sh”脚本。

#!/bin/bash
python3 ../automate/automate-git.py --download-dir=/home/marshall/code/chromium_git --depot-tools-dir=/home/marshall/code/depot_tools --no-distrib --no-build

赋予其可执行权限。

cd ~/code/chromium_git
chmod 755 update.sh

运行“update.sh”脚本并等待 CEF 和 Chromium 源代码下载。CEF源代码将下载到“~/code/chromium_git/cef”,Chromium源代码将下载到“~/code/chromium_git/chromium/src”。下载完成后,CEF源代码将被复制到“~/code/chromium_git/chromium/src/cef”。

cd ~/code/chromium_git
./update.sh

7. 配置GN_DEFINES您所需的构建环境。

Chromium 提供sysroot 映像,以实现跨 Linux 发行版的一致构建。作为上述步骤 6 的一部分,必要的文件将自动下载。如果您不想处理由于与本地安装的软件包或内核版本不兼容而导致的潜在构建损坏,建议使用 Chromium 的 sysroot。要使用 sysroot 映像,请配置以下 GN_DEFINES:

export GN_DEFINES="use_sysroot=true use_allocator=none symbol_level=1 is_cfi=false use_thin_lto=false"

还可以使用本地安装的软件包而不是提供的 sysroot 进行构建。选择此选项可能需要您进行额外的调试工作才能解决由此产生的任何构建错误。在 Ubuntu 18.04 上,以下 GN_DEFINES 已经过测试可靠工作:

export GN_DEFINES="use_sysroot=false use_allocator=none symbol_level=1 is_cfi=false use_thin_lto=false use_vaapi=false"
请注意,使用 sysroot 映像时无法直接构建“cefclient”目标。您可以通过在完成下面的步骤 9 后创建二进制发行版,然后使用该二进制发行版构建 cefclient 目标来解决此限制。

您还可以创建AddressSanitizer 版本以增强调试功能。只需添加is_asan=true dcheck_always_on=true到上面列出的 GN_DEFINES 并out/Release_GN_x64在下面的步骤 9 中构建目录即可。asan_symbolize.py按照 AddressSanitizer 链接中所述运行脚本以获取符号化输出。

列出的其他各种 GN 参数均基于AutomateBuildSetup Wiki 页面的建议。您可以在 Chromium 源代码中按名称搜索它们以查找更多详细信息。

8. 运行“~/code/chromium_git/chromium/src/cef/cef_create_projects.sh”脚本创建 Ninja 项目文件。如果更改项目配置或在 GN 配置(BUILD.gn 文件)中添加/删除文件,请重复此步骤。

cd ~/code/chromium_git/chromium/src/cef
./cef_create_projects.sh

9. 使用 Ninja 创建 CEF/Chromium 的调试版本。编辑位于“~/code/chromium_git/chromium/src/cef”的 CEF 源代码,并多次重复此步骤以在开发时执行增量构建。请注意,步骤 10 可能需要额外的“chrome_sandbox”目标。只有在步骤 7 中进行设置,“cefclient”目标才会成功构建,use_sysroot=false因此如有必要,请删除该目标。

cd ~/code/chromium_git/chromium/src
ninja -C out/Debug_GN_x64 cefclient cefsimple ceftests chrome_sandbox
将“Debug”替换为“Release”以生成发布版本而不是调试版本。

10.如果您使用的是较旧的内核 (< 3.8),请设置Linux SUID 沙箱。有关 Linux 沙箱技术的更多背景信息,请参阅此处。

# This environment variable should be set at all times.
export CHROME_DEVEL_SANDBOX=/usr/local/sbin/chrome-devel-sandbox

# This command only needs to be run a single time.
cd ~/code/chromium_git/chromium/src
sudo BUILDTYPE=Debug_GN_x64 ./build/update-linux-sandbox.sh

11. 运行 cefclient、cefsimple 和/或 ceftests 示例应用程序。use_sysroot=false请注意,只有在步骤 7 中进行设置后,cefclient 应用程序才会成功构建。

cd ~/code/chromium_git/chromium/src
./out/Debug_GN_x64/cefclient

有关详细的调试说明,请参阅Linux 调试指南。

下一步
如果您正在 Linux 上寻找优秀的代码编辑器,请查看Eclipse和Emacs教程。
查看教程和GeneralUsage Wiki 页面,了解有关 CEF 实施和使用的详细信息。
查看适用于Windows、Mac OS X或Linux的 Chromium 调试指南。
当您准备好将更改贡献回 CEF 项目时,请参阅ContributingWithGit Wiki 页面以获取有关创建拉取请求的说明。
更新2023-09-28

参考链接:

VS2022编译和打包CEF3(+chromium)源码_cef sandbox_o派大猩o的博客-CSDN博客 (windows vs2022 branch=5672)

Linux 编译CEF源码详细记录_cef编译 linux_L-Super的博客-CSDN博客 (linux)

Windows 编译CEF源码详细记录-CSDN博客 (windows 比较详细的问题解决)

cef源码 编译基础_cef源码编译-CSDN博客 (有点旧 vs2017,有些基础知识可以看看)

记录git巨型仓库clone & windows10下cef3编译加入MP3/MP4 branch4389 - 知乎 (更古老一下,参考git的一些用法)

如何编译出cef2623中的cef_sandbox.lib静态库-CSDN博客 (说明了cef_sandbox.lib的合成方向,可以试试)

【精选】Win10下编译cef使其支持H.264、H.265_h264 libcef.dll-CSDN博客 (这里有写h265等修改的,可以试试,我笔记那份忘记从哪里抄来的,没支持h265)

Chrome 浏览器支持4k/h265的定制开发 (这里知道h265没法在html5test通过的原因)

最后的最后是备份,有点瑕疵,不支持h265

一年有效(至2024-11-22)
cef_binary_119.4.3+gc76a3b9+chromium-119.0.6045.159_windows32.zip
链接:https://pan.baidu.com/s/1kReLZicezcTxy9ILtMxk9g 
提取码:y6wq 

cef_binary_119.4.3+gc76a3b9+chromium-119.0.6045.159_windows32_debug_symbols.zip
链接:https://pan.baidu.com/s/1Mqkmze3IuYLo2Y1OZ55X2A 
提取码:0dp7 

cef_binary_119.4.3+gc76a3b9+chromium-119.0.6045.159_windows32_release_symbols.zip
链接:https://pan.baidu.com/s/1hJPA6zyI2ZAl67QUHAnGIA 
提取码:2u79 

cef_binary_119.4.3+gc76a3b9+chromium-119.0.6045.159_windows64.zip
链接:https://pan.baidu.com/s/1GoyCR6u3_0jv98UfiyL9vw 
提取码:uc49 

cef_binary_119.4.3+gc76a3b9+chromium-119.0.6045.159_windows64_debug_symbols.zip
链接:https://pan.baidu.com/s/1qipF9Si5cto55Iuhsf6Xmg 
提取码:lu2d 

cef_binary_119.4.3+gc76a3b9+chromium-119.0.6045.159_windows64_debug_symbols.zip
链接:https://pan.baidu.com/s/1KQGu92vKhM7vOoYi9Q7BOA 
提取码:hvqp 
 

  • 22
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值