diff --git a/cmd/internal/base/pass.go b/cmd/internal/base/pass.go new file mode 100644 index 00000000..c04be72f --- /dev/null +++ b/cmd/internal/base/pass.go @@ -0,0 +1,82 @@ +package base + +import ( + "flag" + "fmt" + "strings" +) + +type stringValue struct { + p *PassArgs + name string +} + +func (p *stringValue) String() string { + return "" +} + +func (p *stringValue) Set(v string) error { + p.p.Args = append(p.p.Args, fmt.Sprintf("-%v=%v", p.name, v)) + return nil +} + +type boolValue struct { + p *PassArgs + name string +} + +func (p *boolValue) String() string { + return "" +} + +func (p *boolValue) Set(v string) error { + p.p.Args = append(p.p.Args, fmt.Sprintf("-%v=%v", p.name, v)) + return nil +} + +func (p *boolValue) IsBoolFlag() bool { + return true +} + +type PassArgs struct { + Args []string + Flag *flag.FlagSet +} + +func (p *PassArgs) Tags() string { + for _, v := range p.Args { + if strings.HasPrefix(v, "-tags=") { + return v[6:] + } + } + return "" +} + +func (p *PassArgs) Var(names ...string) { + for _, name := range names { + p.Flag.Var(&stringValue{p: p, name: name}, name, "") + } +} + +func (p *PassArgs) Bool(names ...string) { + for _, name := range names { + p.Flag.Var(&boolValue{p: p, name: name}, name, "") + } +} + +func NewPassArgs(flag *flag.FlagSet) *PassArgs { + p := &PassArgs{Flag: flag} + return p +} + +func PassBuildFlags(cmd *Command) *PassArgs { + p := NewPassArgs(&cmd.Flag) + p.Bool("n", "x") + p.Bool("a") + p.Bool("linkshared", "race", "msan", "asan", + "trimpath", "work") + p.Var("p", "asmflags", "compiler", "buildmode", + "gcflags", "gccgoflags", "installsuffix", + "ldflags", "pkgdir", "toolexec", "buildvcs") + return p +} diff --git a/cmd/internal/build/build.go b/cmd/internal/build/build.go index 7b9890bd..d88f1666 100644 --- a/cmd/internal/build/build.go +++ b/cmd/internal/build/build.go @@ -35,6 +35,7 @@ var Cmd = &base.Command{ func init() { Cmd.Run = runCmd + base.PassBuildFlags(Cmd) flags.AddBuildFlags(&Cmd.Flag) flags.AddOutputFlags(&Cmd.Flag) } diff --git a/cmd/internal/run/run.go b/cmd/internal/run/run.go index 654044e5..3df0c199 100644 --- a/cmd/internal/run/run.go +++ b/cmd/internal/run/run.go @@ -47,6 +47,7 @@ var CmpTestCmd = &base.Command{ func init() { Cmd.Run = runCmd CmpTestCmd.Run = runCmpTest + base.PassBuildFlags(Cmd) flags.AddBuildFlags(&Cmd.Flag) flags.AddBuildFlags(&CmpTestCmd.Flag) flags.AddCmpTestFlags(&CmpTestCmd.Flag)