Always use the standard OSX SDK tools

Instead of whatever happens to be in PATH.

Test: port install gcc5; attempt to build host binaries
Change-Id: If4af32596edd6fd3e459c3d574ab0ff495f236ff
diff --git a/cc/compiler.go b/cc/compiler.go
index dc594e3..84ee652 100644
--- a/cc/compiler.go
+++ b/cc/compiler.go
@@ -262,10 +262,7 @@
 		flags.LdFlags = config.ClangFilterUnknownCflags(flags.LdFlags)
 
 		target := "-target " + tc.ClangTriple()
-		var gccPrefix string
-		if !ctx.Darwin() {
-			gccPrefix = "-B" + filepath.Join(tc.GccRoot(), tc.GccTriple(), "bin")
-		}
+		gccPrefix := "-B" + config.ToolPath(tc)
 
 		flags.CFlags = append(flags.CFlags, target, gccPrefix)
 		flags.AsFlags = append(flags.AsFlags, target, gccPrefix)
diff --git a/cc/config/toolchain.go b/cc/config/toolchain.go
index 995c8c6..8fc4a21 100644
--- a/cc/config/toolchain.go
+++ b/cc/config/toolchain.go
@@ -16,6 +16,7 @@
 
 import (
 	"fmt"
+	"path/filepath"
 
 	"android/soong/android"
 )
@@ -47,6 +48,7 @@
 	GccTriple() string
 	// GccVersion should return a real value, not a ninja reference
 	GccVersion() string
+	ToolPath() string
 
 	ToolchainCflags() string
 	ToolchainLdflags() string
@@ -145,6 +147,10 @@
 	return true
 }
 
+func (t toolchainBase) ToolPath() string {
+	return ""
+}
+
 type toolchain64Bit struct {
 	toolchainBase
 }
@@ -216,3 +222,10 @@
 	}
 	return "libclang_rt.ubsan_standalone-" + arch + "-android.so"
 }
+
+func ToolPath(t Toolchain) string {
+	if p := t.ToolPath(); p != "" {
+		return p
+	}
+	return filepath.Join(t.GccRoot(), t.GccTriple(), "bin")
+}
diff --git a/cc/config/x86_darwin_host.go b/cc/config/x86_darwin_host.go
index 18acef8..b6b08fe 100644
--- a/cc/config/x86_darwin_host.go
+++ b/cc/config/x86_darwin_host.go
@@ -17,6 +17,7 @@
 import (
 	"fmt"
 	"os/exec"
+	"path/filepath"
 	"strings"
 
 	"android/soong/android"
@@ -131,6 +132,11 @@
 		return strings.TrimSpace(string(bytes)), err
 	})
 
+	pctx.VariableFunc("MacToolPath", func(config interface{}) (string, error) {
+		bytes, err := exec.Command("xcrun", "--find", "ld").Output()
+		return filepath.Dir(strings.TrimSpace(string(bytes))), err
+	})
+
 	pctx.StaticVariable("DarwinGccVersion", darwinGccVersion)
 	pctx.SourcePathVariable("DarwinGccRoot",
 		"prebuilts/gcc/${HostPrebuiltTag}/host/i686-apple-darwin-${DarwinGccVersion}")
@@ -276,6 +282,10 @@
 	return false
 }
 
+func (t *toolchainDarwin) ToolPath() string {
+	return "${config.MacToolPath}"
+}
+
 var toolchainDarwinX86Singleton Toolchain = &toolchainDarwinX86{}
 var toolchainDarwinX8664Singleton Toolchain = &toolchainDarwinX8664{}
 
diff --git a/cc/makevars.go b/cc/makevars.go
index e4d8fe6..200faff 100644
--- a/cc/makevars.go
+++ b/cc/makevars.go
@@ -16,7 +16,6 @@
 
 import (
 	"fmt"
-	"path/filepath"
 	"sort"
 	"strings"
 
@@ -186,9 +185,7 @@
 	if toolchain.ClangSupported() {
 		clangPrefix := secondPrefix + "CLANG_" + typePrefix
 		clangExtras := "-target " + toolchain.ClangTriple()
-		if target.Os != android.Darwin {
-			clangExtras += " -B" + filepath.Join(toolchain.GccRoot(), toolchain.GccTriple(), "bin")
-		}
+		clangExtras += " -B" + config.ToolPath(toolchain)
 
 		ctx.Strict(clangPrefix+"GLOBAL_CFLAGS", strings.Join([]string{
 			toolchain.ClangCflags(),