项目简介
rvcc是一个自举式C编译器,针对32位RISC - V和ARM指令集架构(ISAs)设计。它实现了C语言的一个子集,足以完成自身编译,能直接生成适用于RV32IM和ARMv7的可执行Linux ELF二进制文件,并且自带一个用于基本I/O的嵌入式最小Linux C标准库。
项目的主要特性和功能
- 具备自举编译能力,可编译自身源代码,以此验证编译器正确性。
- 支持RISC - V和ARMv7架构,能生成对应架构的可执行Linux ELF二进制文件。
- 包含嵌入式最小Linux C标准库,为基本I/O操作提供支持。
- 以单二进制文件形式存在,适用于没有GCC工具链的环境。
- 采用ANSI C编写,可在任何平台上进行交叉编译。
- 编译流程简单,采用从源代码到中间语言(IL)再到二进制文件的两步编译过程。
- 词法分析器、语法分析器和代码生成器均为手动实现。
安装使用步骤
前提条件
确保已安装相应的依赖工具,运行RISC - V自举测试需安装gcc和rv8 RISC - V模拟器,运行ARM自举测试需安装qemu - arm - static。
自举测试
- 运行RISC - V自举测试:
make bootstrap - riscv
- 运行ARM自举测试:
make bootstrap - arm
- 同时运行两者:
make bootstrap
编译使用
使用命令rvcc [-o outfile] [-noclib] [-march=riscv|arm] <infile.c>
进行编译:
- -o
:指定输出文件名,默认输出为out.elf。
- -noclib
:排除嵌入式C库,默认包含。
- -march=riscv|arm
:指定输出架构,默认架构为riscv。
运行和反汇编
- RISC - V
- 运行:使用
rv - jit <elf_file>
运行RISC - V ELF文件。 - 反汇编:使用
rv - bin dump -d <elf_file>
反汇编RISC - V二进制文件。
- 运行:使用
- ARM
- 运行:使用
qemu - arm - static <elf_file>
在x86上运行ARM二进制文件。 - 反汇编:使用
arm - linux - gnueabi - objdump -d <elf_file>
反汇编ARM二进制文件。
- 运行:使用
下载地址
点击下载 【提取码: 4003】【解压密码: www.makuang.net】