extern char *goextlinkenabled;
extern char *goversion;
extern char *defaultcc;
+extern char *defaultcxx;
extern char *workdir;
extern char *tooldir;
extern char *slash;
char *goversion;
char *slash; // / for unix, \ for windows
char *defaultcc;
+char *defaultcxx;
bool rebuildall;
bool defaultclang;
}
defaultcc = btake(&b);
+ xgetenv(&b, "CXX");
+ if(b.len == 0) {
+ if(defaultclang)
+ bprintf(&b, "clang++");
+ else
+ bprintf(&b, "g++");
+ }
+ defaultcxx = btake(&b);
+
xsetenv("GOROOT", goroot);
xsetenv("GOARCH", goarch);
xsetenv("GOOS", goos);
//
// package main
// const defaultCC = <defaultcc>
+// const defaultCXX = <defaultcxx>
//
// It is invoked to write cmd/go/zdefaultcc.go
// but we also write cmd/cgo/zdefaultcc.go.
"\n"
"package main\n"
"\n"
- "const defaultCC = `%s`\n",
- defaultcc);
+ "const defaultCC = `%s`\n"
+ "const defaultCXX = `%s`\n",
+ defaultcc, defaultcxx);
writefile(&out, file, 0);
}
// gxxCmd returns a g++ command line prefix
+// defaultCXX is defined in zdefaultcc.go, written by cmd/dist.
func (b *builder) gxxCmd(objdir string) []string {
- return b.ccompilerCmd("CXX", "g++", objdir)
+ return b.ccompilerCmd("CXX", defaultCXX, objdir)
}
// ccompilerCmd returns a command line prefix for the given environment
cmd := b.gccCmd(".")
env = append(env, envVar{"CC", cmd[0]})
env = append(env, envVar{"GOGCCFLAGS", strings.Join(cmd[3:], " ")})
+ cmd = b.gxxCmd(".")
+ env = append(env, envVar{"CXX", cmd[0]})
}
if buildContext.CgoEnabled {