目標和動機
我們在 2020 年推出新的建構範本,用於定義套件、元件及其測試。新範本更能反映專案的架構目標和方向。這些範本會取代 2016 年推出的舊版範本,主要是 package()
、test_package()
和 unittest_package()
。
新範本的好處包括:
- 減少重複內容,並簡化語法。根據將舊目標遷移至新範本的經驗,新定義的程式碼行數減少了 30% 至 50%。
- 元件可定義一次,然後用於多個套件。舉例來說,在參與產品定義的正式版套件定義中重複使用相同元件,以及在套件中包含元件與其他元件之間的整合測試。
- 由於元件和套件可個別定義,因此建構系統會知道哪些依附元件屬於哪些元件,因此可為您執行更複雜的建構時間驗證,自動偵測錯誤並提供更明確的意見回饋。
- 原生支援更多用途,而不需要特殊語法。舉例來說,套件中含有驅動程式、其他資料檔案或共用程式庫,就不需要特殊語法 - 只要在定義元件要使用的內容或套件所含內容的建構目標上新增
deps
即可。 - 定義簡單的測試時,不必手動編寫元件資訊清單 (
.cml
檔案),因此更容易完成。 - 提供更完善的說明文件,涵蓋更多語言和用途。
遷移至新範本可讓建構定義更易讀且更實用,並有助於清理與封裝相關的基礎技術債務,這些債務只會保留用於舊版 package()
範本。請協助我們將所有舊範本替換為新範本,以便我們繼續進行。
技術背景
請參閱建構元件指南。
建議您具備處理 BUILD.gn
檔案的一般經驗,但並非完全必要。請參閱 GN 參考資料指南。
如何提供協助
選擇工作
建議您從 "deprecated_package"
群組下方的 //build/BUILD.gn
清單開始著手。
找出您熟悉的目錄,或隨機選取一個目錄。在這個目錄的 BUILD.gn
檔案中,您可能會看到使用舊版範本的建構目標,例如:
package("foo") {
...
}
執行工作
在您選擇的目錄中,移除範本 package()
、test_package()
或 unittest_package()
的 BUILD.gn
檔案中所有使用情形。請注意,檔案中可能會使用其他範本,用於包裝這些範本。如要確認您已取得所有相關資訊,請刪除 //build/BUILD.gn
中的相關行,並確認您仍可產生版本 (執行 fx gen
,並確認 GN 已成功產生 Ninja 檔案,且沒有錯誤)。
完成工作
準備變更時,請務必從 //build/BUILD.gn
中移除任何列,列出您已清除的目錄。
請將程式碼審查傳送給目錄擁有者,讓他們檢查您要變更的建構定義,或是傳送給下列自願協助遷移作業的人員:
- shayba@google.com
- xbhatnag@google.com
你是新志工嗎?請將自己加入清單!
範例
- 464409:[時間] 將所有套件和測試遷移至新的建構規則
- 464407:[build] 將 //src/sys/lib 中的測試遷移至新的建構規則
- 464410:[build] 將 //src/sys 中的套件遷移至新的建構規則
- 473597:[工作階段] 將所有套件和測試遷移至新的建構規則
贊助商
如有任何問題或想瞭解最新進度,請與我們聯絡: