Skia ARM Chromebook GLES 交叉编译资产(chromebook_arm_gles)完整指南
发布时间:2026/9/24 9:33:04 作者:尧图编辑部 阅读量:1,286
完整指南)
图形学【免费下载链接】skiaSkia is a complete 2D graphic library for drawing Text, Geometries, and Images. See documentation for contribution instructions.项目地址https://gitcode.com/gh_mirrors/ski/skia点击查看免费下载本篇技术指南聚焦于 Skia 仓库中的基础设施资产chromebook_arm_gles讲解它如何为ARM Chromebook EGL/GLES GPU目标提供编译与链接所需的头文件与库文件涵盖资产的创建流程、上传机制、在 CI 构建流水线中的消费方式以及开发者在本机手工交叉编译 Chromebook 版本 Skia 时的完整 GN 参数配置。读完本文你将掌握如何从一台 ARM Chromebook 上提取 GL 库、打包上传为 Skia 资产并据此构建出可在 Chromebook 上运行dm/nanobench的 GPU 测试程序。资产是什么为 ARM Chromebook GPU 编译准备的胶水依赖在 Skia 仓库的持续集成体系中形如infra/bots/assets/name的目录都对应一个可复现的构建依赖包assetchromebook_arm_gles正是其中之一。根据其 README.md 的定位说明This asset is the necessary includes and libs to compile/link the gpu code for ARM Chromebooks with gpu supports EGL and GLES.也就是说当目标平台是支持 EGL 与 GLES 的 ARM Chromebook时编译 Skia 的 GPU 代码如 Ganesh/Graphite 的 GL 后端需要一套额外的头文件和动态库。这些库不能从普通 Linux 开发机上获得——它们来自 Chromebook 自身的/usr/lib目录例如 Mali GPU 驱动libmali*这类私有闭源组件。因此 Skia 将其固化为一个可下载、可上传、版本可追踪的构建资产。从目录结构看该资产包含README.md资产用途与创建说明create.py真正执行打包资产逻辑的脚本create_and_upload.py一键创建 上传到 CIPD的入口脚本VERSION资产版本号当前为0init.py将该目录标记为 Python 包便于脚本间相互import。在 CI 中如何被消费构建配方与任务调度理解资产价值的最快方式是看它在哪里被吃进去。该资产被两类基础设施代码引用这决定了它的内容约定。1. 构建配方chromebook.pychromebook.py 是 Chromebook 交叉编译的构建配方。当target_arch arm时它取出chromebook_arm_gles资产目录并把它注入编译与链接参数头文件搜索路径-Igl_dir/include见 chromebook.py该目录下应包含EGL、KHR、GLES2、GLES3四个头文件子目录链接库搜索路径-Lgl_dir/lib见 chromebook.py该目录下存放从 Chromebook 提取的libGL*、libEGL*、libmali*库同时配置-DMESA_EGL_NO_X11_HEADERS宏避免 EGL 头文件依赖 X11 头设置skia_use_egl true启用 EGL 后端编译产物为nanobench与dm见 chromebook.py这两个是可执行程序供后续测试与基准评测使用。2. 任务调度gen_tasks_logic.go在任务生成逻辑 gen_tasks_logic.go 中Chromebook构建任务按架构拉取不同资产组合arm→armhf_sysrootchromebook_arm_glesarm64→arm64_sysrootchromebook_arm64_glesx86_64→chromebook_x86_64_gles无需额外 sysroot。可以看到chromebook_arm_gles与armhf_sysrootARM hard-float 根文件系统成对出现sysroot 提供工具链需要的系统库与 C/C 标准库而 GLES 资产专门补充 Chromebook 私有的 GL 驱动库。手动创建资产从 Chromebook 提取 /usr/lib官方流程非常直接。在任意一台 ARM Chromebook 上例如华硕 Asus C100p搭载 ARM 处理器打包/usr/lib目录然后在开发机上解压并把解压目录交给创建脚本。第 1 步在 Chromebook 上收集库文件# 在 ARM Chromebook 上执行 zip -r usr_lib.zip /usr/lib把usr_lib.zip拷贝到 Linux 开发机并解压到某个目录下文以dir指代该目录解压后应能直接看到其中的lib内容。第 2 步运行创建 上传脚本./infra/bots/assets/chromebook_arm_gles/create_and_upload.py --lib_path [dir]该命令完成两件事先在本地创建资产目录再通过 Skia 的sk工具上传到 CIPD 资产仓库。脚本内部发生了什么create.py 源码解读create.py 是核心实现其create_asset()函数依次执行安装 Mesa GL 开发包create.pysudo apt-get install libgles2-mesa-dev libegl1-mesa-dev这一步需要sudo且只在 Linux 上运行脚本入口会先检查sys.platform。安装的这两个包提供了 EGL/GLES 的公共头文件与符号用于补齐 Chromebook 库中缺失的通用部分。复制 GL 动态库create.py在目标目录创建lib/子目录并从你传入的dir即 Chromebook 的/usr/lib解压结果中复制匹配libGL*、libEGL*、libmali*模式的所有文件。libmali*是关键——它是 ARM Chromebook 上常见的 Mali GPU 闭源驱动普通开发机无法获取。复制 GL 头文件create.py在目标目录创建include/子目录并把开发机上安装好的/usr/include/EGL、/usr/include/KHR、/usr/include/GLES2、/usr/include/GLES3四个头文件目录整体复制进来。最终资产目录结构为chromebook_arm_gles/ ├── lib/ # libGL*, libEGL*, libmali* 来自 Chromebook /usr/lib └── include/ # EGL/ KHR/ GLES2/ GLES3/ 来自 Mesa 开发包环境变量传递的工程细节注意 create.py 并不直接接收--lib_path参数而是通过环境变量CHROMEBOOK_ARM_GLES_LIB_PATH获取路径。这是因为实际执行时create.py是由sk工具间接调用的见下文无法直接传参。create_and_upload.py负责把命令行参数--lib_path短选项-l写入该环境变量create_and_upload.py。create_and_upload.py一键创建并上传create_and_upload.py 的流程如下同样先校验运行平台必须是 Linuxcreate_and_upload.py通过环境变量把lib_path传给create.py的入口逻辑os.environ[create.ENV_VAR] args.lib_path定位仓库bin/sk工具create_and_upload.py位于infra/bots/assets/chromebook_arm_gles/向上四级即仓库根目录下的 bin/sk若不存在则提示先运行bin/fetch-sk获取执行sk asset upload chromebook_arm_gles把刚创建的资产上传至 CIPD供全球 CI 机器下载使用。没有 CIPD 权限时资产文件的等价产物create_and_upload.py输出的资产目录被上传到 CIPD 后普通开发者可通过sk直接下载使用。如果既不想上传、又需要本地交叉编译可参考官方构建文档 site/docs/user/build.md 中 ChromeOS 一节的做法把资产下载到固定路径./bin/sk asset download clang_linux /opt/clang ./bin/sk asset download armhf_sysroot /opt/armhf_sysroot ./bin/sk asset download chromebook_arm_gles /opt/chromebook_arm_gles ./bin/sk asset download chromebook_x86_64_gles /opt/chromebook_x86_64_gles其中chromebook_arm_gles正是本文主角chromebook_x86_64_gles是其 x86_64 版本构建 x86 ChromeOS 只需 Clang 与 GL 库无需 sysroot见 build.md。若没有 CIPD 授权官方指引就是按本资产 README 的流程自行创建见 build.md。实战手动交叉编译 ARM Chromebook 版 Skia拿到资产后完整的 GN 配置如下来自 build.md已结合资产目录结构补充注释。该配置同时指向armhf_sysroot与chromebook_arm_gles两个资产#ARM Chromebook 交叉编译 GN args cc /opt/clang/bin/clang cxx /opt/clang/bin/clang extra_asmflags [ --targetarmv7a-linux-gnueabihf, --sysroot/opt/armhf_sysroot/, -marcharmv7-a, -mfpuneon, -mthumb, ] extra_cflags[ --targetarmv7a-linux-gnueabihf, --sysroot/opt/armhf_sysroot, -I/opt/chromebook_arm_gles/include, # 本文资产的 EGL/GLES 头文件 -I/opt/armhf_sysroot/include/, -I/opt/armhf_sysroot/include/c/4.8.4/, -I/opt/armhf_sysroot/include/c/4.8.4/arm-linux-gnueabihf/, -DMESA_EGL_NO_X11_HEADERS, # EGL 头文件不依赖 X11 -funwind-tables, ] extra_ldflags[ --sysroot/opt/armhf_sysroot, -B/opt/armhf_sysroot/bin, -B/opt/armhf_sysroot/gcc-cross, -L/opt/armhf_sysroot/gcc-cross, -L/opt/armhf_sysroot/lib, -L/opt/chromebook_arm_gles/lib, # 本文资产的 libGL*/libEGL*/libmali* --targetarmv7a-linux-gnueabihf, ] target_cpuarm skia_use_fontconfig false skia_use_system_freetype2 false skia_use_egl true # 启用 EGL 后端对照 CI 配方 chromebook.py 可以发现手动配置与自动化配方高度一致都把chromebook_arm_gles/include加入-I、把chromebook_arm_gles/lib加入-L并统一使用-DMESA_EGL_NO_X11_HEADERS与-static-libstdc/-static-libgcc静态链接 C 运行时。配置完成后照常构建bin/gn gen out/chromebook --args...以上参数... ninja -C out/chromebook dm nanobench部署到 Chromebook 并运行将编译出的二进制通过 SSH 推送到 Chromebook 后用glesGPU 配置运行测试build.md# 大多数 Chromebook 默认将 home 分区挂载为 noexec需先重新挂载 sudo mount -i -o remount,exec /home/chronos否则直接运行会得到 permission denied 错误。之后即可在设备上执行dm --config gles等 GPU 测试命令。常见问题与注意事项只能在 Linux 上创建create.py与create_and_upload.py都会检查sys.platform并拒绝在非 Linux 平台运行create.py。需要 sudo 权限apt-get install libgles2-mesa-dev libegl1-mesa-dev是必需步骤用于补齐 EGL/GLES 公共头文件。sk工具缺失上传前脚本会校验仓库根目录bin/sk是否存在不存在时需先执行bin/fetch-sk下载。与姊妹资产配套使用ARM 目标需要armhf_sysrootARM64 目标使用 chromebook_arm64_glesx86_64 目标使用 chromebook_x86_64_gles三者结构约定一致lib/include/只是目标架构与库来源不同。私有驱动不可分发风险libmali*等库来自 Chromebook 设备本身资产仅用于 Skia 内部 CI 与授权用户无权限用户应参照 build.md 自行创建。总结chromebook_arm_gles是 Skia 为ARM Chromebook EGL/GLES目标精心设计的构建资产create.py把 Chromebook 的/usr/lib中提取的libGL*/libEGL*/libmali*库与 Mesa 开发包的头文件组合成lib/include/的标准结构create_and_upload.py借助sk asset upload将其发布到 CIPDCI 侧由 chromebook.py 构建配方和 gen_tasks_logic.go 任务调度按架构分发消费。掌握它的创建与使用你就打通了从 Chromebook 提取 GPU 库 → 打包资产 → 交叉编译 → 上机运行 dm/nanobench的完整链路。赞分享图形学【免费下载链接】skiaSkia is a complete 2D graphic library for drawing Text, Geometries, and Images. See documentation for contribution instructions.项目地址https://gitcode.com/gh_mirrors/ski/skia点击查看免费下载相关推荐Skia 跨平台编译资产指南chromebook_x86_64_glesx86_64 Chromebook 的 EGL/GLES 头文件与库打包方案Skia 跨平台编译资产指南chromebook_x86_64_glesx86_64 Chromebook 的 EGL/GLES 头文件与库打包方案 导读图形学lz4/lz4交叉编译工具链从x86到ARM的完整指南lz4/lz4交叉编译工具链从x86到ARM的完整指南 LZ4是一款极速的无损压缩算法提供超过500MB/s每核心的压缩速度解压速度可达数GB/s。在嵌入存储系统编程Skia 的 ARM64 Sysroot 资产在 x86_64 Linux 上交叉编译 C 的 sysroot 构建与 CI 使用指南Skia 的 ARM64 Sysroot 资产在 x86_64 Linux 上交叉编译 C 的 sysroot 构建与 CI 使用指南 导读 本文以 Sk图形学创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考