2015-05-21 12:11:33 -06:00
|
|
|
// Copyright 2009 The Go Authors. All rights reserved.
|
|
|
|
// Use of this source code is governed by a BSD-style
|
|
|
|
// license that can be found in the LICENSE file.
|
|
|
|
|
|
|
|
/*
|
|
|
|
Compile, typically invoked as ``go tool compile,'' compiles a single Go package
|
|
|
|
comprising the files named on the command line. It then writes a single
|
|
|
|
object file named for the basename of the first source file with a .o suffix.
|
|
|
|
The object file can then be combined with other objects into a package archive
|
|
|
|
or passed directly to the linker (``go tool link''). If invoked with -pack, the compiler
|
|
|
|
writes an archive directly, bypassing the intermediate object file.
|
|
|
|
|
|
|
|
The generated files contain type information about the symbols exported by
|
|
|
|
the package and about types used by symbols imported by the package from
|
|
|
|
other packages. It is therefore not necessary when compiling client C of
|
|
|
|
package P to read the files of P's dependencies, only the compiled output of P.
|
|
|
|
|
|
|
|
Command Line
|
|
|
|
|
|
|
|
Usage:
|
|
|
|
|
|
|
|
go tool compile [flags] file...
|
|
|
|
|
|
|
|
The specified files must be Go source files and all part of the same package.
|
|
|
|
The same compiler is used for all target operating systems and architectures.
|
|
|
|
The GOOS and GOARCH environment variables set the desired target.
|
|
|
|
|
|
|
|
Flags:
|
|
|
|
|
|
|
|
-D path
|
|
|
|
Set relative path for local imports.
|
|
|
|
-I dir1 -I dir2
|
|
|
|
Search for imported packages in dir1, dir2, etc,
|
|
|
|
after consulting $GOROOT/pkg/$GOOS_$GOARCH.
|
|
|
|
-L
|
|
|
|
Show complete file path in error messages.
|
|
|
|
-N
|
|
|
|
Disable optimizations.
|
|
|
|
-S
|
|
|
|
Print assembly listing to standard output (code only).
|
|
|
|
-S -S
|
|
|
|
Print assembly listing to standard output (code and data).
|
|
|
|
-V
|
|
|
|
Print compiler version and exit.
|
|
|
|
-asmhdr file
|
|
|
|
Write assembly header to file.
|
2017-04-02 19:37:04 -06:00
|
|
|
-blockprofile file
|
|
|
|
Write block profile for the compilation to file.
|
2015-05-21 12:11:33 -06:00
|
|
|
-complete
|
|
|
|
Assume package has no non-Go components.
|
|
|
|
-cpuprofile file
|
|
|
|
Write a CPU profile for the compilation to file.
|
|
|
|
-dynlink
|
|
|
|
Allow references to Go symbols in shared libraries (experimental).
|
|
|
|
-e
|
|
|
|
Remove the limit on the number of errors reported (default limit is 10).
|
|
|
|
-h
|
|
|
|
Halt with a stack trace at the first error detected.
|
2015-06-09 13:08:59 -06:00
|
|
|
-importmap old=new
|
|
|
|
Interpret import "old" as import "new" during compilation.
|
|
|
|
The option may be repeated to add multiple mappings.
|
2015-05-21 12:11:33 -06:00
|
|
|
-installsuffix suffix
|
|
|
|
Look for packages in $GOROOT/pkg/$GOOS_$GOARCH_suffix
|
|
|
|
instead of $GOROOT/pkg/$GOOS_$GOARCH.
|
2016-05-08 20:31:09 -06:00
|
|
|
-l
|
|
|
|
Disable inlining.
|
2015-05-21 12:11:33 -06:00
|
|
|
-largemodel
|
2016-04-26 19:50:59 -06:00
|
|
|
Generate code that assumes a large memory model.
|
|
|
|
-linkobj file
|
|
|
|
Write linker-specific object to file and compiler-specific
|
|
|
|
object to usual output file (as specified by -o).
|
|
|
|
Without this flag, the -o output is a combination of both
|
|
|
|
linker and compiler input.
|
2015-05-21 12:11:33 -06:00
|
|
|
-memprofile file
|
|
|
|
Write memory profile for the compilation to file.
|
|
|
|
-memprofilerate rate
|
|
|
|
Set runtime.MemProfileRate for the compilation to rate.
|
2015-10-21 08:04:10 -06:00
|
|
|
-msan
|
|
|
|
Insert calls to C/C++ memory sanitizer.
|
2017-04-05 09:01:33 -06:00
|
|
|
-mutexprofile file
|
|
|
|
Write mutex profile for the compilation to file.
|
2015-05-21 12:11:33 -06:00
|
|
|
-nolocalimports
|
|
|
|
Disallow local (relative) imports.
|
|
|
|
-o file
|
|
|
|
Write object to file (default file.o or, with -pack, file.a).
|
|
|
|
-p path
|
|
|
|
Set expected package import path for the code being compiled,
|
|
|
|
and diagnose imports that would cause a circular dependency.
|
|
|
|
-pack
|
|
|
|
Write a package (archive) file rather than an object file
|
|
|
|
-race
|
|
|
|
Compile with race detector enabled.
|
2015-11-04 12:03:06 -07:00
|
|
|
-trimpath prefix
|
|
|
|
Remove prefix from recorded source file paths.
|
2015-05-21 12:11:33 -06:00
|
|
|
-u
|
|
|
|
Disallow importing packages not marked as safe; implies -nolocalimports.
|
|
|
|
|
|
|
|
There are also a number of debugging flags; run the command with no arguments
|
|
|
|
for a usage message.
|
|
|
|
|
|
|
|
Compiler Directives
|
|
|
|
|
|
|
|
The compiler accepts compiler directives in the form of // comments at the
|
|
|
|
beginning of a line. To distinguish them from non-directive comments, the directives
|
|
|
|
require no space between the slashes and the name of the directive. However, since
|
|
|
|
they are comments, tools unaware of the directive convention or of a particular
|
|
|
|
directive can skip over a directive like any other comment.
|
|
|
|
|
|
|
|
//line path/to/file:linenumber
|
|
|
|
|
|
|
|
The //line directive specifies that the source line that follows should be recorded
|
|
|
|
as having come from the given file path and line number. Successive lines are
|
|
|
|
recorded using increasing line numbers, until the next directive. This directive
|
|
|
|
typically appears in machine-generated code, so that compilers and debuggers
|
|
|
|
will show lines in the original input to the generator.
|
|
|
|
|
|
|
|
The //line directive is an historical special case; all other directives are of the form
|
|
|
|
//go:name, indicating that the directive is defined by the Go toolchain.
|
|
|
|
|
|
|
|
//go:noescape
|
|
|
|
|
|
|
|
The //go:noescape directive specifies that the next declaration in the file, which
|
|
|
|
must be a func without a body (meaning that it has an implementation not written
|
|
|
|
in Go) does not allow any of the pointers passed as arguments to escape into the
|
2015-10-20 22:51:02 -06:00
|
|
|
heap or into the values returned from the function. This information can be used
|
2015-05-21 12:11:33 -06:00
|
|
|
during the compiler's escape analysis of Go code calling the function.
|
|
|
|
|
|
|
|
//go:nosplit
|
|
|
|
|
|
|
|
The //go:nosplit directive specifies that the next function declared in the file must
|
|
|
|
not include a stack overflow check. This is most commonly used by low-level
|
|
|
|
runtime sources invoked at times when it is unsafe for the calling goroutine to be
|
|
|
|
preempted.
|
|
|
|
|
|
|
|
//go:linkname localname importpath.name
|
|
|
|
|
2015-07-24 15:55:07 -06:00
|
|
|
The //go:linkname directive instructs the compiler to use ``importpath.name'' as the
|
2015-05-21 12:11:33 -06:00
|
|
|
object file symbol name for the variable or function declared as ``localname'' in the
|
|
|
|
source code. Because this directive can subvert the type system and package
|
|
|
|
modularity, it is only enabled in files that have imported "unsafe".
|
|
|
|
*/
|
|
|
|
package main
|