thradams/cake
GitHub: thradams/cake
一个用 C 自举编写的 C23 编译器前端,支持将现代 C 代码转译为 C89、静态分析与跨平台编译。
Stars: 661 | Forks: 38
C 编程语言 1978
C 编程语言 第二版 1988
_C 无处不在。从操作系统到嵌入式设备,从高性能应用程序到基础技术,C 驱动着我们每天赖以生存的技术。永恒、高效且通用。_
# 关于
Cake 是一个用 C 语言从头开始编写的编译器前端,遵循 C23 语言规范及更高版本。
它作为一个实验新特性的平台,包括 C2Y 语言提案、安全增强以及诸如字面量函数和 defer 语句等扩展。
当前的后端生成兼容 C89 的代码,这些代码可以与现有或旧的编译器流水线配合以生成可执行文件。
```
[source] ───────────► [preprocessor] ───────────► [compiler]
│ ▲
└─► [cake preprocessor] ──►[cake compiler] ─┘ c89
```
Cake 旨在通过提供高质量的[警告信息](warnings.md)和高级流程分析(包括[对象生命周期](ownership.md)检查)来增强 C 的安全性。
# Web 在线演练场
这是尝试的最佳方式。
http://cakecc.org/playground.html
# 用例
注意:Cake 仍在开发中,尚未达到稳定版本。
Cake 可以作为静态分析器与其他编译器一起使用。它生成 SARIF 文件,这些文件被流行的 IDE(如 Visual Studio 和 Visual Studio Code)识别,从而提供无缝集成。
它还可以作为预处理器,将 C23 代码转换为 C89。这允许开发人员使用现代或实验性功能,同时针对尚不支持最新语言标准的编译器。
Cake 也是一个交叉编译器。例如,在 Windows 上,它可以使用 Linux 头文件并为 Linux 生成 GCC 兼容的代码,反之亦然。这使得它在开发多平台代码时非常有用。
Cake 的另一个用途是作为一个库来解析源代码并构建 AST,然后将其用于其他目的;例如,自动序列化、自动文档生成等。
# 特性
* C23 预处理器
* C23 语法分析
* C23 语义分析
* 静态[对象生命周期](ownership.md)检查 (扩展)
* Sarif 输出
* 交叉编译
* C89 后端
* 样式检查器
* AST
* 大量[诊断](warnings.md)
# 构建
GitHub
https://github.com/thradams/cake
## MSVC 构建说明
打开 Visual Studio 的开发者命令提示符。进入 *src* 目录并输入:
```
cl build.c && build
```
这将构建 *cake.exe*,然后在 Cake 自己的源代码上运行 Cake。
## Linux 上 GCC 的构建说明
进入 *src* 目录并输入:
```
gcc build.c -o build && ./build
```
## Linux/Windows/MacOS 上 Clang 的构建说明
进入 *src* 目录并输入:
```
clang build.c -o build && ./build
```
## 运行测试
在任何平台上添加 *-DTEST* 将运行大量测试。
```
gcc -DTEST build.c -o build && ./build
```
## Emscripten 构建说明 (Web)
需要 Emscripten https://emscripten.org/ 。
首先进行正常构建。
正常构建还会生成一个文件 *lib.c*,它是“核心库”的合并版本。
然后在 _./src_ 目录下输入:
```
call emcc -sSTACK_SIZE=8388608 -DMOCKFILES -Wno-multichar "lib.c" -o "Web\cakejs.js" -s WASM=0 -s EXPORTED_FUNCTIONS="['_CompileText']" -s EXTRA_EXPORTED_RUNTIME_METHODS="['ccall', 'cwrap']"
```
这将生成 *\src\Web\cake.js*
# 在命令行运行 Cake
确保 Cake 位于您的系统路径中。
示例
```
cake source.c
```
这将输出 *./platform short name/source.c*
参见[手册](manual.md)
# 路线图
* 函数字面量和局部函数实现
* 使其可用作 C89 后端并进行修复
* Flow v2 算法已被推迟
# 参与
您可以通过试用 Cake、报告错误和提供反馈来做出贡献。
对 C 有建议吗?
DISCORD 服务器
[https://discord.gg/YRekr2N65S](https://discord.gg/YRekr2N65S)
# Cake 是如何开发的?
我使用 Visual Studio 2022 IDE 编写和调试 Cake 源代码。
Cake 使用 MSVC includes 解析自身,并在构建后生成 X\_86\_msvc 目录。
Linux 版本在 WSL 内部进行测试,macOS 版本目前测试最少,但预计可以正常工作。
# Cake 与 CFront
CFront 是第一个 C++ 编译器,旨在将 C++ 源代码翻译成 C。
最初它与 C89 兼容,但随着 C 和 C++ 语言的独立发展,它出现了分歧。
Cake 保持与标准规范和 C 语言持续发展的一致性,确保完全兼容。
该编译器引入了一些扩展,在保留 C 的基本设计的同时,支持实验和对语言演进的开放贡献。
# 许可证
Cake 使用与 GCC 相同的许可证。GPLv3
标签:C23, C2Y, GCC兼容, SARIF, SOC Prime, Visual Studio, 云安全监控, 代码安全, 代码生成, 前端, 客户端加密, 嵌入式开发, 开发工具, 渗透测试工具, 漏洞枚举, 编程工具, 编译器, 自动化payload嵌入, 语法分析, 跨编译, 转译器, 远程代码执行, 逆向移植, 静态分析, 静态检查, 预处理器