Skip to content

Calico: 一个“能跑”的编译器后端

Ciallo~(∠・ω< )⌒☆

GitHub stars

Karesis 开发的轻量级、零依赖(下一个目标)、受 LLVM 启发的编译器后端工具套件。

还在被 LLVM 千万行的 C++ 代码淹没吗? 想找个小巧、纯 C、能拿来学习和“开刀”的玩具?来看看 Calico 吧!

这个项目最初是 Karesis 在 UCAS 的“编译原理”课程作业(当时它还叫 calir),后来不断“缝缝补补”就成了现在的 Calico(实际上目前来说还是算作业,作者正在被UCAS堆集如山的作业与任务打得满地找牙...)


开发工具(环境)

Calico 使用先进的C23 开发,并且强依赖 Clang (v20+)

gcc 对一部分 C23 语法细节不那么兼容,索性就不支持了 (实际上是懒)

早期开发(比如utils/轮子中的hashmap或者bump)的时候有过跨平台的设计,然而随着开发逐渐就不想做了...

MSVC? 不是哥们,你真的会用这个被印度程序员到处拉史的编译器开发项目? 至少我被坑过所以坚决不用(

它有啥?

Calico 专为学习和原型设计而生,但“麻雀虽小,五脏俱全”:

  • 一个带行级错误报告.cir 文本解析器 (ir/parser.h)
  • 一个能直接跑 IR 的树遍历解释器 (interpreter/interpreter.h)
  • 一套完整的分析遍(CFG、支配树、支配前沿) (analysis/)
  • 帮你自动搞定 SSA 的 Mem2Reg 转换 (transforms/mem2reg.h)
  • 一个严格的 Verifier (校验器),专治各种不服(和 SSA 违规)

状态和“下一步画饼”

目前核心 IR、分析、解释器都已稳定(v0.1.0)。

下一步计划: 搞定 RISC-V 后端!(包括指令选择、图着色寄存器分配、ELF 发射器...)

欢迎大家来围观、提 issue、揪bug、写测试!

p.s. 我真的不是很擅长写测试(

本文档采用 知识共享 署名-相同方式共享 4.0 协议 进行许可。