littlebot
Published on 2025-04-08 / 4 Visits
0

【源码】基于ANSI C的32位RISC V和ARM架构C语言编译器

项目简介

rvcc是一个自举式C编译器,针对32位RISC - V和ARM指令集架构(ISAs)设计。它实现了C语言的一个子集,足以完成自身编译,能直接生成适用于RV32IM和ARMv7的可执行Linux ELF二进制文件,并且自带一个用于基本I/O的嵌入式最小Linux C标准库。

项目的主要特性和功能

  1. 具备自举编译能力,可编译自身源代码,以此验证编译器正确性。
  2. 支持RISC - V和ARMv7架构,能生成对应架构的可执行Linux ELF二进制文件。
  3. 包含嵌入式最小Linux C标准库,为基本I/O操作提供支持。
  4. 以单二进制文件形式存在,适用于没有GCC工具链的环境。
  5. 采用ANSI C编写,可在任何平台上进行交叉编译。
  6. 编译流程简单,采用从源代码到中间语言(IL)再到二进制文件的两步编译过程。
  7. 词法分析器、语法分析器和代码生成器均为手动实现。

安装使用步骤

前提条件

确保已安装相应的依赖工具,运行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】