The make macros add these to the linker lines even if the default compiler flags are being skipped. This also allows us to add another runpath for test binaries, which are currently being installed in: <out>/host/linux-x86/nativetest[64]/<test>/<binary> So they need to use ../../lib[64] as a rpath. Change-Id: Ia7e954cdf63bc627a8f71d01c953530355c248ab
271 lines
7.1 KiB
Go
271 lines
7.1 KiB
Go
package cc
|
|
|
|
import (
|
|
"fmt"
|
|
"os/exec"
|
|
"strings"
|
|
|
|
"android/soong/common"
|
|
)
|
|
|
|
var (
|
|
darwinCflags = []string{
|
|
"-fno-exceptions", // from build/core/combo/select.mk
|
|
"-Wno-multichar", // from build/core/combo/select.mk
|
|
|
|
"-fdiagnostics-color",
|
|
|
|
"-fPIC",
|
|
"-funwind-tables",
|
|
|
|
// Workaround differences in inttypes.h between host and target.
|
|
//See bug 12708004.
|
|
"-D__STDC_FORMAT_MACROS",
|
|
"-D__STDC_CONSTANT_MACROS",
|
|
|
|
// HOST_RELEASE_CFLAGS
|
|
"-O2", // from build/core/combo/select.mk
|
|
"-g", // from build/core/combo/select.mk
|
|
"-fno-strict-aliasing", // from build/core/combo/select.mk
|
|
"-isysroot ${macSdkRoot}",
|
|
"-mmacosx-version-min=${macSdkVersion}",
|
|
"-DMACOSX_DEPLOYMENT_TARGET=${macSdkVersion}",
|
|
}
|
|
|
|
darwinLdflags = []string{
|
|
"-isysroot ${macSdkRoot}",
|
|
"-Wl,-syslibroot,${macSdkRoot}",
|
|
"-mmacosx-version-min=${macSdkVersion}",
|
|
}
|
|
|
|
darwinSystemCppCppflags = []string{
|
|
"-isystem ${macToolchainRoot}/usr/include/c++/v1",
|
|
}
|
|
|
|
darwinSystemCppLdflags = []string{
|
|
"-stdlib=libc++",
|
|
}
|
|
|
|
// Extended cflags
|
|
darwinX86Cflags = []string{
|
|
"-m32",
|
|
}
|
|
|
|
darwinX8664Cflags = []string{
|
|
"-m64",
|
|
}
|
|
|
|
darwinX86Ldflags = []string{
|
|
"-m32",
|
|
}
|
|
|
|
darwinX8664Ldflags = []string{
|
|
"-m64",
|
|
}
|
|
|
|
darwinClangCflags = append(clangFilterUnknownCflags(darwinCflags), []string{
|
|
"-integrated-as",
|
|
"-fstack-protector-strong",
|
|
}...)
|
|
|
|
darwinX86ClangCflags = append(clangFilterUnknownCflags(darwinX86Cflags), []string{
|
|
"-msse3",
|
|
}...)
|
|
|
|
darwinClangLdflags = clangFilterUnknownCflags(darwinLdflags)
|
|
|
|
darwinX86ClangLdflags = clangFilterUnknownCflags(darwinX86Ldflags)
|
|
|
|
darwinX8664ClangLdflags = clangFilterUnknownCflags(darwinX8664Ldflags)
|
|
|
|
darwinSupportedSdkVersions = []string{
|
|
"10.8",
|
|
"10.9",
|
|
"10.10",
|
|
"10.11",
|
|
}
|
|
)
|
|
|
|
const (
|
|
darwinGccVersion = "4.2.1"
|
|
)
|
|
|
|
func init() {
|
|
pctx.VariableFunc("macSdkPath", func(config interface{}) (string, error) {
|
|
bytes, err := exec.Command("xcode-select", "--print-path").Output()
|
|
return strings.TrimSpace(string(bytes)), err
|
|
})
|
|
pctx.StaticVariable("macToolchainRoot", "${macSdkPath}/Toolchains/XcodeDefault.xctoolchain")
|
|
pctx.VariableFunc("macSdkRoot", func(config interface{}) (string, error) {
|
|
return xcrunSdk(config.(common.Config), "--show-sdk-path")
|
|
})
|
|
pctx.StaticVariable("macSdkVersion", darwinSupportedSdkVersions[0])
|
|
pctx.VariableFunc("macArPath", func(config interface{}) (string, error) {
|
|
bytes, err := exec.Command("xcrun", "--find", "ar").Output()
|
|
return strings.TrimSpace(string(bytes)), err
|
|
})
|
|
|
|
pctx.StaticVariable("darwinGccVersion", darwinGccVersion)
|
|
pctx.SourcePathVariable("darwinGccRoot",
|
|
"prebuilts/gcc/${HostPrebuiltTag}/host/i686-apple-darwin-${darwinGccVersion}")
|
|
|
|
pctx.StaticVariable("darwinGccTriple", "i686-apple-darwin11")
|
|
|
|
pctx.StaticVariable("darwinCflags", strings.Join(darwinCflags, " "))
|
|
pctx.StaticVariable("darwinLdflags", strings.Join(darwinLdflags, " "))
|
|
|
|
pctx.StaticVariable("darwinClangCflags", strings.Join(darwinClangCflags, " "))
|
|
pctx.StaticVariable("darwinClangLdflags", strings.Join(darwinClangLdflags, " "))
|
|
|
|
pctx.StaticVariable("darwinSystemCppCppflags", strings.Join(darwinSystemCppCppflags, " "))
|
|
pctx.StaticVariable("darwinSystemCppLdflags", strings.Join(darwinSystemCppLdflags, " "))
|
|
|
|
// Extended cflags
|
|
pctx.StaticVariable("darwinX86Cflags", strings.Join(darwinX86Cflags, " "))
|
|
pctx.StaticVariable("darwinX8664Cflags", strings.Join(darwinX8664Cflags, " "))
|
|
pctx.StaticVariable("darwinX86Ldflags", strings.Join(darwinX86Ldflags, " "))
|
|
pctx.StaticVariable("darwinX8664Ldflags", strings.Join(darwinX8664Ldflags, " "))
|
|
|
|
pctx.StaticVariable("darwinX86ClangCflags", strings.Join(darwinX86ClangCflags, " "))
|
|
pctx.StaticVariable("darwinX8664ClangCflags",
|
|
strings.Join(clangFilterUnknownCflags(darwinX8664Cflags), " "))
|
|
pctx.StaticVariable("darwinX86ClangLdflags", strings.Join(darwinX86ClangLdflags, " "))
|
|
pctx.StaticVariable("darwinX8664ClangLdflags", strings.Join(darwinX8664ClangLdflags, " "))
|
|
}
|
|
|
|
func xcrunSdk(config common.Config, arg string) (string, error) {
|
|
if selected := config.Getenv("MAC_SDK_VERSION"); selected != "" {
|
|
if !inList(selected, darwinSupportedSdkVersions) {
|
|
return "", fmt.Errorf("MAC_SDK_VERSION %s isn't supported: %q", selected, darwinSupportedSdkVersions)
|
|
}
|
|
|
|
bytes, err := exec.Command("xcrun", "--sdk", "macosx"+selected, arg).Output()
|
|
if err == nil {
|
|
return strings.TrimSpace(string(bytes)), err
|
|
}
|
|
return "", fmt.Errorf("MAC_SDK_VERSION %s is not installed", selected)
|
|
}
|
|
|
|
for _, sdk := range darwinSupportedSdkVersions {
|
|
bytes, err := exec.Command("xcrun", "--sdk", "macosx"+sdk, arg).Output()
|
|
if err == nil {
|
|
return strings.TrimSpace(string(bytes)), err
|
|
}
|
|
}
|
|
return "", fmt.Errorf("Could not find a supported mac sdk: %q", darwinSupportedSdkVersions)
|
|
}
|
|
|
|
type toolchainDarwin struct {
|
|
cFlags, ldFlags string
|
|
}
|
|
|
|
type toolchainDarwinX86 struct {
|
|
toolchain32Bit
|
|
toolchainDarwin
|
|
}
|
|
|
|
type toolchainDarwinX8664 struct {
|
|
toolchain64Bit
|
|
toolchainDarwin
|
|
}
|
|
|
|
func (t *toolchainDarwinX86) Name() string {
|
|
return "x86"
|
|
}
|
|
|
|
func (t *toolchainDarwinX8664) Name() string {
|
|
return "x86_64"
|
|
}
|
|
|
|
func (t *toolchainDarwin) GccRoot() string {
|
|
return "${darwinGccRoot}"
|
|
}
|
|
|
|
func (t *toolchainDarwin) GccTriple() string {
|
|
return "${darwinGccTriple}"
|
|
}
|
|
|
|
func (t *toolchainDarwin) GccVersion() string {
|
|
return darwinGccVersion
|
|
}
|
|
|
|
func (t *toolchainDarwin) Cflags() string {
|
|
return "${darwinCflags} ${darwinX86Cflags}"
|
|
}
|
|
|
|
func (t *toolchainDarwinX8664) Cflags() string {
|
|
return "${darwinCflags} ${darwinX8664Cflags}"
|
|
}
|
|
|
|
func (t *toolchainDarwin) Cppflags() string {
|
|
return ""
|
|
}
|
|
|
|
func (t *toolchainDarwinX86) Ldflags() string {
|
|
return "${darwinLdflags} ${darwinX86Ldflags}"
|
|
}
|
|
|
|
func (t *toolchainDarwinX8664) Ldflags() string {
|
|
return "${darwinLdflags} ${darwinX8664Ldflags}"
|
|
}
|
|
|
|
func (t *toolchainDarwin) IncludeFlags() string {
|
|
return ""
|
|
}
|
|
|
|
func (t *toolchainDarwinX86) ClangTriple() string {
|
|
return "i686-apple-darwin"
|
|
}
|
|
|
|
func (t *toolchainDarwinX86) ClangCflags() string {
|
|
return "${darwinClangCflags} ${darwinX86ClangCflags}"
|
|
}
|
|
|
|
func (t *toolchainDarwinX8664) ClangTriple() string {
|
|
return "x86_64-apple-darwin"
|
|
}
|
|
|
|
func (t *toolchainDarwinX8664) ClangCflags() string {
|
|
return "${darwinClangCflags} ${darwinX8664ClangCflags}"
|
|
}
|
|
|
|
func (t *toolchainDarwin) ClangCppflags() string {
|
|
return ""
|
|
}
|
|
|
|
func (t *toolchainDarwinX86) ClangLdflags() string {
|
|
return "${darwinClangLdflags} ${darwinX86ClangLdflags}"
|
|
}
|
|
|
|
func (t *toolchainDarwinX8664) ClangLdflags() string {
|
|
return "${darwinClangLdflags} ${darwinX8664ClangLdflags}"
|
|
}
|
|
|
|
func (t *toolchainDarwin) ShlibSuffix() string {
|
|
return ".dylib"
|
|
}
|
|
|
|
func (t *toolchainDarwin) SystemCppCppflags() string {
|
|
return "${darwinSystemCppCppflags}"
|
|
}
|
|
|
|
func (t *toolchainDarwin) SystemCppLdflags() string {
|
|
return "${darwinSystemCppLdflags}"
|
|
}
|
|
|
|
var toolchainDarwinX86Singleton Toolchain = &toolchainDarwinX86{}
|
|
var toolchainDarwinX8664Singleton Toolchain = &toolchainDarwinX8664{}
|
|
|
|
func darwinX86ToolchainFactory(arch common.Arch) Toolchain {
|
|
return toolchainDarwinX86Singleton
|
|
}
|
|
|
|
func darwinX8664ToolchainFactory(arch common.Arch) Toolchain {
|
|
return toolchainDarwinX8664Singleton
|
|
}
|
|
|
|
func init() {
|
|
registerHostToolchainFactory(common.Darwin, common.X86, darwinX86ToolchainFactory)
|
|
registerHostToolchainFactory(common.Darwin, common.X86_64, darwinX8664ToolchainFactory)
|
|
}
|