
图形学【免费下载链接】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点击查看免费下载导读armhf_sysroot是 Skia 持续集成CI基础设施中用于在 x86_64 Linux 构建机上交叉编译 ARM 硬浮点hard float, armhfC 代码的 sysroot 资产。本文将以 infra/bots/assets/armhf_sysroot/README.md 为主线结合该目录下的构建脚本与使用方代码讲解它是什么、如何从 Debian 软件包生成、如何被 Chromebook ARM 构建任务消费以及升级 C 标准时如何维护帮助你完整理解 Skia 交叉编译工具链的构建与使用流程。一、什么是 armhf_sysrootarmhf_sysroot 位于 infra/bots/assets/armhf_sysroot/是 Skia bots 资产体系Assets中的一员。它的定义在 README 中非常精炼ARM (hard float) sysroot for cross-compiling c code on an x86_64 Linux bot.一句话概括它是在 x86_64 Linux bot 上交叉编译 ARM 硬浮点 C 代码所需的根文件系统sysroot。所谓 sysroot就是目标系统ARM Linux上/目录下的库、头文件与工具链结构的快照交叉编译器通过--sysroot指向它即可在宿主机上解析 ARM 目标平台的头文件和链接库而无需一台真实的 ARM 设备。目录中仅包含三个文件职责清晰文件作用README.md资产用途与维护说明VERSION当前资产版本号内容为10create.py生成该资产的脚本被sk asset upload调用二、生成流程从 Debian 软件包到工具链README 明确给出了生成方式Run create_and_upload which installs some debian packages and turns them into a toolchain.即运行create_and_upload其核心即调用 create.py脚本会先安装若干 Debian 交叉编译软件包再将其整理成一个可用的 toolchainsysroot目录。2.1 安装交叉编译软件包create.py 的第一步是调用sudo apt-get install安装三个软件包subprocess.check_call([ sudo,apt-get,install, libstdc-10-dev-armhf-cross, libgcc-10-dev-armhf-cross, binutils-arm-linux-gnueabihf ])各包的作用libstdc-10-dev-armhf-crossARM 硬浮点目标的 GCC 10 C 标准库开发文件含头文件与静态/动态库libgcc-10-dev-armhf-crossARM 硬浮点目标的 GCC 10 运行时库开发文件binutils-arm-linux-gnueabihfarm-linux-gnueabihf目标的 GNU 汇编器、链接器等二进制工具。三者组合基本构成了在 x86_64 主机上为 armhf 目标编译与链接 C 代码的最小工具链底座。脚本会提示“You may be asked for your sudo password”因为安装软件包需要 root 权限。2.2 组装 sysroot 目录结构安装完成后create.py 依次执行三个步骤清空目标目录shutil.rmtree避免残留文件污染资产拷贝/usr/arm-linux-gnueabihf到目标目录即 sysroot 主体包含include、lib等将/usr/lib/gcc-cross/arm-linux-gnueabihf/10拷贝为目标目录下的gcc-cross供链接器定位crt*.o和libgcc*.so。随后脚本还会额外拷贝三个 x86_64 主机侧库到 sysroot 的lib/下README 源码注释说明这些是链接时必需、经反复试错确认的shutil.copy(/usr/lib/x86_64-linux-gnu/libbfd-2.37-armhf.so, ...) shutil.copy(/usr/lib/x86_64-linux-gnu/libopcodes-2.37-armhf.so, ...) shutil.copy(/usr/lib/x86_64-linux-gnu/libctf-armhf.so.0, ...)这三个库libbfd、libopcodes、libctf分别提供二进制文件描述、操作码解码与 CTF 调试信息支持在链接 ARM 目标文件时需要用到因此被一并纳入资产。2.3 修复 libc.so 中的绝对路径最后一步非常关键create.py 会修改 sysroot 内lib/libc.so文件。原因在于 Debian 软件包生成的libc.so是链接脚本linker script其中以GROUP起始的行写的是绝对路径如/usr/arm-linux-gnueabihf/lib/libpthread.so.0在 bot 的目录环境下无法生效。脚本用fileinput原地替换if line.startswith(GROUP): print(GROUP ( libc.so.6 libc_nonshared.a AS_NEEDED ( ld-linux-armhf.so.3 ) ))替换后GROUP行改用相对文件名配合链接时的-L搜索路径即可正确解析。这也是交叉编译 sysroot 中常见的“链接脚本路径修复”手法从源码结构看属于该资产的必要收尾步骤。三、资产版本与整体管理机制VERSION 内容为10是资产的当前版本号。Skia 的资产机制在 infra/bots/assets/README.md 中有系统说明每个资产目录包含VERSION当前版本号、可选的create.py生成脚本与可选的create_and_upload.py便捷封装资产按版本号命名并存储在 Google Storage 中通过sk asset命令进行增删、上传与下载更新资产的典型流程为修改create.py→sk asset upload myasset自动更新 VERSION→make -C infra/bots train重新生成 tasks.json →git commit。armhf_sysroot的VERSION之所以独立存在正是因为 sysroot 内容GCC 版本、glibc 版本会随更新而变化版本号用于在 CIPD 中唯一标识快照。从 tasks.json 可以看到skia/bots/armhf_sysroot以 CIPD 包形式路径armhf_sysroot被预置到相应构建任务的输入中。四、在构建中的实际使用Chromebook ARM 任务armhf_sysroot 最典型的消费方是 Skia 的Chromebook ARM构建任务。任务生成逻辑在 gen_tasks_logic.go 中按架构分支挂载资产} 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) ...即当目标架构为arm时构建任务会同时下载armhf_sysroot系统库与chromebook_arm_glesMali GL 驱动相关库。真正的编译参数在 infra/bots/recipe_modules/build/chromebook.py 中组装这是理解 sysroot 用法的核心代码sysroot_dir os.path.join(top_level, armhf_sysroot) gl_dir os.path.join(top_level, chromebook_arm_gles) env {LD_LIBRARY_PATH: os.path.join(sysroot_dir, lib)} args[extra_asmflags] [ --targetarmv7a-linux-gnueabihf, --sysroot%s % sysroot_dir, -marcharmv7-a, -mfpuneon, -mthumb, ] args[extra_cflags] [ --targetarmv7a-linux-gnueabihf, --sysroot%s % sysroot_dir, -I%s % os.path.join(gl_dir, include), -I%s % os.path.join(sysroot_dir, include), -I%s % os.path.join(sysroot_dir, include, c, 10), -I%s % os.path.join(sysroot_dir, include, c, 10, arm-linux-gnueabihf), -DMESA_EGL_NO_X11_HEADERS, -U_GLIBCXX_DEBUG, ] args[extra_ldflags] [ --targetarmv7a-linux-gnueabihf, --sysroot%s % sysroot_dir, -static-libstdc, -static-libgcc, -B%s % os.path.join(sysroot_dir, bin), -B%s % os.path.join(sysroot_dir, gcc-cross), -L%s % os.path.join(sysroot_dir, gcc-cross), -L%s % os.path.join(sysroot_dir, lib), -L%s % os.path.join(gl_dir, lib), ]这里每个参数都指向本文第一节介绍的 sysroot 结构--targetarmv7a-linux-gnueabihf--sysroot让 clang 以 ARM 硬浮点为目标、以 sysroot 为根目录编译-marcharmv7-a -mfpuneon -mthumbARMv7-A 架构、NEON 浮点单元与 Thumb 指令集-I.../include/c/10/...定位 sysroot 内 GCC 10 的 C 标准库头文件-B.../bin使用 sysroot 的 GNU 链接器注释说明“其能正确链接”-B.../gcc-cross帮助定位crt*.o-L.../gcc-cross与-L.../lib帮助定位libgcc*.so与目标库-static-libstdc -static-libgcc静态链接 C 标准库与 GCC 运行时避免在目标设备上依赖额外动态库LD_LIBRARY_PATH指向 sysroot 的lib供运行时加载先前拷贝的libbfd、libopcodes等宿主侧库。最终产物为nanobench与dmninja -C out_dir nanobench dm即 Skia 的基准测试与测试工具。上述参数在 Build-Debian10-Clang-arm-Release-Chromebook_GLES.json 的期望输出中得到了完整印证可作为端到端的可验证参考。五、C 标准升级时的维护要点README 明确指出该资产的历史维护动机This has been updated in the past when moving up in supported C versions (e.g. to c14, and then again to c17).也就是说每当 Skia 提升支持的 C 标准例如从 C14 升至 C17当前 sysroot 内为 GCC 10 的libstdc就需要重建该资产。因为 sysroot 内 C 标准库头文件include/c/10与库必须提供新标准所需的特性否则交叉编译会因缺少头文件或符号而失败。升级时的标准操作路径是更新 create.py 中安装的软件包版本如libstdc-10-dev-armhf-cross换为更高版本同时同步include/c/ver等路径在构建侧同步更新 chromebook.py 中include/c/10的路径运行sk asset upload armhf_sysroot上传新版本自动更新 VERSION按 assets/README.md 的流程执行make -C infra/bots train重新生成 tasks.json使任务引用新版本 CIPD 包然后提交变更。这一“资产重建 参数同步 任务再生成”的闭环保证了 CI 中所有 Chromebook ARM 任务使用一致且可回滚的工具链快照。结语armhf_sysroot是 Skia 在 x86_64 构建机上支撑 ARM 硬浮点交叉编译的关键基础设施资产通过 create.py 将 Debian 交叉编译软件包整理为可直接使用的 sysroot 与 toolchain并以版本化 CIPD 资产的形式分发到构建任务chromebook.py 则展示了其消费方式——clang 的--target/--sysroot参数、C 头文件路径、链接器与库搜索路径等。理解这一资产也就理解了 Skia 交叉编译工具链从生成、版本管理到实际构建的完整链路。赞分享图形学【免费下载链接】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 的 ARM64 Sysroot 资产在 x86_64 Linux 上交叉编译 C 的 sysroot 构建与 CI 使用指南Skia 的 ARM64 Sysroot 资产在 x86_64 Linux 上交叉编译 C 的 sysroot 构建与 CI 使用指南 导读 本文以 Sk图形学Skia ARM Chromebook GLES 交叉编译资产chromebook_arm_gles完整指南Skia ARM Chromebook GLES 交叉编译资产chromebook_arm_gles完整指南 本篇技术指南聚焦于 Skia 仓库中的基础设施图形学Creeper高级功能揭秘如何利用CSS选择器、正则表达式与数据清洗提升爬虫效率Creeper高级功能揭秘如何利用CSS选择器、正则表达式与数据清洗提升爬虫效率 Creeper是一个革命性的下一代爬虫框架专为高效网页数据提取而设计。这个创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考