Move toolchain and global variables into separate package

am: b98c8b0595

Change-Id: Ia93d006fca1a219276c9f387c564778c9c961894
This commit is contained in:
Colin Cross
2016-08-01 22:21:22 +00:00
committed by android-build-merger
21 changed files with 532 additions and 462 deletions

View File

@@ -111,6 +111,30 @@ bootstrap_go_package {
], ],
} }
bootstrap_go_package {
name: "soong-cc-config",
pkgPath: "android/soong/cc/config",
deps: [
"soong-android",
],
srcs: [
"cc/config/clang.go",
"cc/config/global.go",
"cc/config/toolchain.go",
"cc/config/arm_device.go",
"cc/config/arm64_device.go",
"cc/config/mips_device.go",
"cc/config/mips64_device.go",
"cc/config/x86_device.go",
"cc/config/x86_64_device.go",
"cc/config/x86_darwin_host.go",
"cc/config/x86_linux_host.go",
"cc/config/x86_windows_host.go",
],
}
bootstrap_go_package { bootstrap_go_package {
name: "soong-cc", name: "soong-cc",
pkgPath: "android/soong/cc", pkgPath: "android/soong/cc",
@@ -119,6 +143,7 @@ bootstrap_go_package {
"blueprint-pathtools", "blueprint-pathtools",
"soong", "soong",
"soong-android", "soong-android",
"soong-cc-config",
"soong-genrule", "soong-genrule",
], ],
srcs: [ srcs: [
@@ -126,14 +151,11 @@ bootstrap_go_package {
"cc/builder.go", "cc/builder.go",
"cc/cc.go", "cc/cc.go",
"cc/check.go", "cc/check.go",
"cc/clang.go",
"cc/gen.go", "cc/gen.go",
"cc/global.go",
"cc/makevars.go", "cc/makevars.go",
"cc/sanitize.go", "cc/sanitize.go",
"cc/stl.go", "cc/stl.go",
"cc/strip.go", "cc/strip.go",
"cc/toolchain.go",
"cc/util.go", "cc/util.go",
"cc/compiler.go", "cc/compiler.go",
@@ -149,17 +171,6 @@ bootstrap_go_package {
"cc/ndk_headers.go", "cc/ndk_headers.go",
"cc/ndk_library.go", "cc/ndk_library.go",
"cc/ndk_sysroot.go", "cc/ndk_sysroot.go",
"cc/arm_device.go",
"cc/arm64_device.go",
"cc/mips_device.go",
"cc/mips64_device.go",
"cc/x86_device.go",
"cc/x86_64_device.go",
"cc/x86_darwin_host.go",
"cc/x86_linux_host.go",
"cc/x86_windows_host.go",
], ],
testSrcs: [ testSrcs: [
"cc/cc_test.go", "cc/cc_test.go",

View File

@@ -19,15 +19,16 @@ package cc
// functions. // functions.
import ( import (
"android/soong/android"
"fmt" "fmt"
"path/filepath"
"runtime" "runtime"
"strconv" "strconv"
"path/filepath"
"strings" "strings"
"github.com/google/blueprint" "github.com/google/blueprint"
"android/soong/android"
"android/soong/cc/config"
) )
const ( const (
@@ -79,16 +80,16 @@ var (
darwinAr = pctx.StaticRule("darwinAr", darwinAr = pctx.StaticRule("darwinAr",
blueprint.RuleParams{ blueprint.RuleParams{
Command: "rm -f ${out} && ${macArPath} $arFlags $out $in", Command: "rm -f ${out} && ${config.MacArPath} $arFlags $out $in",
CommandDeps: []string{"${macArPath}"}, CommandDeps: []string{"${config.MacArPath}"},
Description: "ar $out", Description: "ar $out",
}, },
"arFlags") "arFlags")
darwinAppendAr = pctx.StaticRule("darwinAppendAr", darwinAppendAr = pctx.StaticRule("darwinAppendAr",
blueprint.RuleParams{ blueprint.RuleParams{
Command: "cp -f ${inAr} ${out}.tmp && ${macArPath} $arFlags ${out}.tmp $in && mv ${out}.tmp ${out}", Command: "cp -f ${inAr} ${out}.tmp && ${config.MacArPath} $arFlags ${out}.tmp $in && mv ${out}.tmp ${out}",
CommandDeps: []string{"${macArPath}", "${inAr}"}, CommandDeps: []string{"${config.MacArPath}", "${inAr}"},
Description: "ar $out", Description: "ar $out",
}, },
"arFlags", "inAr") "arFlags", "inAr")
@@ -161,7 +162,7 @@ type builderFlags struct {
libFlags string libFlags string
yaccFlags string yaccFlags string
nocrt bool nocrt bool
toolchain Toolchain toolchain config.Toolchain
clang bool clang bool
stripKeepSymbols bool stripKeepSymbols bool
@@ -180,11 +181,11 @@ func TransformSourceToObj(ctx android.ModuleContext, subdir string, srcFiles and
asflags := flags.globalFlags + " " + flags.asFlags asflags := flags.globalFlags + " " + flags.asFlags
if flags.clang { if flags.clang {
cflags += " ${noOverrideClangGlobalCflags}" cflags += " ${config.NoOverrideClangGlobalCflags}"
cppflags += " ${noOverrideClangGlobalCflags}" cppflags += " ${config.NoOverrideClangGlobalCflags}"
} else { } else {
cflags += " ${noOverrideGlobalCflags}" cflags += " ${config.NoOverrideGlobalCflags}"
cppflags += " ${noOverrideGlobalCflags}" cppflags += " ${config.NoOverrideGlobalCflags}"
} }
for i, srcFile := range srcFiles { for i, srcFile := range srcFiles {
@@ -220,7 +221,7 @@ func TransformSourceToObj(ctx android.ModuleContext, subdir string, srcFiles and
panic("unrecoginzied ccCmd") panic("unrecoginzied ccCmd")
} }
ccCmd = "${clangBin}/" + ccCmd ccCmd = "${config.ClangBin}/" + ccCmd
} else { } else {
ccCmd = gccCmd(flags.toolchain, ccCmd) ccCmd = gccCmd(flags.toolchain, ccCmd)
} }
@@ -345,7 +346,7 @@ func TransformObjToDynamicBinary(ctx android.ModuleContext,
var ldCmd string var ldCmd string
if flags.clang { if flags.clang {
ldCmd = "${clangBin}/clang++" ldCmd = "${config.ClangBin}/clang++"
} else { } else {
ldCmd = gccCmd(flags.toolchain, "g++") ldCmd = gccCmd(flags.toolchain, "g++")
} }
@@ -416,7 +417,7 @@ func TransformObjsToObj(ctx android.ModuleContext, objFiles android.Paths,
var ldCmd string var ldCmd string
if flags.clang { if flags.clang {
ldCmd = "${clangBin}clang++" ldCmd = "${config.ClangBin}/clang++"
} else { } else {
ldCmd = gccCmd(flags.toolchain, "g++") ldCmd = gccCmd(flags.toolchain, "g++")
} }
@@ -499,7 +500,7 @@ func CopyGccLib(ctx android.ModuleContext, libName string,
}) })
} }
func gccCmd(toolchain Toolchain, cmd string) string { func gccCmd(toolchain config.Toolchain, cmd string) string {
return filepath.Join(toolchain.GccRoot(), "bin", toolchain.GccTriple()+"-"+cmd) return filepath.Join(toolchain.GccRoot(), "bin", toolchain.GccTriple()+"-"+cmd)
} }

View File

@@ -27,6 +27,7 @@ import (
"android/soong" "android/soong"
"android/soong/android" "android/soong/android"
"android/soong/cc/config"
"android/soong/genrule" "android/soong/genrule"
) )
@@ -48,6 +49,8 @@ func init() {
android.RegisterTopDownMutator("tsan_deps", sanitizerDepsMutator(tsan)) android.RegisterTopDownMutator("tsan_deps", sanitizerDepsMutator(tsan))
android.RegisterBottomUpMutator("tsan", sanitizerMutator(tsan)) android.RegisterBottomUpMutator("tsan", sanitizerMutator(tsan))
pctx.Import("android/soong/cc/config")
} }
type Deps struct { type Deps struct {
@@ -90,7 +93,7 @@ type Flags struct {
libFlags []string // Flags to add libraries early to the link order libFlags []string // Flags to add libraries early to the link order
Nocrt bool Nocrt bool
Toolchain Toolchain Toolchain config.Toolchain
Clang bool Clang bool
RequiredInstructionSet string RequiredInstructionSet string
@@ -130,7 +133,7 @@ type ModuleContextIntf interface {
static() bool static() bool
staticBinary() bool staticBinary() bool
clang() bool clang() bool
toolchain() Toolchain toolchain() config.Toolchain
noDefaultCompilerFlags() bool noDefaultCompilerFlags() bool
sdk() bool sdk() bool
sdkVersion() string sdkVersion() string
@@ -239,7 +242,7 @@ type Module struct {
outputFile android.OptionalPath outputFile android.OptionalPath
cachedToolchain Toolchain cachedToolchain config.Toolchain
} }
func (c *Module) Init() (blueprint.Module, []interface{}) { func (c *Module) Init() (blueprint.Module, []interface{}) {
@@ -305,7 +308,7 @@ func (ctx *moduleContextImpl) clang() bool {
return ctx.mod.clang(ctx.ctx) return ctx.mod.clang(ctx.ctx)
} }
func (ctx *moduleContextImpl) toolchain() Toolchain { func (ctx *moduleContextImpl) toolchain() config.Toolchain {
return ctx.mod.toolchain(ctx.ctx) return ctx.mod.toolchain(ctx.ctx)
} }
@@ -406,9 +409,9 @@ func (c *Module) GenerateAndroidBuildActions(actx android.ModuleContext) {
return return
} }
flags.CFlags, _ = filterList(flags.CFlags, illegalFlags) flags.CFlags, _ = filterList(flags.CFlags, config.IllegalFlags)
flags.CppFlags, _ = filterList(flags.CppFlags, illegalFlags) flags.CppFlags, _ = filterList(flags.CppFlags, config.IllegalFlags)
flags.ConlyFlags, _ = filterList(flags.ConlyFlags, illegalFlags) flags.ConlyFlags, _ = filterList(flags.ConlyFlags, config.IllegalFlags)
// Optimization to reduce size of build.ninja // Optimization to reduce size of build.ninja
// Replace the long list of flags for each file with a module-local variable // Replace the long list of flags for each file with a module-local variable
@@ -450,16 +453,9 @@ func (c *Module) GenerateAndroidBuildActions(actx android.ModuleContext) {
} }
} }
func (c *Module) toolchain(ctx BaseModuleContext) Toolchain { func (c *Module) toolchain(ctx BaseModuleContext) config.Toolchain {
if c.cachedToolchain == nil { if c.cachedToolchain == nil {
arch := ctx.Arch() c.cachedToolchain = config.FindToolchain(ctx.Os(), ctx.Arch())
os := ctx.Os()
factory := toolchainFactories[os][arch.ArchType]
if factory == nil {
ctx.ModuleErrorf("Toolchain not found for %s arch %q", os.String(), arch.String())
return nil
}
c.cachedToolchain = factory(arch)
} }
return c.cachedToolchain return c.cachedToolchain
} }

View File

@@ -20,6 +20,8 @@ package cc
import ( import (
"path/filepath" "path/filepath"
"strings" "strings"
"android/soong/cc/config"
) )
// Check for invalid c/conly/cpp/asflags and suggest alternatives. Only use this // Check for invalid c/conly/cpp/asflags and suggest alternatives. Only use this
@@ -32,7 +34,7 @@ func CheckBadCompilerFlags(ctx BaseModuleContext, prop string, flags []string) {
ctx.PropertyErrorf(prop, "Flag `%s` must start with `-`", flag) ctx.PropertyErrorf(prop, "Flag `%s` must start with `-`", flag)
} else if strings.HasPrefix(flag, "-I") || strings.HasPrefix(flag, "-isystem") { } else if strings.HasPrefix(flag, "-I") || strings.HasPrefix(flag, "-isystem") {
ctx.PropertyErrorf(prop, "Bad flag `%s`, use local_include_dirs or include_dirs instead", flag) ctx.PropertyErrorf(prop, "Bad flag `%s`, use local_include_dirs or include_dirs instead", flag)
} else if inList(flag, illegalFlags) { } else if inList(flag, config.IllegalFlags) {
ctx.PropertyErrorf(prop, "Illegal flag `%s`", flag) ctx.PropertyErrorf(prop, "Illegal flag `%s`", flag)
} else if strings.Contains(flag, " ") { } else if strings.Contains(flag, " ") {
args := strings.Split(flag, " ") args := strings.Split(flag, " ")

View File

@@ -20,6 +20,7 @@ import (
"strings" "strings"
"android/soong/android" "android/soong/android"
"android/soong/cc/config"
) )
// This file contains the basic C/C++/assembly to .o compliation steps // This file contains the basic C/C++/assembly to .o compliation steps
@@ -118,7 +119,7 @@ func (compiler *baseCompiler) deps(ctx BaseModuleContext, deps Deps) Deps {
// Create a Flags struct that collects the compile flags from global values, // Create a Flags struct that collects the compile flags from global values,
// per-target values, module type values, and per-module Blueprints properties // per-target values, module type values, and per-module Blueprints properties
func (compiler *baseCompiler) flags(ctx ModuleContext, flags Flags) Flags { func (compiler *baseCompiler) flags(ctx ModuleContext, flags Flags) Flags {
toolchain := ctx.toolchain() tc := ctx.toolchain()
CheckBadCompilerFlags(ctx, "cflags", compiler.Properties.Cflags) CheckBadCompilerFlags(ctx, "cflags", compiler.Properties.Cflags)
CheckBadCompilerFlags(ctx, "cppflags", compiler.Properties.Cppflags) CheckBadCompilerFlags(ctx, "cppflags", compiler.Properties.Cppflags)
@@ -141,9 +142,9 @@ func (compiler *baseCompiler) flags(ctx ModuleContext, flags Flags) Flags {
if !ctx.noDefaultCompilerFlags() { if !ctx.noDefaultCompilerFlags() {
if !ctx.sdk() || ctx.Host() { if !ctx.sdk() || ctx.Host() {
flags.GlobalFlags = append(flags.GlobalFlags, flags.GlobalFlags = append(flags.GlobalFlags,
"${commonGlobalIncludes}", "${config.CommonGlobalIncludes}",
toolchain.IncludeFlags(), tc.IncludeFlags(),
"${commonNativehelperInclude}") "${config.CommonNativehelperInclude}")
} }
flags.GlobalFlags = append(flags.GlobalFlags, []string{ flags.GlobalFlags = append(flags.GlobalFlags, []string{
@@ -160,7 +161,7 @@ func (compiler *baseCompiler) flags(ctx ModuleContext, flags Flags) Flags {
// behavior here, and the NDK always has all the NDK headers available. // behavior here, and the NDK always has all the NDK headers available.
flags.GlobalFlags = append(flags.GlobalFlags, flags.GlobalFlags = append(flags.GlobalFlags,
"-isystem "+getCurrentIncludePath(ctx).String(), "-isystem "+getCurrentIncludePath(ctx).String(),
"-isystem "+getCurrentIncludePath(ctx).Join(ctx, toolchain.ClangTriple()).String()) "-isystem "+getCurrentIncludePath(ctx).Join(ctx, tc.ClangTriple()).String())
// Traditionally this has come from android/api-level.h, but with the // Traditionally this has come from android/api-level.h, but with the
// libc headers unified it must be set by the build system since we // libc headers unified it must be set by the build system since we
@@ -181,9 +182,9 @@ func (compiler *baseCompiler) flags(ctx ModuleContext, flags Flags) Flags {
if flags.RequiredInstructionSet != "" { if flags.RequiredInstructionSet != "" {
instructionSet = flags.RequiredInstructionSet instructionSet = flags.RequiredInstructionSet
} }
instructionSetFlags, err := toolchain.InstructionSetFlags(instructionSet) instructionSetFlags, err := tc.InstructionSetFlags(instructionSet)
if flags.Clang { if flags.Clang {
instructionSetFlags, err = toolchain.ClangInstructionSetFlags(instructionSet) instructionSetFlags, err = tc.ClangInstructionSetFlags(instructionSet)
} }
if err != nil { if err != nil {
ctx.ModuleErrorf("%s", err) ctx.ModuleErrorf("%s", err)
@@ -198,17 +199,17 @@ func (compiler *baseCompiler) flags(ctx ModuleContext, flags Flags) Flags {
CheckBadCompilerFlags(ctx, "clang_cflags", compiler.Properties.Clang_cflags) CheckBadCompilerFlags(ctx, "clang_cflags", compiler.Properties.Clang_cflags)
CheckBadCompilerFlags(ctx, "clang_asflags", compiler.Properties.Clang_asflags) CheckBadCompilerFlags(ctx, "clang_asflags", compiler.Properties.Clang_asflags)
flags.CFlags = clangFilterUnknownCflags(flags.CFlags) flags.CFlags = config.ClangFilterUnknownCflags(flags.CFlags)
flags.CFlags = append(flags.CFlags, compiler.Properties.Clang_cflags...) flags.CFlags = append(flags.CFlags, compiler.Properties.Clang_cflags...)
flags.AsFlags = append(flags.AsFlags, compiler.Properties.Clang_asflags...) flags.AsFlags = append(flags.AsFlags, compiler.Properties.Clang_asflags...)
flags.CppFlags = clangFilterUnknownCflags(flags.CppFlags) flags.CppFlags = config.ClangFilterUnknownCflags(flags.CppFlags)
flags.ConlyFlags = clangFilterUnknownCflags(flags.ConlyFlags) flags.ConlyFlags = config.ClangFilterUnknownCflags(flags.ConlyFlags)
flags.LdFlags = clangFilterUnknownCflags(flags.LdFlags) flags.LdFlags = config.ClangFilterUnknownCflags(flags.LdFlags)
target := "-target " + toolchain.ClangTriple() target := "-target " + tc.ClangTriple()
var gccPrefix string var gccPrefix string
if !ctx.Darwin() { if !ctx.Darwin() {
gccPrefix = "-B" + filepath.Join(toolchain.GccRoot(), toolchain.GccTriple(), "bin") gccPrefix = "-B" + filepath.Join(tc.GccRoot(), tc.GccTriple(), "bin")
} }
flags.CFlags = append(flags.CFlags, target, gccPrefix) flags.CFlags = append(flags.CFlags, target, gccPrefix)
@@ -216,29 +217,29 @@ func (compiler *baseCompiler) flags(ctx ModuleContext, flags Flags) Flags {
flags.LdFlags = append(flags.LdFlags, target, gccPrefix) flags.LdFlags = append(flags.LdFlags, target, gccPrefix)
} }
hod := "host" hod := "Host"
if ctx.Os().Class == android.Device { if ctx.Os().Class == android.Device {
hod = "device" hod = "Device"
} }
if !ctx.noDefaultCompilerFlags() { if !ctx.noDefaultCompilerFlags() {
flags.GlobalFlags = append(flags.GlobalFlags, instructionSetFlags) flags.GlobalFlags = append(flags.GlobalFlags, instructionSetFlags)
if flags.Clang { if flags.Clang {
flags.AsFlags = append(flags.AsFlags, toolchain.ClangAsflags()) flags.AsFlags = append(flags.AsFlags, tc.ClangAsflags())
flags.CppFlags = append(flags.CppFlags, "${commonClangGlobalCppflags}") flags.CppFlags = append(flags.CppFlags, "${config.CommonClangGlobalCppflags}")
flags.GlobalFlags = append(flags.GlobalFlags, flags.GlobalFlags = append(flags.GlobalFlags,
toolchain.ClangCflags(), tc.ClangCflags(),
"${commonClangGlobalCflags}", "${config.CommonClangGlobalCflags}",
fmt.Sprintf("${%sClangGlobalCflags}", hod)) fmt.Sprintf("${config.%sClangGlobalCflags}", hod))
flags.ConlyFlags = append(flags.ConlyFlags, "${clangExtraConlyflags}") flags.ConlyFlags = append(flags.ConlyFlags, "${config.ClangExtraConlyflags}")
} else { } else {
flags.CppFlags = append(flags.CppFlags, "${commonGlobalCppflags}") flags.CppFlags = append(flags.CppFlags, "${config.CommonGlobalCppflags}")
flags.GlobalFlags = append(flags.GlobalFlags, flags.GlobalFlags = append(flags.GlobalFlags,
toolchain.Cflags(), tc.Cflags(),
"${commonGlobalCflags}", "${config.CommonGlobalCflags}",
fmt.Sprintf("${%sGlobalCflags}", hod)) fmt.Sprintf("${config.%sGlobalCflags}", hod))
} }
if Bool(ctx.AConfig().ProductVariables.Brillo) { if Bool(ctx.AConfig().ProductVariables.Brillo) {
@@ -256,16 +257,16 @@ func (compiler *baseCompiler) flags(ctx ModuleContext, flags Flags) Flags {
flags.AsFlags = append(flags.AsFlags, "-D__ASSEMBLY__") flags.AsFlags = append(flags.AsFlags, "-D__ASSEMBLY__")
if flags.Clang { if flags.Clang {
flags.CppFlags = append(flags.CppFlags, toolchain.ClangCppflags()) flags.CppFlags = append(flags.CppFlags, tc.ClangCppflags())
} else { } else {
flags.CppFlags = append(flags.CppFlags, toolchain.Cppflags()) flags.CppFlags = append(flags.CppFlags, tc.Cppflags())
} }
} }
if flags.Clang { if flags.Clang {
flags.GlobalFlags = append(flags.GlobalFlags, toolchain.ToolchainClangCflags()) flags.GlobalFlags = append(flags.GlobalFlags, tc.ToolchainClangCflags())
} else { } else {
flags.GlobalFlags = append(flags.GlobalFlags, toolchain.ToolchainCflags()) flags.GlobalFlags = append(flags.GlobalFlags, tc.ToolchainCflags())
} }
if !ctx.sdk() { if !ctx.sdk() {

View File

@@ -12,7 +12,7 @@
// See the License for the specific language governing permissions and // See the License for the specific language governing permissions and
// limitations under the License. // limitations under the License.
package cc package config
import ( import (
"fmt" "fmt"
@@ -91,33 +91,33 @@ const (
func init() { func init() {
pctx.StaticVariable("arm64GccVersion", arm64GccVersion) pctx.StaticVariable("arm64GccVersion", arm64GccVersion)
pctx.SourcePathVariable("arm64GccRoot", pctx.SourcePathVariable("Arm64GccRoot",
"prebuilts/gcc/${HostPrebuiltTag}/aarch64/aarch64-linux-android-${arm64GccVersion}") "prebuilts/gcc/${HostPrebuiltTag}/aarch64/aarch64-linux-android-${arm64GccVersion}")
pctx.StaticVariable("arm64Cflags", strings.Join(arm64Cflags, " ")) pctx.StaticVariable("Arm64Cflags", strings.Join(arm64Cflags, " "))
pctx.StaticVariable("arm64Ldflags", strings.Join(arm64Ldflags, " ")) pctx.StaticVariable("Arm64Ldflags", strings.Join(arm64Ldflags, " "))
pctx.StaticVariable("arm64Cppflags", strings.Join(arm64Cppflags, " ")) pctx.StaticVariable("Arm64Cppflags", strings.Join(arm64Cppflags, " "))
pctx.StaticVariable("arm64IncludeFlags", bionicHeaders("arm64", "arm64")) pctx.StaticVariable("Arm64IncludeFlags", bionicHeaders("arm64", "arm64"))
pctx.StaticVariable("arm64ClangCflags", strings.Join(clangFilterUnknownCflags(arm64Cflags), " ")) pctx.StaticVariable("Arm64ClangCflags", strings.Join(ClangFilterUnknownCflags(arm64Cflags), " "))
pctx.StaticVariable("arm64ClangLdflags", strings.Join(clangFilterUnknownCflags(arm64Ldflags), " ")) pctx.StaticVariable("Arm64ClangLdflags", strings.Join(ClangFilterUnknownCflags(arm64Ldflags), " "))
pctx.StaticVariable("arm64ClangCppflags", strings.Join(clangFilterUnknownCflags(arm64Cppflags), " ")) pctx.StaticVariable("Arm64ClangCppflags", strings.Join(ClangFilterUnknownCflags(arm64Cppflags), " "))
pctx.StaticVariable("arm64CortexA53Cflags", pctx.StaticVariable("Arm64CortexA53Cflags",
strings.Join(arm64CpuVariantCflags["cortex-a53"], " ")) strings.Join(arm64CpuVariantCflags["cortex-a53"], " "))
pctx.StaticVariable("arm64ClangCortexA53Cflags", pctx.StaticVariable("Arm64ClangCortexA53Cflags",
strings.Join(arm64ClangCpuVariantCflags["cortex-a53"], " ")) strings.Join(arm64ClangCpuVariantCflags["cortex-a53"], " "))
} }
var ( var (
arm64CpuVariantCflagsVar = map[string]string{ arm64CpuVariantCflagsVar = map[string]string{
"": "", "": "",
"cortex-a53": "${arm64CortexA53Cflags}", "cortex-a53": "${config.Arm64CortexA53Cflags}",
} }
arm64ClangCpuVariantCflagsVar = map[string]string{ arm64ClangCpuVariantCflagsVar = map[string]string{
"": "", "": "",
"cortex-a53": "${arm64ClangCortexA53Cflags}", "cortex-a53": "${config.Arm64ClangCortexA53Cflags}",
} }
) )
@@ -133,7 +133,7 @@ func (t *toolchainArm64) Name() string {
} }
func (t *toolchainArm64) GccRoot() string { func (t *toolchainArm64) GccRoot() string {
return "${arm64GccRoot}" return "${config.Arm64GccRoot}"
} }
func (t *toolchainArm64) GccTriple() string { func (t *toolchainArm64) GccTriple() string {
@@ -149,19 +149,19 @@ func (t *toolchainArm64) ToolchainCflags() string {
} }
func (t *toolchainArm64) Cflags() string { func (t *toolchainArm64) Cflags() string {
return "${arm64Cflags}" return "${config.Arm64Cflags}"
} }
func (t *toolchainArm64) Cppflags() string { func (t *toolchainArm64) Cppflags() string {
return "${arm64Cppflags}" return "${config.Arm64Cppflags}"
} }
func (t *toolchainArm64) Ldflags() string { func (t *toolchainArm64) Ldflags() string {
return "${arm64Ldflags}" return "${config.Arm64Ldflags}"
} }
func (t *toolchainArm64) IncludeFlags() string { func (t *toolchainArm64) IncludeFlags() string {
return "${arm64IncludeFlags}" return "${config.Arm64IncludeFlags}"
} }
func (t *toolchainArm64) ClangTriple() string { func (t *toolchainArm64) ClangTriple() string {
@@ -169,15 +169,15 @@ func (t *toolchainArm64) ClangTriple() string {
} }
func (t *toolchainArm64) ClangCflags() string { func (t *toolchainArm64) ClangCflags() string {
return "${arm64ClangCflags}" return "${config.Arm64ClangCflags}"
} }
func (t *toolchainArm64) ClangCppflags() string { func (t *toolchainArm64) ClangCppflags() string {
return "${arm64ClangCppflags}" return "${config.Arm64ClangCppflags}"
} }
func (t *toolchainArm64) ClangLdflags() string { func (t *toolchainArm64) ClangLdflags() string {
return "${arm64Ldflags}" return "${config.Arm64Ldflags}"
} }
func (t *toolchainArm64) ToolchainClangCflags() string { func (t *toolchainArm64) ToolchainClangCflags() string {

View File

@@ -12,7 +12,7 @@
// See the License for the specific language governing permissions and // See the License for the specific language governing permissions and
// limitations under the License. // limitations under the License.
package cc package config
import ( import (
"fmt" "fmt"
@@ -158,97 +158,97 @@ func init() {
pctx.StaticVariable("armGccVersion", armGccVersion) pctx.StaticVariable("armGccVersion", armGccVersion)
pctx.SourcePathVariable("armGccRoot", pctx.SourcePathVariable("ArmGccRoot",
"prebuilts/gcc/${HostPrebuiltTag}/arm/arm-linux-androideabi-${armGccVersion}") "prebuilts/gcc/${HostPrebuiltTag}/arm/arm-linux-androideabi-${armGccVersion}")
pctx.StaticVariable("armToolchainCflags", strings.Join(armToolchainCflags, " ")) pctx.StaticVariable("ArmToolchainCflags", strings.Join(armToolchainCflags, " "))
pctx.StaticVariable("armCflags", strings.Join(armCflags, " ")) pctx.StaticVariable("ArmCflags", strings.Join(armCflags, " "))
pctx.StaticVariable("armLdflags", strings.Join(armLdflags, " ")) pctx.StaticVariable("ArmLdflags", strings.Join(armLdflags, " "))
pctx.StaticVariable("armCppflags", strings.Join(armCppflags, " ")) pctx.StaticVariable("ArmCppflags", strings.Join(armCppflags, " "))
pctx.StaticVariable("armIncludeFlags", bionicHeaders("arm", "arm")) pctx.StaticVariable("ArmIncludeFlags", bionicHeaders("arm", "arm"))
// Extended cflags // Extended cflags
// ARM vs. Thumb instruction set flags // ARM vs. Thumb instruction set flags
pctx.StaticVariable("armArmCflags", strings.Join(armArmCflags, " ")) pctx.StaticVariable("ArmArmCflags", strings.Join(armArmCflags, " "))
pctx.StaticVariable("armThumbCflags", strings.Join(armThumbCflags, " ")) pctx.StaticVariable("ArmThumbCflags", strings.Join(armThumbCflags, " "))
// Architecture variant cflags // Architecture variant cflags
pctx.StaticVariable("armArmv5TECflags", strings.Join(armArchVariantCflags["armv5te"], " ")) pctx.StaticVariable("ArmArmv5TECflags", strings.Join(armArchVariantCflags["armv5te"], " "))
pctx.StaticVariable("armArmv7ACflags", strings.Join(armArchVariantCflags["armv7-a"], " ")) pctx.StaticVariable("ArmArmv7ACflags", strings.Join(armArchVariantCflags["armv7-a"], " "))
pctx.StaticVariable("armArmv7ANeonCflags", strings.Join(armArchVariantCflags["armv7-a-neon"], " ")) pctx.StaticVariable("ArmArmv7ANeonCflags", strings.Join(armArchVariantCflags["armv7-a-neon"], " "))
// Cpu variant cflags // Cpu variant cflags
pctx.StaticVariable("armGenericCflags", strings.Join(armCpuVariantCflags[""], " ")) pctx.StaticVariable("ArmGenericCflags", strings.Join(armCpuVariantCflags[""], " "))
pctx.StaticVariable("armCortexA7Cflags", strings.Join(armCpuVariantCflags["cortex-a7"], " ")) pctx.StaticVariable("ArmCortexA7Cflags", strings.Join(armCpuVariantCflags["cortex-a7"], " "))
pctx.StaticVariable("armCortexA8Cflags", strings.Join(armCpuVariantCflags["cortex-a8"], " ")) pctx.StaticVariable("ArmCortexA8Cflags", strings.Join(armCpuVariantCflags["cortex-a8"], " "))
pctx.StaticVariable("armCortexA15Cflags", strings.Join(armCpuVariantCflags["cortex-a15"], " ")) pctx.StaticVariable("ArmCortexA15Cflags", strings.Join(armCpuVariantCflags["cortex-a15"], " "))
pctx.StaticVariable("armKraitCflags", strings.Join(armCpuVariantCflags["krait"], " ")) pctx.StaticVariable("ArmKraitCflags", strings.Join(armCpuVariantCflags["krait"], " "))
// Clang cflags // Clang cflags
pctx.StaticVariable("armToolchainClangCflags", strings.Join(clangFilterUnknownCflags(armToolchainCflags), " ")) pctx.StaticVariable("ArmToolchainClangCflags", strings.Join(ClangFilterUnknownCflags(armToolchainCflags), " "))
pctx.StaticVariable("armClangCflags", strings.Join(clangFilterUnknownCflags(armCflags), " ")) pctx.StaticVariable("ArmClangCflags", strings.Join(ClangFilterUnknownCflags(armCflags), " "))
pctx.StaticVariable("armClangLdflags", strings.Join(clangFilterUnknownCflags(armLdflags), " ")) pctx.StaticVariable("ArmClangLdflags", strings.Join(ClangFilterUnknownCflags(armLdflags), " "))
pctx.StaticVariable("armClangCppflags", strings.Join(clangFilterUnknownCflags(armCppflags), " ")) pctx.StaticVariable("ArmClangCppflags", strings.Join(ClangFilterUnknownCflags(armCppflags), " "))
// Clang ARM vs. Thumb instruction set cflags // Clang ARM vs. Thumb instruction set cflags
pctx.StaticVariable("armClangArmCflags", strings.Join(clangFilterUnknownCflags(armArmCflags), " ")) pctx.StaticVariable("ArmClangArmCflags", strings.Join(ClangFilterUnknownCflags(armArmCflags), " "))
pctx.StaticVariable("armClangThumbCflags", strings.Join(clangFilterUnknownCflags(armThumbCflags), " ")) pctx.StaticVariable("ArmClangThumbCflags", strings.Join(ClangFilterUnknownCflags(armThumbCflags), " "))
// Clang arch variant cflags // Clang arch variant cflags
pctx.StaticVariable("armClangArmv5TECflags", pctx.StaticVariable("ArmClangArmv5TECflags",
strings.Join(armClangArchVariantCflags["armv5te"], " ")) strings.Join(armClangArchVariantCflags["armv5te"], " "))
pctx.StaticVariable("armClangArmv7ACflags", pctx.StaticVariable("ArmClangArmv7ACflags",
strings.Join(armClangArchVariantCflags["armv7-a"], " ")) strings.Join(armClangArchVariantCflags["armv7-a"], " "))
pctx.StaticVariable("armClangArmv7ANeonCflags", pctx.StaticVariable("ArmClangArmv7ANeonCflags",
strings.Join(armClangArchVariantCflags["armv7-a-neon"], " ")) strings.Join(armClangArchVariantCflags["armv7-a-neon"], " "))
// Clang cpu variant cflags // Clang cpu variant cflags
pctx.StaticVariable("armClangGenericCflags", pctx.StaticVariable("ArmClangGenericCflags",
strings.Join(armClangCpuVariantCflags[""], " ")) strings.Join(armClangCpuVariantCflags[""], " "))
pctx.StaticVariable("armClangCortexA7Cflags", pctx.StaticVariable("ArmClangCortexA7Cflags",
strings.Join(armClangCpuVariantCflags["cortex-a7"], " ")) strings.Join(armClangCpuVariantCflags["cortex-a7"], " "))
pctx.StaticVariable("armClangCortexA8Cflags", pctx.StaticVariable("ArmClangCortexA8Cflags",
strings.Join(armClangCpuVariantCflags["cortex-a8"], " ")) strings.Join(armClangCpuVariantCflags["cortex-a8"], " "))
pctx.StaticVariable("armClangCortexA15Cflags", pctx.StaticVariable("ArmClangCortexA15Cflags",
strings.Join(armClangCpuVariantCflags["cortex-a15"], " ")) strings.Join(armClangCpuVariantCflags["cortex-a15"], " "))
pctx.StaticVariable("armClangKraitCflags", pctx.StaticVariable("ArmClangKraitCflags",
strings.Join(armClangCpuVariantCflags["krait"], " ")) strings.Join(armClangCpuVariantCflags["krait"], " "))
} }
var ( var (
armArchVariantCflagsVar = map[string]string{ armArchVariantCflagsVar = map[string]string{
"armv5te": "${armArmv5TECflags}", "armv5te": "${config.ArmArmv5TECflags}",
"armv7-a": "${armArmv7ACflags}", "armv7-a": "${config.ArmArmv7ACflags}",
"armv7-a-neon": "${armArmv7ANeonCflags}", "armv7-a-neon": "${config.ArmArmv7ANeonCflags}",
} }
armCpuVariantCflagsVar = map[string]string{ armCpuVariantCflagsVar = map[string]string{
"": "${armGenericCflags}", "": "${config.ArmGenericCflags}",
"cortex-a7": "${armCortexA7Cflags}", "cortex-a7": "${config.ArmCortexA7Cflags}",
"cortex-a8": "${armCortexA8Cflags}", "cortex-a8": "${config.ArmCortexA8Cflags}",
"cortex-a15": "${armCortexA15Cflags}", "cortex-a15": "${config.ArmCortexA15Cflags}",
"cortex-a53": "${armCortexA7Cflags}", "cortex-a53": "${config.ArmCortexA7Cflags}",
"cortex-a53.a57": "${armCortexA7Cflags}", "cortex-a53.a57": "${config.ArmCortexA7Cflags}",
"krait": "${armKraitCflags}", "krait": "${config.ArmKraitCflags}",
"denver": "${armCortexA15Cflags}", "denver": "${config.ArmCortexA15Cflags}",
} }
armClangArchVariantCflagsVar = map[string]string{ armClangArchVariantCflagsVar = map[string]string{
"armv5te": "${armClangArmv5TECflags}", "armv5te": "${config.ArmClangArmv5TECflags}",
"armv7-a": "${armClangArmv7ACflags}", "armv7-a": "${config.ArmClangArmv7ACflags}",
"armv7-a-neon": "${armClangArmv7ANeonCflags}", "armv7-a-neon": "${config.ArmClangArmv7ANeonCflags}",
} }
armClangCpuVariantCflagsVar = map[string]string{ armClangCpuVariantCflagsVar = map[string]string{
"": "${armClangGenericCflags}", "": "${config.ArmClangGenericCflags}",
"cortex-a7": "${armClangCortexA7Cflags}", "cortex-a7": "${config.ArmClangCortexA7Cflags}",
"cortex-a8": "${armClangCortexA8Cflags}", "cortex-a8": "${config.ArmClangCortexA8Cflags}",
"cortex-a15": "${armClangCortexA15Cflags}", "cortex-a15": "${config.ArmClangCortexA15Cflags}",
"cortex-a53": "${armClangCortexA7Cflags}", "cortex-a53": "${config.ArmClangCortexA7Cflags}",
"cortex-a53.a57": "${armClangCortexA7Cflags}", "cortex-a53.a57": "${config.ArmClangCortexA7Cflags}",
"krait": "${armClangKraitCflags}", "krait": "${config.ArmClangKraitCflags}",
"denver": "${armClangCortexA15Cflags}", "denver": "${config.ArmClangCortexA15Cflags}",
} }
) )
@@ -263,7 +263,7 @@ func (t *toolchainArm) Name() string {
} }
func (t *toolchainArm) GccRoot() string { func (t *toolchainArm) GccRoot() string {
return "${armGccRoot}" return "${config.ArmGccRoot}"
} }
func (t *toolchainArm) GccTriple() string { func (t *toolchainArm) GccTriple() string {
@@ -279,11 +279,11 @@ func (t *toolchainArm) ToolchainCflags() string {
} }
func (t *toolchainArm) Cflags() string { func (t *toolchainArm) Cflags() string {
return "${armCflags}" return "${config.ArmCflags}"
} }
func (t *toolchainArm) Cppflags() string { func (t *toolchainArm) Cppflags() string {
return "${armCppflags}" return "${config.ArmCppflags}"
} }
func (t *toolchainArm) Ldflags() string { func (t *toolchainArm) Ldflags() string {
@@ -291,15 +291,15 @@ func (t *toolchainArm) Ldflags() string {
} }
func (t *toolchainArm) IncludeFlags() string { func (t *toolchainArm) IncludeFlags() string {
return "${armIncludeFlags}" return "${config.ArmIncludeFlags}"
} }
func (t *toolchainArm) InstructionSetFlags(isa string) (string, error) { func (t *toolchainArm) InstructionSetFlags(isa string) (string, error) {
switch isa { switch isa {
case "arm": case "arm":
return "${armArmCflags}", nil return "${config.ArmArmCflags}", nil
case "thumb", "": case "thumb", "":
return "${armThumbCflags}", nil return "${config.ArmThumbCflags}", nil
default: default:
return t.toolchainBase.InstructionSetFlags(isa) return t.toolchainBase.InstructionSetFlags(isa)
} }
@@ -314,11 +314,11 @@ func (t *toolchainArm) ToolchainClangCflags() string {
} }
func (t *toolchainArm) ClangCflags() string { func (t *toolchainArm) ClangCflags() string {
return "${armClangCflags}" return "${config.ArmClangCflags}"
} }
func (t *toolchainArm) ClangCppflags() string { func (t *toolchainArm) ClangCppflags() string {
return "${armClangCppflags}" return "${config.ArmClangCppflags}"
} }
func (t *toolchainArm) ClangLdflags() string { func (t *toolchainArm) ClangLdflags() string {
@@ -328,9 +328,9 @@ func (t *toolchainArm) ClangLdflags() string {
func (t *toolchainArm) ClangInstructionSetFlags(isa string) (string, error) { func (t *toolchainArm) ClangInstructionSetFlags(isa string) (string, error) {
switch isa { switch isa {
case "arm": case "arm":
return "${armClangArmCflags}", nil return "${config.ArmClangArmCflags}", nil
case "thumb", "": case "thumb", "":
return "${armClangThumbCflags}", nil return "${config.ArmClangThumbCflags}", nil
default: default:
return t.toolchainBase.ClangInstructionSetFlags(isa) return t.toolchainBase.ClangInstructionSetFlags(isa)
} }
@@ -345,9 +345,9 @@ func armToolchainFactory(arch android.Arch) Toolchain {
toolchainCflags := make([]string, 2, 3) toolchainCflags := make([]string, 2, 3)
toolchainClangCflags := make([]string, 2, 3) toolchainClangCflags := make([]string, 2, 3)
toolchainCflags[0] = "${armToolchainCflags}" toolchainCflags[0] = "${config.ArmToolchainCflags}"
toolchainCflags[1] = armArchVariantCflagsVar[arch.ArchVariant] toolchainCflags[1] = armArchVariantCflagsVar[arch.ArchVariant]
toolchainClangCflags[0] = "${armToolchainClangCflags}" toolchainClangCflags[0] = "${config.ArmToolchainClangCflags}"
toolchainClangCflags[1] = armClangArchVariantCflagsVar[arch.ArchVariant] toolchainClangCflags[1] = armClangArchVariantCflagsVar[arch.ArchVariant]
switch arch.ArchVariant { switch arch.ArchVariant {
@@ -375,7 +375,7 @@ func armToolchainFactory(arch android.Arch) Toolchain {
return &toolchainArm{ return &toolchainArm{
toolchainCflags: strings.Join(toolchainCflags, " "), toolchainCflags: strings.Join(toolchainCflags, " "),
ldflags: strings.Join([]string{ ldflags: strings.Join([]string{
"${armLdflags}", "${config.ArmLdflags}",
fixCortexA8, fixCortexA8,
}, " "), }, " "),
toolchainClangCflags: strings.Join(toolchainClangCflags, " "), toolchainClangCflags: strings.Join(toolchainClangCflags, " "),

View File

@@ -1,4 +1,4 @@
package cc package config
import ( import (
"sort" "sort"
@@ -6,7 +6,7 @@ import (
) )
// Cflags that should be filtered out when compiling with clang // Cflags that should be filtered out when compiling with clang
var clangUnknownCflags = sorted([]string{ var ClangUnknownCflags = sorted([]string{
"-finline-functions", "-finline-functions",
"-finline-limit=64", "-finline-limit=64",
"-fno-canonical-system-headers", "-fno-canonical-system-headers",
@@ -66,7 +66,7 @@ var clangUnknownCflags = sorted([]string{
}) })
func init() { func init() {
pctx.StaticVariable("clangExtraCflags", strings.Join([]string{ pctx.StaticVariable("ClangExtraCflags", strings.Join([]string{
"-D__compiler_offsetof=__builtin_offsetof", "-D__compiler_offsetof=__builtin_offsetof",
// Help catch common 32/64-bit errors. // Help catch common 32/64-bit errors.
@@ -93,11 +93,11 @@ func init() {
"-Wno-expansion-to-defined", "-Wno-expansion-to-defined",
}, " ")) }, " "))
pctx.StaticVariable("clangExtraConlyflags", strings.Join([]string{ pctx.StaticVariable("ClangExtraConlyflags", strings.Join([]string{
"-std=gnu99", "-std=gnu99",
}, " ")) }, " "))
pctx.StaticVariable("clangExtraCppflags", strings.Join([]string{ pctx.StaticVariable("ClangExtraCppflags", strings.Join([]string{
// Disable -Winconsistent-missing-override until we can clean up the existing // Disable -Winconsistent-missing-override until we can clean up the existing
// codebase for it. // codebase for it.
"-Wno-inconsistent-missing-override", "-Wno-inconsistent-missing-override",
@@ -107,11 +107,11 @@ func init() {
"-Wno-null-dereference", "-Wno-null-dereference",
}, " ")) }, " "))
pctx.StaticVariable("clangExtraTargetCflags", strings.Join([]string{ pctx.StaticVariable("ClangExtraTargetCflags", strings.Join([]string{
"-nostdlibinc", "-nostdlibinc",
}, " ")) }, " "))
pctx.StaticVariable("clangExtraNoOverrideCflags", strings.Join([]string{ pctx.StaticVariable("ClangExtraNoOverrideCflags", strings.Join([]string{
"-Werror=address-of-temporary", "-Werror=address-of-temporary",
// Bug: http://b/29823425 Disable -Wnull-dereference until the // Bug: http://b/29823425 Disable -Wnull-dereference until the
// new cases detected by this warning in Clang r271374 are // new cases detected by this warning in Clang r271374 are
@@ -121,10 +121,10 @@ func init() {
}, " ")) }, " "))
} }
func clangFilterUnknownCflags(cflags []string) []string { func ClangFilterUnknownCflags(cflags []string) []string {
ret := make([]string, 0, len(cflags)) ret := make([]string, 0, len(cflags))
for _, f := range cflags { for _, f := range cflags {
if !inListSorted(f, clangUnknownCflags) { if !inListSorted(f, ClangUnknownCflags) {
ret = append(ret, f) ret = append(ret, f)
} }
} }

View File

@@ -12,7 +12,7 @@
// See the License for the specific language governing permissions and // See the License for the specific language governing permissions and
// limitations under the License. // limitations under the License.
package cc package config
import ( import (
"strings" "strings"
@@ -59,38 +59,40 @@ var (
"-Werror=pointer-to-int-cast", "-Werror=pointer-to-int-cast",
} }
illegalFlags = []string{ IllegalFlags = []string{
"-w", "-w",
} }
) )
var pctx = android.NewPackageContext("android/soong/cc/config")
func init() { func init() {
if android.BuildOs == android.Linux { if android.BuildOs == android.Linux {
commonGlobalCflags = append(commonGlobalCflags, "-fdebug-prefix-map=/proc/self/cwd=") commonGlobalCflags = append(commonGlobalCflags, "-fdebug-prefix-map=/proc/self/cwd=")
} }
pctx.StaticVariable("commonGlobalCflags", strings.Join(commonGlobalCflags, " ")) pctx.StaticVariable("CommonGlobalCflags", strings.Join(commonGlobalCflags, " "))
pctx.StaticVariable("deviceGlobalCflags", strings.Join(deviceGlobalCflags, " ")) pctx.StaticVariable("DeviceGlobalCflags", strings.Join(deviceGlobalCflags, " "))
pctx.StaticVariable("hostGlobalCflags", strings.Join(hostGlobalCflags, " ")) pctx.StaticVariable("HostGlobalCflags", strings.Join(hostGlobalCflags, " "))
pctx.StaticVariable("noOverrideGlobalCflags", strings.Join(noOverrideGlobalCflags, " ")) pctx.StaticVariable("NoOverrideGlobalCflags", strings.Join(noOverrideGlobalCflags, " "))
pctx.StaticVariable("commonGlobalCppflags", strings.Join(commonGlobalCppflags, " ")) pctx.StaticVariable("CommonGlobalCppflags", strings.Join(commonGlobalCppflags, " "))
pctx.StaticVariable("commonClangGlobalCflags", pctx.StaticVariable("CommonClangGlobalCflags",
strings.Join(append(clangFilterUnknownCflags(commonGlobalCflags), "${clangExtraCflags}"), " ")) strings.Join(append(ClangFilterUnknownCflags(commonGlobalCflags), "${ClangExtraCflags}"), " "))
pctx.StaticVariable("deviceClangGlobalCflags", pctx.StaticVariable("DeviceClangGlobalCflags",
strings.Join(append(clangFilterUnknownCflags(deviceGlobalCflags), "${clangExtraTargetCflags}"), " ")) strings.Join(append(ClangFilterUnknownCflags(deviceGlobalCflags), "${ClangExtraTargetCflags}"), " "))
pctx.StaticVariable("hostClangGlobalCflags", pctx.StaticVariable("HostClangGlobalCflags",
strings.Join(clangFilterUnknownCflags(hostGlobalCflags), " ")) strings.Join(ClangFilterUnknownCflags(hostGlobalCflags), " "))
pctx.StaticVariable("noOverrideClangGlobalCflags", pctx.StaticVariable("NoOverrideClangGlobalCflags",
strings.Join(append(clangFilterUnknownCflags(noOverrideGlobalCflags), "${clangExtraNoOverrideCflags}"), " ")) strings.Join(append(ClangFilterUnknownCflags(noOverrideGlobalCflags), "${ClangExtraNoOverrideCflags}"), " "))
pctx.StaticVariable("commonClangGlobalCppflags", pctx.StaticVariable("CommonClangGlobalCppflags",
strings.Join(append(clangFilterUnknownCflags(commonGlobalCppflags), "${clangExtraCppflags}"), " ")) strings.Join(append(ClangFilterUnknownCflags(commonGlobalCppflags), "${ClangExtraCppflags}"), " "))
// Everything in this list is a crime against abstraction and dependency tracking. // Everything in this list is a crime against abstraction and dependency tracking.
// Do not add anything to this list. // Do not add anything to this list.
pctx.PrefixedPathsForOptionalSourceVariable("commonGlobalIncludes", "-isystem ", pctx.PrefixedPathsForOptionalSourceVariable("CommonGlobalIncludes", "-isystem ",
[]string{ []string{
"system/core/include", "system/core/include",
"system/media/audio/include", "system/media/audio/include",
@@ -105,24 +107,26 @@ func init() {
}) })
// This is used by non-NDK modules to get jni.h. export_include_dirs doesn't help // This is used by non-NDK modules to get jni.h. export_include_dirs doesn't help
// with this, since there is no associated library. // with this, since there is no associated library.
pctx.PrefixedPathsForOptionalSourceVariable("commonNativehelperInclude", "-I", pctx.PrefixedPathsForOptionalSourceVariable("CommonNativehelperInclude", "-I",
[]string{"libnativehelper/include/nativehelper"}) []string{"libnativehelper/include/nativehelper"})
pctx.SourcePathVariable("clangDefaultBase", "prebuilts/clang/host") pctx.SourcePathVariable("ClangDefaultBase", "prebuilts/clang/host")
pctx.VariableFunc("clangBase", func(config interface{}) (string, error) { pctx.VariableFunc("ClangBase", func(config interface{}) (string, error) {
if override := config.(android.Config).Getenv("LLVM_PREBUILTS_BASE"); override != "" { if override := config.(android.Config).Getenv("LLVM_PREBUILTS_BASE"); override != "" {
return override, nil return override, nil
} }
return "${clangDefaultBase}", nil return "${ClangDefaultBase}", nil
}) })
pctx.VariableFunc("clangVersion", func(config interface{}) (string, error) { pctx.VariableFunc("ClangVersion", func(config interface{}) (string, error) {
if override := config.(android.Config).Getenv("LLVM_PREBUILTS_VERSION"); override != "" { if override := config.(android.Config).Getenv("LLVM_PREBUILTS_VERSION"); override != "" {
return override, nil return override, nil
} }
return "clang-3016494", nil return "clang-3016494", nil
}) })
pctx.StaticVariable("clangPath", "${clangBase}/${HostPrebuiltTag}/${clangVersion}") pctx.StaticVariable("ClangPath", "${ClangBase}/${HostPrebuiltTag}/${ClangVersion}")
pctx.StaticVariable("clangBin", "${clangPath}/bin") pctx.StaticVariable("ClangBin", "${ClangPath}/bin")
pctx.StaticVariable("ClangAsanLibDir", "${ClangPath}/lib64/clang/3.8/lib/linux")
} }
var HostPrebuiltTag = pctx.VariableConfigMethod("HostPrebuiltTag", android.Config.PrebuiltOS) var HostPrebuiltTag = pctx.VariableConfigMethod("HostPrebuiltTag", android.Config.PrebuiltOS)

View File

@@ -12,7 +12,7 @@
// See the License for the specific language governing permissions and // See the License for the specific language governing permissions and
// limitations under the License. // limitations under the License.
package cc package config
import ( import (
"strings" "strings"
@@ -92,26 +92,26 @@ func init() {
pctx.StaticVariable("mips64GccVersion", mips64GccVersion) pctx.StaticVariable("mips64GccVersion", mips64GccVersion)
pctx.SourcePathVariable("mips64GccRoot", pctx.SourcePathVariable("Mips64GccRoot",
"prebuilts/gcc/${HostPrebuiltTag}/mips/mips64el-linux-android-${mips64GccVersion}") "prebuilts/gcc/${HostPrebuiltTag}/mips/mips64el-linux-android-${mips64GccVersion}")
pctx.StaticVariable("mips64Cflags", strings.Join(mips64Cflags, " ")) pctx.StaticVariable("Mips64Cflags", strings.Join(mips64Cflags, " "))
pctx.StaticVariable("mips64Ldflags", strings.Join(mips64Ldflags, " ")) pctx.StaticVariable("Mips64Ldflags", strings.Join(mips64Ldflags, " "))
pctx.StaticVariable("mips64Cppflags", strings.Join(mips64Cppflags, " ")) pctx.StaticVariable("Mips64Cppflags", strings.Join(mips64Cppflags, " "))
pctx.StaticVariable("mips64IncludeFlags", bionicHeaders("mips64", "mips")) pctx.StaticVariable("Mips64IncludeFlags", bionicHeaders("mips64", "mips"))
// Clang cflags // Clang cflags
pctx.StaticVariable("mips64ClangCflags", strings.Join(clangFilterUnknownCflags(mips64Cflags), " ")) pctx.StaticVariable("Mips64ClangCflags", strings.Join(ClangFilterUnknownCflags(mips64Cflags), " "))
pctx.StaticVariable("mips64ClangLdflags", strings.Join(clangFilterUnknownCflags(mips64Ldflags), " ")) pctx.StaticVariable("Mips64ClangLdflags", strings.Join(ClangFilterUnknownCflags(mips64Ldflags), " "))
pctx.StaticVariable("mips64ClangCppflags", strings.Join(clangFilterUnknownCflags(mips64Cppflags), " ")) pctx.StaticVariable("Mips64ClangCppflags", strings.Join(ClangFilterUnknownCflags(mips64Cppflags), " "))
// Extended cflags // Extended cflags
// Architecture variant cflags // Architecture variant cflags
for variant, cflags := range mips64ArchVariantCflags { for variant, cflags := range mips64ArchVariantCflags {
pctx.StaticVariable("mips64"+variant+"VariantCflags", strings.Join(cflags, " ")) pctx.StaticVariable("Mips64"+variant+"VariantCflags", strings.Join(cflags, " "))
pctx.StaticVariable("mips64"+variant+"VariantClangCflags", pctx.StaticVariable("Mips64"+variant+"VariantClangCflags",
strings.Join(clangFilterUnknownCflags(cflags), " ")) strings.Join(ClangFilterUnknownCflags(cflags), " "))
} }
} }
@@ -126,7 +126,7 @@ func (t *toolchainMips64) Name() string {
} }
func (t *toolchainMips64) GccRoot() string { func (t *toolchainMips64) GccRoot() string {
return "${mips64GccRoot}" return "${config.Mips64GccRoot}"
} }
func (t *toolchainMips64) GccTriple() string { func (t *toolchainMips64) GccTriple() string {
@@ -146,15 +146,15 @@ func (t *toolchainMips64) Cflags() string {
} }
func (t *toolchainMips64) Cppflags() string { func (t *toolchainMips64) Cppflags() string {
return "${mips64Cppflags}" return "${config.Mips64Cppflags}"
} }
func (t *toolchainMips64) Ldflags() string { func (t *toolchainMips64) Ldflags() string {
return "${mips64Ldflags}" return "${config.Mips64Ldflags}"
} }
func (t *toolchainMips64) IncludeFlags() string { func (t *toolchainMips64) IncludeFlags() string {
return "${mips64IncludeFlags}" return "${config.Mips64IncludeFlags}"
} }
func (t *toolchainMips64) ClangTriple() string { func (t *toolchainMips64) ClangTriple() string {
@@ -170,11 +170,11 @@ func (t *toolchainMips64) ClangCflags() string {
} }
func (t *toolchainMips64) ClangCppflags() string { func (t *toolchainMips64) ClangCppflags() string {
return "${mips64ClangCppflags}" return "${config.Mips64ClangCppflags}"
} }
func (t *toolchainMips64) ClangLdflags() string { func (t *toolchainMips64) ClangLdflags() string {
return "${mips64ClangLdflags}" return "${config.Mips64ClangLdflags}"
} }
func (toolchainMips64) AddressSanitizerRuntimeLibrary() string { func (toolchainMips64) AddressSanitizerRuntimeLibrary() string {
@@ -183,10 +183,10 @@ func (toolchainMips64) AddressSanitizerRuntimeLibrary() string {
func mips64ToolchainFactory(arch android.Arch) Toolchain { func mips64ToolchainFactory(arch android.Arch) Toolchain {
return &toolchainMips64{ return &toolchainMips64{
cflags: "${mips64Cflags}", cflags: "${config.Mips64Cflags}",
clangCflags: "${mips64ClangCflags}", clangCflags: "${config.Mips64ClangCflags}",
toolchainCflags: "${mips64" + arch.ArchVariant + "VariantCflags}", toolchainCflags: "${config.Mips64" + arch.ArchVariant + "VariantCflags}",
toolchainClangCflags: "${mips64" + arch.ArchVariant + "VariantClangCflags}", toolchainClangCflags: "${config.Mips64" + arch.ArchVariant + "VariantClangCflags}",
} }
} }

View File

@@ -12,7 +12,7 @@
// See the License for the specific language governing permissions and // See the License for the specific language governing permissions and
// limitations under the License. // limitations under the License.
package cc package config
import ( import (
"strings" "strings"
@@ -128,27 +128,27 @@ func init() {
pctx.StaticVariable("mipsGccVersion", mipsGccVersion) pctx.StaticVariable("mipsGccVersion", mipsGccVersion)
pctx.SourcePathVariable("mipsGccRoot", pctx.SourcePathVariable("MipsGccRoot",
"prebuilts/gcc/${HostPrebuiltTag}/mips/mips64el-linux-android-${mipsGccVersion}") "prebuilts/gcc/${HostPrebuiltTag}/mips/mips64el-linux-android-${mipsGccVersion}")
pctx.StaticVariable("mipsToolchainLdflags", strings.Join(mipsToolchainLdflags, " ")) pctx.StaticVariable("MipsToolchainLdflags", strings.Join(mipsToolchainLdflags, " "))
pctx.StaticVariable("mipsCflags", strings.Join(mipsCflags, " ")) pctx.StaticVariable("MipsCflags", strings.Join(mipsCflags, " "))
pctx.StaticVariable("mipsLdflags", strings.Join(mipsLdflags, " ")) pctx.StaticVariable("MipsLdflags", strings.Join(mipsLdflags, " "))
pctx.StaticVariable("mipsCppflags", strings.Join(mipsCppflags, " ")) pctx.StaticVariable("MipsCppflags", strings.Join(mipsCppflags, " "))
pctx.StaticVariable("mipsIncludeFlags", bionicHeaders("mips", "mips")) pctx.StaticVariable("MipsIncludeFlags", bionicHeaders("mips", "mips"))
// Clang cflags // Clang cflags
pctx.StaticVariable("mipsClangCflags", strings.Join(clangFilterUnknownCflags(mipsClangCflags), " ")) pctx.StaticVariable("MipsClangCflags", strings.Join(ClangFilterUnknownCflags(mipsClangCflags), " "))
pctx.StaticVariable("mipsClangLdflags", strings.Join(clangFilterUnknownCflags(mipsLdflags), " ")) pctx.StaticVariable("MipsClangLdflags", strings.Join(ClangFilterUnknownCflags(mipsLdflags), " "))
pctx.StaticVariable("mipsClangCppflags", strings.Join(clangFilterUnknownCflags(mipsCppflags), " ")) pctx.StaticVariable("MipsClangCppflags", strings.Join(ClangFilterUnknownCflags(mipsCppflags), " "))
// Extended cflags // Extended cflags
// Architecture variant cflags // Architecture variant cflags
for variant, cflags := range mipsArchVariantCflags { for variant, cflags := range mipsArchVariantCflags {
pctx.StaticVariable("mips"+variant+"VariantCflags", strings.Join(cflags, " ")) pctx.StaticVariable("Mips"+variant+"VariantCflags", strings.Join(cflags, " "))
pctx.StaticVariable("mips"+variant+"VariantClangCflags", pctx.StaticVariable("Mips"+variant+"VariantClangCflags",
strings.Join(clangFilterUnknownCflags(cflags), " ")) strings.Join(ClangFilterUnknownCflags(cflags), " "))
} }
} }
@@ -163,7 +163,7 @@ func (t *toolchainMips) Name() string {
} }
func (t *toolchainMips) GccRoot() string { func (t *toolchainMips) GccRoot() string {
return "${mipsGccRoot}" return "${config.MipsGccRoot}"
} }
func (t *toolchainMips) GccTriple() string { func (t *toolchainMips) GccTriple() string {
@@ -175,7 +175,7 @@ func (t *toolchainMips) GccVersion() string {
} }
func (t *toolchainMips) ToolchainLdflags() string { func (t *toolchainMips) ToolchainLdflags() string {
return "${mipsToolchainLdflags}" return "${config.MipsToolchainLdflags}"
} }
func (t *toolchainMips) ToolchainCflags() string { func (t *toolchainMips) ToolchainCflags() string {
@@ -187,15 +187,15 @@ func (t *toolchainMips) Cflags() string {
} }
func (t *toolchainMips) Cppflags() string { func (t *toolchainMips) Cppflags() string {
return "${mipsCppflags}" return "${config.MipsCppflags}"
} }
func (t *toolchainMips) Ldflags() string { func (t *toolchainMips) Ldflags() string {
return "${mipsLdflags}" return "${config.MipsLdflags}"
} }
func (t *toolchainMips) IncludeFlags() string { func (t *toolchainMips) IncludeFlags() string {
return "${mipsIncludeFlags}" return "${config.MipsIncludeFlags}"
} }
func (t *toolchainMips) ClangTriple() string { func (t *toolchainMips) ClangTriple() string {
@@ -203,7 +203,7 @@ func (t *toolchainMips) ClangTriple() string {
} }
func (t *toolchainMips) ToolchainClangLdflags() string { func (t *toolchainMips) ToolchainClangLdflags() string {
return "${mipsToolchainLdflags}" return "${config.MipsToolchainLdflags}"
} }
func (t *toolchainMips) ToolchainClangCflags() string { func (t *toolchainMips) ToolchainClangCflags() string {
@@ -219,11 +219,11 @@ func (t *toolchainMips) ClangCflags() string {
} }
func (t *toolchainMips) ClangCppflags() string { func (t *toolchainMips) ClangCppflags() string {
return "${mipsClangCppflags}" return "${config.MipsClangCppflags}"
} }
func (t *toolchainMips) ClangLdflags() string { func (t *toolchainMips) ClangLdflags() string {
return "${mipsClangLdflags}" return "${config.MipsClangLdflags}"
} }
func (toolchainMips) AddressSanitizerRuntimeLibrary() string { func (toolchainMips) AddressSanitizerRuntimeLibrary() string {
@@ -232,10 +232,10 @@ func (toolchainMips) AddressSanitizerRuntimeLibrary() string {
func mipsToolchainFactory(arch android.Arch) Toolchain { func mipsToolchainFactory(arch android.Arch) Toolchain {
return &toolchainMips{ return &toolchainMips{
cflags: "${mipsCflags}", cflags: "${config.MipsCflags}",
clangCflags: "${mipsClangCflags}", clangCflags: "${config.MipsClangCflags}",
toolchainCflags: "${mips" + arch.ArchVariant + "VariantCflags}", toolchainCflags: "${config.Mips" + arch.ArchVariant + "VariantCflags}",
toolchainClangCflags: "${mips" + arch.ArchVariant + "VariantClangCflags}", toolchainClangCflags: "${config.Mips" + arch.ArchVariant + "VariantClangCflags}",
} }
} }

View File

@@ -12,7 +12,7 @@
// See the License for the specific language governing permissions and // See the License for the specific language governing permissions and
// limitations under the License. // limitations under the License.
package cc package config
import ( import (
"fmt" "fmt"
@@ -31,6 +31,15 @@ func registerToolchainFactory(os android.OsType, arch android.ArchType, factory
toolchainFactories[os][arch] = factory toolchainFactories[os][arch] = factory
} }
func FindToolchain(os android.OsType, arch android.Arch) Toolchain {
factory := toolchainFactories[os][arch.ArchType]
if factory == nil {
panic(fmt.Errorf("Toolchain not found for %s arch %q", os.String(), arch.String()))
return nil
}
return factory(arch)
}
type Toolchain interface { type Toolchain interface {
Name() string Name() string
@@ -139,3 +148,43 @@ type toolchain32Bit struct {
func (toolchain32Bit) Is64Bit() bool { func (toolchain32Bit) Is64Bit() bool {
return false return false
} }
func copyVariantFlags(m map[string][]string) map[string][]string {
ret := make(map[string][]string, len(m))
for k, v := range m {
l := make([]string, len(m[k]))
for i := range m[k] {
l[i] = v[i]
}
ret[k] = l
}
return ret
}
func variantOrDefault(variants map[string]string, choice string) string {
if ret, ok := variants[choice]; ok {
return ret
}
return variants[""]
}
func addPrefix(list []string, prefix string) []string {
for i := range list {
list[i] = prefix + list[i]
}
return list
}
func indexList(s string, list []string) int {
for i, l := range list {
if l == s {
return i
}
}
return -1
}
func inList(s string, list []string) bool {
return indexList(s, list) != -1
}

View File

@@ -12,7 +12,7 @@
// See the License for the specific language governing permissions and // See the License for the specific language governing permissions and
// limitations under the License. // limitations under the License.
package cc package config
import ( import (
"strings" "strings"
@@ -137,29 +137,29 @@ func init() {
pctx.StaticVariable("x86_64GccVersion", x86_64GccVersion) pctx.StaticVariable("x86_64GccVersion", x86_64GccVersion)
pctx.SourcePathVariable("x86_64GccRoot", pctx.SourcePathVariable("X86_64GccRoot",
"prebuilts/gcc/${HostPrebuiltTag}/x86/x86_64-linux-android-${x86_64GccVersion}") "prebuilts/gcc/${HostPrebuiltTag}/x86/x86_64-linux-android-${x86_64GccVersion}")
pctx.StaticVariable("x86_64ToolchainCflags", "-m64") pctx.StaticVariable("X86_64ToolchainCflags", "-m64")
pctx.StaticVariable("x86_64ToolchainLdflags", "-m64") pctx.StaticVariable("X86_64ToolchainLdflags", "-m64")
pctx.StaticVariable("x86_64Cflags", strings.Join(x86_64Cflags, " ")) pctx.StaticVariable("X86_64Cflags", strings.Join(x86_64Cflags, " "))
pctx.StaticVariable("x86_64Ldflags", strings.Join(x86_64Ldflags, " ")) pctx.StaticVariable("X86_64Ldflags", strings.Join(x86_64Ldflags, " "))
pctx.StaticVariable("x86_64Cppflags", strings.Join(x86_64Cppflags, " ")) pctx.StaticVariable("X86_64Cppflags", strings.Join(x86_64Cppflags, " "))
pctx.StaticVariable("x86_64IncludeFlags", bionicHeaders("x86_64", "x86")) pctx.StaticVariable("X86_64IncludeFlags", bionicHeaders("x86_64", "x86"))
// Clang cflags // Clang cflags
pctx.StaticVariable("x86_64ClangCflags", strings.Join(clangFilterUnknownCflags(x86_64Cflags), " ")) pctx.StaticVariable("X86_64ClangCflags", strings.Join(ClangFilterUnknownCflags(x86_64Cflags), " "))
pctx.StaticVariable("x86_64ClangLdflags", strings.Join(clangFilterUnknownCflags(x86_64Ldflags), " ")) pctx.StaticVariable("X86_64ClangLdflags", strings.Join(ClangFilterUnknownCflags(x86_64Ldflags), " "))
pctx.StaticVariable("x86_64ClangCppflags", strings.Join(clangFilterUnknownCflags(x86_64Cppflags), " ")) pctx.StaticVariable("X86_64ClangCppflags", strings.Join(ClangFilterUnknownCflags(x86_64Cppflags), " "))
// Extended cflags // Extended cflags
// Architecture variant cflags // Architecture variant cflags
for variant, cflags := range x86_64ArchVariantCflags { for variant, cflags := range x86_64ArchVariantCflags {
pctx.StaticVariable("x86_64"+variant+"VariantCflags", strings.Join(cflags, " ")) pctx.StaticVariable("X86_64"+variant+"VariantCflags", strings.Join(cflags, " "))
pctx.StaticVariable("x86_64"+variant+"VariantClangCflags", pctx.StaticVariable("X86_64"+variant+"VariantClangCflags",
strings.Join(clangFilterUnknownCflags(cflags), " ")) strings.Join(ClangFilterUnknownCflags(cflags), " "))
} }
} }
@@ -173,7 +173,7 @@ func (t *toolchainX86_64) Name() string {
} }
func (t *toolchainX86_64) GccRoot() string { func (t *toolchainX86_64) GccRoot() string {
return "${x86_64GccRoot}" return "${config.X86_64GccRoot}"
} }
func (t *toolchainX86_64) GccTriple() string { func (t *toolchainX86_64) GccTriple() string {
@@ -185,7 +185,7 @@ func (t *toolchainX86_64) GccVersion() string {
} }
func (t *toolchainX86_64) ToolchainLdflags() string { func (t *toolchainX86_64) ToolchainLdflags() string {
return "${x86_64ToolchainLdflags}" return "${config.X86_64ToolchainLdflags}"
} }
func (t *toolchainX86_64) ToolchainCflags() string { func (t *toolchainX86_64) ToolchainCflags() string {
@@ -193,19 +193,19 @@ func (t *toolchainX86_64) ToolchainCflags() string {
} }
func (t *toolchainX86_64) Cflags() string { func (t *toolchainX86_64) Cflags() string {
return "${x86_64Cflags}" return "${config.X86_64Cflags}"
} }
func (t *toolchainX86_64) Cppflags() string { func (t *toolchainX86_64) Cppflags() string {
return "${x86_64Cppflags}" return "${config.X86_64Cppflags}"
} }
func (t *toolchainX86_64) Ldflags() string { func (t *toolchainX86_64) Ldflags() string {
return "${x86_64Ldflags}" return "${config.X86_64Ldflags}"
} }
func (t *toolchainX86_64) IncludeFlags() string { func (t *toolchainX86_64) IncludeFlags() string {
return "${x86_64IncludeFlags}" return "${config.X86_64IncludeFlags}"
} }
func (t *toolchainX86_64) ClangTriple() string { func (t *toolchainX86_64) ClangTriple() string {
@@ -213,7 +213,7 @@ func (t *toolchainX86_64) ClangTriple() string {
} }
func (t *toolchainX86_64) ToolchainClangLdflags() string { func (t *toolchainX86_64) ToolchainClangLdflags() string {
return "${x86_64ToolchainLdflags}" return "${config.X86_64ToolchainLdflags}"
} }
func (t *toolchainX86_64) ToolchainClangCflags() string { func (t *toolchainX86_64) ToolchainClangCflags() string {
@@ -221,26 +221,26 @@ func (t *toolchainX86_64) ToolchainClangCflags() string {
} }
func (t *toolchainX86_64) ClangCflags() string { func (t *toolchainX86_64) ClangCflags() string {
return "${x86_64ClangCflags}" return "${config.X86_64ClangCflags}"
} }
func (t *toolchainX86_64) ClangCppflags() string { func (t *toolchainX86_64) ClangCppflags() string {
return "${x86_64ClangCppflags}" return "${config.X86_64ClangCppflags}"
} }
func (t *toolchainX86_64) ClangLdflags() string { func (t *toolchainX86_64) ClangLdflags() string {
return "${x86_64Ldflags}" return "${config.X86_64Ldflags}"
} }
func x86_64ToolchainFactory(arch android.Arch) Toolchain { func x86_64ToolchainFactory(arch android.Arch) Toolchain {
toolchainCflags := []string{ toolchainCflags := []string{
"${x86_64ToolchainCflags}", "${config.X86_64ToolchainCflags}",
"${x86_64" + arch.ArchVariant + "VariantCflags}", "${config.X86_64" + arch.ArchVariant + "VariantCflags}",
} }
toolchainClangCflags := []string{ toolchainClangCflags := []string{
"${x86_64ToolchainCflags}", "${config.X86_64ToolchainCflags}",
"${x86_64" + arch.ArchVariant + "VariantClangCflags}", "${config.X86_64" + arch.ArchVariant + "VariantClangCflags}",
} }
for _, feature := range arch.ArchFeatures { for _, feature := range arch.ArchFeatures {

View File

@@ -1,4 +1,18 @@
package cc // Copyright 2016 Google Inc. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package config
import ( import (
"fmt" "fmt"
@@ -55,20 +69,20 @@ var (
"-m64", "-m64",
} }
darwinClangCflags = append(clangFilterUnknownCflags(darwinCflags), []string{ darwinClangCflags = append(ClangFilterUnknownCflags(darwinCflags), []string{
"-integrated-as", "-integrated-as",
"-fstack-protector-strong", "-fstack-protector-strong",
}...) }...)
darwinX86ClangCflags = append(clangFilterUnknownCflags(darwinX86Cflags), []string{ darwinX86ClangCflags = append(ClangFilterUnknownCflags(darwinX86Cflags), []string{
"-msse3", "-msse3",
}...) }...)
darwinClangLdflags = clangFilterUnknownCflags(darwinLdflags) darwinClangLdflags = ClangFilterUnknownCflags(darwinLdflags)
darwinX86ClangLdflags = clangFilterUnknownCflags(darwinX86Ldflags) darwinX86ClangLdflags = ClangFilterUnknownCflags(darwinX86Ldflags)
darwinX8664ClangLdflags = clangFilterUnknownCflags(darwinX8664Ldflags) darwinX8664ClangLdflags = ClangFilterUnknownCflags(darwinX8664Ldflags)
darwinSupportedSdkVersions = []string{ darwinSupportedSdkVersions = []string{
"10.8", "10.8",
@@ -96,44 +110,43 @@ func init() {
bytes, err := exec.Command("xcode-select", "--print-path").Output() bytes, err := exec.Command("xcode-select", "--print-path").Output()
return strings.TrimSpace(string(bytes)), err return strings.TrimSpace(string(bytes)), err
}) })
pctx.StaticVariable("macToolchainRoot", "${macSdkPath}/Toolchains/XcodeDefault.xctoolchain")
pctx.VariableFunc("macSdkRoot", func(config interface{}) (string, error) { pctx.VariableFunc("macSdkRoot", func(config interface{}) (string, error) {
return xcrunSdk(config.(android.Config), "--show-sdk-path") return xcrunSdk(config.(android.Config), "--show-sdk-path")
}) })
pctx.StaticVariable("macSdkVersion", darwinSupportedSdkVersions[0]) pctx.StaticVariable("macSdkVersion", darwinSupportedSdkVersions[0])
pctx.VariableFunc("macArPath", func(config interface{}) (string, error) { pctx.VariableFunc("MacArPath", func(config interface{}) (string, error) {
bytes, err := exec.Command("xcrun", "--find", "ar").Output() bytes, err := exec.Command("xcrun", "--find", "ar").Output()
return strings.TrimSpace(string(bytes)), err return strings.TrimSpace(string(bytes)), err
}) })
pctx.VariableFunc("macStripPath", func(config interface{}) (string, error) { pctx.VariableFunc("MacStripPath", func(config interface{}) (string, error) {
bytes, err := exec.Command("xcrun", "--find", "strip").Output() bytes, err := exec.Command("xcrun", "--find", "strip").Output()
return strings.TrimSpace(string(bytes)), err return 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}")
pctx.StaticVariable("darwinGccTriple", "i686-apple-darwin11") pctx.StaticVariable("DarwinGccTriple", "i686-apple-darwin11")
pctx.StaticVariable("darwinCflags", strings.Join(darwinCflags, " ")) pctx.StaticVariable("DarwinCflags", strings.Join(darwinCflags, " "))
pctx.StaticVariable("darwinLdflags", strings.Join(darwinLdflags, " ")) pctx.StaticVariable("DarwinLdflags", strings.Join(darwinLdflags, " "))
pctx.StaticVariable("darwinClangCflags", strings.Join(darwinClangCflags, " ")) pctx.StaticVariable("DarwinClangCflags", strings.Join(darwinClangCflags, " "))
pctx.StaticVariable("darwinClangLdflags", strings.Join(darwinClangLdflags, " ")) pctx.StaticVariable("DarwinClangLdflags", strings.Join(darwinClangLdflags, " "))
// Extended cflags // Extended cflags
pctx.StaticVariable("darwinX86Cflags", strings.Join(darwinX86Cflags, " ")) pctx.StaticVariable("DarwinX86Cflags", strings.Join(darwinX86Cflags, " "))
pctx.StaticVariable("darwinX8664Cflags", strings.Join(darwinX8664Cflags, " ")) pctx.StaticVariable("DarwinX8664Cflags", strings.Join(darwinX8664Cflags, " "))
pctx.StaticVariable("darwinX86Ldflags", strings.Join(darwinX86Ldflags, " ")) pctx.StaticVariable("DarwinX86Ldflags", strings.Join(darwinX86Ldflags, " "))
pctx.StaticVariable("darwinX8664Ldflags", strings.Join(darwinX8664Ldflags, " ")) pctx.StaticVariable("DarwinX8664Ldflags", strings.Join(darwinX8664Ldflags, " "))
pctx.StaticVariable("darwinX86ClangCflags", strings.Join(darwinX86ClangCflags, " ")) pctx.StaticVariable("DarwinX86ClangCflags", strings.Join(darwinX86ClangCflags, " "))
pctx.StaticVariable("darwinX8664ClangCflags", pctx.StaticVariable("DarwinX8664ClangCflags",
strings.Join(clangFilterUnknownCflags(darwinX8664Cflags), " ")) strings.Join(ClangFilterUnknownCflags(darwinX8664Cflags), " "))
pctx.StaticVariable("darwinX86ClangLdflags", strings.Join(darwinX86ClangLdflags, " ")) pctx.StaticVariable("DarwinX86ClangLdflags", strings.Join(darwinX86ClangLdflags, " "))
pctx.StaticVariable("darwinX8664ClangLdflags", strings.Join(darwinX8664ClangLdflags, " ")) pctx.StaticVariable("DarwinX8664ClangLdflags", strings.Join(darwinX8664ClangLdflags, " "))
} }
func xcrunSdk(config android.Config, arg string) (string, error) { func xcrunSdk(config android.Config, arg string) (string, error) {
@@ -181,11 +194,11 @@ func (t *toolchainDarwinX8664) Name() string {
} }
func (t *toolchainDarwin) GccRoot() string { func (t *toolchainDarwin) GccRoot() string {
return "${darwinGccRoot}" return "${config.DarwinGccRoot}"
} }
func (t *toolchainDarwin) GccTriple() string { func (t *toolchainDarwin) GccTriple() string {
return "${darwinGccTriple}" return "${config.DarwinGccTriple}"
} }
func (t *toolchainDarwin) GccVersion() string { func (t *toolchainDarwin) GccVersion() string {
@@ -193,11 +206,11 @@ func (t *toolchainDarwin) GccVersion() string {
} }
func (t *toolchainDarwin) Cflags() string { func (t *toolchainDarwin) Cflags() string {
return "${darwinCflags} ${darwinX86Cflags}" return "${config.DarwinCflags} ${config.DarwinX86Cflags}"
} }
func (t *toolchainDarwinX8664) Cflags() string { func (t *toolchainDarwinX8664) Cflags() string {
return "${darwinCflags} ${darwinX8664Cflags}" return "${config.DarwinCflags} ${config.DarwinX8664Cflags}"
} }
func (t *toolchainDarwin) Cppflags() string { func (t *toolchainDarwin) Cppflags() string {
@@ -205,11 +218,11 @@ func (t *toolchainDarwin) Cppflags() string {
} }
func (t *toolchainDarwinX86) Ldflags() string { func (t *toolchainDarwinX86) Ldflags() string {
return "${darwinLdflags} ${darwinX86Ldflags}" return "${config.DarwinLdflags} ${config.DarwinX86Ldflags}"
} }
func (t *toolchainDarwinX8664) Ldflags() string { func (t *toolchainDarwinX8664) Ldflags() string {
return "${darwinLdflags} ${darwinX8664Ldflags}" return "${config.DarwinLdflags} ${config.DarwinX8664Ldflags}"
} }
func (t *toolchainDarwin) IncludeFlags() string { func (t *toolchainDarwin) IncludeFlags() string {
@@ -221,7 +234,7 @@ func (t *toolchainDarwinX86) ClangTriple() string {
} }
func (t *toolchainDarwinX86) ClangCflags() string { func (t *toolchainDarwinX86) ClangCflags() string {
return "${darwinClangCflags} ${darwinX86ClangCflags}" return "${config.DarwinClangCflags} ${config.DarwinX86ClangCflags}"
} }
func (t *toolchainDarwinX8664) ClangTriple() string { func (t *toolchainDarwinX8664) ClangTriple() string {
@@ -229,7 +242,7 @@ func (t *toolchainDarwinX8664) ClangTriple() string {
} }
func (t *toolchainDarwinX8664) ClangCflags() string { func (t *toolchainDarwinX8664) ClangCflags() string {
return "${darwinClangCflags} ${darwinX8664ClangCflags}" return "${config.DarwinClangCflags} ${config.DarwinX8664ClangCflags}"
} }
func (t *toolchainDarwin) ClangCppflags() string { func (t *toolchainDarwin) ClangCppflags() string {
@@ -237,11 +250,11 @@ func (t *toolchainDarwin) ClangCppflags() string {
} }
func (t *toolchainDarwinX86) ClangLdflags() string { func (t *toolchainDarwinX86) ClangLdflags() string {
return "${darwinClangLdflags} ${darwinX86ClangLdflags}" return "${config.DarwinClangLdflags} ${config.DarwinX86ClangLdflags}"
} }
func (t *toolchainDarwinX8664) ClangLdflags() string { func (t *toolchainDarwinX8664) ClangLdflags() string {
return "${darwinClangLdflags} ${darwinX8664ClangLdflags}" return "${config.DarwinClangLdflags} ${config.DarwinX8664ClangLdflags}"
} }
func (t *toolchainDarwin) ShlibSuffix() string { func (t *toolchainDarwin) ShlibSuffix() string {

View File

@@ -12,7 +12,7 @@
// See the License for the specific language governing permissions and // See the License for the specific language governing permissions and
// limitations under the License. // limitations under the License.
package cc package config
import ( import (
"strings" "strings"
@@ -156,29 +156,29 @@ func init() {
pctx.StaticVariable("x86GccVersion", x86GccVersion) pctx.StaticVariable("x86GccVersion", x86GccVersion)
pctx.SourcePathVariable("x86GccRoot", pctx.SourcePathVariable("X86GccRoot",
"prebuilts/gcc/${HostPrebuiltTag}/x86/x86_64-linux-android-${x86GccVersion}") "prebuilts/gcc/${HostPrebuiltTag}/x86/x86_64-linux-android-${x86GccVersion}")
pctx.StaticVariable("x86ToolchainCflags", "-m32") pctx.StaticVariable("X86ToolchainCflags", "-m32")
pctx.StaticVariable("x86ToolchainLdflags", "-m32") pctx.StaticVariable("X86ToolchainLdflags", "-m32")
pctx.StaticVariable("x86Cflags", strings.Join(x86Cflags, " ")) pctx.StaticVariable("X86Cflags", strings.Join(x86Cflags, " "))
pctx.StaticVariable("x86Ldflags", strings.Join(x86Ldflags, " ")) pctx.StaticVariable("X86Ldflags", strings.Join(x86Ldflags, " "))
pctx.StaticVariable("x86Cppflags", strings.Join(x86Cppflags, " ")) pctx.StaticVariable("X86Cppflags", strings.Join(x86Cppflags, " "))
pctx.StaticVariable("x86IncludeFlags", bionicHeaders("x86", "x86")) pctx.StaticVariable("X86IncludeFlags", bionicHeaders("x86", "x86"))
// Clang cflags // Clang cflags
pctx.StaticVariable("x86ClangCflags", strings.Join(clangFilterUnknownCflags(x86ClangCflags), " ")) pctx.StaticVariable("X86ClangCflags", strings.Join(ClangFilterUnknownCflags(x86ClangCflags), " "))
pctx.StaticVariable("x86ClangLdflags", strings.Join(clangFilterUnknownCflags(x86Ldflags), " ")) pctx.StaticVariable("X86ClangLdflags", strings.Join(ClangFilterUnknownCflags(x86Ldflags), " "))
pctx.StaticVariable("x86ClangCppflags", strings.Join(clangFilterUnknownCflags(x86Cppflags), " ")) pctx.StaticVariable("X86ClangCppflags", strings.Join(ClangFilterUnknownCflags(x86Cppflags), " "))
// Extended cflags // Extended cflags
// Architecture variant cflags // Architecture variant cflags
for variant, cflags := range x86ArchVariantCflags { for variant, cflags := range x86ArchVariantCflags {
pctx.StaticVariable("x86"+variant+"VariantCflags", strings.Join(cflags, " ")) pctx.StaticVariable("X86"+variant+"VariantCflags", strings.Join(cflags, " "))
pctx.StaticVariable("x86"+variant+"VariantClangCflags", pctx.StaticVariable("X86"+variant+"VariantClangCflags",
strings.Join(clangFilterUnknownCflags(cflags), " ")) strings.Join(ClangFilterUnknownCflags(cflags), " "))
} }
} }
@@ -192,7 +192,7 @@ func (t *toolchainX86) Name() string {
} }
func (t *toolchainX86) GccRoot() string { func (t *toolchainX86) GccRoot() string {
return "${x86GccRoot}" return "${config.X86GccRoot}"
} }
func (t *toolchainX86) GccTriple() string { func (t *toolchainX86) GccTriple() string {
@@ -204,7 +204,7 @@ func (t *toolchainX86) GccVersion() string {
} }
func (t *toolchainX86) ToolchainLdflags() string { func (t *toolchainX86) ToolchainLdflags() string {
return "${x86ToolchainLdflags}" return "${config.X86ToolchainLdflags}"
} }
func (t *toolchainX86) ToolchainCflags() string { func (t *toolchainX86) ToolchainCflags() string {
@@ -212,19 +212,19 @@ func (t *toolchainX86) ToolchainCflags() string {
} }
func (t *toolchainX86) Cflags() string { func (t *toolchainX86) Cflags() string {
return "${x86Cflags}" return "${config.X86Cflags}"
} }
func (t *toolchainX86) Cppflags() string { func (t *toolchainX86) Cppflags() string {
return "${x86Cppflags}" return "${config.X86Cppflags}"
} }
func (t *toolchainX86) Ldflags() string { func (t *toolchainX86) Ldflags() string {
return "${x86Ldflags}" return "${config.X86Ldflags}"
} }
func (t *toolchainX86) IncludeFlags() string { func (t *toolchainX86) IncludeFlags() string {
return "${x86IncludeFlags}" return "${config.X86IncludeFlags}"
} }
func (t *toolchainX86) ClangTriple() string { func (t *toolchainX86) ClangTriple() string {
@@ -232,7 +232,7 @@ func (t *toolchainX86) ClangTriple() string {
} }
func (t *toolchainX86) ToolchainClangLdflags() string { func (t *toolchainX86) ToolchainClangLdflags() string {
return "${x86ToolchainLdflags}" return "${config.X86ToolchainLdflags}"
} }
func (t *toolchainX86) ToolchainClangCflags() string { func (t *toolchainX86) ToolchainClangCflags() string {
@@ -240,15 +240,15 @@ func (t *toolchainX86) ToolchainClangCflags() string {
} }
func (t *toolchainX86) ClangCflags() string { func (t *toolchainX86) ClangCflags() string {
return "${x86ClangCflags}" return "${config.X86ClangCflags}"
} }
func (t *toolchainX86) ClangCppflags() string { func (t *toolchainX86) ClangCppflags() string {
return "${x86ClangCppflags}" return "${config.X86ClangCppflags}"
} }
func (t *toolchainX86) ClangLdflags() string { func (t *toolchainX86) ClangLdflags() string {
return "${x86Ldflags}" return "${config.X86Ldflags}"
} }
func (toolchainX86) AddressSanitizerRuntimeLibrary() string { func (toolchainX86) AddressSanitizerRuntimeLibrary() string {
@@ -257,13 +257,13 @@ func (toolchainX86) AddressSanitizerRuntimeLibrary() string {
func x86ToolchainFactory(arch android.Arch) Toolchain { func x86ToolchainFactory(arch android.Arch) Toolchain {
toolchainCflags := []string{ toolchainCflags := []string{
"${x86ToolchainCflags}", "${config.X86ToolchainCflags}",
"${x86" + arch.ArchVariant + "VariantCflags}", "${config.X86" + arch.ArchVariant + "VariantCflags}",
} }
toolchainClangCflags := []string{ toolchainClangCflags := []string{
"${x86ToolchainCflags}", "${config.X86ToolchainCflags}",
"${x86" + arch.ArchVariant + "VariantClangCflags}", "${config.X86" + arch.ArchVariant + "VariantClangCflags}",
} }
for _, feature := range arch.ArchFeatures { for _, feature := range arch.ArchFeatures {

View File

@@ -1,4 +1,18 @@
package cc // Copyright 2016 Google Inc. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package config
import ( import (
"strings" "strings"
@@ -62,40 +76,40 @@ var (
"-m64", "-m64",
} }
linuxClangCflags = append(clangFilterUnknownCflags(linuxCflags), []string{ linuxClangCflags = append(ClangFilterUnknownCflags(linuxCflags), []string{
"--gcc-toolchain=${linuxGccRoot}", "--gcc-toolchain=${LinuxGccRoot}",
"--sysroot ${linuxGccRoot}/sysroot", "--sysroot ${LinuxGccRoot}/sysroot",
"-fstack-protector-strong", "-fstack-protector-strong",
}...) }...)
linuxClangLdflags = append(clangFilterUnknownCflags(linuxLdflags), []string{ linuxClangLdflags = append(ClangFilterUnknownCflags(linuxLdflags), []string{
"--gcc-toolchain=${linuxGccRoot}", "--gcc-toolchain=${LinuxGccRoot}",
"--sysroot ${linuxGccRoot}/sysroot", "--sysroot ${LinuxGccRoot}/sysroot",
}...) }...)
linuxX86ClangLdflags = append(clangFilterUnknownCflags(linuxX86Ldflags), []string{ linuxX86ClangLdflags = append(ClangFilterUnknownCflags(linuxX86Ldflags), []string{
"-B${linuxGccRoot}/lib/gcc/${linuxGccTriple}/${linuxGccVersion}/32", "-B${LinuxGccRoot}/lib/gcc/${LinuxGccTriple}/${LinuxGccVersion}/32",
"-L${linuxGccRoot}/lib/gcc/${linuxGccTriple}/${linuxGccVersion}/32", "-L${LinuxGccRoot}/lib/gcc/${LinuxGccTriple}/${LinuxGccVersion}/32",
"-L${linuxGccRoot}/${linuxGccTriple}/lib32", "-L${LinuxGccRoot}/${LinuxGccTriple}/lib32",
}...) }...)
linuxX8664ClangLdflags = append(clangFilterUnknownCflags(linuxX8664Ldflags), []string{ linuxX8664ClangLdflags = append(ClangFilterUnknownCflags(linuxX8664Ldflags), []string{
"-B${linuxGccRoot}/lib/gcc/${linuxGccTriple}/${linuxGccVersion}", "-B${LinuxGccRoot}/lib/gcc/${LinuxGccTriple}/${LinuxGccVersion}",
"-L${linuxGccRoot}/lib/gcc/${linuxGccTriple}/${linuxGccVersion}", "-L${LinuxGccRoot}/lib/gcc/${LinuxGccTriple}/${LinuxGccVersion}",
"-L${linuxGccRoot}/${linuxGccTriple}/lib64", "-L${LinuxGccRoot}/${LinuxGccTriple}/lib64",
}...) }...)
linuxClangCppflags = []string{ linuxClangCppflags = []string{
"-isystem ${linuxGccRoot}/${linuxGccTriple}/include/c++/${linuxGccVersion}", "-isystem ${LinuxGccRoot}/${LinuxGccTriple}/include/c++/${LinuxGccVersion}",
"-isystem ${linuxGccRoot}/${linuxGccTriple}/include/c++/${linuxGccVersion}/backward", "-isystem ${LinuxGccRoot}/${LinuxGccTriple}/include/c++/${LinuxGccVersion}/backward",
} }
linuxX86ClangCppflags = []string{ linuxX86ClangCppflags = []string{
"-isystem ${linuxGccRoot}/${linuxGccTriple}/include/c++/${linuxGccVersion}/${linuxGccTriple}/32", "-isystem ${LinuxGccRoot}/${LinuxGccTriple}/include/c++/${LinuxGccVersion}/${LinuxGccTriple}/32",
} }
linuxX8664ClangCppflags = []string{ linuxX8664ClangCppflags = []string{
"-isystem ${linuxGccRoot}/${linuxGccTriple}/include/c++/${linuxGccVersion}/${linuxGccTriple}", "-isystem ${LinuxGccRoot}/${LinuxGccTriple}/include/c++/${LinuxGccVersion}/${LinuxGccTriple}",
} }
linuxAvailableLibraries = addPrefix([]string{ linuxAvailableLibraries = addPrefix([]string{
@@ -118,34 +132,34 @@ const (
) )
func init() { func init() {
pctx.StaticVariable("linuxGccVersion", linuxGccVersion) pctx.StaticVariable("LinuxGccVersion", linuxGccVersion)
pctx.SourcePathVariable("linuxGccRoot", pctx.SourcePathVariable("LinuxGccRoot",
"prebuilts/gcc/${HostPrebuiltTag}/host/x86_64-linux-glibc2.15-${linuxGccVersion}") "prebuilts/gcc/${HostPrebuiltTag}/host/x86_64-linux-glibc2.15-${LinuxGccVersion}")
pctx.StaticVariable("linuxGccTriple", "x86_64-linux") pctx.StaticVariable("LinuxGccTriple", "x86_64-linux")
pctx.StaticVariable("linuxCflags", strings.Join(linuxCflags, " ")) pctx.StaticVariable("LinuxCflags", strings.Join(linuxCflags, " "))
pctx.StaticVariable("linuxLdflags", strings.Join(linuxLdflags, " ")) pctx.StaticVariable("LinuxLdflags", strings.Join(linuxLdflags, " "))
pctx.StaticVariable("linuxClangCflags", strings.Join(linuxClangCflags, " ")) pctx.StaticVariable("LinuxClangCflags", strings.Join(linuxClangCflags, " "))
pctx.StaticVariable("linuxClangLdflags", strings.Join(linuxClangLdflags, " ")) pctx.StaticVariable("LinuxClangLdflags", strings.Join(linuxClangLdflags, " "))
pctx.StaticVariable("linuxClangCppflags", strings.Join(linuxClangCppflags, " ")) pctx.StaticVariable("LinuxClangCppflags", strings.Join(linuxClangCppflags, " "))
// Extended cflags // Extended cflags
pctx.StaticVariable("linuxX86Cflags", strings.Join(linuxX86Cflags, " ")) pctx.StaticVariable("LinuxX86Cflags", strings.Join(linuxX86Cflags, " "))
pctx.StaticVariable("linuxX8664Cflags", strings.Join(linuxX8664Cflags, " ")) pctx.StaticVariable("LinuxX8664Cflags", strings.Join(linuxX8664Cflags, " "))
pctx.StaticVariable("linuxX86Ldflags", strings.Join(linuxX86Ldflags, " ")) pctx.StaticVariable("LinuxX86Ldflags", strings.Join(linuxX86Ldflags, " "))
pctx.StaticVariable("linuxX8664Ldflags", strings.Join(linuxX8664Ldflags, " ")) pctx.StaticVariable("LinuxX8664Ldflags", strings.Join(linuxX8664Ldflags, " "))
pctx.StaticVariable("linuxX86ClangCflags", pctx.StaticVariable("LinuxX86ClangCflags",
strings.Join(clangFilterUnknownCflags(linuxX86Cflags), " ")) strings.Join(ClangFilterUnknownCflags(linuxX86Cflags), " "))
pctx.StaticVariable("linuxX8664ClangCflags", pctx.StaticVariable("LinuxX8664ClangCflags",
strings.Join(clangFilterUnknownCflags(linuxX8664Cflags), " ")) strings.Join(ClangFilterUnknownCflags(linuxX8664Cflags), " "))
pctx.StaticVariable("linuxX86ClangLdflags", strings.Join(linuxX86ClangLdflags, " ")) pctx.StaticVariable("LinuxX86ClangLdflags", strings.Join(linuxX86ClangLdflags, " "))
pctx.StaticVariable("linuxX8664ClangLdflags", strings.Join(linuxX8664ClangLdflags, " ")) pctx.StaticVariable("LinuxX8664ClangLdflags", strings.Join(linuxX8664ClangLdflags, " "))
pctx.StaticVariable("linuxX86ClangCppflags", strings.Join(linuxX86ClangCppflags, " ")) pctx.StaticVariable("LinuxX86ClangCppflags", strings.Join(linuxX86ClangCppflags, " "))
pctx.StaticVariable("linuxX8664ClangCppflags", strings.Join(linuxX8664ClangCppflags, " ")) pctx.StaticVariable("LinuxX8664ClangCppflags", strings.Join(linuxX8664ClangCppflags, " "))
} }
type toolchainLinux struct { type toolchainLinux struct {
@@ -171,11 +185,11 @@ func (t *toolchainLinuxX8664) Name() string {
} }
func (t *toolchainLinux) GccRoot() string { func (t *toolchainLinux) GccRoot() string {
return "${linuxGccRoot}" return "${config.LinuxGccRoot}"
} }
func (t *toolchainLinux) GccTriple() string { func (t *toolchainLinux) GccTriple() string {
return "${linuxGccTriple}" return "${config.LinuxGccTriple}"
} }
func (t *toolchainLinux) GccVersion() string { func (t *toolchainLinux) GccVersion() string {
@@ -183,11 +197,11 @@ func (t *toolchainLinux) GccVersion() string {
} }
func (t *toolchainLinuxX86) Cflags() string { func (t *toolchainLinuxX86) Cflags() string {
return "${linuxCflags} ${linuxX86Cflags}" return "${config.LinuxCflags} ${config.LinuxX86Cflags}"
} }
func (t *toolchainLinuxX8664) Cflags() string { func (t *toolchainLinuxX8664) Cflags() string {
return "${linuxCflags} ${linuxX8664Cflags}" return "${config.LinuxCflags} ${config.LinuxX8664Cflags}"
} }
func (t *toolchainLinux) Cppflags() string { func (t *toolchainLinux) Cppflags() string {
@@ -195,11 +209,11 @@ func (t *toolchainLinux) Cppflags() string {
} }
func (t *toolchainLinuxX86) Ldflags() string { func (t *toolchainLinuxX86) Ldflags() string {
return "${linuxLdflags} ${linuxX86Ldflags}" return "${config.LinuxLdflags} ${config.LinuxX86Ldflags}"
} }
func (t *toolchainLinuxX8664) Ldflags() string { func (t *toolchainLinuxX8664) Ldflags() string {
return "${linuxLdflags} ${linuxX8664Ldflags}" return "${config.LinuxLdflags} ${config.LinuxX8664Ldflags}"
} }
func (t *toolchainLinux) IncludeFlags() string { func (t *toolchainLinux) IncludeFlags() string {
@@ -211,11 +225,11 @@ func (t *toolchainLinuxX86) ClangTriple() string {
} }
func (t *toolchainLinuxX86) ClangCflags() string { func (t *toolchainLinuxX86) ClangCflags() string {
return "${linuxClangCflags} ${linuxX86ClangCflags}" return "${config.LinuxClangCflags} ${config.LinuxX86ClangCflags}"
} }
func (t *toolchainLinuxX86) ClangCppflags() string { func (t *toolchainLinuxX86) ClangCppflags() string {
return "${linuxClangCppflags} ${linuxX86ClangCppflags}" return "${config.LinuxClangCppflags} ${config.LinuxX86ClangCppflags}"
} }
func (t *toolchainLinuxX8664) ClangTriple() string { func (t *toolchainLinuxX8664) ClangTriple() string {
@@ -223,19 +237,19 @@ func (t *toolchainLinuxX8664) ClangTriple() string {
} }
func (t *toolchainLinuxX8664) ClangCflags() string { func (t *toolchainLinuxX8664) ClangCflags() string {
return "${linuxClangCflags} ${linuxX8664ClangCflags}" return "${config.LinuxClangCflags} ${config.LinuxX8664ClangCflags}"
} }
func (t *toolchainLinuxX8664) ClangCppflags() string { func (t *toolchainLinuxX8664) ClangCppflags() string {
return "${linuxClangCppflags} ${linuxX8664ClangCppflags}" return "${config.LinuxClangCppflags} ${config.LinuxX8664ClangCppflags}"
} }
func (t *toolchainLinuxX86) ClangLdflags() string { func (t *toolchainLinuxX86) ClangLdflags() string {
return "${linuxClangLdflags} ${linuxX86ClangLdflags}" return "${config.LinuxClangLdflags} ${config.LinuxX86ClangLdflags}"
} }
func (t *toolchainLinuxX8664) ClangLdflags() string { func (t *toolchainLinuxX8664) ClangLdflags() string {
return "${linuxClangLdflags} ${linuxX8664ClangLdflags}" return "${config.LinuxClangLdflags} ${config.LinuxX8664ClangLdflags}"
} }
func (t *toolchainLinux) AvailableLibraries() []string { func (t *toolchainLinux) AvailableLibraries() []string {

View File

@@ -12,7 +12,7 @@
// See the License for the specific language governing permissions and // See the License for the specific language governing permissions and
// limitations under the License. // limitations under the License.
package cc package config
import ( import (
"strings" "strings"
@@ -42,7 +42,7 @@ var (
// Get 64-bit off_t and related functions. // Get 64-bit off_t and related functions.
"-D_FILE_OFFSET_BITS=64", "-D_FILE_OFFSET_BITS=64",
"--sysroot ${windowsGccRoot}/${windowsGccTriple}", "--sysroot ${WindowsGccRoot}/${WindowsGccTriple}",
// HOST_RELEASE_CFLAGS // HOST_RELEASE_CFLAGS
"-O2", // from build/core/combo/select.mk "-O2", // from build/core/combo/select.mk
@@ -51,8 +51,8 @@ var (
} }
windowsIncludeFlags = []string{ windowsIncludeFlags = []string{
"-isystem ${windowsGccRoot}/${windowsGccTriple}/include", "-isystem ${WindowsGccRoot}/${WindowsGccTriple}/include",
"-isystem ${windowsGccRoot}/lib/gcc/${windowsGccTriple}/4.8.3/include", "-isystem ${WindowsGccRoot}/lib/gcc/${WindowsGccTriple}/4.8.3/include",
} }
windowsLdflags = []string{ windowsLdflags = []string{
@@ -69,12 +69,12 @@ var (
windowsX86Ldflags = []string{ windowsX86Ldflags = []string{
"-m32", "-m32",
"-L${windowsGccRoot}/${windowsGccTriple}/lib32", "-L${WindowsGccRoot}/${WindowsGccTriple}/lib32",
} }
windowsX8664Ldflags = []string{ windowsX8664Ldflags = []string{
"-m64", "-m64",
"-L${windowsGccRoot}/${windowsGccTriple}/lib64", "-L${WindowsGccRoot}/${WindowsGccTriple}/lib64",
} }
windowsAvailableLibraries = addPrefix([]string{ windowsAvailableLibraries = addPrefix([]string{
@@ -93,22 +93,22 @@ const (
) )
func init() { func init() {
pctx.StaticVariable("windowsGccVersion", windowsGccVersion) pctx.StaticVariable("WindowsGccVersion", windowsGccVersion)
pctx.SourcePathVariable("windowsGccRoot", pctx.SourcePathVariable("WindowsGccRoot",
"prebuilts/gcc/${HostPrebuiltTag}/host/x86_64-w64-mingw32-${windowsGccVersion}") "prebuilts/gcc/${HostPrebuiltTag}/host/x86_64-w64-mingw32-${WindowsGccVersion}")
pctx.StaticVariable("windowsGccTriple", "x86_64-w64-mingw32") pctx.StaticVariable("WindowsGccTriple", "x86_64-w64-mingw32")
pctx.StaticVariable("windowsCflags", strings.Join(windowsCflags, " ")) pctx.StaticVariable("WindowsCflags", strings.Join(windowsCflags, " "))
pctx.StaticVariable("windowsLdflags", strings.Join(windowsLdflags, " ")) pctx.StaticVariable("WindowsLdflags", strings.Join(windowsLdflags, " "))
pctx.StaticVariable("windowsX86Cflags", strings.Join(windowsX86Cflags, " ")) pctx.StaticVariable("WindowsX86Cflags", strings.Join(windowsX86Cflags, " "))
pctx.StaticVariable("windowsX8664Cflags", strings.Join(windowsX8664Cflags, " ")) pctx.StaticVariable("WindowsX8664Cflags", strings.Join(windowsX8664Cflags, " "))
pctx.StaticVariable("windowsX86Ldflags", strings.Join(windowsX86Ldflags, " ")) pctx.StaticVariable("WindowsX86Ldflags", strings.Join(windowsX86Ldflags, " "))
pctx.StaticVariable("windowsX8664Ldflags", strings.Join(windowsX8664Ldflags, " ")) pctx.StaticVariable("WindowsX8664Ldflags", strings.Join(windowsX8664Ldflags, " "))
pctx.StaticVariable("windowsIncludeFlags", strings.Join(windowsIncludeFlags, " ")) pctx.StaticVariable("WindowsIncludeFlags", strings.Join(windowsIncludeFlags, " "))
} }
type toolchainWindows struct { type toolchainWindows struct {
@@ -134,11 +134,11 @@ func (t *toolchainWindowsX8664) Name() string {
} }
func (t *toolchainWindows) GccRoot() string { func (t *toolchainWindows) GccRoot() string {
return "${windowsGccRoot}" return "${config.WindowsGccRoot}"
} }
func (t *toolchainWindows) GccTriple() string { func (t *toolchainWindows) GccTriple() string {
return "${windowsGccTriple}" return "${config.WindowsGccTriple}"
} }
func (t *toolchainWindows) GccVersion() string { func (t *toolchainWindows) GccVersion() string {
@@ -146,11 +146,11 @@ func (t *toolchainWindows) GccVersion() string {
} }
func (t *toolchainWindowsX86) Cflags() string { func (t *toolchainWindowsX86) Cflags() string {
return "${windowsCflags} ${windowsX86Cflags}" return "${config.WindowsCflags} ${config.WindowsX86Cflags}"
} }
func (t *toolchainWindowsX8664) Cflags() string { func (t *toolchainWindowsX8664) Cflags() string {
return "${windowsCflags} ${windowsX8664Cflags}" return "${config.WindowsCflags} ${config.WindowsX8664Cflags}"
} }
func (t *toolchainWindows) Cppflags() string { func (t *toolchainWindows) Cppflags() string {
@@ -158,15 +158,15 @@ func (t *toolchainWindows) Cppflags() string {
} }
func (t *toolchainWindowsX86) Ldflags() string { func (t *toolchainWindowsX86) Ldflags() string {
return "${windowsLdflags} ${windowsX86Ldflags}" return "${config.WindowsLdflags} ${config.WindowsX86Ldflags}"
} }
func (t *toolchainWindowsX8664) Ldflags() string { func (t *toolchainWindowsX8664) Ldflags() string {
return "${windowsLdflags} ${windowsX8664Ldflags}" return "${config.WindowsLdflags} ${config.WindowsX8664Ldflags}"
} }
func (t *toolchainWindows) IncludeFlags() string { func (t *toolchainWindows) IncludeFlags() string {
return "${windowsIncludeFlags}" return "${config.WindowsIncludeFlags}"
} }
func (t *toolchainWindows) ClangSupported() bool { func (t *toolchainWindows) ClangSupported() bool {

View File

@@ -20,6 +20,7 @@ import (
"strings" "strings"
"android/soong/android" "android/soong/android"
"android/soong/cc/config"
) )
func init() { func init() {
@@ -27,22 +28,22 @@ func init() {
} }
func makeVarsProvider(ctx android.MakeVarsContext) { func makeVarsProvider(ctx android.MakeVarsContext) {
ctx.Strict("LLVM_PREBUILTS_VERSION", "${clangVersion}") ctx.Strict("LLVM_PREBUILTS_VERSION", "${config.ClangVersion}")
ctx.Strict("LLVM_PREBUILTS_BASE", "${clangBase}") ctx.Strict("LLVM_PREBUILTS_BASE", "${config.ClangBase}")
ctx.Strict("LLVM_PREBUILTS_PATH", "${clangBin}") ctx.Strict("LLVM_PREBUILTS_PATH", "${config.ClangBin}")
ctx.Strict("CLANG", "${clangBin}/clang") ctx.Strict("CLANG", "${config.ClangBin}/clang")
ctx.Strict("CLANG_CXX", "${clangBin}/clang++") ctx.Strict("CLANG_CXX", "${config.ClangBin}/clang++")
ctx.Strict("LLVM_AS", "${clangBin}/llvm-as") ctx.Strict("LLVM_AS", "${config.ClangBin}/llvm-as")
ctx.Strict("LLVM_LINK", "${clangBin}/llvm-link") ctx.Strict("LLVM_LINK", "${config.ClangBin}/llvm-link")
ctx.StrictSorted("CLANG_CONFIG_UNKNOWN_CFLAGS", strings.Join(clangUnknownCflags, " ")) ctx.StrictSorted("CLANG_CONFIG_UNKNOWN_CFLAGS", strings.Join(config.ClangUnknownCflags, " "))
ctx.Strict("GLOBAL_CFLAGS_NO_OVERRIDE", "${noOverrideGlobalCflags}") ctx.Strict("GLOBAL_CFLAGS_NO_OVERRIDE", "${config.NoOverrideGlobalCflags}")
ctx.Strict("GLOBAL_CLANG_CFLAGS_NO_OVERRIDE", "${clangExtraNoOverrideCflags}") ctx.Strict("GLOBAL_CLANG_CFLAGS_NO_OVERRIDE", "${config.ClangExtraNoOverrideCflags}")
ctx.Strict("GLOBAL_CPPFLAGS_NO_OVERRIDE", "") ctx.Strict("GLOBAL_CPPFLAGS_NO_OVERRIDE", "")
ctx.Strict("GLOBAL_CLANG_CPPFLAGS_NO_OVERRIDE", "") ctx.Strict("GLOBAL_CLANG_CPPFLAGS_NO_OVERRIDE", "")
ctx.Strict("NDK_PREBUILT_SHARED_LIBRARIES", strings.Join(ndkPrebuiltSharedLibs, " ")) ctx.Strict("NDK_PREBUILT_SHARED_LIBRARIES", strings.Join(ndkPrebuiltSharedLibs, " "))
includeFlags, err := ctx.Eval("${commonGlobalIncludes}") includeFlags, err := ctx.Eval("${config.CommonGlobalIncludes}")
if err != nil { if err != nil {
panic(err) panic(err)
} }
@@ -86,14 +87,14 @@ func makeVarsToolchain(ctx android.MakeVarsContext, secondPrefix string,
} }
makePrefix := secondPrefix + typePrefix makePrefix := secondPrefix + typePrefix
toolchain := toolchainFactories[target.Os][target.Arch.ArchType](target.Arch) toolchain := config.FindToolchain(target.Os, target.Arch)
var productExtraCflags string var productExtraCflags string
var productExtraLdflags string var productExtraLdflags string
hod := "host" hod := "Host"
if target.Os.Class == android.Device { if target.Os.Class == android.Device {
hod = "device" hod = "Device"
} }
if target.Os.Class == android.Device && Bool(ctx.Config().ProductVariables.Brillo) { if target.Os.Class == android.Device && Bool(ctx.Config().ProductVariables.Brillo) {
@@ -105,14 +106,14 @@ func makeVarsToolchain(ctx android.MakeVarsContext, secondPrefix string,
ctx.Strict(makePrefix+"GLOBAL_CFLAGS", strings.Join([]string{ ctx.Strict(makePrefix+"GLOBAL_CFLAGS", strings.Join([]string{
toolchain.Cflags(), toolchain.Cflags(),
"${commonGlobalCflags}", "${config.CommonGlobalCflags}",
fmt.Sprintf("${%sGlobalCflags}", hod), fmt.Sprintf("${config.%sGlobalCflags}", hod),
toolchain.ToolchainCflags(), toolchain.ToolchainCflags(),
productExtraCflags, productExtraCflags,
}, " ")) }, " "))
ctx.Strict(makePrefix+"GLOBAL_CONLYFLAGS", "") ctx.Strict(makePrefix+"GLOBAL_CONLYFLAGS", "")
ctx.Strict(makePrefix+"GLOBAL_CPPFLAGS", strings.Join([]string{ ctx.Strict(makePrefix+"GLOBAL_CPPFLAGS", strings.Join([]string{
"${commonGlobalCppflags}", "${config.CommonGlobalCppflags}",
toolchain.Cppflags(), toolchain.Cppflags(),
}, " ")) }, " "))
ctx.Strict(makePrefix+"GLOBAL_LDFLAGS", strings.Join([]string{ ctx.Strict(makePrefix+"GLOBAL_LDFLAGS", strings.Join([]string{
@@ -152,15 +153,15 @@ func makeVarsToolchain(ctx android.MakeVarsContext, secondPrefix string,
ctx.Strict(clangPrefix+"GLOBAL_CFLAGS", strings.Join([]string{ ctx.Strict(clangPrefix+"GLOBAL_CFLAGS", strings.Join([]string{
toolchain.ClangCflags(), toolchain.ClangCflags(),
"${commonClangGlobalCflags}", "${config.CommonClangGlobalCflags}",
fmt.Sprintf("${%sClangGlobalCflags}", hod), fmt.Sprintf("${config.%sClangGlobalCflags}", hod),
toolchain.ToolchainClangCflags(), toolchain.ToolchainClangCflags(),
clangExtras, clangExtras,
productExtraCflags, productExtraCflags,
}, " ")) }, " "))
ctx.Strict(clangPrefix+"GLOBAL_CONLYFLAGS", "${clangExtraConlyflags}") ctx.Strict(clangPrefix+"GLOBAL_CONLYFLAGS", "${config.ClangExtraConlyflags}")
ctx.Strict(clangPrefix+"GLOBAL_CPPFLAGS", strings.Join([]string{ ctx.Strict(clangPrefix+"GLOBAL_CPPFLAGS", strings.Join([]string{
"${commonClangGlobalCppflags}", "${config.CommonClangGlobalCppflags}",
toolchain.ClangCppflags(), toolchain.ClangCppflags(),
}, " ")) }, " "))
ctx.Strict(clangPrefix+"GLOBAL_LDFLAGS", strings.Join([]string{ ctx.Strict(clangPrefix+"GLOBAL_LDFLAGS", strings.Join([]string{
@@ -183,7 +184,7 @@ func makeVarsToolchain(ctx android.MakeVarsContext, secondPrefix string,
ctx.Strict(makePrefix+"CXX", gccCmd(toolchain, "g++")) ctx.Strict(makePrefix+"CXX", gccCmd(toolchain, "g++"))
if target.Os == android.Darwin { if target.Os == android.Darwin {
ctx.Strict(makePrefix+"AR", "${macArPath}") ctx.Strict(makePrefix+"AR", "${config.MacArPath}")
} else { } else {
ctx.Strict(makePrefix+"AR", gccCmd(toolchain, "ar")) ctx.Strict(makePrefix+"AR", gccCmd(toolchain, "ar"))
ctx.Strict(makePrefix+"READELF", gccCmd(toolchain, "readelf")) ctx.Strict(makePrefix+"READELF", gccCmd(toolchain, "readelf"))

View File

@@ -22,6 +22,7 @@ import (
"android/soong" "android/soong"
"android/soong/android" "android/soong/android"
"android/soong/cc/config"
) )
func init() { func init() {
@@ -37,7 +38,7 @@ func init() {
// either (with the exception of the shared STLs, which are installed to the app's directory rather // either (with the exception of the shared STLs, which are installed to the app's directory rather
// than to the system image). // than to the system image).
func getNdkLibDir(ctx android.ModuleContext, toolchain Toolchain, version string) android.SourcePath { func getNdkLibDir(ctx android.ModuleContext, toolchain config.Toolchain, version string) android.SourcePath {
suffix := "" suffix := ""
// Most 64-bit NDK prebuilts store libraries in "lib64", except for arm64 which is not a // Most 64-bit NDK prebuilts store libraries in "lib64", except for arm64 which is not a
// multilib toolchain and stores the libraries in "lib". // multilib toolchain and stores the libraries in "lib".
@@ -48,7 +49,7 @@ func getNdkLibDir(ctx android.ModuleContext, toolchain Toolchain, version string
version, toolchain.Name(), suffix)) version, toolchain.Name(), suffix))
} }
func ndkPrebuiltModuleToPath(ctx android.ModuleContext, toolchain Toolchain, func ndkPrebuiltModuleToPath(ctx android.ModuleContext, toolchain config.Toolchain,
ext string, version string) android.Path { ext string, version string) android.Path {
// NDK prebuilts are named like: ndk_NAME.EXT.SDK_VERSION. // NDK prebuilts are named like: ndk_NAME.EXT.SDK_VERSION.
@@ -144,7 +145,7 @@ func ndkPrebuiltStaticStlFactory() (blueprint.Module, []interface{}) {
return module.Init() return module.Init()
} }
func getNdkStlLibDir(ctx android.ModuleContext, toolchain Toolchain, stl string) android.SourcePath { func getNdkStlLibDir(ctx android.ModuleContext, toolchain config.Toolchain, stl string) android.SourcePath {
gccVersion := toolchain.GccVersion() gccVersion := toolchain.GccVersion()
var libDir string var libDir string
switch stl { switch stl {

View File

@@ -33,10 +33,6 @@ func boolPtr(v bool) *bool {
} }
} }
func init() {
pctx.StaticVariable("clangAsanLibDir", "${clangPath}/lib64/clang/3.8/lib/linux")
}
const ( const (
asan sanitizerType = iota + 1 asan sanitizerType = iota + 1
tsan tsan
@@ -244,7 +240,7 @@ func (sanitize *sanitize) flags(ctx ModuleContext, flags Flags) Flags {
// ASan runtime library must be the first in the link order. // ASan runtime library must be the first in the link order.
runtimeLibrary := ctx.toolchain().AddressSanitizerRuntimeLibrary() runtimeLibrary := ctx.toolchain().AddressSanitizerRuntimeLibrary()
if runtimeLibrary != "" { if runtimeLibrary != "" {
flags.libFlags = append([]string{"${clangAsanLibDir}/" + runtimeLibrary}, flags.libFlags...) flags.libFlags = append([]string{"${config.ClangAsanLibDir}/" + runtimeLibrary}, flags.libFlags...)
} }
if ctx.Host() { if ctx.Host() {
// -nodefaultlibs (provided with libc++) prevents the driver from linking // -nodefaultlibs (provided with libc++) prevents the driver from linking

View File

@@ -101,25 +101,6 @@ func flagsToBuilderFlags(in Flags) builderFlags {
} }
} }
func copyVariantFlags(m map[string][]string) map[string][]string {
ret := make(map[string][]string, len(m))
for k, v := range m {
l := make([]string, len(m[k]))
for i := range m[k] {
l[i] = v[i]
}
ret[k] = l
}
return ret
}
func variantOrDefault(variants map[string]string, choice string) string {
if ret, ok := variants[choice]; ok {
return ret
}
return variants[""]
}
func addPrefix(list []string, prefix string) []string { func addPrefix(list []string, prefix string) []string {
for i := range list { for i := range list {
list[i] = prefix + list[i] list[i] = prefix + list[i]