andrewchambers/c

GitHub: andrewchambers/c

一个追求极简和自托管的轻量级 C 编译器套件,适合编译器学习和研究,但项目已暂停开发。

Stars: 491 | Forks: 62

# 一个小巧、快速的 C 编译器套件。 注意 - 该项目不再积极开发。请转向 https://badges.gitter.im/Join%20Chat.svg,这是一个更完善的后续项目。我现在将自己的修复提交到该项目中。 [![Join the chat at https://gitter.im/andrewchambers/c](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/andrewchambers/c?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) - 小巧。 - 快速。 - 一致。 - 高质量。 - 低复杂度。 - 零依赖。 - 无需繁琐配置。 - 轻松交叉编译。 - 开箱即用。 你应该能在 30 秒内为任何受支持的目标平台获得 C 编译器、汇编器、链接器和 libc。 ## 构建 (目前)需要外部 C 编译器和 gnu binutils,目前我只在 64 位 linux 上测试过。 代码确实使用了匿名联合体扩展,因此你的编译器也需要支持它们。 ``` $ make ``` ## 测试 ``` $ make test $ make selfhost # self hosting ``` ## 计划 ### 阶段 1. 自托管 x86_64,简易后端。 ### 阶段 2. 自托管 arm,类似于树莓派/android。 ### 阶段 3. 构建小型的整洁 C 代码库,如 8cc、tcc、sbase。 ### 阶段 4. 构建 musl libc。 ### 后续。 - 构建更多程序。 - 用我们自己的汇编器替换 gnu as。 - 用我们自己的静态链接器替换 ld。 - 构建 OS 内核。 - SSA 后端。 ## 状态 处于阶段 2 之前。自托管但缺少许多常见情况。虽然从技术上讲,这些错误可以用编译器本身来修复 :)。它使用自己的桩头文件,尚无法正确处理系统头文件(寻求帮助)。 ## 贡献 项目暂停。请参阅 以获取一个更完善的新编译器项目。 ### 代码布局 - 库位于 src/* - 命令位于 src/cmd/* 如果你不确定某个库的用途,请查看头文件,其中应该有简短描述。 ### 代码风格 遵循 Plan9 风格约定。不允许头文件包含其他头文件,以消除循环依赖并提高构建速度。 src/u.h 是此规则的唯一例外。 - http://www.lysator.liu.se/c/pikestyle.html - http://plan9.bell-labs.com/magic/man2html/6/style - http://aiju.de/b/style ### 错误修复和问题 尝试附上能展示你问题的单个源文件。如果可能,手动缩减测试用例,直到尽可能小。 尝试遵循通用模板并根据需要修改: ``` What are you trying to do: ... What you expected to happen: ... What actually hapened: ... ``` 尝试添加一个能复现问题的小型独立文件。 通常,每个错误修复或更改都应添加一个触发该错误的测试文件。 ### 内存管理 编译器不会显式释放内存。自托管时的峰值内存使用量约为 2Mb,因此这应该不是问题,即使对于计划中的目标/主机(如树莓派)也是如此。 这实际上简化了代码,并可能使其更快,因为分配可以是指针碰撞。 ## 有用的链接 - C11 标准最终草案 http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf - Dave Prosser 的 C 预处理算法 http://www.spinellis.gr/blog/20060626/ - x86-64 ABI http://www.x86-64.org/documentation/abi.pdf - http://aiju.de/rant/cross-compiling - http://bellard.org/tcc/ - https://github.com/rui314/8cc - http://harmful.cat-v.org/software/ - http://suckless.org/philosophy
标签:ARM架构, C语言编译器, DNS解析, Linux软件, x86_64架构, 云安全监控, 代码构建工具, 后端开发, 客户端加密, 嵌入式Linux, 嵌入式开发, 开源项目, 无依赖, 树莓派开发, 汇编器, 系统编程, 编程语言实现, 编译原理, 自托管编译器, 跨平台编译, 轻量级编译器, 链接器, 静态分析