1 <!--{ 2 "Title": "Setting up and using gccgo", 3 "Path": "/doc/install/gccgo" 4 }--> 5 6 <p> 7 This document explains how to use gccgo, a compiler for 8 the Go language. The gccgo compiler is a new frontend 9 for GCC, the widely used GNU compiler. Although the 10 frontend itself is under a BSD-style license, gccgo is 11 normally used as part of GCC and is then covered by 12 the <a href="http://www.gnu.org/licenses/gpl.html">GNU General Public 13 License</a> (the license covers gccgo itself as part of GCC; it 14 does not cover code generated by gccgo). 15 </p> 16 17 <p> 18 Note that gccgo is not the <code>gc</code> compiler; see 19 the <a href="/doc/install.html">Installing Go</a> instructions for that 20 compiler. 21 </p> 22 23 <h2 id="Releases">Releases</h2> 24 25 <p> 26 The simplest way to install gccgo is to install a GCC binary release 27 built to include Go support. GCC binary releases are available from 28 <a href="http://gcc.gnu.org/install/binaries.html">various 29 websites</a> and are typically included as part of GNU/Linux 30 distributions. We expect that most people who build these binaries 31 will include Go support. 32 </p> 33 34 <p> 35 The GCC 4.7.1 release and all later 4.7 releases include a complete 36 <a href="/doc/go1.html">Go 1</a> compiler and libraries. 37 </p> 38 39 <p> 40 Due to timing, the GCC 4.8.0 and 4.8.1 releases are close to but not 41 identical to Go 1.1. The GCC 4.8.2 release includes a complete Go 42 1.1.2 implementation. 43 </p> 44 45 <p> 46 The GCC 4.9 releases include a complete Go 1.2 implementation. 47 </p> 48 49 <p> 50 The GCC 5 releases include a complete implementation of the Go 1.4 51 user libraries. The Go 1.4 runtime is not fully merged, but that 52 should not be visible to Go programs. 53 </p> 54 55 <p> 56 The GCC 6 releases include a complete implementation of the Go 1.6.1 57 user libraries. The Go 1.6 runtime is not fully merged, but that 58 should not be visible to Go programs. 59 </p> 60 61 <p> 62 The GCC 7 releases include a complete implementation of the Go 1.8.1 63 user libraries. As with earlier releases, the Go 1.8 runtime is not 64 fully merged, but that should not be visible to Go programs. 65 </p> 66 67 <p> 68 The GCC 8 releases are expected to include a complete implementation 69 of the Go 1.10 release, depending on release timing. The Go 1.10 70 runtime has now been fully merged into the GCC development sources, 71 and concurrent garbage collection is expected to be fully supported in 72 GCC 8. 73 </p> 74 75 <h2 id="Source_code">Source code</h2> 76 77 <p> 78 If you cannot use a release, or prefer to build gccgo for 79 yourself, 80 the gccgo source code is accessible via Subversion. The 81 GCC web site 82 has <a href="http://gcc.gnu.org/svn.html">instructions for getting the 83 GCC source code</a>. The gccgo source code is included. As a 84 convenience, a stable version of the Go support is available in 85 a branch of the main GCC code 86 repository: <code>svn://gcc.gnu.org/svn/gcc/branches/gccgo</code>. 87 This branch is periodically updated with stable Go compiler sources. 88 </p> 89 90 <p> 91 Note that although <code>gcc.gnu.org</code> is the most convenient way 92 to get the source code for the Go frontend, it is not where the master 93 sources live. If you want to contribute changes to the Go frontend 94 compiler, see <a href="/doc/gccgo_contribute.html">Contributing to 95 gccgo</a>. 96 </p> 97 98 99 <h2 id="Building">Building</h2> 100 101 <p> 102 Building gccgo is just like building GCC 103 with one or two additional options. See 104 the <a href="http://gcc.gnu.org/install/">instructions on the gcc web 105 site</a>. When you run <code>configure</code>, add the 106 option <code>--enable-languages=c,c++,go</code> (along with other 107 languages you may want to build). If you are targeting a 32-bit x86, 108 then you will want to build gccgo to default to 109 supporting locked compare and exchange instructions; do this by also 110 using the <code>configure</code> option <code>--with-arch=i586</code> 111 (or a newer architecture, depending on where you need your programs to 112 run). If you are targeting a 64-bit x86, but sometimes want to use 113 the <code>-m32</code> option, then use the <code>configure</code> 114 option <code>--with-arch-32=i586</code>. 115 </p> 116 117 <h3 id="Gold">Gold</h3> 118 119 <p> 120 On x86 GNU/Linux systems the gccgo compiler is able to 121 use a small discontiguous stack for goroutines. This permits programs 122 to run many more goroutines, since each goroutine can use a relatively 123 small stack. Doing this requires using the gold linker version 2.22 124 or later. You can either install GNU binutils 2.22 or later, or you 125 can build gold yourself. 126 </p> 127 128 <p> 129 To build gold yourself, build the GNU binutils, 130 using <code>--enable-gold=default</code> when you run 131 the <code>configure</code> script. Before building, you must install 132 the flex and bison packages. A typical sequence would look like 133 this (you can replace <code>/opt/gold</code> with any directory to 134 which you have write access): 135 </p> 136 137 <pre> 138 cvs -z 9 -d :pserver:anoncvs (a] sourceware.org:/cvs/src login 139 [password is "anoncvs"] 140 [The next command will create a directory named src, not binutils] 141 cvs -z 9 -d :pserver:anoncvs (a] sourceware.org:/cvs/src co binutils 142 mkdir binutils-objdir 143 cd binutils-objdir 144 ../src/configure --enable-gold=default --prefix=/opt/gold 145 make 146 make install 147 </pre> 148 149 <p> 150 However you install gold, when you configure gccgo, use the 151 option <code>--with-ld=<var>GOLD_BINARY</var></code>. 152 </p> 153 154 <h3 id="Prerequisites">Prerequisites</h3> 155 156 <p> 157 A number of prerequisites are required to build GCC, as 158 described on 159 the <a href="http://gcc.gnu.org/install/prerequisites.html">gcc web 160 site</a>. It is important to install all the prerequisites before 161 running the gcc <code>configure</code> script. 162 The prerequisite libraries can be conveniently downloaded using the 163 script <code>contrib/download_prerequisites</code> in the GCC sources. 164 165 <h3 id="Build_commands">Build commands</h3> 166 167 <p> 168 Once all the prerequisites are installed, then a typical build and 169 install sequence would look like this (only use 170 the <code>--with-ld</code> option if you are using the gold linker as 171 described above): 172 </p> 173 174 <pre> 175 svn checkout svn://gcc.gnu.org/svn/gcc/branches/gccgo gccgo 176 mkdir objdir 177 cd objdir 178 ../gccgo/configure --prefix=/opt/gccgo --enable-languages=c,c++,go --with-ld=/opt/gold/bin/ld 179 make 180 make install 181 </pre> 182 183 <h2 id="Using_gccgo">Using gccgo</h2> 184 185 <p> 186 The gccgo compiler works like other gcc frontends. As of GCC 5 the gccgo 187 installation also includes a version of the <code>go</code> command, 188 which may be used to build Go programs as described at 189 <a href="https://golang.org/cmd/go">https://golang.org/cmd/go</a>. 190 </p> 191 192 <p> 193 To compile a file without using the <code>go</code> command: 194 </p> 195 196 <pre> 197 gccgo -c file.go 198 </pre> 199 200 <p> 201 That produces <code>file.o</code>. To link files together to form an 202 executable: 203 </p> 204 205 <pre> 206 gccgo -o file file.o 207 </pre> 208 209 <p> 210 To run the resulting file, you will need to tell the program where to 211 find the compiled Go packages. There are a few ways to do this: 212 </p> 213 214 <ul> 215 <li> 216 <p> 217 Set the <code>LD_LIBRARY_PATH</code> environment variable: 218 </p> 219 220 <pre> 221 LD_LIBRARY_PATH=${prefix}/lib/gcc/MACHINE/VERSION 222 [or] 223 LD_LIBRARY_PATH=${prefix}/lib64/gcc/MACHINE/VERSION 224 export LD_LIBRARY_PATH 225 </pre> 226 227 <p> 228 Here <code>${prefix}</code> is the <code>--prefix</code> option used 229 when building gccgo. For a binary install this is 230 normally <code>/usr</code>. Whether to use <code>lib</code> 231 or <code>lib64</code> depends on the target. 232 Typically <code>lib64</code> is correct for x86_64 systems, 233 and <code>lib</code> is correct for other systems. The idea is to 234 name the directory where <code>libgo.so</code> is found. 235 </p> 236 237 </li> 238 239 <li> 240 <p> 241 Passing a <code>-Wl,-R</code> option when you link (replace lib with 242 lib64 if appropriate for your system): 243 </p> 244 245 <pre> 246 go build -gccgoflags -Wl,-R,${prefix}/lib/gcc/MACHINE/VERSION 247 [or] 248 gccgo -o file file.o -Wl,-R,${prefix}/lib/gcc/MACHINE/VERSION 249 </pre> 250 </li> 251 252 <li> 253 <p> 254 Use the <code>-static-libgo</code> option to link statically against 255 the compiled packages. 256 </p> 257 </li> 258 259 <li> 260 <p> 261 Use the <code>-static</code> option to do a fully static link (the 262 default for the <code>gc</code> compiler). 263 </p> 264 </li> 265 </ul> 266 267 <h2 id="Options">Options</h2> 268 269 <p> 270 The gccgo compiler supports all GCC options 271 that are language independent, notably the <code>-O</code> 272 and <code>-g</code> options. 273 </p> 274 275 <p> 276 The <code>-fgo-pkgpath=PKGPATH</code> option may be used to set a 277 unique prefix for the package being compiled. 278 This option is automatically used by the go command, but you may want 279 to use it if you invoke gccgo directly. 280 This option is intended for use with large 281 programs that contain many packages, in order to allow multiple 282 packages to use the same identifier as the package name. 283 The <code>PKGPATH</code> may be any string; a good choice for the 284 string is the path used to import the package. 285 </p> 286 287 <p> 288 The <code>-I</code> and <code>-L</code> options, which are synonyms 289 for the compiler, may be used to set the search path for finding 290 imports. 291 These options are not needed if you build with the go command. 292 </p> 293 294 <h2 id="Imports">Imports</h2> 295 296 <p> 297 When you compile a file that exports something, the export 298 information will be stored directly in the object file. 299 If you build with gccgo directly, rather than with the go command, 300 then when you import a package, you must tell gccgo how to find the 301 file. 302 </p> 303 304 <p> 305 When you import the package <var>FILE</var> with gccgo, 306 it will look for the import data in the following files, and use the 307 first one that it finds. 308 309 <ul> 310 <li><code><var>FILE</var>.gox</code> 311 <li><code>lib<var>FILE</var>.so</code> 312 <li><code>lib<var>FILE</var>.a</code> 313 <li><code><var>FILE</var>.o</code> 314 </ul> 315 316 <p> 317 <code><var>FILE</var>.gox</code>, when used, will typically contain 318 nothing but export data. This can be generated from 319 <code><var>FILE</var>.o</code> via 320 </p> 321 322 <pre> 323 objcopy -j .go_export FILE.o FILE.gox 324 </pre> 325 326 <p> 327 The gccgo compiler will look in the current 328 directory for import files. In more complex scenarios you 329 may pass the <code>-I</code> or <code>-L</code> option to 330 gccgo. Both options take directories to search. The 331 <code>-L</code> option is also passed to the linker. 332 </p> 333 334 <p> 335 The gccgo compiler does not currently (2015-06-15) record 336 the file name of imported packages in the object file. You must 337 arrange for the imported data to be linked into the program. 338 Again, this is not necessary when building with the go command. 339 </p> 340 341 <pre> 342 gccgo -c mypackage.go # Exports mypackage 343 gccgo -c main.go # Imports mypackage 344 gccgo -o main main.o mypackage.o # Explicitly links with mypackage.o 345 </pre> 346 347 <h2 id="Debugging">Debugging</h2> 348 349 <p> 350 If you use the <code>-g</code> option when you compile, you can run 351 <code>gdb</code> on your executable. The debugger has only limited 352 knowledge about Go. You can set breakpoints, single-step, 353 etc. You can print variables, but they will be printed as though they 354 had C/C++ types. For numeric types this doesn't matter. Go strings 355 and interfaces will show up as two-element structures. Go 356 maps and channels are always represented as C pointers to run-time 357 structures. 358 </p> 359 360 <h2 id="C_Interoperability">C Interoperability</h2> 361 362 <p> 363 When using gccgo there is limited interoperability with C, 364 or with C++ code compiled using <code>extern "C"</code>. 365 </p> 366 367 <h3 id="Types">Types</h3> 368 369 <p> 370 Basic types map directly: an <code>int32</code> in Go is 371 an <code>int32_t</code> in C, an <code>int64</code> is 372 an <code>int64_t</code>, etc. 373 The Go type <code>int</code> is an integer that is the same size as a 374 pointer, and as such corresponds to the C type <code>intptr_t</code>. 375 Go <code>byte</code> is equivalent to C <code>unsigned char</code>. 376 Pointers in Go are pointers in C. 377 A Go <code>struct</code> is the same as C <code>struct</code> with the 378 same fields and types. 379 </p> 380 381 <p> 382 The Go <code>string</code> type is currently defined as a two-element 383 structure (this is <b style="color: red;">subject to change</b>): 384 </p> 385 386 <pre> 387 struct __go_string { 388 const unsigned char *__data; 389 intptr_t __length; 390 }; 391 </pre> 392 393 <p> 394 You can't pass arrays between C and Go. However, a pointer to an 395 array in Go is equivalent to a C pointer to the 396 equivalent of the element type. 397 For example, Go <code>*[10]int</code> is equivalent to C <code>int*</code>, 398 assuming that the C pointer does point to 10 elements. 399 </p> 400 401 <p> 402 A slice in Go is a structure. The current definition is 403 (this is <b style="color: red;">subject to change</b>): 404 </p> 405 406 <pre> 407 struct __go_slice { 408 void *__values; 409 intptr_t __count; 410 intptr_t __capacity; 411 }; 412 </pre> 413 414 <p> 415 The type of a Go function is a pointer to a struct (this is 416 <b style="color: red;">subject to change</b>). The first field in the 417 struct points to the code of the function, which will be equivalent to 418 a pointer to a C function whose parameter types are equivalent, with 419 an additional trailing parameter. The trailing parameter is the 420 closure, and the argument to pass is a pointer to the Go function 421 struct. 422 423 When a Go function returns more than one value, the C function returns 424 a struct. For example, these functions are roughly equivalent: 425 </p> 426 427 <pre> 428 func GoFunction(int) (int, float64) 429 struct { int i; float64 f; } CFunction(int, void*) 430 </pre> 431 432 <p> 433 Go <code>interface</code>, <code>channel</code>, and <code>map</code> 434 types have no corresponding C type (<code>interface</code> is a 435 two-element struct and <code>channel</code> and <code>map</code> are 436 pointers to structs in C, but the structs are deliberately undocumented). C 437 <code>enum</code> types correspond to some integer type, but precisely 438 which one is difficult to predict in general; use a cast. C <code>union</code> 439 types have no corresponding Go type. C <code>struct</code> types containing 440 bitfields have no corresponding Go type. C++ <code>class</code> types have 441 no corresponding Go type. 442 </p> 443 444 <p> 445 Memory allocation is completely different between C and Go, as Go uses 446 garbage collection. The exact guidelines in this area are undetermined, 447 but it is likely that it will be permitted to pass a pointer to allocated 448 memory from C to Go. The responsibility of eventually freeing the pointer 449 will remain with C side, and of course if the C side frees the pointer 450 while the Go side still has a copy the program will fail. When passing a 451 pointer from Go to C, the Go function must retain a visible copy of it in 452 some Go variable. Otherwise the Go garbage collector may delete the 453 pointer while the C function is still using it. 454 </p> 455 456 <h3 id="Function_names">Function names</h3> 457 458 <p> 459 Go code can call C functions directly using a Go extension implemented 460 in gccgo: a function declaration may be preceded by 461 <code>//extern NAME</code>. For example, here is how the C function 462 <code>open</code> can be declared in Go: 463 </p> 464 465 <pre> 466 //extern open 467 func c_open(name *byte, mode int, perm int) int 468 </pre> 469 470 <p> 471 The C function naturally expects a NUL-terminated string, which in 472 Go is equivalent to a pointer to an array (not a slice!) of 473 <code>byte</code> with a terminating zero byte. So a sample call 474 from Go would look like (after importing the <code>syscall</code> package): 475 </p> 476 477 <pre> 478 var name = [4]byte{'f', 'o', 'o', 0}; 479 i := c_open(&name[0], syscall.O_RDONLY, 0); 480 </pre> 481 482 <p> 483 (this serves as an example only, to open a file in Go please use Go's 484 <code>os.Open</code> function instead). 485 </p> 486 487 <p> 488 Note that if the C function can block, such as in a call 489 to <code>read</code>, calling the C function may block the Go program. 490 Unless you have a clear understanding of what you are doing, all calls 491 between C and Go should be implemented through cgo or SWIG, as for 492 the <code>gc</code> compiler. 493 </p> 494 495 <p> 496 The name of Go functions accessed from C is subject to change. At present 497 the name of a Go function that does not have a receiver is 498 <code>prefix.package.Functionname</code>. The prefix is set by 499 the <code>-fgo-prefix</code> option used when the package is compiled; 500 if the option is not used, the default is <code>go</code>. 501 To call the function from C you must set the name using 502 a GCC extension. 503 </p> 504 505 <pre> 506 extern int go_function(int) __asm__ ("myprefix.mypackage.Function"); 507 </pre> 508 509 <h3 id="Automatic_generation_of_Go_declarations_from_C_source_code"> 510 Automatic generation of Go declarations from C source code</h3> 511 512 <p> 513 The Go version of GCC supports automatically generating 514 Go declarations from C code. The facility is rather awkward, and most 515 users should use the <a href="/cmd/cgo">cgo</a> program with 516 the <code>-gccgo</code> option instead. 517 </p> 518 519 <p> 520 Compile your C code as usual, and add the option 521 <code>-fdump-go-spec=<var>FILENAME</var></code>. This will create the 522 file <code><var>FILENAME</var></code> as a side effect of the 523 compilation. This file will contain Go declarations for the types, 524 variables and functions declared in the C code. C types that can not 525 be represented in Go will be recorded as comments in the Go code. The 526 generated file will not have a <code>package</code> declaration, but 527 can otherwise be compiled directly by gccgo. 528 </p> 529 530 <p> 531 This procedure is full of unstated caveats and restrictions and we make no 532 guarantee that it will not change in the future. It is more useful as a 533 starting point for real Go code than as a regular procedure. 534 </p> 535