123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- <!--{
- "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="http://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="http://go.googlesource.com/gofrontend">http://go.googlesource.com/gofrontend</a>.
- They are mirrored
- at <a href="http://github.com/golang/gofrontend">http://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>
|