Fix and optimize relPwd in cc
We cannot use the PWD trick for any compile on Darwin, since /proc
doesn't exist. So instead of checking for darwin host modules, just
check runtime.GOOS.
And since this isn't a per-module decision, don't pass it along as a
variable to every build command, but make it a global variable.
Change-Id: Iea8609f49a9d316c58aed527f62d1986c970eaac
diff --git a/cc/builder.go b/cc/builder.go
index f217082..3d5bb77 100644
--- a/cc/builder.go
+++ b/cc/builder.go
@@ -47,7 +47,7 @@
Command: "$relPwd $ccCmd -c $cFlags -MD -MF ${out}.d -o $out $in",
Description: "cc $out",
},
- "relPwd", "ccCmd", "cFlags")
+ "ccCmd", "cFlags")
ld = pctx.StaticRule("ld",
blueprint.RuleParams{
@@ -108,6 +108,18 @@
"ccCmd", "cFlags", "libName")
)
+func init() {
+ // We run gcc/clang with PWD=/proc/self/cwd to remove $TOP from the
+ // debug output. That way two builds in two different directories will
+ // create the same output.
+ if runtime.GOOS != "darwin" {
+ pctx.StaticVariable("relPwd", "PWD=/proc/self/cwd")
+ } else {
+ // Darwin doesn't have /proc
+ pctx.StaticVariable("relPwd", "")
+ }
+}
+
type builderFlags struct {
globalFlags string
asFlags string
@@ -128,15 +140,6 @@
srcRoot := ctx.AConfig().SrcDir()
intermediatesRoot := ctx.AConfig().IntermediatesDir()
- // We run gcc/clang with PWD=/proc/self/cwd to remove $TOP from the
- // debug output. That way two builds in two different directories will
- // create the same output.
- relPwd := "PWD=/proc/self/cwd"
- if ctx.Darwin() {
- // /proc doesn't exist on Darwin
- relPwd = ""
- }
-
objFiles = make([]string, len(srcFiles))
objDir := common.ModuleObjDir(ctx)
if subdir != "" {
@@ -209,7 +212,6 @@
Args: map[string]string{
"cFlags": moduleCflags,
"ccCmd": ccCmd,
- "relPwd": relPwd,
},
})
}