5.6.1 Clang

简介

Clang 一个基于 LLVM 的编译器前端,支持 C/C++/Objective-C 等语言。其开发目标是替代 GCC。

在软件安全的应用中,已经有许多代码分析工具都基于 Clang 和 LLVM,开发社区也都十分活跃。

初步使用

首先我们来编译安装 LLVM 和 Clang:

  1. $ svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm
  2. $ cd llvm/tools
  3. $ svn co http://llvm.org/svn/llvm-project/cfe/trunk clang
  4. $ svn co http://llvm.org/svn/llvm-project/lld/trunk lld # optional
  5. $ svn co http://llvm.org/svn/llvm-project/polly/trunk polly # optional
  6. $ cd clang/tools
  7. $ svn co http://llvm.org/svn/llvm-project/clang-tools-extra/trunk extra # optional
  8. $ cd ../../../.. && cd llvm/projects
  9. $ svn co http://llvm.org/svn/llvm-project/compiler-rt/trunk compiler-rt # optional
  10. $ svn co http://llvm.org/svn/llvm-project/openmp/trunk openmp # optional
  11. $ svn co http://llvm.org/svn/llvm-project/libcxx/trunk libcxx # optional
  12. $ svn co http://llvm.org/svn/llvm-project/libcxxabi/trunk libcxxabi # optional
  13. $ svn co http://llvm.org/svn/llvm-project/test-suite/trunk test-suite # optional
  14. $ cd ../.. && cd llvm
  15. $
  16. $ mkdir build && cd build
  17. $ cmake -G Ninja ../
  18. $ cmake --build .
  19. $ cmake --build . --target install

内部实现

Clang 前端的主要流程如下:

  1. Driver -> Lex -> Parse -> Sema -> CodeGen (LLVM IR)

参考资料