Nixpkgs 中的编译器自举

主要观点:

  • Nixpkgs 是大型纯函数程序,构建众多开源项目,结构重要,包应独立可读,避免意外复杂性。
  • 以交叉编译为例说明偏离理想结构会导致问题,如早期 Nixpkgs 交叉编译历史中 per-platform 包的问题。
  • 后来改进为用全局cross参数和单个包函数,减少重复,但仍有不足,如glibcbinutilsCross的问题。
  • 2017 年作者完成 Nixpkgs 交叉编译 overhaul,不再需要binutilsCross等,更好地实现了包的独立性原则。
  • libcCross包长期存在,后终于在近十年后被修复,stdenv.cc.libc可满足需求。
  • 编译器和标准库相关问题导致构建混乱,尤其是交叉编译时,新构建的编译器用于构建库会产生问题。
  • 一些项目已开始重新思考编译器引导方式,如musl-cross-make、Exherbo 等,Nixpkgs 中 LLVM 已开始改变,GCC 也有新进展,希望未来其他编译器也能如此。

关键信息:

  • Nixpkgs 结构重要,包应独立可读。
  • 早期交叉编译 per-platform 包问题及改进。
  • 2017 年 Nixpkgs 交叉编译 overhaul 及相关变化。
  • libcCross的存在与修复。
  • 编译器和标准库相关问题及其他项目的尝试。

重要细节:

  • 早期 Nixpkgs 交叉编译分支2aba922d的相关代码及问题。
  • 2017 年作者对 Nixpkgs 交叉编译的 overhaul 内容,如glibcbinutilsCross的去除。
  • libcCross长期存在的原因及最终修复的 PR。
  • 编译器和标准库相关问题的具体例子及图表说明。
  • 其他项目如musl-cross-make、Exherbo 等的相关情况。
  • Nixpkgs 中 LLVM 和 GCC 的新进展及相关 PR。
阅读 159
0 条评论