feat: use 3rdparty/llvm as LLVM dependency Co-Authored-By: Claude noreply@anthropic.com replace externl llvm with llvm submodule, update cmake & source
feat: use 3rdparty/llvm as LLVM dependency
Co-Authored-By: Claude noreply@anthropic.com
replace externl llvm with llvm submodule, update cmake & source
这个项目是一个基于 MLIR 的 Cminusf 编译器原型,用来学习编译基础和 MLIR 框架。
Cminusf 编译器的主要流程如下:
Cminusf 源码 -> 解析器 / AST -> 自定义 Cminusf Dialect MLIR -> 标准 MLIR Dialects (func / arith / memref / scf / cf) -> LLVM Dialect -> LLVM IR -> 使用系统 Clang 生成 x86 可执行文件
LLVM 源码以 Git 子模块的形式固定在项目所需的提交。首次克隆时需要同时初始化子模块:
git clone --recurse-submodules https://github.com/Zhao-Shi-jie/Cminusf-Compiler.git cd Cminusf-Compiler
如果已经克隆了主仓库,可补充初始化子模块:
git submodule update --init --recursive
构建本项目前,先单独构建并安装子模块中的 LLVM 和 MLIR:
./scripts/build-llvm.sh
该脚本不会构建 Clang。LLVM 的构建树位于 3rdparty/llvm-project/build/,安装产物位于 3rdparty/llvm-project/build/install/。
3rdparty/llvm-project/build/
3rdparty/llvm-project/build/install/
cmake -S . -B build cmake --build build --parallel # 可选:安装到 build/install cmake --install build # 编译并运行示例程序 ./build/cminusfc --emit-exe tests/<program_name>.cminus ./tests/<program_name>
CMake 只会使用子模块 build/install 中的 LLVM 和 MLIR,不会回退到系统中 的其他 LLVM 安装。生成汇编、目标文件和可执行文件时使用配置阶段在 PATH 中找到的系统 Clang。
build/install
PATH
Cminusf 源自 USTC 编译器课程实验,本项目复用了该实验的词法分析、语法分析和 AST 部分。
一个编译技术与MLIR的练手项目
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
Cminusf 编译器原型
这个项目是一个基于 MLIR 的 Cminusf 编译器原型,用来学习编译基础和 MLIR 框架。
主要流程
Cminusf 编译器的主要流程如下:
依赖
获取源码
LLVM 源码以 Git 子模块的形式固定在项目所需的提交。首次克隆时需要同时初始化子模块:
如果已经克隆了主仓库,可补充初始化子模块:
构建 LLVM 和 MLIR
构建本项目前,先单独构建并安装子模块中的 LLVM 和 MLIR:
该脚本不会构建 Clang。LLVM 的构建树位于
3rdparty/llvm-project/build/,安装产物位于3rdparty/llvm-project/build/install/。构建和运行
CMake 只会使用子模块
build/install中的 LLVM 和 MLIR,不会回退到系统中 的其他 LLVM 安装。生成汇编、目标文件和可执行文件时使用配置阶段在PATH中找到的系统 Clang。Cminusf 源自 USTC 编译器课程实验,本项目复用了该实验的词法分析、语法分析和 AST 部分。
TODO