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を使用して、gofrontendlibgo/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ソースにマージされます。