貢獻 LLVM

感謝您有興趣為 LLVM 貢獻!我們非常感謝您以各種方式做出貢獻。如果您有任何問題,可以使用 論壇,或者想要更互動式的聊天,請前往我們的 Discord 伺服器irc.oftc.net 上的 IRC #llvm 頻道。

如果您想貢獻程式碼,請先熟悉 LLVM 開發者政策

貢獻方式

錯誤報告

如果您在使用 LLVM 時遇到錯誤,我們非常希望您能告知我們。請按照 如何提交 LLVM 錯誤報告 中的說明建立錯誤報告。

錯誤修正

如果您有興趣為 LLVM 貢獻程式碼,標記為 good first issue 的錯誤在 錯誤追蹤器 中是熟悉程式碼庫的好方法。如果您有興趣修正錯誤,請在上面留言,讓其他人知道您正在處理它。

然後嘗試使用上游 LLVM 重現和修正錯誤。首先,按照 LLVM 系統入門 中的說明從原始碼建置 LLVM,並使用建置的二進制檔案重現錯誤中描述的失敗情況。使用偵錯組建 (-DCMAKE_BUILD_TYPE=Debug) 或啟用斷言的組建 (-DLLVM_ENABLE_ASSERTIONS=On,針對偵錯組建啟用)。

回報安全性問題

提交安全性相關錯誤的流程不同,請參閱 如何回報安全性問題?

更大型的工作項目

如果您有興趣接手處理更大的工作,LLVM 的開放專案頁面 上維護著一份有趣的專案清單。如果您有興趣參與任何這些專案,請在 論壇 上發文,以便我們知道該專案正在進行中。

如何提交修補程式

當您準備好修補程式後,就可以提交了。修補程式應該

  • 包含一個小型的單元測試

  • 符合 LLVM 編碼標準。您可以使用 clang-format-diff.pygit-clang-format 工具自動將您的修補程式格式化。

  • 不包含任何無關的變更

  • 是一個獨立的變更。獨立的變更應該作為單獨的修補程式提交,因為這使得審查更容易。

  • 只有一個提交,與上游的 origin/main 分支保持同步,並且沒有合併。

在發送修補程式進行審查之前,也請嘗試確保其格式正確。我們使用 clang-format 來實現這一點,它通過 git-clang-format 腳本與 git 整合。在某些系統上,它可能已經安裝(或可以通過您的套件管理器安裝)。如果是這樣,您可以簡單地運行它 - 以下命令將只格式化最近一次提交中更改的代碼

% git clang-format HEAD~1

請注意,這會修改檔案,但不會提交它們 - 您可能需要運行

% git commit --amend -a

以便使用所有待處理的更改更新最後一次提交。

備註

如果您尚未在系統上安裝 clang-formatgit clang-format,則 clang-format 二進制文件將與 clang 一起構建,並且可以從 clang/tools/clang-format/git-clang-format 運行 git 整合。

LLVM 專案已將 GitHub Pull Requests 作為其審查流程。有關使用 GitHub Pull Requests 工作流程的更多資訊,請參閱我們的 GitHub 文件。我們仍然有一個唯讀的 LLVM 的 Phabricator 实例。

為了確保合適的人員看到您的修補程式,請在請求審查時選擇合適的審查者並將其添加到您的修補程式中。合適的審閱者是代碼所有者(請參閱 CODE_OWNERS.txt)和其他在您的修補程式涉及的領域工作的人員。 Github 通常會根據規則或以前處理過該代碼的人員建議一些審閱者。如果您是新的貢獻者,您將無法以這種方式選擇審閱者,在這種情況下,您仍然可以通过在評論中 CC 他們來引起潛在審閱者的注意 - 只需 @ 他們的姓名即可。

審閱者可能會在審閱期間要求更改或提出問題。如果您不確定如何提供測試案例、文檔等,請隨時在審閱期間尋求指導。請解決反饋並重新發布更新版本的修補程式。此循環將持續進行,直到所有請求和評論都得到解決,並且審閱者接受带有 Looks good to meLGTM 的修補程式。完成後即可提交變更。如果您沒有提交權限,請在審閱期間告知他人,應由他人代表您提交。

如果您的修補程式在一周內沒有收到任何評論,您可以通過使用“Ping”對 GitHub PR 進行“ping 操作”來請求審查。通常的“ping 操作”頻率是一周一次。請記住,您正在要求其他專業開發人員付出寶貴的時間。

有關 LLVM 代碼審查流程的更多資訊,請參閱 LLVM 代碼審查政策和實務

開發者從 Git 提交變更

修補程式審查完畢後,您可以在 GitHub 網頁介面中選擇「壓縮並合併」按鈕。您可能需要在將變更推送到儲存庫之前重新設定基準點。

LLVM 目前採用線性歷史記錄策略,這表示不允許合併提交。GitHub 上的 llvm-project 儲存庫已設定為拒絕包含合併的推送,因此上述的 git rebase 步驟是必要的。

如果您在使用特定的 git 工作流程時遇到問題,請尋求幫助。

Git 預推送鉤子

我們包含一個可選的預推送鉤子,它會對您要推送的版本執行一些健全性檢查,並在您一次推送多個提交時要求確認。您可以在(Unix 系統上)從儲存庫根目錄執行以下命令來設定它:

% ln -sf ../../llvm/utils/git/pre-push.py .git/hooks/pre-push

關於 LLVM 的有用資訊

LLVM 文件 提供了大量關於 LLVM 內部結構和各種使用者指南的資訊。以下列出的頁面應能讓您充分了解 LLVM 的高階設計及其內部結構

LLVM 系統入門

討論如何快速上手 LLVM 基礎架構。從解壓縮和編譯發行版本到執行一些工具,應有盡有。

LLVM 語言參考手冊

定義 LLVM 中間表示法。

LLVM 程式設計師手冊

介紹 LLVM 原始碼庫的一般佈局、重要的類別和 API,以及一些技巧和竅門。

LLVM 研究生指南

這是 Adrian Sampson 撰寫的 LLVM 基礎架構介紹。雖然它是為研究生而寫的,但它提供了 LLVM 架構、LLVM IR 以及如何編寫新通道的良好、簡潔的概述。

LLVM 簡介

本書章節為編譯器駭客提供了 LLVM 簡介。