mirror of
				https://github.com/golang/go.git
				synced 2025-10-31 00:30:57 +00:00 
			
		
		
		
	 0f1a8d3c2d
			
		
	
	
		0f1a8d3c2d
		
	
	
	
	
		
			
			Change-Id: I63af8f0a19ec91f4a2001aa7a2eadcd2232a47df Reviewed-on: https://go-review.googlesource.com/28348 Reviewed-by: Ian Lance Taylor <iant@golang.org>
		
			
				
	
	
		
			112 lines
		
	
	
	
		
			4.2 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			112 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="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>
 |