mirror of
https://github.com/golang/go.git
synced 2025-05-05 23:53:05 +00:00
go.tools/playground/socket: add Native Client wrapper handling
LGTM=adg R=adg, dave, rsc, minux CC=golang-codereviews https://golang.org/cl/77240043
This commit is contained in:
parent
3abe688aea
commit
34a8e96191
@ -268,7 +268,14 @@ func (p *process) start(body string, opt *Options) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// run x
|
// run x
|
||||||
cmd = p.cmd("", bin)
|
if isNacl() {
|
||||||
|
cmd, err = p.naclCmd(bin)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
cmd = p.cmd("", bin)
|
||||||
|
}
|
||||||
if opt != nil && opt.Race {
|
if opt != nil && opt.Race {
|
||||||
cmd.Env = append(cmd.Env, "GOMAXPROCS=2")
|
cmd.Env = append(cmd.Env, "GOMAXPROCS=2")
|
||||||
}
|
}
|
||||||
@ -317,6 +324,44 @@ func (p *process) cmd(dir string, args ...string) *exec.Cmd {
|
|||||||
return cmd
|
return cmd
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func isNacl() bool {
|
||||||
|
for _, v := range append(Environ(), os.Environ()...) {
|
||||||
|
if v == "GOOS=nacl" {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// naclCmd returns an *exec.Cmd that executes bin under native client.
|
||||||
|
func (p *process) naclCmd(bin string) (*exec.Cmd, error) {
|
||||||
|
pwd, err := os.Getwd()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
var ldr string
|
||||||
|
env := []string{
|
||||||
|
"NACLENV_GOOS=" + runtime.GOOS,
|
||||||
|
"NACLENV_GOROOT=/go",
|
||||||
|
"NACLENV_NACLPWD=" + strings.Replace(pwd, runtime.GOROOT(), "/go", 1),
|
||||||
|
}
|
||||||
|
switch runtime.GOARCH {
|
||||||
|
case "amd64":
|
||||||
|
env = append(env, "NACLENV_GOARCH=amd64")
|
||||||
|
ldr = "sel_ldr_x86_64"
|
||||||
|
case "386":
|
||||||
|
env = append(env, "NACLENV_GOARCH=386")
|
||||||
|
ldr = "sel_ldr_x86_32"
|
||||||
|
default:
|
||||||
|
return nil, errors.New("native client does not support GOARCH=" + runtime.GOARCH)
|
||||||
|
}
|
||||||
|
|
||||||
|
cmd := p.cmd("", ldr, "-l", "/dev/null", "-S", "-e", bin)
|
||||||
|
cmd.Env = append(cmd.Env, env...)
|
||||||
|
|
||||||
|
return cmd, nil
|
||||||
|
}
|
||||||
|
|
||||||
func packageName(body string) (string, error) {
|
func packageName(body string) (string, error) {
|
||||||
f, err := parser.ParseFile(token.NewFileSet(), "prog.go",
|
f, err := parser.ParseFile(token.NewFileSet(), "prog.go",
|
||||||
strings.NewReader(body), parser.PackageClauseOnly)
|
strings.NewReader(body), parser.PackageClauseOnly)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user