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 ディレクトリにミラーリングされ、gofrontendlibgo ディレクトリは GCC の libgo ディレクトリにミラーリングされます。さらに、メインの Go リポジトリtest ディレクトリは、GCC リポジトリの gcc/testsuite/go.test/test ディレクトリにミラーリングされます。

これらのディレクトリへの変更は、常にマスターソースから GCC リポジトリに流れます。ファイルは、マスターソースで変更し、ミラーリングすることによってのみ、GCC リポジトリで変更されるべきです。

gccgo フロントエンドは C++ で書かれています。GNU および GCC の C++ コーディング標準に従います。フロントエンドのコードを書く際には、周囲のコードの書式に従ってください。ほぼすべての 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 ソースにマージされます。