pkg build, const ArchitectureAmd64 Architecture
pkg build, const ArchitectureArm Architecture
pkg build, const ArchitectureX86 Architecture
pkg build, const FormatElf Format
pkg build, const FormatMach Format
pkg build, const FormatPe Format
pkg build, const OperatingSystemAndroid OperatingSystem
pkg build, const OperatingSystemDarwin OperatingSystem
pkg build, const OperatingSystemLinux OperatingSystem
pkg build, const OperatingSystemWindows OperatingSystem
pkg build, func ArchitectureFromString(string) (Architecture, error)
pkg build, func BuilderClient(string) BuilderClientStub
pkg build, func BuilderServer(BuilderServerMethods) BuilderServerStub
pkg build, func FormatFromString(string) (Format, error)
pkg build, func OperatingSystemFromString(string) (OperatingSystem, error)
pkg build, method (*Architecture) Set(string) error
pkg build, method (*Architecture) SetFromGoArch(string) error
pkg build, method (*Architecture) VDLRead(vdl.Decoder) error
pkg build, method (*BuilderBuildServerCallStub) Init(rpc.StreamServerCall)
pkg build, method (*BuilderBuildServerCallStub) RecvStream() interface {  Advance() bool; Value() File; Err() error;}
pkg build, method (*BuilderBuildServerCallStub) SendStream() interface {  Send(item File) error;}
pkg build, method (*File) VDLRead(vdl.Decoder) error
pkg build, method (*Format) Set(string) error
pkg build, method (*Format) VDLRead(vdl.Decoder) error
pkg build, method (*OperatingSystem) Set(string) error
pkg build, method (*OperatingSystem) SetFromGoOS(string) error
pkg build, method (*OperatingSystem) VDLRead(vdl.Decoder) error
pkg build, method (Architecture) String() string
pkg build, method (Architecture) ToGoArch() string
pkg build, method (Architecture) VDLIsZero() bool
pkg build, method (Architecture) VDLWrite(vdl.Encoder) error
pkg build, method (File) VDLIsZero() bool
pkg build, method (File) VDLWrite(vdl.Encoder) error
pkg build, method (Format) String() string
pkg build, method (Format) VDLIsZero() bool
pkg build, method (Format) VDLWrite(vdl.Encoder) error
pkg build, method (OperatingSystem) String() string
pkg build, method (OperatingSystem) ToGoOS() string
pkg build, method (OperatingSystem) VDLIsZero() bool
pkg build, method (OperatingSystem) VDLWrite(vdl.Encoder) error
pkg build, type Architecture int
pkg build, type BuilderBuildClientCall interface { Finish, RecvStream, SendStream }
pkg build, type BuilderBuildClientCall interface, Finish() ([]byte, error)
pkg build, type BuilderBuildClientCall interface, RecvStream() interface {  Advance() bool;; Value() File;; Err() error;}
pkg build, type BuilderBuildClientCall interface, SendStream() interface {  Send(item File) error;; Close() error;}
pkg build, type BuilderBuildClientStream interface { RecvStream, SendStream }
pkg build, type BuilderBuildClientStream interface, RecvStream() interface {  Advance() bool;; Value() File;; Err() error;}
pkg build, type BuilderBuildClientStream interface, SendStream() interface {  Send(item File) error;; Close() error;}
pkg build, type BuilderBuildServerCall interface, RecvStream() interface {  Advance() bool;; Value() File;; Err() error;}
pkg build, type BuilderBuildServerCall interface, SendStream() interface {  Send(item File) error;}
pkg build, type BuilderBuildServerCall interface, unexported methods
pkg build, type BuilderBuildServerCallStub struct
pkg build, type BuilderBuildServerCallStub struct, embedded rpc.StreamServerCall
pkg build, type BuilderBuildServerStream interface { RecvStream, SendStream }
pkg build, type BuilderBuildServerStream interface, RecvStream() interface {  Advance() bool;; Value() File;; Err() error;}
pkg build, type BuilderBuildServerStream interface, SendStream() interface {  Send(item File) error;}
pkg build, type BuilderClientMethods interface { Build, Describe }
pkg build, type BuilderClientMethods interface, Build(*context.T, Architecture, OperatingSystem, ...rpc.CallOpt) (BuilderBuildClientCall, error)
pkg build, type BuilderClientMethods interface, Describe(*context.T, string, ...rpc.CallOpt) (binary.Description, error)
pkg build, type BuilderClientStub interface, Build(*context.T, Architecture, OperatingSystem, ...rpc.CallOpt) (BuilderBuildClientCall, error)
pkg build, type BuilderClientStub interface, Describe(*context.T, string, ...rpc.CallOpt) (binary.Description, error)
pkg build, type BuilderClientStub interface, unexported methods
pkg build, type BuilderServerMethods interface { Build, Describe }
pkg build, type BuilderServerMethods interface, Build(*context.T, BuilderBuildServerCall, Architecture, OperatingSystem) ([]byte, error)
pkg build, type BuilderServerMethods interface, Describe(*context.T, rpc.ServerCall, string) (binary.Description, error)
pkg build, type BuilderServerStub interface { Build, Describe, Describe__ }
pkg build, type BuilderServerStub interface, Build(*context.T, *BuilderBuildServerCallStub, Architecture, OperatingSystem) ([]byte, error)
pkg build, type BuilderServerStub interface, Describe(*context.T, rpc.ServerCall, string) (binary.Description, error)
pkg build, type BuilderServerStub interface, Describe__() []rpc.InterfaceDesc
pkg build, type BuilderServerStubMethods interface { Build, Describe }
pkg build, type BuilderServerStubMethods interface, Build(*context.T, *BuilderBuildServerCallStub, Architecture, OperatingSystem) ([]byte, error)
pkg build, type BuilderServerStubMethods interface, Describe(*context.T, rpc.ServerCall, string) (binary.Description, error)
pkg build, type File struct
pkg build, type File struct, Contents []byte
pkg build, type File struct, Name string
pkg build, type Format int
pkg build, type OperatingSystem int
pkg build, var ArchitectureAll [...]Architecture
pkg build, var BuilderDesc rpc.InterfaceDesc
pkg build, var FormatAll [...]Format
pkg build, var OperatingSystemAll [...]OperatingSystem
