toolchain

package
v0.2.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 10, 2023 License: Apache-2.0 Imports: 19 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	GO386    = EnvOr("GO386", defaultGO386)
	GOAMD64  = EnvOr("GOAMD64", defaultGOAMD64)
	GOARM    = EnvOr("GOARM", "7")
	GOMIPS   = EnvOr("GOMIPS", defaultGOMIPS)
	GOMIPS64 = EnvOr("GOMIPS64", defaultGOMIPS64)
	GOPPC64  = EnvOr("GOPPC64", defaultGOPPC64)
	GOWASM   = EnvOr("GOWASM", "")
	GO_LDSO  = defaultGO_LDSO

	GOTOOLDIR = EnvOr("GOTOOLDIR", build.ToolDir)

	Context = build.Default

	GoDefaultIncludeDir = filepath.Join(Context.GOROOT, "pkg", "include")
)

Functions

func EnvOr

func EnvOr(key, def string) string

func Getgoextlinkenabled

func Getgoextlinkenabled() string

func ModInfoData

func ModInfoData(info string) []byte

Types

type CacheRecord

type CacheRecord struct {
	Tags []string `yaml:"tags"`

	Src   FileSet `yaml:"src"`
	Build FileSet `yaml:"build"`
}

func (*CacheRecord) SourceUnchanged

func (old *CacheRecord) SourceUnchanged(newc *CacheRecord) bool

type CompiledPackages

type CompiledPackages struct {
	// contains filtered or unexported fields
}

func NewCompiledPackages

func NewCompiledPackages() *CompiledPackages

func (*CompiledPackages) Add

func (cp *CompiledPackages) Add(importpath, actualImportpath, ar string)

Add a built archive (.a file) for the importpath.

func (*CompiledPackages) Importcfg

func (cp *CompiledPackages) Importcfg() []byte

func (*CompiledPackages) Lookup

func (cp *CompiledPackages) Lookup(importpath string) (string, bool)

type File

type File struct {
	Name string `yaml:"name"`

	// SHA256Hex
	SHA256Hex string `yaml:"sha256"`

	ModTime int64 `yaml:"mtime"`
}

func (*File) VerifyUnchanged

func (f *File) VerifyUnchanged(dir string) bool

type FileSet

type FileSet struct {
	Dir   string  `yaml:"dir"`
	Files []*File `yaml:"files"`
	// contains filtered or unexported fields
}

func (*FileSet) Add

func (fset *FileSet) Add(now time.Time, dir string, filenames ...string) (err error)

func (*FileSet) Find

func (fset *FileSet) Find(name string) *File

func (*FileSet) NoChanges

func (fset *FileSet) NoChanges(newfset *FileSet) bool

type Module

type Module struct {
	Path       string       `json:",omitempty"` // module path
	Version    string       `json:",omitempty"` // module version
	Query      string       `json:",omitempty"` // version query corresponding to this version
	Versions   []string     `json:",omitempty"` // available module versions
	Replace    *Module      `json:",omitempty"` // replaced by this module
	Time       *time.Time   `json:",omitempty"` // time version was created
	Update     *Module      `json:",omitempty"` // available update (with -u)
	Main       bool         `json:",omitempty"` // is this the main module?
	Indirect   bool         `json:",omitempty"` // module is only indirectly needed by main module
	Dir        string       `json:",omitempty"` // directory holding local copy of files, if any
	GoMod      string       `json:",omitempty"` // path to go.mod file describing module, if any
	GoVersion  string       `json:",omitempty"` // go version used in module
	Retracted  []string     `json:",omitempty"` // retraction information, if any (with -retracted or -u)
	Deprecated string       `json:",omitempty"` // deprecation message, if any (with -u)
	Error      *ModuleError `json:",omitempty"` // error loading module

	Origin *Origin `json:",omitempty"` // provenance of module
	Reuse  bool    `json:",omitempty"` // reuse of old module info is safe
}

Module

copied from src/cmd/go/internal/modinfo/info.go#ModulePublic

type ModuleError

type ModuleError struct {
	Err string // error text
}

type Options

