協助 gccgo 前端
簡介
以下是關於為 GCC 的 gccgo 前端做出貢獻的一些注意事項。有關對 gccgo 以外的 Go 部分做出貢獻的資訊,請參閱 對 Go 專案做出貢獻。有關為自己建置 gccgo 的資訊,請參閱 設定和使用 gccgo。有關使用 gccgo 前端進行開發流程的更多詳細資訊,請參閱 gofrontend 儲存庫中的 HACKING 檔案。
法律先決條件
您必須遵守 Go 版權規則,才能變更 gccgo 前端和相關的 libgo 函式庫。屬於 GCC 而非 gccgo 的程式碼必須遵守一般的 GCC 貢獻規則。
程式碼
gccgo 前端的 master 原始碼可以在 https://go.googlesource.com/gofrontend 找到。它們會鏡射到 https://github.com/golang/gofrontend。master 原始碼無法自行建置,只能與 GCC 搭配建置(未來可能會支援其他編譯器)。對 gccgo 前端所做的變更也會套用至託管在 gcc.gnu.org
的 GCC 原始碼儲存庫。在 gofrontend
儲存庫中,go
目錄會鏡射到 GCC 儲存庫中的 gcc/go/gofrontend
目錄,而 gofrontend
libgo
目錄會鏡射到 GCC libgo
目錄。此外,主要 Go 儲存庫 中的 test
目錄會鏡射到 GCC 儲存庫中的 gcc/testsuite/go.test/test
目錄。
對這些目錄的變更總是從 master 原始碼流向 GCC 儲存庫。這些檔案不應在 GCC 儲存庫中變更,除非在 master 原始碼中變更並鏡射它們。
gccgo 前端是用 C++ 編寫的。它遵循 GNU 和 GCC 的 C++ 編碼標準。在為前端撰寫程式碼時,請遵循周圍程式碼的格式。幾乎所有 GCC 特定的程式碼都不在前端本身,而是在 gcc/go
目錄中的 GCC 來源中。
gccgo 的執行時期函式庫大部分與 主要 Go 儲存庫 中的函式庫相同。Go 儲存庫中的函式庫程式碼會定期合併到 gofrontend
的 libgo/go
目錄,然後使用 shell 指令碼 libgo/merge.sh
合併到 GCC 儲存庫。因此,大多數函式庫變更都應該在主要 Go 儲存庫中進行。libgo/go
之外的檔案是 gccgo 特定的;話雖如此,libgo/runtime
中的某些檔案是根據主要 Go 儲存庫中 src/runtime
的檔案為基礎的。
測試
所有修補程式都必須經過測試。會造成新失敗的修補程式是不可接受的。
若要執行 gccgo 測試套件,請在您的建置目錄中執行 make check-go
。這將在 gcc/testsuite/go.*
下執行各種測試,並執行 libgo
測試套件。來自主要 Go 儲存庫的這些測試副本使用 gcc/testsuite/go.test/go-test.exp
中的 DejaGNU 指令碼執行。
大多數新測試都應該提交到主要 Go 儲存庫,以便稍後反映到 GCC 儲存庫。如果需要針對 gccgo 進行特定測試,則應將它們放入 GCC 儲存庫中的 gcc/testsuite/go.go-torture
或 gcc/testsuite/go.dg
目錄。
提交變更
對 Go 前端的變更應遵循與主要 Go 儲存庫相同的程序,僅適用於 gofrontend
專案和 gofrontend-dev@googlegroups.com
郵件清單,而不是 go
專案和 golang-dev@googlegroups.com
郵件清單。然後,這些變更將合併到 GCC 來源中。