图形学【免费下载链接】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点击查看免费下载导读infra/bots/assets/chromebook_x86_64_gles是 Skia 持续集成CI基础设施中用于在x86_64 架构 Chromebook如 Pixelbook上编译并链接 GPU 代码的编译资产目录。它负责收集 Chromebook 系统/usr/lib64下的 EGL/GLES 运行库、安装 Mesa 开发包、整理 GL 头文件并最终打包上传到 Skia 的资产仓库供 CI 构建任务按需拉取使用。阅读本文后你将掌握该资产的用途、目录结构、创建与上传的完整流程、底层create.py/create_and_upload.py脚本的实现细节以及它如何被 Skia 构建配方与任务生成逻辑引用。资产概述它解决什么问题Skia 需要在真实硬件上验证 GPU 渲染管线Chromebook 是重要的目标平台之一。但 Chromebook 本身并不附带完整的 GL 开发头文件与链接库——只有运行时系统库。因此 Skia 将交叉编译所需的 include 与 lib固化为一个可复用的资产asset该资产包含必要的头文件includes和库libs用于为支持 EGL 和 GLES 的 x86_64 Chromebook 编译/链接 GPU 代码。来源x86_64 Chromebook 设备上的/usr/lib64目录例如 Pixelbook 上的目录产出一个包含lib/与include/两部分的目录结构用途作为构建环境的一部分向编译器提供-I头文件搜索路径与-L库搜索路径从而在开发机上交叉编译出能在 Chromebook 上运行的 Skia GPU 代码。从 infra/bots/assets/chromebook_x86_64_gles/README.md 可以看出这个资产是 CI 流水线的输入物料而非构建产物因此它的内容管理版本、打包、上传全部通过sk命令行工具完成。资产目录结构该资产目录位于 infra/bots/assets/chromebook_x86_64_gles/包含 5 个文件文件作用README.md资产用途说明与创建方法VERSION当前资产版本号内容为2用于触发缓存失效__init__.py标识该目录为 Python 包便于脚本相互导入create.py实际的资产生成脚本安装包、拷贝头文件与库create_and_upload.py生成并上传资产的入口脚本值得注意的是VERSION的语义Skia 的构建配方recipe会在每次构建时比较资产版本号例如 chromebook.py 中通过api.run.asset_version(clang_linux, ...)注入REBUILD_IF_CHANGED_*宏来强制重编译。因此当 Chromebook 系统库或头文件内容发生变化时需要同步递增该资产目录中的VERSION文件否则 CI 可能复用旧的缓存资产。创建流程从 Chromebook 到开发机README 给出的核心操作步骤为在任意一台 x86_64 Chromebook如 Pixelbook上将/usr/lib64目录打包成 zip 并取出在开发机上解压该 zip得到本机目录将该目录路径作为--lib_path参数传给create_and_upload.py./infra/bots/assets/chromebook_x86_64_gles/create_and_upload.py --lib_path [dir]该脚本会先安装两个 GL 开发包再将解压得到的库与已安装的头文件一起打包成资产libgles2-mesa-dev libegl1-mesa-dev从源码结构可以推断这个 zip 中的库主要来自 Chromebook 的图形驱动栈包含libGL*、libEGL*、libdrm*等文件详见下文create.py分析它们与 Mesa 开发包安装的头文件配套构成一套完整的 EGL/GLES 交叉编译环境。底层实现create.py 逐行解析create.py 是资产的真正制造者其核心逻辑分为三步。1. 通过环境变量传递库路径create.py本身不接受--lib_path参数而是读取环境变量ENV_VAR CHROMEBOOK_X86_64_GLES_LIB_PATHgetenv()在环境变量缺失时向 stderr 打印提示并退出返回码 1。这样设计的根本原因在注释里写得很清楚该脚本是通过sk间接调用的无法直接接收--lib_path。因此由外层create_and_upload.py将参数注入环境变量create.py再读取。2. 安装 Mesa 开发包并拷贝系统库create_asset(target_dir, gl_path)首先执行cmd [sudo,apt-get,install,libgles2-mesa-dev,libegl1-mesa-dev] subprocess.check_call(cmd)这里用到sudo说明打包过程需要 root 权限libgles2-mesa-dev提供 GLES2/GLES3 头文件libegl1-mesa-dev提供 EGL 头文件。随后在目标目录创建lib/并采用通配符拷贝 Chromebook 解压目录中的关键动态库to_copy glob.glob(os.path.join(gl_path,libGL*)) to_copy.extend(glob.glob(os.path.join(gl_path,libEGL*))) to_copy.extend(glob.glob(os.path.join(gl_path,libdrm*)))覆盖的三类库分别对应libGL*GL桌面入口库libEGL*EGL 平台抽象层库libdrm*Direct Rendering ManagerChromebook 图形驱动栈与内核 DRM 交互的库。3. 整理头文件目录在include/下以copytree方式完整复制四个头文件目录shutil.copytree(/usr/include/EGL, os.path.join(include_dir, EGL)) shutil.copytree(/usr/include/KHR, os.path.join(include_dir, KHR)) shutil.copytree(/usr/include/GLES2, os.path.join(include_dir, GLES2)) shutil.copytree(/usr/include/GLES3, os.path.join(include_dir, GLES3))即EGL、KHRKhronos 公共头、GLES2、GLES3四组头文件正好对应 EGL/GLES 2.0/3.0 两代 API。平台限制create.py与create_and_upload.py的main()开头都做了平台校验if linux not in sys.platform: print(This script only runs on Linux., filesys.stderr) sys.exit(1)即该资产只能在 Linux 开发机上创建与上传这与 Chromebook 交叉编译环境本身基于 Linux 的事实一致。上传入口create_and_upload.py 与sk工具链create_and_upload.py 是面向用户的上层入口它完成两件事创建资产 上传资产。参数与环境变量传递parser.add_argument(--lib_path, -l, requiredTrue) ... os.environ[create.ENV_VAR] args.lib_path--lib_path为必填参数对应 README 中的[dir]随后被写入环境变量CHROMEBOOK_X86_64_GLES_LIB_PATH供create.py读取。定位sk并上传上传依赖 Skia 的sk工具Swarming 客户端脚本通过相对路径向上定位sk os.path.realpath(os.path.join( FILE_DIR, os.pardir, os.pardir, os.pardir, os.pardir, bin, sk)) if os.name nt: sk .exe if not os.path.isfile(sk): raise Exception(sk not found at %s; maybe you need to run bin/fetch-sk?)即sk预期位于仓库根的bin/sk若不存在会提示运行bin/fetch-sk下载。最终上传命令为subprocess.check_call([sk, asset, upload, ASSET], cwdFILE_DIR)其中ASSET os.path.basename(FILE_DIR)即当前目录名chromebook_x86_64_gles。上传后资产版本将记录在 infra/bots/assets/chromebook_x86_64_gles/VERSION当前为2。在 CI 流水线中的实际引用该资产并非孤立存在它在 Skia 的构建与调度体系中承担明确的职责。构建配方中的编译参数infra/bots/recipe_modules/build/chromebook.py 针对 x86_64 Chromebook 分支引用该资产目录gl_dir os.path.join(top_level,chromebook_x86_64_gles) args[extra_cflags] [ -DMESA_EGL_NO_X11_HEADERS, -I%s % os.path.join(gl_dir, include), ] args[extra_ldflags] [ -L%s % os.path.join(gl_dir, lib), -static-libstdc, -static-libgcc, -fuse-ldlld, ]可以看到资产的两个子目录被精确映射为编译器参数-I 资产/include把 EGL/KHR/GLES2/GLES3 头文件加入头文件搜索路径-L 资产/lib把从 Chromebook 拷贝来的libGL*、libEGL*、libdrm*加入库搜索路径-DMESA_EGL_NO_X11_HEADERS声明不使用 X11 头文件适配 Chromebook 的无 X 环境。这正印证了 README 开头必要的 includes 与 libs 用于编译/链接 GPU 代码的描述——资产内容与编译参数一一对应。任务生成中的资产依赖声明在任务调度逻辑 infra/bots/gen_tasks_logic/gen_tasks_logic.go 中Chromebook 构建任务按架构分发依赖} else if b.ExtraConfig(Chromebook) { b.asset(clang_linux) if b.Arch(x86_64) { b.asset(chromebook_x86_64_gles) } else if b.Arch(arm) { b.asset(armhf_sysroot) b.asset(chromebook_arm_gles) } else if b.Arch(arm64) { b.asset(arm64_sysroot) b.asset(chromebook_arm64_gles) } ... }即 x86_64 架构的 Chromebook 任务会声明chromebook_x86_64_gles资产外加clang_linux编译器而 arm/arm64 则使用各自对应的资产。b.asset(...)的声明最终会展开为下载资产的实际步骤体现在任务描述文件 infra/bots/tasks.json 与 golden 测试文件 Build-Debian10-Clang-x86_64-Debug-Chromebook_GLES.json 中例如该预期文件中展示了任务先拷贝clang_linux/VERSION再执行构建的步骤序列。操作小结与注意事项准备源目录在目标 x86_64 Chromebook 上打包/usr/lib64在 Linux 开发机解压执行上传运行./infra/bots/assets/chromebook_x86_64_gles/create_and_upload.py --lib_path [dir]脚本会通过sudo apt-get安装libgles2-mesa-dev与libegl1-mesa-dev将[dir]下libGL*、libEGL*、libdrm*拷贝到资产lib/将/usr/include/{EGL,KHR,GLES2,GLES3}复制到资产include/通过sk asset upload上传到 Swarming 资产存储。更新版本若 Chromebook 系统 GL 栈升级导致库内容变化应同步递增 VERSION 文件避免 CI 复用旧资产缓存。需要注意的边界条件包括整个创建/上传流程仅支持 Linux 开发机需要sudo权限安装系统包要求仓库内已存在bin/sk工具缺失时先执行bin/fetch-sk--lib_path为必填参数否则脚本直接报错退出。赞分享图形学【免费下载链接】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点击查看免费下载相关推荐跨平台编译指南将wukong-robot打包为Windows可执行文件与Linux发行包跨平台编译指南将wukong robot打包为Windows可执行文件与Linux发行包 你是否还在为如何在不同操作系统上部署wukong robot而烦恼人工智能AI 应用语音交互助手智能家居零基础入门VDO-SLAM从环境配置到运行KITTI数据集的完整指南零基础入门VDO SLAM从环境配置到运行KITTI数据集的完整指南 想要掌握视觉SLAM技术但又担心动态物体干扰定位精度VDO SLAM正是你需要的解决Skia图形库编译指南Windows/macOS/Linux全平台编译教程Skia图形库编译指南Windows/macOS/Linux全平台编译教程 你还在为跨平台编译Skia图形库而烦恼吗本文将带你一步解决Windows、mac图形学创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
