musl-cross-make cn mirror for xlings
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 1 年前 | ||
| 1 年前 | ||
| 1 年前 | ||
| 2 年前 | ||
| 7 年前 | ||
| 6 年前 | ||
| 6 年前 | ||
| 1 年前 | ||
| 6 年前 | ||
| 6 年前 | ||
| 6 年前 |
musl-cross-make
这是第二代 musl-cross-make,一种快速、简单但先进的基于 Makefile 的方法,用于生成面向 musl 的交叉编译器。其特性包括:
- 单阶段 GCC 构建,用于构建 musl libc 及其自身依赖于 libc 的共享目标库。
- 无硬编码绝对路径;生成的交叉编译器可被复制/移动到任意位置。
- 能够使用同一组补丁后的源码树为不同目标构建多个交叉编译器。
- 在运行
make install前不会安装任何内容,且安装位置可在安装时选择。 - 自动下载源码包(包括 GCC 依赖项 GMP、MPC、MPFR),使用 https 并校验哈希值。
- 自动应用标准 musl 支持补丁及为某些架构目标提供 musl 依赖的 bug 修复和功能补丁。
使用方法
通过在顶层目录提供 config.mak 文件来配置构建系统。唯一必需的变量是 TARGET,其值应为 GCC 目标元组(如 i486-linux-musl),但还有许多其他选项可用。示例可参考提供的 config.mak.dist 和 presets/*。
编译时运行 make。安装到 $(OUTPUT) 时运行 make install。
$(OUTPUT) 的默认值为 output;在此安装后,可按需将交叉编译器工具链移动到其他位置。
支持的 TARGET 列表
以下是不完全支持的 $(TARGET) 元组列表:
aarch64[_be]-linux-muslarm[eb]-linux-musleabi[hf]i*86-linux-muslmicroblaze[el]-linux-muslmips-linux-muslmips[el]-linux-musl[sf]mips64[el]-linux-musl[n32][sf]powerpc-linux-musl[sf]powerpc64[le]-linux-muslriscv64-linux-musls390x-linux-muslsh*[eb]-linux-musl[fdpic][sf]x86_64-linux-musl[x32]
工作原理
当前的 musl-cross-make 分为两层:
- 顶层 Makefile,负责下载、验证、解压和打补丁源码,并设置构建目录;
- Litecross,即交叉编译器构建系统本身,是一个被符号链接到构建目录的 Makefile。
真正的魔法大多发生在 litecross 中。它首先设置指向调用者提供的所有源码树的符号链接,然后构建一个组合的 src_toolchain 目录,其中包含顶层 GCC 和 binutils 源码树的内容及指向 gmp、mpc 和 mpfr 的符号链接。一个配置调用即可将所有 GNU 工具链组件配置在一起,无需安装任何组件即可供其他组件使用。
不过,litecross 并非一次性构建整个工具链树,而是先仅构建 gcc 目录及其依赖项,以获取可用于配置 musl 的 xgcc。然后配置 musl,将 musl 的头文件安装到暂存“构建系统根目录”,并使用这些头文件构建 libgcc.a。此时已具备构建 musl libc.a 和 libc.so 的所有前提条件,其余 GCC 目标库依赖于此;一旦构建完成,完整的工具链 make all 即可继续。
Litecross 实际上并不依赖于 musl-cross-make 顶层构建系统;它可与任何预先解压且正确补丁的源码树集一起使用。
项目范围与目标
本项目的主要目标包括:
- 为 GCC 和 binutils 提供标准的 musl 支持补丁。
- 作为构建面向 musl 的 GCC 的规范参考示例。
- 简化面向 musl 的交叉编译器构建流程,使 musl 用户能轻松生成 musl 链接的应用程序,或基于 musl 引导新系统。
- 协助 musl 及工具链开发者进行开发与测试。
尽管应用于 GCC 和 binutils 的补丁均设计为不破坏非 musl 配置,但 musl-cross-make 本身专为 musl 定制。若需支持上游 musl 未涵盖的特殊目标变体,除非改动轻量化,否则可能超出项目范围。而修复 musl-cross-make 在非 Linux 系统上的构建问题则明确属于项目范畴,前提是解决方案简洁。
最重要的是,本项目是服务于 musl 及其用户的辅助工程,并非高维护需求项目,也不会分散 musl 自身的开发精力。
包含补丁
除标准 musl 支持补丁外,musl-cross-make 的补丁集还提供:
- 静态链接 PIE 支持
- 新增
--enable-default-pie选项 - 修复 GCC 中 SH 架构相关缺陷及代码陈旧问题
- GCC 和 binutils 对 J2 Core CPU 目标的支持
- SH/FDPIC ABI 支持
大部分补丁已集成至 gcc trunk/binutils master 分支。如需用于 Gregor 原版 musl-cross 或其他构建系统亦可直接使用。
部分功能(如 SH/FDPIC 及 J2 特性支持)目前仅适用于 gcc 5.2.0+/binutils 2.25.1+ 版本。
许可协议
musl-cross-make 构建工具与文档遵循 LICENSE 文件中的 MIT/Expat 许可协议。
注:此许可不涵盖补丁(patches/)及生成的二进制产物。
每项补丁(patches/)均按其所应用的上游项目许可条款分发。
同理,使用本工具生成的二进制产物仍保留上游项目的原始许可。musl-cross-make 作者不对这些产物主张额外版权。
贡献说明
除非您明确声明,否则您提交至musl-cross-make的任何贡献内容将按上述许可条款授权,不附加任何额外条款或条件。