yxd-ym
谢谢你积极的尝试。我的想法:
既然musl主分支还不支持loongarch, 我们可以先基于glibc,把基本功能调试通过。
zig编译hello.c链接glibc的命令:
# linux x86_64
zig build-exe -target x86_64-linux-gnu hello.c -lc
# linux loongson64 (我们现阶段的目标, 能够编译成功并运行)
zig build-exe -target loongarch64-linux-gnu hello.c -lc
我之前看了下zig源码并梳理了一些流程, 希望给移植的工作提供帮助。
- llvm后端对接
llvm已经支持loongson64位,但是zig没有注册llvm loongarch64目标平台的接口。
需要修改src/codegen/llvm/Builder.zig
,initializeLLVMTarget() 添加
.loongarch64 => {
llvm.LLVMInitializeLoongArchTarget();
llvm.LLVMInitializeLoongArchTargetInfo();
llvm.LLVMInitializeLoongArchTargetMC();
llvm.LLVMInitializeLoongArchAsmPrinter();
llvm.LLVMInitializeLoongArchAsmParser();
},
pagesize大小16K适配
zig现在的页大小是根据平台写死的,龙芯64位页大小是16K, 需要修改 lib/std/mem.zig
// const page_size = {...} 里添加
.loongarch64 => 16 * 1024,
(此步骤后期可能不需要,因为我看到有PR动态计算pagesize,https://github.com/ziglang/zig/pull/17382,
如果这个PR被采纳,此步骤就可以忽略)
glibc target目标编译选项 -target loongson64支持 (还未详细研究)
应该需要修改src/target.zig
和 src/glibc.zig
os相关(还未研究,本人不熟悉的领域)