type Options struct {
	Context *build.Context

	Debug bool `cli:"debug,#debug build process"`

	BuildDir string `cli:"build-dir,def=.pcz/build,#set directory to store intermediate build outputs"`

	Mode       string // `cli:"mode,#the same as go build -buildmode"`
	EnableMSan bool   // `cli:"msan,#enable memory san interface"`
	EnableASan bool   // `cli:"asan,#enable address san interface"`
	EnableRace bool   // `cli:"race,#enable race detector"`
	NoCache    bool   `cli:"no-cache,#build without cache"`
	Trimpath   bool   `cli:"trimpath,#remove all filesystem paths from the resulting executable"`

	Defs        []string `cli:"X|define,#link-time string value definition of the form importpath.name=value"`
	EntrySymbol string   `cli:"entry,def=rt0,#set entry symbol name"`
	Platform    Platform `cli:"p|platform,#\"os/arch\" pair"`
	Tags        []string `cli:"t|tag,#add build tags"`

	LDFlags  []string `cli:"L|ldflag,#add flags to go tool link"`
	GCFlags  []string `cli:"G|gcflag,#add flags to go tool compile (not including gccgo)"`
	ASMFlags []string `cli:"A|asmflag,#add flags to go tool asm"`
}

func (*Options) AppendASMFlags

func (opts *Options) AppendASMFlags(flags ...string) []string

func (*Options) AppendEnviron

func (opts *Options) AppendEnviron(env []string) []string

func (*Options) AppendGCFlags

func (opts *Options) AppendGCFlags(flags []string) []string

func (*Options) AppendLDFlags

func (opts *Options) AppendLDFlags(flags ...string) []string

func (*Options) GOARCH

func (opts *Options) GOARCH() string

GOARCH returns a valid GOARCH value suggested by the .Platform or GOARCH environment variable.

func (*Options) GOOS

func (opts *Options) GOOS() string

GOOS returns a valid GOOS value suggested by the .Platform or GOOS environment variable.

func (*Options) GetBuildTags

func (opts *Options) GetBuildTags() []string

type Origin

type Origin struct {
	VCS    string `json:",omitempty"` // "git" etc
	URL    string `json:",omitempty"` // URL of repository
	Subdir string `json:",omitempty"` // subdirectory in repo

	// If TagSum is non-empty, then the resolution of this module version
	// depends on the set of tags present in the repo, specifically the tags
	// of the form TagPrefix + a valid semver version.
	// If the matching repo tags and their commit hashes still hash to TagSum,
	// the Origin is still valid (at least as far as the tags are concerned).
	// The exact checksum is up to the Repo implementation; see (*gitRepo).Tags.
	TagPrefix string `json:",omitempty"`
	TagSum    string `json:",omitempty"`

	// If Ref is non-empty, then the resolution of this module version
	// depends on Ref resolving to the revision identified by Hash.
	// If Ref still resolves to Hash, the Origin is still valid (at least as far as Ref is concerned).
	// For Git, the Ref is a full ref like "refs/heads/main" or "refs/tags/v1.2.3",
	// and the Hash is the Git object hash the ref maps to.
	// Other VCS might choose differently, but the idea is that Ref is the name
	// with a mutable meaning while Hash is a name with an immutable meaning.
	Ref  string `json:",omitempty"`
	Hash string `json:",omitempty"`

	// If RepoSum is non-empty, then the resolution of this module version
	// failed due to the repo being available but the version not being present.
	// This depends on the entire state of the repo, which RepoSum summarizes.
	// For Git, this is a hash of all the refs and their hashes.
	RepoSum string `json:",omitempty"`
}

An Origin describes the provenance of a given repo method result. It can be passed to CheckReuse (usually in a different go command invocation) to see whether the result remains up-to-date.

copied from src/cmd/go/internal/modfetch/codehost/codehost.go#Origin

type Package

