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
This commit is contained in:
Dan Willemsen
2017-03-13 12:40:30 -07:00
parent 0c3919e996
commit 300151ba19
4 changed files with 25 additions and 8 deletions

View File

@@ -262,10 +262,7 @@ func (compiler *baseCompiler) compilerFlags(ctx ModuleContext, flags Flags) Flag
flags.LdFlags = config.ClangFilterUnknownCflags(flags.LdFlags) flags.LdFlags = config.ClangFilterUnknownCflags(flags.LdFlags)
target := "-target " + tc.ClangTriple() target := "-target " + tc.ClangTriple()
var gccPrefix string gccPrefix := "-B" + config.ToolPath(tc)
if !ctx.Darwin() {
gccPrefix = "-B" + filepath.Join(tc.GccRoot(), tc.GccTriple(), "bin")
}
flags.CFlags = append(flags.CFlags, target, gccPrefix) flags.CFlags = append(flags.CFlags, target, gccPrefix)
flags.AsFlags = append(flags.AsFlags, target, gccPrefix) flags.AsFlags = append(flags.AsFlags, target, gccPrefix)

View File

@@ -16,6 +16,7 @@ package config
import ( import (
"fmt" "fmt"
"path/filepath"
"android/soong/android" "android/soong/android"
) )
@@ -47,6 +48,7 @@ type Toolchain interface {
GccTriple() string GccTriple() string
// GccVersion should return a real value, not a ninja reference // GccVersion should return a real value, not a ninja reference
GccVersion() string GccVersion() string
ToolPath() string
ToolchainCflags() string ToolchainCflags() string
ToolchainLdflags() string ToolchainLdflags() string
@@ -145,6 +147,10 @@ func (toolchainBase) Bionic() bool {
return true return true
} }
func (t toolchainBase) ToolPath() string {
return ""
}
type toolchain64Bit struct { type toolchain64Bit struct {
toolchainBase toolchainBase
} }
@@ -216,3 +222,10 @@ func UndefinedBehaviorSanitizerRuntimeLibrary(t Toolchain) string {
} }
return "libclang_rt.ubsan_standalone-" + arch + "-android.so" 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")
}

View File

@@ -17,6 +17,7 @@ package config
import ( import (
"fmt" "fmt"
"os/exec" "os/exec"
"path/filepath"
"strings" "strings"
"android/soong/android" "android/soong/android"
@@ -131,6 +132,11 @@ func init() {
return strings.TrimSpace(string(bytes)), err 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.StaticVariable("DarwinGccVersion", darwinGccVersion)
pctx.SourcePathVariable("DarwinGccRoot", pctx.SourcePathVariable("DarwinGccRoot",
"prebuilts/gcc/${HostPrebuiltTag}/host/i686-apple-darwin-${DarwinGccVersion}") "prebuilts/gcc/${HostPrebuiltTag}/host/i686-apple-darwin-${DarwinGccVersion}")
@@ -276,6 +282,10 @@ func (t *toolchainDarwin) Bionic() bool {
return false return false
} }
func (t *toolchainDarwin) ToolPath() string {
return "${config.MacToolPath}"
}
var toolchainDarwinX86Singleton Toolchain = &toolchainDarwinX86{} var toolchainDarwinX86Singleton Toolchain = &toolchainDarwinX86{}
var toolchainDarwinX8664Singleton Toolchain = &toolchainDarwinX8664{} var toolchainDarwinX8664Singleton Toolchain = &toolchainDarwinX8664{}

View File

@@ -16,7 +16,6 @@ package cc
import ( import (
"fmt" "fmt"
"path/filepath"
"sort" "sort"
"strings" "strings"
@@ -186,9 +185,7 @@ func makeVarsToolchain(ctx android.MakeVarsContext, secondPrefix string,
if toolchain.ClangSupported() { if toolchain.ClangSupported() {
clangPrefix := secondPrefix + "CLANG_" + typePrefix clangPrefix := secondPrefix + "CLANG_" + typePrefix
clangExtras := "-target " + toolchain.ClangTriple() clangExtras := "-target " + toolchain.ClangTriple()
if target.Os != android.Darwin { clangExtras += " -B" + config.ToolPath(toolchain)
clangExtras += " -B" + filepath.Join(toolchain.GccRoot(), toolchain.GccTriple(), "bin")
}
ctx.Strict(clangPrefix+"GLOBAL_CFLAGS", strings.Join([]string{ ctx.Strict(clangPrefix+"GLOBAL_CFLAGS", strings.Join([]string{
toolchain.ClangCflags(), toolchain.ClangCflags(),