41d060d7e775030c99861aa4ea94bd86c89e7c6e
- 移除SCC_LIR_LEA指令类型,改用SCC_LIR_LOAD_ADDR - 在scc_lir_func_meta_t中添加is_va_arg字段用于标识可变参数函数 - 修改scc_hir2lir函数参数类型,移除const限定符 - 更新比较操作的指令映射逻辑,将条件信息存储在metadata中 - 调整代码结构,在各个switch case分支中统一使用"} break"格式 fix(x86-isel): 修复x86指令选择中的立即数和重定位处理 - 修改emit_direct_call函数以正确处理全局符号重定位 - 更新立即数字段访问从imm到imm0 - 添加新的重定位操作数类型SCC_X86_OPR_RELOC - 实现重定位目标类型的完整处理逻辑,包括基本块和符号 refactor(x86-mir): 重构x86操作数结构以支持重定位机制 - 将内存操作数的disp字段改为结构体形式包含displacement信息 - 移除不再使用的常用操作数构造器函数 - 保留并完善slot操作数构造器 - 更新内存操作数的调试输出格式 feat(ir2mcode): 添加重定位表支持以处理符号引用 - 定义新的重定位结构体scc_reloc_t用于记录重定位信息 - 修改scc_ir2mcode_emit_instr函数签名以传递重定位表 - 实现重定位补丁应用功能scc_ir2mcode_patch - 更新机器码生成流程以收集和处理重定位信息 refactor(ir2sccf): 重构SCEF文件生成以支持重定位处理 - 提取独立的emit_mir_module函数处理MIR模块的机器码生成 - 实现基本块间重定位的地址解析和补丁应用 - 改进符号重定位的处理机制 - 简化机器码段数据的最终处理流程
Simple C Compiler
scc
这是一个简单的C语言裸机环境的自举编译器,可以从C99子集编程语言生成可执行代码。该语言支持基本操作,如算术运算、逻辑运算、条件语句(if/else)、循环语句(while/for)、分支语句(switch/case)、函数调用以及内联汇编调用(asm)。
Builder
该编译器使用cbuild 构建,设计思路来源于rust的构建工具cargo,以默认行为代替掉make、cmake等构建工具。
由于整个项目除了测试代码,完全没有任何依赖,真正做到
0依赖,所以无需复杂的依赖管理 TODO 未来构建工具本身也会使用c或者lua等可轻松自举的系统重构
cbuild
常用命令:
- 构建项目:
cbuild build - 运行程序:
cbuild run - 运行测试:
cbuild test - 清理构建产物:
cbuild clean - 查看依赖树:
cbuild tree
标准C语言文档链接
项目特点
- 隔离标准库: 不直接依赖标准库实现,提高可移植性
- 轻量化: 专注于核心功能,减少冗余组件
- 模块化: 采用模块化设计,易于扩展和维护
- 自举构建: 支持通过自身编译器构建项目
Languages
C
90.1%
C++
5.2%
Python
4.6%