musl-cross-make:基于 Makefile 的 musl 交叉编译器构建项目

musl-cross-make cn mirror for xlings

分支1Tags13
文件最后提交记录最后更新时间
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.distpresets/*

编译时运行 make。安装到 $(OUTPUT) 时运行 make install

$(OUTPUT) 的默认值为 output;在此安装后,可按需将交叉编译器工具链移动到其他位置。

支持的 TARGET 列表

以下是不完全支持的 $(TARGET) 元组列表:

  • aarch64[_be]-linux-musl
  • arm[eb]-linux-musleabi[hf]
  • i*86-linux-musl
  • microblaze[el]-linux-musl
  • mips-linux-musl
  • mips[el]-linux-musl[sf]
  • mips64[el]-linux-musl[n32][sf]
  • powerpc-linux-musl[sf]
  • powerpc64[le]-linux-musl
  • riscv64-linux-musl
  • s390x-linux-musl
  • sh*[eb]-linux-musl[fdpic][sf]
  • x86_64-linux-musl[x32]

工作原理

当前的 musl-cross-make 分为两层:

  1. 顶层 Makefile,负责下载、验证、解压和打补丁源码,并设置构建目录;
  2. Litecross,即交叉编译器构建系统本身,是一个被符号链接到构建目录的 Makefile。

真正的魔法大多发生在 litecross 中。它首先设置指向调用者提供的所有源码树的符号链接,然后构建一个组合的 src_toolchain 目录,其中包含顶层 GCC 和 binutils 源码树的内容及指向 gmp、mpc 和 mpfr 的符号链接。一个配置调用即可将所有 GNU 工具链组件配置在一起,无需安装任何组件即可供其他组件使用。

不过,litecross 并非一次性构建整个工具链树,而是先仅构建 gcc 目录及其依赖项,以获取可用于配置 musl 的 xgcc。然后配置 musl,将 musl 的头文件安装到暂存“构建系统根目录”,并使用这些头文件构建 libgcc.a。此时已具备构建 musl libc.alibc.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的任何贡献内容将按上述许可条款授权,不附加任何额外条款或条件。

项目介绍

musl-cross-make cn mirror for xlings

定制我的领域