為 gccgo 前端貢獻

引言

以下是關於為 GCC 的 gccgo 前端貢獻的一些說明。關於貢獻 gccgo 以外的 Go 部分的資訊,請參閱 貢獻 Go 專案。關於自己構建 gccgo 的資訊,請參閱 設定和使用 gccgo。關於使用 gccgo 前端進行開發的更詳細過程,請參閱 gofrontend 倉庫中的 HACKING 檔案

法律先決條件

對於 gccgo 前端及相關的 libgo 庫的所有更改,您必須遵守 Go 版權規則。屬於 GCC 而非 gccgo 的程式碼必須遵循通用的 GCC 貢獻規則

程式碼

gccgo 前端的主原始檔可在 https://go.googlesource.com/gofrontend 找到。它們也在 https://github.com/golang/gofrontend 上有映象。主原始檔本身無法構建,只能與 GCC 一起構建(未來可能會支援其他編譯器)。對 gccgo 前端的更改也應用於託管在 gcc.gnu.org 上的 GCC 原始碼倉庫。在 gofrontend 倉庫中,go 目錄被映象到 GCC 倉庫的 gcc/go/gofrontend 目錄中,gofrontendlibgo 目錄被映象到 GCC 的 libgo 目錄中。此外,來自 主 Go 倉庫test 目錄被映象到 GCC 倉庫的 gcc/testsuite/go.test/test 目錄中。

對這些目錄的更改總是從主原始檔流向 GCC 倉庫。除非在主原始檔中進行更改並進行映象,否則絕不應在 GCC 倉庫中修改這些檔案。

gccgo 前端是用 C++ 編寫的。它遵循 GNU 和 GCC 的 C++ 編碼標準。在編寫前端程式碼時,請遵循周圍程式碼的格式。幾乎所有 GCC 特定的程式碼都不在前臺本身,而是位於 GCC 原始檔中的 gcc/go 目錄下。

gccgo 的執行時庫大部分與 主 Go 倉庫 中的庫相同。Go 倉庫中的庫程式碼會定期使用 shell 指令碼 libgo/merge.sh 合併到 gofrontend 和 GCC 倉庫的 libgo/go 目錄中。因此,大多數庫更改應在主 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-torturegcc/testsuite/go.dg 目錄中。

提交更改

對 Go 前端的更改應遵循與主 Go 倉庫相同的流程,只是針對 gofrontend 專案和 gofrontend-dev@googlegroups.com 郵件列表,而不是 go 專案和 golang-dev@googlegroups.com 郵件列表。然後,這些更改將合併到 GCC 原始檔中。