Commit 253c1392 authored by Ian Lance Taylor's avatar Ian Lance Taylor

doc: update gccgo_contribute.html

R=golang-dev, r
CC=golang-dev
https://golang.org/cl/5673080
parent a5f21c95
......@@ -5,90 +5,95 @@
<h2>Introduction</h2>
<p>
These are some notes on contributing to the <code>gccgo</code>
frontend for GCC. For information on contributing to parts of Go other
than <code>gccgo</code>, see <a href="contribute.html">Contributing to
the Go project</a>. For information on building <code>gccgo</code>
for yourself, see <a href="gccgo_install.html">Setting up and using
gccgo</a>.
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="contribute.html">Contributing to the Go project</a>. For
information on building gccgo for yourself,
see <a href="gccgo_install.html">Setting up and using gccgo</a>.
</p>
<h2>Legal Prerequisites</h2>
<p>
You must follow the <a href="contribute.html#copyright">Go copyright
rules.</a>
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="http://gcc.gnu.org/contribute.html">GCC
contribution rules</a>.
</p>
<h2>Code</h2>
<p>
The source code for the <code>gccgo</code> frontend may be found at
The master sources for the gccgo frontend may be found at
<a href="http://code.google.com/p/gofrontend">http://code.google.com/p/gofrontend</a>.
Changes made to that project are routinely merged into the source code
hosted at <code>gcc.gnu.org</code>. The <code>gofrontend</code>
project includes only the Go frontend proper. These are the files
which in the <code>gcc</code> sources may be found in the
directories <code>gcc/go</code> and <code>libgo</code>.
The <code>gcc</code> sources also include a copy of
the <code>test</code> directory
from <a href="http://code.google.com/p/go">the main Go repository</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="http://code.google.com/p/go">the main Go repository</a>
is mirrored to the <code>gcc/testsuite/go.test/test</code> directory
in the GCC repository.
</p>
<p>
The frontend is written in C++ and as such the GNU coding standards do
not entirely apply; in writing code for the frontend, follow the
formatting of the surrounding code. Although the frontend is
currently closely tied to the rest of the <code>gcc</code> codebase,
we plan to make it more independent. Any new code that uses other
parts of <code>gcc</code> should be placed in an appropriate file,
such as <code>gogo-tree.cc</code>. Eventually
all <code>gcc</code>-specific code should migrate to
a <code>gcc-interface</code> subdirectory.
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 run-time library for <code>gccgo</code> is mostly the same as the
library in <a href="http://code.google.com/p/go">the main Go
repository</a>. The library code in the Go repository is periodically
copied into the <code>gofrontend</code> and the <code>gcc</code>
repositories. Accordingly, most library changes should be made in the
main Go repository. Changes to the few <code>gccgo</code>-specific
parts of the library should follow the process described here.
The <code>gccgo</code>-specific parts of the library are everything in
the <code>libgo</code> directory except for the <code>libgo/go</code>
subdirectory.
The gccgo frontend is written in C++. It follows the GNU coding
standards to the extent that they apply to C++. In writing code for
the frontend, follow the formatting of the surrounding code. Although
the frontend is currently tied to the rest of the GCC codebase, we
plan to make it more independent. Eventually all GCC-specific code
will migrate out of the frontend proper and into GCC proper. In the
GCC sources this will generally mean moving code
from <code>gcc/go/gofrontend</code> to <code>gcc/go</code>.
</p>
<h2>Testing</h2>
<p>
All patches must be tested. There are two test suites. A patch that
introduces new failures is not acceptable.
The run-time library for gccgo is mostly the same as the library
in <a href="http://code.google.com/p/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/pkg/runtime</code> in the main Go repository.
</p>
<h2>Testing</h2>
<p>
To run the compiler test suite, run <code>make check-go</code> in the
<code>gcc</code> subdirectory of your build directory. This will run
various tests underneath <code>gcc/testsuite/go.*</code>. This
includes a copy of the tests in the main Go repository, which are run
using the DejaGNU script found in
in <code>gcc/testsuite/go.test/go-test.exp</code>. Many of the
compiler tests may be run without the Go library, but some do require
the library to built first.
All patches must be tested. A patch that introduces new failures is
not acceptable.
</p>
<p>
To run the library test suite, run <code>make
check-target-libgo</code> in the top level of your build directory.
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
in <code>gcc/testsuite/go.test/go-test.exp</code>.
</p>
<p>
Most new tests should be submitted to the main Go repository for
copying into the <code>gccgo</code> repository. If there is a need
for specific tests for <code>gccgo</code>, they should go in
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 <code>gcc.gnu.org</code> repository.
or <code>gcc/testsuite/go.dg</code> directories in the GCC repository.
</p>
<h2>Submitting Changes</h2>
......@@ -97,5 +102,5 @@ the <code>gcc.gnu.org</code> repository.
Changes to the Go frontend should follow the same process as for the
main Go repository, only for the <code>gofrontend</code> project
rather than the <code>go</code> project. Those changes will then be
merged into the <code>gcc</code> sources.
merged into the GCC sources.
</p>
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment