LLVM学习日记2——Build llvm, clang & Starting Chapters

本文探讨了在使用LLVM项目进行编译器开发时,如何通过CMake配置不同的构建类型,包括Debug、Release和RelWithDebInfo,以及在实际操作中遇到的常见问题和解决方案。从构建选项的选择到具体章节的编译细节,再到LLVM优化过程,为读者提供了全面的指导。
摘要由CSDN通过智能技术生成

内存不足

的问题又出现了。然后搜了一下原因,发现自己build的是Debug版本。是因为没有细看文档,默认是build Debug版本的。最后顺利build了一个Release版本,但可能RelWithDebInfo才是最适合的,短时间内估计用不上debug info,就先不考虑这个问题了。

% cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=type SRC_ROOT

type:

  1. Debug:默认选项,没有优化,有debug info和asserts;
  2. Release:有优化,没有debug info。默认优化强度是 -O3,可以通过选项CMAKE_CXX_FLAGS_RELEASE更改;
  3. RelWithDebInfo:有优化,有debug info。默认优化强度时-O2,可以通过选项CMAKE_CXX_FLAGS_RELWITHDEBINFO更改。

编译完成之后

% make install #安装头文件,库,工具,文档等到CMAKE_INSTALL_PREFIX路径下,默认是/usr/local
% make docs-llvm-html # 指定-DLLVM_ENABLE_SPHINX=On时会在OBJ_ROOT/docs/html下生成HTML格式的文档

Build Clang

GetStarted教程 :

% cmake -DLLVM_ENABLE_PROJECTS=clang -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release ../llvm
% make clang

终于开始实操了

教程: My First Language Frontend with LLVM Tutorial
这里还有个中文翻译版

Chapter 2

cd llvm-project/llvm/examples/Kaleidoscope/Chapter2/
clang++ -g -O3 toy.cpp `llvm-config --cxxflags`

这条会报编译错误,其实这个parser里面没有用到llvm的库,所以把toy.cpp的llvm include删掉了,编译可以通过。

/tmp/toy-eac448.o:(.data+0x0): undefined reference to `llvm::DisableABIBreakingChecks'
clang-12: error: linker command failed with exit code 1 (use -v to see invocation)

特别要注意每一章的编译选项 llvm-config

Chapter 3

于是我还发现了之前看LLVM CookBook里未解决的问题,就是Module::dump没有了,现在已经都变成print了。

TheModule->print(errs(), nullptr);

Chapter4

Constant folding => IR Builder
LLVM Optimization Passes:

今天学到JIT,还不是很理解。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值