Commit 8653acb1 authored by Ian Lance Taylor's avatar Ian Lance Taylor

The gccgo frontend has moved to a new repository.

Update the documents accordingly.  Also document gccgo
specific options.

R=r
CC=golang-dev
https://golang.org/cl/196070
parent d6ee49a1
...@@ -21,26 +21,40 @@ rules.</a> ...@@ -21,26 +21,40 @@ rules.</a>
<h2>Code</h2> <h2>Code</h2>
<p> <p>
The source code for the <code>gccgo</code> frontend may be found in The source code for the <code>gccgo</code> frontend may be found at
the directory <code>gcc/go</code>. The frontend is written in C++ and <a href="http://code.google.com/p/gofrontend">http://code.google.com/p/gofrontend</a>.
as such the GNU coding standards do not entirely apply; in writing Changes made to that project are routinely merged into the source code
code for the frontend, follow the formatting of the surrounding code. hosted at <code>gcc.gnu.org</code>. The <code>gofrontend</code>
Although the frontend is currently closely tied to the rest of the gcc project includes only the Go frontend proper. These are the files
codebase, we plan to make it more independent. Any new code which which in the <code>gcc</code> sources may be found in the
uses other parts of gcc should be segregated in an appropriate file, directories <code>gcc/go</code> and <code>libgo</code>.
such as <code>gogo-tree.cc</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>.
<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.
</p> </p>
<p> <p>
The runtime library for <code>gccgo</code> is mostly the same as the The runtime library for <code>gccgo</code> is mostly the same as the
library in the main Mercurial repository. The library code in the library in <a href="http://code.google.com/p/go">the main Go
Mercurial repository is periodically copied into repository</a>. The library code in the Go repository is periodically
the <code>gccgo</code> repository. Accordingly, most library changes copied into the <code>gofrontend</code> and the <code>gcc</code>
should be made in Mercurial. Changes to the few <code>gccgo</code> repositories. Accordingly, most library changes should be made in the
specific parts of the library should follow the process described main Go repository. Changes to the few <code>gccgo</code>-specific
here. The <code>gccgo</code> specific parts of the library are parts of the library should follow the process described here.
everything in the <code>libgo</code> directory except for The <code>gccgo</code>-specific parts of the library are everything in
the <code>libgo/go</code> subdirectory. the <code>libgo</code> directory except for the <code>libgo/go</code>
subdirectory.
</p> </p>
<h2>Testing</h2> <h2>Testing</h2>
...@@ -54,8 +68,8 @@ introduces new failures is not acceptable. ...@@ -54,8 +68,8 @@ introduces new failures is not acceptable.
To run the compiler test suite, run <code>make check-go</code> in the 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 <code>gcc</code> subdirectory of your build directory. This will run
various tests underneath <code>gcc/testsuite/go.*</code>. This various tests underneath <code>gcc/testsuite/go.*</code>. This
includes a copy of the tests in the Mercurial repository, which are includes a copy of the tests in the main Go repository, which are run
run using the DejaGNU script found in using the DejaGNU script found in
in <code>gcc/testsuite/go.test/go-test.exp</code>. Many of the 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 compiler tests may be run without the Go library, but some do require
the library to built first. the library to built first.
...@@ -67,25 +81,19 @@ check-target-libgo</code> in the top level of your build directory. ...@@ -67,25 +81,19 @@ check-target-libgo</code> in the top level of your build directory.
</p> </p>
<p> <p>
Most new tests should be submitted to the Mercurial repository for Most new tests should be submitted to the main Go repository for
copying into the <code>gccgo</code> repository. If there is a need copying into the <code>gccgo</code> repository. If there is a need
for specific tests for <code>gccgo</code>, they should go in for specific tests for <code>gccgo</code>, they should go in
the <code>gcc/testsuite/go.go-torture</code> the <code>gcc/testsuite/go.go-torture</code>
or <code>gcc/testsuite/go.dg</code> directories. or <code>gcc/testsuite/go.dg</code> directories in
the <code>gcc.gnu.org</code> repository.
</p> </p>
<h2>Submitting Changes</h2> <h2>Submitting Changes</h2>
<p> <p>
Proposing a patch should follow the standard GCC rules. That is, the Changes to the Go frontend should follow the same process as for the
patch should be sent to the mailing main Go repository, only for the <code>gofrontend</code> project
list <code>gcc-patches@gcc.gnu.org</code> as a diff&mdash;the output rather than the <code>go</code> project. Those changes will then be
of the <code>diff</code> program with the <code>-c</code> merged into the <code>gcc</code> sources.
or <code>-u</code> option. In the future we are likely to set up a
separate gccgo-specific mailing list, which should also be CC'ed; we
will update this document at that time. Patch emails should include a
ChangeLog entry, though the ChangeLog entry should not be in the diff
itself. ChangeLog files are a standard part of GNU programs; see
<a href="http://www.gnu.org/prep/standards/html_node/Change-Logs.html">the
GNU coding standards</a>.
</p> </p>
...@@ -27,6 +27,15 @@ is a branch of the main <code>gcc</code> code ...@@ -27,6 +27,15 @@ is a branch of the main <code>gcc</code> code
repository: <code>svn://gcc.gnu.org/svn/gcc/branches/gccgo</code>. repository: <code>svn://gcc.gnu.org/svn/gcc/branches/gccgo</code>.
</p> </p>
<p>
Note that although <code>gcc.gnu.org</code> is the most convenient way
to get the source code for the compiler, that is not where the master
sources live. If you want to contribute changes to the gccgo
compiler, see <a href="gccgo_contribute.html">Contributing to
gccgo</a>.
</p>
<h2 id="Building">Building</h2> <h2 id="Building">Building</h2>
<p> <p>
...@@ -139,6 +148,32 @@ future the requirement of explicitly specifying ...@@ -139,6 +148,32 @@ future the requirement of explicitly specifying
may be removed. may be removed.
<h2 id="Options">Options</h2>
<p>
The <code>gccgo</code> compiler supports all <code>gcc</code> options
that are language independent, notably the <code>-O</code>
and <code>-g</code> options.
<p>
The <code>-fgo-prefix=PREFIX</code> option may be used to set a unique
prefix for the package being compiled. This option is intended for
use with large programs that contain many packages, in order to allow
multiple packages to use the same identifier as the package name.
The <code>PREFIX</code> may be any string; a good choice for the
string is the directory where the package will be installed.
<p>
The <code>-fno-require-return-statement</code> option may be used to
disable the compiler error about functions missing return statements.
Note that there is no way to disable this error in <code>6g</code>.
<p>
The <code>-I</code> and <code>-L</code> options, which are synonyms
for the compiler, may be used to set the search path for finding
imports.
<h2 id="Imports">Imports</h2> <h2 id="Imports">Imports</h2>
<p> <p>
...@@ -195,8 +230,10 @@ Some Go features are not yet implemented in <code>gccgo</code>. As of ...@@ -195,8 +230,10 @@ Some Go features are not yet implemented in <code>gccgo</code>. As of
<li>Garbage collection is not implemented. There is no way to free memory. <li>Garbage collection is not implemented. There is no way to free memory.
Thus long running programs are not supported. Thus long running programs are not supported.
<li>goroutines are implemented as NPTL threads with a fixed stack size. <li>goroutines are implemented as NPTL threads. If you can not use
The number of goroutines that may be created at one time is limited. the gold linker as described above, they are created with a fixed
stack size, and the number of goroutines that may be created at
one time is limited.
</ul> </ul>
<h2 id="Debugging">Debugging</h2> <h2 id="Debugging">Debugging</h2>
......
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