llvm 实现一门语言_LLVM 初探

afd4ed611804bf1ad0f4e00b29f5e1e2.png

0x1. LLVM 架构简介

经典的三段式设计

LLVM,GCC, JIT(Java, Python) 等编译器都遵循经典的三段式设计

912e246ceb0022802d430dcf38d512ed.png

• 前端 (Frontend) - 词法分析,语法分析, 生成抽象语法树,生成中间语言 (例如 java 的字节码,llvm 的 IR,GCC 的 GIMPLE Tuples)

• 优化器 (Optimizer) - 分析中间语言,避免多余的计算,提高性能;

• 后端 (Backend) - 根据中间语言,生成对应的 CPU 架构指令 例如 X86,ARM;

通过这种设计,增加新的语言,只需要实现新的 Frontend,Optimizer 和 Backend 可以重用;同理新增新的 CPU 架构时,也只需要实现新的 Backend。

5f1d6b8f017000e9bd5b5a11fcf8a103.png

LLVM 的优势

LLVM,GCC,JIT 都采用三段式设计,LLVM 的优势在哪里 ?

GCC,JIT 存在的问题:

• GCC 的问题 

古老,模块化不够 (GCC 是个整体,无法独立使用某块功能)。

• JIT 的问题

强制 JIT 编译,垃圾回收以及使用非常特殊的对象模型;在编译与该模型不完全匹配的语言(例如C)时,性能欠佳。(我也不懂 ?)

LLVM 的优势:

• 良好的模块化

• 严格定义语义的中间语言 IR

• 更多请参考 https://www.kanxue.com/book-37-410.html

5739f761e6c107ee1fc8f63aeade7b3c.png

0x2: 编译 LLVM

**1. 前置要求 **

cmake, python, 可以通过 homebrew 来安装

详细要求参考 Getting Started with the LLVM System - Requirements

2. 检出 LLVM 工程

git clone --depth=1 https://github.com/llvm/llvm-project.git

3. 编译 LLVM 和 Clang

cd llvm-project
mkdir build_with_ninja
cd build_with_ninja
cmake -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_ASSERTIONS=ON -DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra;compiler-rt" -G Ninja ../llvm
ninja

• -DCMAKE_BUILD_TYPE=Release

• 默认 Debug,设置为 Release 可以减少硬盘空间的占用

• -DLLVM_ENABLE_ASSERTIONS=ON

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值