type Package struct {
	// Note: These fields are part of the go command's public API.
	// See list.go. It is okay to add fields, but not to change or
	// remove existing ones. Keep in sync with ../list/list.go
	Dir           string   `json:",omitempty"` // directory containing package sources
	ImportPath    string   `json:",omitempty"` // import path of package in dir
	ImportComment string   `json:",omitempty"` // path in import comment on package statement
	Name          string   `json:",omitempty"` // package name
	Doc           string   `json:",omitempty"` // package documentation string
	Target        string   `json:",omitempty"` // installed target for this package (may be executable)
	Shlib         string   `json:",omitempty"` // the shared library that contains this package (only set when -linkshared)
	Root          string   `json:",omitempty"` // Go root, Go path dir, or module root dir containing this package
	ConflictDir   string   `json:",omitempty"` // Dir is hidden by this other directory
	ForTest       string   `json:",omitempty"` // package is only for use in named test
	Export        string   `json:",omitempty"` // file containing export data (set by go list -export)
	BuildID       string   `json:",omitempty"` // build ID of the compiled package (set by go list -export)
	Module        *Module  `json:",omitempty"` // info about package's module, if any
	Match         []string `json:",omitempty"` // command-line patterns matching this package
	Goroot        bool     `json:",omitempty"` // is this package found in the Go root?
	Standard      bool     `json:",omitempty"` // is this package part of the standard Go library?
	DepOnly       bool     `json:",omitempty"` // package is only as a dependency, not explicitly listed
	BinaryOnly    bool     `json:",omitempty"` // package cannot be recompiled
	Incomplete    bool     `json:",omitempty"` // was there an error loading this package or dependencies?

	DefaultGODEBUG string `json:",omitempty"` // default GODEBUG setting (only for Name=="main")

	// Stale and StaleReason remain here *only* for the list command.
	// They are only initialized in preparation for list execution.
	// The regular build determines staleness on the fly during action execution.
	Stale       bool   `json:",omitempty"` // would 'go install' do anything for this package?
	StaleReason string `json:",omitempty"` // why is Stale true?

	// Source files
	// If you add to this list you MUST add to p.AllFiles (below) too.
	// Otherwise file name security lists will not apply to any new additions.
	GoFiles           []string `json:",omitempty"` // .go source files (excluding CgoFiles, TestGoFiles, XTestGoFiles)
	CgoFiles          []string `json:",omitempty"` // .go source files that import "C"
	CompiledGoFiles   []string `json:",omitempty"` // .go output from running cgo on CgoFiles
	IgnoredGoFiles    []string `json:",omitempty"` // .go source files ignored due to build constraints
	InvalidGoFiles    []string `json:",omitempty"` // .go source files with detected problems (parse error, wrong package name, and so on)
	IgnoredOtherFiles []string `json:",omitempty"` // non-.go source files ignored due to build constraints
	CFiles            []string `json:",omitempty"` // .c source files
	CXXFiles          []string `json:",omitempty"` // .cc, .cpp and .cxx source files
	MFiles            []string `json:",omitempty"` // .m source files
	HFiles            []string `json:",omitempty"` // .h, .hh, .hpp and .hxx source files
	FFiles            []string `json:",omitempty"` // .f, .F, .for and .f90 Fortran source files
	SFiles            []string `json:",omitempty"` // .s source files
	SwigFiles         []string `json:",omitempty"` // .swig files
	SwigCXXFiles      []string `json:",omitempty"` // .swigcxx files
	SysoFiles         []string `json:",omitempty"` // .syso system object files added to package

	// Embedded files
	EmbedPatterns []string `json:",omitempty"` // //go:embed patterns
	EmbedFiles    []string `json:",omitempty"` // files matched by EmbedPatterns

	// Cgo directives
	CgoCFLAGS    []string `json:",omitempty"` // cgo: flags for C compiler
	CgoCPPFLAGS  []string `json:",omitempty"` // cgo: flags for C preprocessor
	CgoCXXFLAGS  []string `json:",omitempty"` // cgo: flags for C++ compiler
	CgoFFLAGS    []string `json:",omitempty"` // cgo: flags for Fortran compiler
	CgoLDFLAGS   []string `json:",omitempty"` // cgo: flags for linker
	CgoPkgConfig []string `json:",omitempty"` // cgo: pkg-config names

	// Dependency information
	Imports   []string          `json:",omitempty"` // import paths used by this package
	ImportMap map[string]string `json:",omitempty"` // map from source import to ImportPath (identity entries omitted)
	Deps      []string          `json:",omitempty"` // all (recursively) imported dependencies

	// Error information
	// Incomplete is above, packed into the other bools
	Error      *PackageError   `json:",omitempty"` // error loading this package (not dependencies)
	DepsErrors []*PackageError `json:",omitempty"` // errors loading dependencies, collected by go list before output

	// Test information
	// If you add to this list you MUST add to p.AllFiles (below) too.
	// Otherwise file name security lists will not apply to any new additions.
	TestGoFiles        []string `json:",omitempty"` // _test.go files in package
	TestImports        []string `json:",omitempty"` // imports from TestGoFiles
	TestEmbedPatterns  []string `json:",omitempty"` // //go:embed patterns
	TestEmbedFiles     []string `json:",omitempty"` // files matched by TestEmbedPatterns
	XTestGoFiles       []string `json:",omitempty"` // _test.go files outside package
	XTestImports       []string `json:",omitempty"` // imports from XTestGoFiles
	XTestEmbedPatterns []string `json:",omitempty"` // //go:embed patterns
	XTestEmbedFiles    []string `json:",omitempty"` // files matched by XTestEmbedPatterns
}

