(镜像在 GitHub 上)
cproc
是一个使用 QBE 作为后端的 C11 编译器。它是根据 ISC 许可证发布的。
还实现了一些 C23 功能和 GNU C 扩展。
还有很多工作要做,但它目前实现了大部分语言,并且能够构建软件,包括它本身、mcpp、gcc 4.7、binutils 等。
它受到其他几个小型 C 编译器的启发,包括 8cc、c、lacc 和 scc。
编译器本身是用标准 C99 编写的,可以使用任何符合 C99 的编译器来构建。
POSIX 驱动程序依赖于 POSIX.1-2008 接口,并且Makefile
需要 POSIX 兼容的 make(1)。
在运行时,您将需要 QBE、汇编器和目标系统的链接器。由于预处理器尚未实现,因此目前还需要一个外部预处理器。
QBE 支持的所有架构都应该可以工作(当前为 x86_64、aarch64 和 riscv64)。
以下目标经过持续构建测试,并且已知可以引导并通过所有测试:
x86_64-linux-musl
x86_64-linux-gnu
x86_64-freebsd
aarch64-linux-musl
aarch64-linux-gnu
riscv64-linux-gnu
运行./configure
创建适合您系统的config.h
和config.mk
。如果配置脚本不支持您的系统,您可以手动创建这些文件。 config.h
应该定义几个字符串数组( static char *[]
):
startfiles
:在链接命令开头传递给链接器的对象。endfiles
:在链接命令(包括 libc)末尾传递给链接器的对象。preprocesscmd
:预处理器命令以及目标系统的任何必要标志。codegencmd
:QBE 命令,以及可能的显式目标标志。assemblecmd
:汇编命令。linkcmd
:链接器命令。您可能还想使用适当的CC
、 CFLAGS
和LDFLAGS
自定义您的环境或config.mk
。
完成此操作后,您可以使用
make
Makefile
包含其他几个可用于引导的目标。这些目标需要能够运行config.h
中指定的工具。
stage2
:使用初始( stage1
)输出构建编译器。stage3
:使用stage2
输出构建编译器。bootstrap
:构建stage2
和stage3
编译器,并验证它们在字节方面是否相同。 volatile
限定类型 (#7)。long double
类型 (#3)。~mcf/[email protected] 上有一个邮件列表。请随意将其用于一般讨论、问题、补丁或错误报告(如果您没有 sr.ht 帐户)。
请将任何问题报告至 ~mcf/[email protected]。
非常感谢补丁。将它们发送到邮件列表(首选),或作为 GitHub 镜像上的拉取请求。