-
Notifications
You must be signed in to change notification settings - Fork 24
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
10 changed files
with
3,114 additions
and
0 deletions.
There are no files selected for viewing
100 changes: 100 additions & 0 deletions
100
i18n/en/docusaurus-plugin-content-docs/current/baseline-reference.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,100 @@ | ||
--- | ||
sidebar_position: 5 | ||
--- | ||
|
||
# Baseline Reference of Infra Component Versions | ||
|
||
:::info Frequently Updated! | ||
This is a living document, and its content will change as conditions evolve. Check back often! | ||
::: | ||
|
||
As LoongArch support in major upstream open-source projects improves and these projects release regularly, the combinations of various foundational software versions have exploded. To reduce the workload for integrators and avoid repeated pitfalls, we have compiled the following recommended version combinations as baselines for reference. Some are stable and well-tested combinations, while others are on the bleeding edge of development and will soon become the next stable baseline. | ||
|
||
We generally use the "year + quarter" format to name each baseline, as it helps developers associate version numbers with the details (and sometimes painful memories) of that time. | ||
|
||
This document was last updated on May 12, 2024. The currently recommended stable baseline is 2023Q1, and the testing baseline is 2024Q2. The current bleeding-edge baseline is expected to reach sufficient stability by the end of 2024 (and thus be named 2024Q4 or 2025Q1). If you plan to adapt to the 2024Q2 baseline, we highly recommend also evaluating the bleeding-edge baseline. | ||
|
||
## Bleeding Edge {#bleeding-edge} | ||
|
||
|Binutils|GCC|Linux|glibc|LLVM|Rust|Go | | ||
|:------:|:-:|:---:|:---:|:--:|:--:|:-:| | ||
|2.43 :wrench:|15.x :wrench:|6.12 LTS|2.4x :wrench:|19 :wrench:|1.8x.x|1.23.x :wrench:| | ||
|
||
:wrench: This symbol indicates that the related content is still under development. | ||
|
||
This baseline reflects the current development progress, with some software versions yet to be officially released, so these version numbers may change. Additionally, many new features are under refinement, which may result in unexpected compilation, linking errors, and runtime behaviors. Developers and capable users are encouraged to test, practice, and report any issues in the [community discussion channel](https://github.com/loongson-community/discussions/issues). | ||
|
||
:::warning Proactive issue reporting is crucial! | ||
Only when you raise problems will others see them and work on fixes. | ||
Though the circle is still small, LoongArch’s application scope is already broader than any single individual can imagine. | ||
Don’t expect a few developers to coincidentally face your issue and solve it without direct communication. | ||
::: | ||
|
||
The main features of this period/baseline include: | ||
|
||
* :wrench: Continuing the implementation of LoongArch ELF psABI v20231219 (overall version v2.30). | ||
- v20230519: :wrench: Further improvements to linker relaxation. | ||
- v20231219: :wrench: Expected full TLS descriptor (TLSDESC) support. | ||
* KVM virtualization is supported on Linux. | ||
* :wrench: Extended support for new instructions and semantic changes in LoongArch v1.10. | ||
- 16-byte atomic operations are planned: :wrench: [tracking issue](https://github.com/loongson-community/discussions/issues/16). | ||
* Full TLSDESC support? | ||
* BFD linker support for `DT_RELR`? | ||
* TBD | ||
|
||
## 2024Q2 {#2024q2} | ||
|
||
|Binutils|GCC|Linux|glibc|LLVM|Rust|Go | | ||
|:------:|:-:|:---:|:---:|:--:|:--:|:-:| | ||
|2.42|14.x|6.6 LTS|2.39|18|1.76.x|1.22.x| | ||
|
||
This is the second baseline in the rapid development of the LoongArch's new world, showcasing significant iterations achieved through large-scale collaborative research and numerous minor improvements. | ||
|
||
The support for LoongArch v1.00 features is nearly complete in this baseline. Additionally, broader community participation, closer collaboration, and more timely iterations mean that more modern features are gradually being introduced starting from this baseline. | ||
|
||
Key features of this period/baseline include: | ||
|
||
* Partial implementation of LoongArch ELF psABI v20231219 (overall version v2.30). | ||
- v20230519: Basic linker relaxation support: GNU toolchain has comprehensive support, while LLVM toolchain only implements compatibility requirements. Some issues may remain. | ||
- v20231102: For `medium` code model procedure calls, implemented the correct approach using adjacent `pcaddu18i + jirl` with `R_LARCH_CALL36`. Legacy approach remains supported only for binary compatibility but is not recommended for new code. | ||
- v20231219: Added TLS descriptor (TLSDESC) support, mainlined everywhere except glibc and musl. | ||
- v20231219: Requires adjacent placement of four address-composing instructions in `extreme` code model. Legacy object code with non-adjacent instructions crossing 4KiB boundaries will link incorrectly without remedy. Package maintainers should closely monitor software using `extreme` code model (typically large projects or low-level components). | ||
* First complete support for LoongArch v1.00 instruction set, enabling assembly, disassembly, and free use in programs. | ||
* Support for LoongArch v1.10 new instructions in assembly and disassembly, with partial code generation support. For example, gcc added command-line options to control 32-bit division erratum and `frecipe` usage. | ||
* Initial auto-vectorization capability in compilers. | ||
* First-time Rust language support for Linux glibc and bare metal environments. | ||
* For Linux: KVM virtualization support missed the Linux 6.6 LTS release in late 2023. | ||
|
||
## 2023Q1 {#2023q1} | ||
|
||
|Binutils|GCC|Linux|glibc|LLVM|Rust|Go | | ||
|:------:|:-:|:---:|:---:|:--:|:--:|:-:| | ||
|2.40|13.x|6.1 LTS|2.37|16|N/A|1.20.x| | ||
|
||
This is the first bootable baseline for LoongArch's new world. | ||
|
||
Key features of this period/baseline include: | ||
|
||
* Partial implementation of LoongArch ELF psABI v20230519 (overall version v2.10). | ||
- Introduced and defaulted to simplified relocations that do not rely on stack operation semantics. | ||
- For `medium` code model procedure calls, adopted a workaround using `jirl` with `R_LARCH_PCALA_LO12`. | ||
- No support for linker relaxation and related relocations. | ||
* Compliance with ACPI 6.5 and UEFI 2.10. | ||
These specifications were officially released in August 2022, missing Linux 5.19's merge window in early July. | ||
Combined with the time needed for code updates, this baseline marks their first implementation. | ||
* First-time LLVM/Clang support. | ||
* Still no support for SIMD, hardware virtualization, or binary translation extensions. | ||
|
||
## 2022Q3 {#2022q3} | ||
|
||
|Binutils|GCC|Linux|glibc|LLVM|Rust|Go | | ||
|:------:|:-:|:---:|:---:|:--:|:--:|:-:| | ||
|2.38|12.x|5.19|2.36|N/A|N/A|1.19.x| | ||
|
||
This is the first upstream baseline for LoongArch's new world. | ||
At this point, while LoongArch support in toolchains and kernel was first upstreamed completely and could work together to build a complete sysroot, the timing mismatch with ACPI and UEFI specification updates meant systems built with this baseline couldn't boot. | ||
|
||
Key features of this period/baseline include: | ||
|
||
* Only supports relocations using stack operation semantics (`R_LARCH_SOP_*`). | ||
* Only supports basic integer and floating-point instructions from LoongArch v1.00 Volume 1. SIMD, hardware virtualization, and binary translation extensions are completely unavailable. |
Oops, something went wrong.