mirror of
https://github.com/golang/go.git
synced 2025-05-05 15:43:04 +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
|
||||
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 {
|
||||
cmd.Env = append(cmd.Env, "GOMAXPROCS=2")
|
||||
}
|
||||
@ -317,6 +324,44 @@ func (p *process) cmd(dir string, args ...string) *exec.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) {
|
||||
f, err := parser.ParseFile(token.NewFileSet(), "prog.go",
|
||||
strings.NewReader(body), parser.PackageClauseOnly)
|
||||
|
Loading…
x
Reference in New Issue
Block a user