gccgoフロントエンドへの貢献
はじめに
これは、GCCのgccgoフロントエンドへの貢献に関する注意事項です。 gccgo以外のGoの部分への貢献については、Goプロジェクトへの貢献を参照してください。 gccgoを自分でビルドする方法については、gccgoのセットアップと使用を参照してください。 gccgoフロントエンドでの開発プロセスの詳細については、gofrontendリポジトリのHACKINGファイルを参照してください。
法的要件
gccgoフロントエンドと関連するlibgoライブラリへのすべての変更について、Goの著作権規則に従う必要があります。 gccgoではなくGCCの一部であるコードは、一般的な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++で書かれています。 これは、C++のGNUおよびGCCコーディング標準に従います。 フロントエンドのコードを書く際には、周囲のコードのフォーマットに従ってください。 ほとんどすべてのGCC固有のコードは、フロントエンド自体にはなく、gcc/go
ディレクトリのGCCソースにあります。
gccgoのランタイムライブラリは、ほとんどの場合、メインのGoリポジトリのライブラリと同じです。 Goリポジトリのライブラリコードは、シェルスクリプトlibgo/merge.sh
を使用して、gofrontend
のlibgo/go
ディレクトリに定期的にマージされ、その後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スクリプトを使用して実行されます。
ほとんどの新しいテストは、後でGCCリポジトリにミラーリングするために、メインのGoリポジトリに送信する必要があります。 gccgoに固有のテストが必要な場合は、GCCリポジトリのgcc/testsuite/go.go-torture
またはgcc/testsuite/go.dg
ディレクトリに配置する必要があります。
変更の送信
Goフロントエンドへの変更は、メインのGoリポジトリと同じプロセスに従う必要があります。ただし、go
プロジェクトとgolang-dev@googlegroups.com
メーリングリストではなく、gofrontend
プロジェクトとgofrontend-dev@googlegroups.com
メーリングリストを使用します。 これらの変更は、GCCソースにマージされます。