Package

copied from src/cmd/go/internal/load/pkg.go#PackagePublic

type PackageError

type PackageError struct {
	ImportStack   []string // shortest path from package named on command line to this one
	Pos           string   // position of error
	Err           error    // the error itself
	IsImportCycle bool     // the error is an import cycle
	Hard          bool     // whether the error is soft or hard; soft errors are ignored in some places
	// contains filtered or unexported fields
}

A PackageError describes an error loading information about a package.

type PczStdTransformer

type PczStdTransformer struct{}

func (*PczStdTransformer) Transform

func (t *PczStdTransformer) Transform(p *Package, deps []*Package) (err error)

type Platform

type Platform string

Platform is a os/arch pair

func (Platform) Arch

func (p Platform) Arch() string

func (Platform) GO386

func (p Platform) GO386() string

func (Platform) GOAMD64

func (p Platform) GOAMD64() string

func (Platform) GOARCH

func (p Platform) GOARCH(envGOARCH string) string

func (Platform) GOARM

func (p Platform) GOARM() string

func (Platform) GOMIPS

func (p Platform) GOMIPS() string

func (Platform) GOMIPS64

func (p Platform) GOMIPS64() string

func (Platform) GOOS

func (p Platform) GOOS(envGOOS string) string

func (Platform) GOPPC64

func (p Platform) GOPPC64() string

func (Platform) GOWASM

func (p Platform) GOWASM() string

func (Platform) OS

func (p Platform) OS() string

func (Platform) Pair

func (p Platform) Pair() (os, arch string)

type Toolchain

type Toolchain struct {
	// contains filtered or unexported fields
}

func NewToolchain

func NewToolchain(opts *Options) *Toolchain

func (*Toolchain) Build

func (t *Toolchain) Build(pkgs []*Package, output string) (err error)

func (*Toolchain) CreateCacheRecord

func (tc *Toolchain) CreateCacheRecord(now time.Time, buildDir string, p *Package) (_ *CacheRecord, err error)

func (*Toolchain) GoVersion

func (t *Toolchain) GoVersion() string

GoVersion returns the version string as printed by `go version`

func (t *Toolchain) Link(p *Package, deps *CompiledPackages, output string) (err error)

func (*Toolchain) List

func (t *Toolchain) List(dir string) (pkgs []*Package, err error)

List runs go list for the target package.

func (*Toolchain) Pack

func (t *Toolchain) Pack(archiveFile string, objFiles ...string) (newArchiveFile string, err error)

func (*Toolchain) Symabis

func (t *Toolchain) Symabis(p *Package) (outputfile string, err error)

func (*Toolchain) VerifyVersion

func (tc *Toolchain) VerifyVersion(gover string) error

VerifyVersion returns error if gover is different from versions reported by compile/asm/link.

type Transformer

type Transformer interface {
	Transform(p *Package, deps []*Package) error
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL