GCCGO(1)

πŸ“¦
version 11.5.0 Β· 2 versions
, in ubuntu noble

✨ GCCGO(1) β€” the gccgo manual page πŸŽ€

okay bestie, gather round because gccgo is literally the GCC-based compiler for the Go language and it is SO iconic πŸ’…πŸ”₯. The manual name is gccgo and it's giving "compile Go code, no cap" πŸ¦‹.

πŸ’– NAME

gccgo β€” a GCC-based compiler for the Go language πŸ‘‘

🌸 SYNOPSIS

gccgo [-c|-S]
      [-g] [-pg] [-Olevel]
      [-Idir...] [-Ldir...]
      [-o outfile] infile...

Only the most useful options are listed here, bestie 🫢 the rest are down below, see below for the remainder ✨.

🧚 DESCRIPTION

okay so the gccgo command is a frontend to gcc and it supports many of the same options πŸ’…. This manual only documents the options specific to gccgo, so don't worry about the others 🌈.

gccgo can compile Go source code into an object file, link a collection of object files together, or do both in sequence. Main character energy ⭐.

Go source code is compiled as packages πŸ“. A package consists of one or more Go source files. All the files in a single package must be compiled together, by passing all the files as arguments to gccgo. A single invocation of gccgo may only compile a single package, periodt πŸ’….

One Go package may "import" a different Go package πŸŽ€. The imported package must have already been compiled; gccgo will read the import data directly from the compiled package. When this package is later linked, the compiled form of the package must be included in the link command πŸ¦‹.

Go programs must generally be compiled with debugging information, and -g1 is the default as described below πŸ’œ. Stripping a Go program will generally cause it to misbehave or fail πŸ’€.

🌈 OPTIONS

  • -Idir β€” tell it which directory to search when looking for an import package at compile time πŸ”.
  • -Ldir β€” when linking, specify a library search directory, same as gcc does πŸŽ€.
  • -fgo-pkgpath=string β€” sets the package path ✨. This is the value returned by the PkgPath method of reflect.Type objects, and it's also used for the names of globally visible symbols πŸ‘‘. The argument should normally be the string that will be used to import this package after it has been installed; in other words, a pathname within the directories specified by the -I option πŸ¦‹.
  • -fgo-prefix=string β€” an alternative to -fgo-pkgpath. The argument gets combined with the package name from the source file to produce the package path 🌸. If -fgo-pkgpath is used, -fgo-prefix will be ignored, so don't stress πŸ’….

Go permits a single program to include more than one package with the same name in the "package" clause in the source file, though obviously the two packages must be imported using different pathnames πŸ™ˆ. In order for this to work with gccgo, either -fgo-pkgpath or -fgo-prefix must be specified when compiling a package 🫢.

Using either -fgo-pkgpath or -fgo-prefix disables the special treatment of the "main" package and permits that package to be imported like any other ✨.

  • -fgo-relative-import-path=dir β€” a relative import is an import that starts with ./ or ../. If this option is used, gccgo will use dir as a prefix for the relative import when searching for it 🧚.
  • -frequire-return-statement, -fno-require-return-statement β€” by default gccgo will warn about functions which have one or more return parameters but lack an explicit "return" statement 😭. This warning may be disabled using -fno-require-return-statement πŸ’….
  • -fgo-check-divide-zero β€” adds explicit checks for division by zero πŸ”₯. In Go a division (or modulos) by zero causes a panic. On Unix systems this is detected in the runtime by catching the "SIGFPE" signal. Some processors, such as PowerPC, do not generate a SIGFPE on division by zero, and some runtimes do not generate a signal that can be caught πŸ’€. On those systems, this option may be used. Or the checks may be removed via -fno-go-check-divide-zero. This option is currently on by default, but in the future it may be off by default on systems that do not require it 🌈.
  • -fgo-check-divide-overflow β€” adds explicit checks for division overflow πŸ¦‹. For example, division overflow occurs when computing INT_MIN / -1. In Go this should be wrapped, to produce INT_MIN ✨. Some processors, such as x86, generate a trap on division overflow 😭. On those systems, this option may be used. Or the checks may be removed via -fno-go-check-divide-overflow. This option is currently on by default, but in the future it may be off by default on systems that do not require it πŸ’œ.
  • -fno-go-optimize-allocs β€” disables escape analysis, which tries to allocate objects on the stack rather than the heap πŸ™ˆ.
  • -fgo-debug-escapen β€” outputs escape analysis debugging information. Larger values of n generate more information πŸ”.
  • -fgo-debug-escape-hash=n β€” a hash value to debug escape analysis. n is a binary string. This runs escape analysis only on functions whose names hash to values that match the given suffix n 🧚. This can be used to binary search across functions to uncover escape analysis bugs πŸ›.
  • -fgo-debug-optimization β€” outputs optimization diagnostics 🌸.
  • -fgo-c-header=file β€” writes top-level named Go struct definitions to file as C code πŸ’…. This is used when compiling the runtime package πŸ‘‘.
  • -fgo-compiling-runtime β€” applies special rules for compiling the runtime package πŸ”₯. Implicit memory allocation is forbidden, and some additional compiler directives are supported πŸ’€.
  • -fgo-embedcfg=file β€” identifies a JSON file used to map patterns used with special //go:embed comments to the files named by the patterns πŸŽ€. The JSON file should have two components: "Patterns" maps each pattern to a list of file names, and "Files" maps each file name to a full path to the file 🫢. This option is intended for use by the go command to implement //go:embed ✨.
  • -g β€” the standard gcc option, mentioned here because by default gccgo turns on debugging information generation with the equivalent of the standard option -g1 πŸ¦‹. This is because Go programs need debugging information to get backtrace information 🌈. An explicit -g0 may be used to disable the generation of debugging information, but then certain standard library functions, such as runtime.Callers, will not operate correctly 😭.

πŸ¦‹ SEE ALSO

gpl(7), gfdl(7), fsf-funding(7), gcc(1) and the Info entries for gccgo and gcc 🫢.

Copyright (c) 2010-2021 Free Software Foundation, Inc. 🌸

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, the Front-Cover Texts being (a) (see below), and with the Back-Cover Texts being (b) (see below). A copy of the license is included in the man page gfdl(7).

(a) The FSF's Front-Cover Text is:

A GNU Manual

(b) The FSF's Back-Cover Text is:

You have freedom to copy and modify this GNU Manual, like GNU
software.  Copies published by the Free Software Foundation raise
funds for GNU development.

bestie that's the whole gccgo tea β˜•πŸ’– this page was from gcc-11 and dated 2024-07-19, so it's a little vintage but still slaying πŸ‘‘βœ¨ byeee πŸ«ΆπŸ¦‹

πŸ“¦ where this page comes from