mirror of
https://github.com/golang/go
synced 2024-11-06 13:46:16 -07:00
1041ac8781
Change-Id: I9d2d25df067ca573589db5ff18296a5ec33866be Reviewed-on: https://go-review.googlesource.com/118595 Reviewed-by: Ian Lance Taylor <iant@golang.org>
113 lines
4.2 KiB
HTML
113 lines
4.2 KiB
HTML
<!--{
|
|
"Title": "Contributing to the gccgo frontend"
|
|
}-->
|
|
|
|
<h2>Introduction</h2>
|
|
|
|
<p>
|
|
These are some notes on contributing to the gccgo frontend for GCC.
|
|
For information on contributing to parts of Go other than gccgo,
|
|
see <a href="/doc/contribute.html">Contributing to the Go project</a>. For
|
|
information on building gccgo for yourself,
|
|
see <a href="/doc/gccgo_install.html">Setting up and using gccgo</a>.
|
|
For more of the gritty details on the process of doing development
|
|
with the gccgo frontend,
|
|
see <a href="https://go.googlesource.com/gofrontend/+/master/HACKING">the
|
|
file HACKING</a> in the gofrontend repository.
|
|
</p>
|
|
|
|
<h2>Legal Prerequisites</h2>
|
|
|
|
<p>
|
|
You must follow the <a href="/doc/contribute.html#copyright">Go copyright
|
|
rules</a> for all changes to the gccgo frontend and the associated
|
|
libgo library. Code that is part of GCC rather than gccgo must follow
|
|
the general <a href="https://gcc.gnu.org/contribute.html">GCC
|
|
contribution rules</a>.
|
|
</p>
|
|
|
|
<h2>Code</h2>
|
|
|
|
<p>
|
|
The master sources for the gccgo frontend may be found at
|
|
<a href="https://go.googlesource.com/gofrontend">https://go.googlesource.com/gofrontend</a>.
|
|
They are mirrored
|
|
at <a href="https://github.com/golang/gofrontend">https://github.com/golang/gofrontend</a>.
|
|
The master sources are not buildable by themselves, but only in
|
|
conjunction with GCC (in the future, other compilers may be
|
|
supported). Changes made to the gccgo frontend are also applied to
|
|
the GCC source code repository hosted at <code>gcc.gnu.org</code>. In
|
|
the <code>gofrontend</code> repository, the <code>go</code> directory
|
|
is mirrored to the <code>gcc/go/gofrontend</code> directory in the GCC
|
|
repository, and the <code>gofrontend</code> <code>libgo</code>
|
|
directory is mirrored to the GCC <code>libgo</code> directory. In
|
|
addition, the <code>test</code> directory
|
|
from <a href="//go.googlesource.com/go">the main Go repository</a>
|
|
is mirrored to the <code>gcc/testsuite/go.test/test</code> directory
|
|
in the GCC repository.
|
|
</p>
|
|
|
|
<p>
|
|
Changes to these directories always flow from the master sources to
|
|
the GCC repository. The files should never be changed in the GCC
|
|
repository except by changing them in the master sources and mirroring
|
|
them.
|
|
</p>
|
|
|
|
<p>
|
|
The gccgo frontend is written in C++.
|
|
It follows the GNU and GCC coding standards for C++.
|
|
In writing code for the frontend, follow the formatting of the
|
|
surrounding code.
|
|
Almost all GCC-specific code is not in the frontend proper and is
|
|
instead in the GCC sources in the <code>gcc/go</code> directory.
|
|
</p>
|
|
|
|
<p>
|
|
The run-time library for gccgo is mostly the same as the library
|
|
in <a href="//go.googlesource.com/go">the main Go repository</a>.
|
|
The library code in the Go repository is periodically merged into
|
|
the <code>libgo/go</code> directory of the <code>gofrontend</code> and
|
|
then the GCC repositories, using the shell
|
|
script <code>libgo/merge.sh</code>. Accordingly, most library changes
|
|
should be made in the main Go repository. The files outside
|
|
of <code>libgo/go</code> are gccgo-specific; that said, some of the
|
|
files in <code>libgo/runtime</code> are based on files
|
|
in <code>src/runtime</code> in the main Go repository.
|
|
</p>
|
|
|
|
<h2>Testing</h2>
|
|
|
|
<p>
|
|
All patches must be tested. A patch that introduces new failures is
|
|
not acceptable.
|
|
</p>
|
|
|
|
<p>
|
|
To run the gccgo test suite, run <code>make check-go</code> in your
|
|
build directory. This will run various tests
|
|
under <code>gcc/testsuite/go.*</code> and will also run
|
|
the <code>libgo</code> testsuite. This copy of the tests from the
|
|
main Go repository is run using the DejaGNU script found
|
|
in <code>gcc/testsuite/go.test/go-test.exp</code>.
|
|
</p>
|
|
|
|
<p>
|
|
Most new tests should be submitted to the main Go repository for later
|
|
mirroring into the GCC repository. If there is a need for specific
|
|
tests for gccgo, they should go in
|
|
the <code>gcc/testsuite/go.go-torture</code>
|
|
or <code>gcc/testsuite/go.dg</code> directories in the GCC repository.
|
|
</p>
|
|
|
|
<h2>Submitting Changes</h2>
|
|
|
|
<p>
|
|
Changes to the Go frontend should follow the same process as for the
|
|
main Go repository, only for the <code>gofrontend</code> project and
|
|
the <code>gofrontend-dev@googlegroups.com</code> mailing list
|
|
rather than the <code>go</code> project and the
|
|
<code>golang-dev@googlegroups.com</code> mailing list. Those changes
|
|
will then be merged into the GCC sources.
|
|
</p>
|