跳到主要内容

基础设施版本基线参考

本文将随时更新!

本文是活的文档(living document),内容会随着现状变化而不时更新。不妨多来看看!

随着 LoongArch 在各大开源项目上游的支持逐渐完善,以及这些项目的定期发版, 各种基础软件的版本排列组合爆炸已然不可避免。 为降低集成者们的工作负担、避免重复踩坑,我们特整理了以下推荐的版本组合为基线, 供同学们参考:有些是久经考验的稳定可用组合,有些则是功能研发的前线, 但也将不久成为下一代的稳定基线。

我们目前大致采用「年份+季度」的格式称呼各条基线, 因为这样比较方便开发者们把版本号跟当时的细节(和不好的回忆)建立联系。

本文最近一次更新是在 2024 年 5 月 12 日。 此刻推荐的稳定基线是 2023Q1,测试基线是 2024Q2。 当前的前沿基线预计将在 2024 年末达到足够稳定的状态(进而获得一个 2024Q4 或 2025Q1 的名号), 因而如果您预计适配 2024Q2 基线,那么我们十分推荐您将前沿基线也加入评估。

前沿

BinutilsGCCLinuxglibcLLVMRustGo
2.43 🔧15.x 🔧6.12 LTS2.4x 🔧19 🔧1.8x.x1.23.x 🔧

🔧 符号表示相关内容仍在开发中。

此基线是当下开发进度的实时反映,部分软件版本仍未正式发布,因此这些版本号仍有可能变化。 此外,很多新增特性也在打磨过程中,体现为您可能冷不丁遇到更多编译、链接错误, 以及运行时的非预期行为:建议开发者和行有余力的用户们多多测试、实践, 有问题都可以反馈到社区的讨论频道

主动报告问题十分重要!

只有您主动反馈问题,才会有人去看,问题才能得到解决。 目前圈子仍然很小,但 LoongArch 的应用场景已然比任何单一个体的想像更加广阔: 不要指望少数几个开发者碰巧也遇到您的问题,进而在没有沟通的前提下解决它们。

本时期/本基线的主要特点有:

  • 🔧 继续实现 LoongArch ELF psABI v20231219(整体版本号 v2.30)。
    • v20230519:🔧 继续完善 linker relaxation(链接器松弛)。
    • v20231219:🔧 预计将完全支持 TLS 描述符(TLSDESC)。
  • Linux 方面,支持了 KVM 虚拟化。
  • 🔧 支持了更多 LoongArch v1.10 新增指令与语义变化等。
  • 完整的 TLSDESC 支持?
  • BFD 链接器的 DT_RELR 支持?
  • TBD

2024Q2

BinutilsGCCLinuxglibcLLVMRustGo
2.4214.x6.6 LTS2.39181.76.x1.22.x

这是 LoongArch 新世界高速发展过程中的第二条基线,体现了大尺度协同研发中众人得以完成的重大迭代,以及众多小修小补。

LoongArch v1.00 的功能支持在本条基线终于趋近完整。除此之外,更广泛的社区参与、更密切的合作、更及时的迭代,也意味着更多现代化特性从此基线开始被逐渐引入。

本时期/本基线的主要特点有:

  • 部分实现了 LoongArch ELF psABI v20231219(整体版本号 v2.30)。
    • v20230519:基本支持了 linker relaxation(链接器松弛):GNU 工具链的支持较完善,LLVM 工具链只实现了兼容性所必须的部分。可能仍有一些坑。
    • v20231102:对于 medium 代码模型的过程调用,采用了相邻的 pcaddu18i + jirl 配合 R_LARCH_CALL36 的正确做法。 先前的取巧做法仍受支持;这仅仅是出于兼容存量二进制的考虑,不建议产生增量。
    • v20231219:支持了 TLS 描述符(TLSDESC),除 glibc、musl 之外,都完成了主线化。
    • v20231219:要求 extreme 代码模型的四条拼接地址指令必须相邻。 对于存量的目标代码,如果有不相邻且跨了 4KiB 地址边界的这样一组拼接地址指令,那么它们将被错误链接,无解: 请打包者们密切关注涉及了 extreme 代码模型的软件(一般是大型项目或涉及特别底层的细节),确保生成的目标代码符合预期。
  • 首度支持了 LoongArch v1.00 全量指令。可以汇编、反汇编、在程序中自由使用了。
  • 支持了 LoongArch v1.10 新增指令的汇编、反汇编,部分支持了代码生成。如 gcc 为控制 32 位除法 erratum 与 frecipe 的使用,新增了命令行参数。
  • 编译器方面,初步具备了自动向量化能力。
  • 首度获得了 Rust 语言支持。可用 Rust 为 Linux glibc 环境,以及裸机环境开发了。
  • Linux 方面,KVM 虚拟化功能未能赶上 Linux 6.6 这一 2023 年末的 LTS 版本。

2023Q1

BinutilsGCCLinuxglibcLLVMRustGo
2.4013.x6.1 LTS2.3716不可用1.20.x

这是 LoongArch 新世界的首条支持系统引导的基线。

本时期/本基线的主要特点有:

  • 部分遵循 LoongArch ELF psABI v20230519(整体版本号 v2.10)。
    • 支持了简化的、非依赖栈操作语义的重定位类型,并默认使用之。
    • 对于 medium 代码模型的过程调用,采用了 jirl 上附加 R_LARCH_PCALA_LO12 的取巧做法。
    • 未支持链接器松弛(linker relaxation)及相关的重定位类型。
  • 遵循 ACPI 6.5、UEFI 2.10。 这套规范于 2022 年 8 月正式发布,正好错过了 7 月初的 Linux 5.19 合并窗口; 加之代码的更新本来也要些时日,因此直到本条基线才可以说「实现了」它们。
  • 首度获得了 LLVM/Clang 支持。
  • 仍然不含 SIMD、硬件虚拟化、二进制翻译扩展的支持。

2022Q3

BinutilsGCCLinuxglibcLLVMRustGo
2.3812.x5.192.36不可用不可用1.19.x

这是 LoongArch 的首条新世界基线。 在这个时间点,工具链、内核方面的 LoongArch 支持代码首度完整上游, 并可相互配合以构建完整的 sysroot;但由于 ACPI、UEFI 等上游规范更新时间点没对上的缘故, 这个时间点无法构建可引导的系统。

本时期/本基线的主要特点有:

  • 只支持使用栈操作语义的重定位记录(R_LARCH_SOP_*)。
  • 只有 LoongArch v1.00 卷一的基础整数、浮点指令支持。SIMD、硬件虚拟化、二进制翻译扩展都完全不可用。