2014-12-04 93 views
1

在將源代碼傳遞給Clang進行編譯時,以什麼順序執行LLVM/Clang代碼?Clang啓動順序?

+0

如果這是解放軍tform和/或IDE依賴,然後我在OS X 10.10 Yosemite和Xcode 6.1.1的上下文中提出這個問題。 – RandomDSdevel 2014-12-08 22:28:00

回答

2

你究竟是什麼意思?你對編譯階段感興趣嗎,還是你想查看特定方法或類的堆棧跟蹤?


編譯階段:

比方說,你鍵入clang main.c到終端通過一些源文件clang

clang命令本身只是一個驅動程序,它使用參數並調用實際編譯器(您可以通過傳遞clang-cc1參數直接調用它)。

然後,編譯器本身執行以下工作:

  • 調用預處理器來處理所有宏定義(#define#ifdef等)
  • 符所有源代碼轉換成令牌(if關鍵字,while關鍵字,your_var標識符等)
  • 將標記傳遞給解析器,該解析器構造一個Abstract Syntax Tree並應用語義分析,但僅使用 (例如:檢查賦值表達式是否有左值和右值的正確類型)
  • 當AST完成生成後,'CodeGen'階段發揮作用:它將解析器傳遞給它的AST轉換爲
  • 這裏,最後出現前端階段結束和LLVM:它需要LLVM IR,適用優化和生成彙編代碼或對象的終端用戶平臺的文件(例如:x86_64的,arm64)

Stacktrace:

如果您想查看堆棧跟蹤或調試報告,那麼您自己構建Clang是有意義的。

以下是使用通過GIT中克隆LLVM庫到硬盤後的Xcode OS X上編譯LLVM/Clang的說明:

首先,下載LLVM的源文件:

mkdir ~/Projects/clang-dev 
cd ~/Projects/clang-dev 
git clone http://llvm.org/git/llvm.git 
git clone http://llvm.org/git/clang.git llvm/tools/clang 
git clone http://llvm.org/git/clang-tools-extra.git llvm/tools/clang/tools/extra 
git clone http://llvm.org/git/compiler-rt.git llvm/projects/compiler-rt 

你可以通過將分支名稱傳遞給每個克隆命令來指定確切的版本,例如: git clone http://llvm.org/git/llvm.git -b release_34

接下來,創建並打開Xcode項目:

cd ~/Projects/clang-dev 
mkdir build 
cd build 
cmake -G Xcode CMAKE_BUILD_TYPE="Debug" ../llvm 
open LLVM.xcodeproj 

設置clang爲項目的當前目標/計劃,單擊「編輯計劃」,並添加源文件要傳遞給鏘作爲參數,當它運行:

Edit scheme

這幾乎是它;只需設置一個斷點(在main方法或任何時候你想要的)並點擊Run按鈕(或按Cmd + R)。

UPD

這裏是更詳細的指南:Getting started with LLVM/Clang on OS X


相關鏈接:

Architecture of Open-Source Applications: LLVM by Chris Lattner

objc.io: The Compiler by Chris Eidhof