Add toolchain cflags that are always used

Some cflags are part of the toolchain selection and should not be
removed by no_default_compiler_flags = true, for example -m32 for x86
compiles.  Removing all the cflags results in hacks such as in crt.mk
where the bare minimum cflags are reinserted.

Add new toolchain interface functions ToolchainCflags, ToolchainLdflags
and ToolchainClangCflags that will always be used.

Change-Id: I0ba02d7611e2afb9ad913319740e00c1bb2d654c
This commit is contained in:
Colin Cross
2015-11-23 16:11:30 -08:00
parent b30a8118f5
commit c4bde76832
3 changed files with 44 additions and 9 deletions

View File

@@ -8,6 +8,10 @@ import (
) )
var ( var (
armToolchainCflags = []string{
"-mthumb-interwork",
}
armCflags = []string{ armCflags = []string{
"-fno-exceptions", // from build/core/combo/select.mk "-fno-exceptions", // from build/core/combo/select.mk
"-Wno-multichar", // from build/core/combo/select.mk "-Wno-multichar", // from build/core/combo/select.mk
@@ -26,8 +30,6 @@ var (
"-fno-builtin-sin", "-fno-builtin-sin",
"-fno-strict-volatile-bitfields", "-fno-strict-volatile-bitfields",
"-mthumb-interwork",
// TARGET_RELEASE_CFLAGS // TARGET_RELEASE_CFLAGS
"-DNDEBUG", "-DNDEBUG",
"-g", "-g",
@@ -139,6 +141,7 @@ func init() {
pctx.StaticVariable("armGccTriple", "arm-linux-androideabi") pctx.StaticVariable("armGccTriple", "arm-linux-androideabi")
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, " "))
@@ -168,6 +171,7 @@ func init() {
pctx.StaticVariable("armCortexA15Cflags", strings.Join(armCpuVariantCflags["cortex-a15"], " ")) pctx.StaticVariable("armCortexA15Cflags", strings.Join(armCpuVariantCflags["cortex-a15"], " "))
// Clang cflags // Clang cflags
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), " "))
@@ -233,7 +237,8 @@ var (
type toolchainArm struct { type toolchainArm struct {
toolchain32Bit toolchain32Bit
cflags, ldflags, clangCflags string ldflags string
toolchainCflags, toolchainClangCflags string
} }
func (t *toolchainArm) Name() string { func (t *toolchainArm) Name() string {
@@ -252,8 +257,12 @@ func (t *toolchainArm) GccVersion() string {
return "${armGccVersion}" return "${armGccVersion}"
} }
func (t *toolchainArm) ToolchainCflags() string {
return t.toolchainCflags
}
func (t *toolchainArm) Cflags() string { func (t *toolchainArm) Cflags() string {
return t.cflags return "${armCflags}"
} }
func (t *toolchainArm) Cppflags() string { func (t *toolchainArm) Cppflags() string {
@@ -283,8 +292,12 @@ func (t *toolchainArm) ClangTriple() string {
return "${armGccTriple}" return "${armGccTriple}"
} }
func (t *toolchainArm) ToolchainClangCflags() string {
return t.toolchainClangCflags
}
func (t *toolchainArm) ClangCflags() string { func (t *toolchainArm) ClangCflags() string {
return t.clangCflags return "${armClangCflags}"
} }
func (t *toolchainArm) ClangCppflags() string { func (t *toolchainArm) ClangCppflags() string {
@@ -317,8 +330,8 @@ func armToolchainFactory(arch common.Arch) Toolchain {
} }
return &toolchainArm{ return &toolchainArm{
cflags: strings.Join([]string{ toolchainCflags: strings.Join([]string{
"${armCflags}", "${armToolchainCflags}",
armArchVariantCflagsVar[arch.ArchVariant], armArchVariantCflagsVar[arch.ArchVariant],
armCpuVariantCflagsVar[arch.CpuVariant], armCpuVariantCflagsVar[arch.CpuVariant],
}, " "), }, " "),
@@ -326,8 +339,8 @@ func armToolchainFactory(arch common.Arch) Toolchain {
"${armLdflags}", "${armLdflags}",
fixCortexA8, fixCortexA8,
}, " "), }, " "),
clangCflags: strings.Join([]string{ toolchainClangCflags: strings.Join([]string{
"${armClangCflags}", "${armToolchainClangCflags}",
armClangArchVariantCflagsVar[arch.ArchVariant], armClangArchVariantCflagsVar[arch.ArchVariant],
armClangCpuVariantCflagsVar[arch.CpuVariant], armClangCpuVariantCflagsVar[arch.CpuVariant],
}, " "), }, " "),

View File

@@ -590,6 +590,13 @@ func (c *CCBase) collectFlags(ctx common.AndroidModuleContext, toolchain Toolcha
} }
} }
if flags.Clang {
flags.GlobalFlags = append(flags.GlobalFlags, toolchain.ToolchainClangCflags())
} else {
flags.GlobalFlags = append(flags.GlobalFlags, toolchain.ToolchainCflags())
flags.LdFlags = append(flags.LdFlags, toolchain.ToolchainLdflags())
}
flags = c.ccModuleType().flags(ctx, flags) flags = c.ccModuleType().flags(ctx, flags)
if c.Properties.Sdk_version == "" { if c.Properties.Sdk_version == "" {

View File

@@ -39,6 +39,8 @@ type Toolchain interface {
GccRoot() string GccRoot() string
GccTriple() string GccTriple() string
GccVersion() string GccVersion() string
ToolchainCflags() string
ToolchainLdflags() string
Cflags() string Cflags() string
Cppflags() string Cppflags() string
Ldflags() string Ldflags() string
@@ -46,6 +48,7 @@ type Toolchain interface {
InstructionSetFlags(string) (string, error) InstructionSetFlags(string) (string, error)
ClangTriple() string ClangTriple() string
ToolchainClangCflags() string
ClangCflags() string ClangCflags() string
ClangCppflags() string ClangCppflags() string
ClangLdflags() string ClangLdflags() string
@@ -71,6 +74,18 @@ func (toolchainBase) ClangInstructionSetFlags(s string) (string, error) {
return "", nil return "", nil
} }
func (toolchainBase) ToolchainCflags() string {
return ""
}
func (toolchainBase) ToolchainLdflags() string {
return ""
}
func (toolchainBase) ToolchainClangCflags() string {
return ""
}
type toolchain64Bit struct { type toolchain64Bit struct {
toolchainBase toolchainBase
} }