Chromium Chronicle #7:預先處理來源

第 7 集:華盛頓州西雅圖的 Bruce Dawson (2019 年 10 月)
上一集

有時候,手動編譯單一 Chromium 來源檔案會有幫助。 不妨透過編譯器最佳化選項進行實驗,以預先處理 以便瞭解某些微妙的巨集詳情,或者 編譯器錯誤。

以下提供一些秘訣,可讓 Chromium 開發人員尋找並執行 編譯特定的來源檔案,並視需要進行修改。

請先前往輸出目錄,並使用 autoninja (或 ninja) 執行以下作業: 使用 ^ 後置字串編譯所需檔案 (以及任何依附元件)。 此後置字串會告知 ninja 建構指定 file—version.o 的輸出內容 在本例中接著輕觸檔案,並使用以下指令再次編譯 (僅限該檔案) -v (詳細資訊) 標記變更為 ninja:

Linux 或 OSX:

autoninja ../../base/version.cc^
touch ../../base/version.cc
autoninja -v ../../base/version.cc^

在 Windows cmd 殼層 ^ 中,是特殊字元,必須逸出:

C:\> autoninja ../../base/version.cc^^
C:\> touch ../../base/version.cc
C:\> autoninja -v ../../base/version.cc^^

autoninja -v 指令的一般輸出內容如下 (十分重要) 剪輯版本):

..\..\third_party\llvm-build\Release+Asserts\bin\clang-cl.exe /nologo /showIncludes -imsvc ...

這個指令可讓您編譯所需檔案。如何預先處理好 執行下列步驟:

在 Linux 或 OSX 上,請從底部移除 -o obj/base/base/version.o 區塊。 並新增 -E。這會指示編譯器將預先處理的檔案輸出至 stdout。

將輸出內容重新導向至某個檔案,如下所示:

../../third_party/llvm-build/Release+Asserts/bin/clang++ -MMD ... -E >version.i

在 Windows 上,從開頭移除 /showIncludes 選項 (顯示 每個 #include 的輸出行),然後新增 /P, 預先處理檔案,而非編譯檔案結果會儲存在 version.i 中的目前目錄:

..\..\third_party\llvm-build\Release+Asserts\bin\clang-cl.exe /nologo -imsvc ... /P

您現在可以檢查預先處理的檔案,瞭解巨集的實際運作情形 也可以進行實驗性的編譯器切換變更,再重新編譯,看看會有什麼影響。

其他資源

  • Chrome 快速版本:更多建構最佳化提示 (著重於 Windows)。
  • ETW:瞭解如何在 Chrome 中找出 Windows 效能問題 或建構過程中,請參閱 ETW (又稱 Xperf) 文件。