为 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
目录中,gofrontend
的 libgo
目录被镜像到 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-torture
或 gcc/testsuite/go.dg
目录中。
提交更改
对 Go 前端的更改应遵循与主 Go 仓库相同的流程,只是针对 gofrontend
项目和 gofrontend-dev@googlegroups.com
邮件列表,而不是 go
项目和 golang-dev@googlegroups.com
邮件列表。然后,这些更改将合并到 GCC 源文件中。