Merge changes I29bf144b,Id2879453

* changes:
  Remove more clang indirection without affecting command lines
  Remove clang indirection without affecting build.ninja
This commit is contained in:
Colin Cross
2021-07-16 00:00:22 +00:00
committed by Gerrit Code Review
19 changed files with 307 additions and 436 deletions

View File

@@ -392,7 +392,7 @@ func (compiler *baseCompiler) compilerFlags(ctx ModuleContext, flags Flags, deps
if flags.RequiredInstructionSet != "" { if flags.RequiredInstructionSet != "" {
instructionSet = flags.RequiredInstructionSet instructionSet = flags.RequiredInstructionSet
} }
instructionSetFlags, err := tc.ClangInstructionSetFlags(instructionSet) instructionSetFlags, err := tc.InstructionSetFlags(instructionSet)
if err != nil { if err != nil {
ctx.ModuleErrorf("%s", err) ctx.ModuleErrorf("%s", err)
} }
@@ -437,10 +437,10 @@ func (compiler *baseCompiler) compilerFlags(ctx ModuleContext, flags Flags, deps
flags.Global.ConlyFlags = append([]string{"${config.CommonGlobalConlyflags}"}, flags.Global.ConlyFlags...) flags.Global.ConlyFlags = append([]string{"${config.CommonGlobalConlyflags}"}, flags.Global.ConlyFlags...)
flags.Global.CppFlags = append([]string{fmt.Sprintf("${config.%sGlobalCppflags}", hod)}, flags.Global.CppFlags...) flags.Global.CppFlags = append([]string{fmt.Sprintf("${config.%sGlobalCppflags}", hod)}, flags.Global.CppFlags...)
flags.Global.AsFlags = append(flags.Global.AsFlags, tc.ClangAsflags()) flags.Global.AsFlags = append(flags.Global.AsFlags, tc.Asflags())
flags.Global.CppFlags = append([]string{"${config.CommonClangGlobalCppflags}"}, flags.Global.CppFlags...) flags.Global.CppFlags = append([]string{"${config.CommonClangGlobalCppflags}"}, flags.Global.CppFlags...)
flags.Global.CommonFlags = append(flags.Global.CommonFlags, flags.Global.CommonFlags = append(flags.Global.CommonFlags,
tc.ClangCflags(), tc.Cflags(),
"${config.CommonClangGlobalCflags}", "${config.CommonClangGlobalCflags}",
fmt.Sprintf("${config.%sClangGlobalCflags}", hod)) fmt.Sprintf("${config.%sClangGlobalCflags}", hod))
@@ -458,11 +458,11 @@ func (compiler *baseCompiler) compilerFlags(ctx ModuleContext, flags Flags, deps
flags.Global.AsFlags = append(flags.Global.AsFlags, "-D__ASSEMBLY__") flags.Global.AsFlags = append(flags.Global.AsFlags, "-D__ASSEMBLY__")
flags.Global.CppFlags = append(flags.Global.CppFlags, tc.ClangCppflags()) flags.Global.CppFlags = append(flags.Global.CppFlags, tc.Cppflags())
flags.Global.YasmFlags = append(flags.Global.YasmFlags, tc.YasmFlags()) flags.Global.YasmFlags = append(flags.Global.YasmFlags, tc.YasmFlags())
flags.Global.CommonFlags = append(flags.Global.CommonFlags, tc.ToolchainClangCflags()) flags.Global.CommonFlags = append(flags.Global.CommonFlags, tc.ToolchainCflags())
cStd := config.CStdVersion cStd := config.CStdVersion
if String(compiler.Properties.C_std) == "experimental" { if String(compiler.Properties.C_std) == "experimental" {

View File

@@ -48,12 +48,12 @@ var (
"-Wl,-z,separate-code", "-Wl,-z,separate-code",
} }
arm64Lldflags = append(ClangFilterUnknownLldflags(arm64Ldflags), arm64Lldflags = append(arm64Ldflags,
"-Wl,-z,max-page-size=4096") "-Wl,-z,max-page-size=4096")
arm64Cppflags = []string{} arm64Cppflags = []string{}
arm64ClangCpuVariantCflags = map[string][]string{ arm64CpuVariantCflags = map[string][]string{
"cortex-a53": []string{ "cortex-a53": []string{
"-mcpu=cortex-a53", "-mcpu=cortex-a53",
}, },
@@ -99,10 +99,8 @@ func init() {
pctx.StaticVariable("Arm64Ldflags", strings.Join(arm64Ldflags, " ")) pctx.StaticVariable("Arm64Ldflags", strings.Join(arm64Ldflags, " "))
pctx.StaticVariable("Arm64Lldflags", strings.Join(arm64Lldflags, " ")) pctx.StaticVariable("Arm64Lldflags", strings.Join(arm64Lldflags, " "))
pctx.StaticVariable("Arm64ClangCflags", strings.Join(ClangFilterUnknownCflags(arm64Cflags), " ")) pctx.StaticVariable("Arm64ClangCflags", strings.Join(arm64Cflags, " "))
pctx.StaticVariable("Arm64ClangLdflags", strings.Join(ClangFilterUnknownCflags(arm64Ldflags), " ")) pctx.StaticVariable("Arm64ClangCppflags", strings.Join(arm64Cppflags, " "))
pctx.StaticVariable("Arm64ClangLldflags", strings.Join(ClangFilterUnknownCflags(arm64Lldflags), " "))
pctx.StaticVariable("Arm64ClangCppflags", strings.Join(ClangFilterUnknownCflags(arm64Cppflags), " "))
pctx.StaticVariable("Arm64ClangArmv8ACflags", strings.Join(arm64ArchVariantCflags["armv8-a"], " ")) pctx.StaticVariable("Arm64ClangArmv8ACflags", strings.Join(arm64ArchVariantCflags["armv8-a"], " "))
pctx.StaticVariable("Arm64ClangArmv8ABranchProtCflags", strings.Join(arm64ArchVariantCflags["armv8-a-branchprot"], " ")) pctx.StaticVariable("Arm64ClangArmv8ABranchProtCflags", strings.Join(arm64ArchVariantCflags["armv8-a-branchprot"], " "))
@@ -110,30 +108,30 @@ func init() {
pctx.StaticVariable("Arm64ClangArmv82ADotprodCflags", strings.Join(arm64ArchVariantCflags["armv8-2a-dotprod"], " ")) pctx.StaticVariable("Arm64ClangArmv82ADotprodCflags", strings.Join(arm64ArchVariantCflags["armv8-2a-dotprod"], " "))
pctx.StaticVariable("Arm64ClangCortexA53Cflags", pctx.StaticVariable("Arm64ClangCortexA53Cflags",
strings.Join(arm64ClangCpuVariantCflags["cortex-a53"], " ")) strings.Join(arm64CpuVariantCflags["cortex-a53"], " "))
pctx.StaticVariable("Arm64ClangCortexA55Cflags", pctx.StaticVariable("Arm64ClangCortexA55Cflags",
strings.Join(arm64ClangCpuVariantCflags["cortex-a55"], " ")) strings.Join(arm64CpuVariantCflags["cortex-a55"], " "))
pctx.StaticVariable("Arm64ClangKryoCflags", pctx.StaticVariable("Arm64ClangKryoCflags",
strings.Join(arm64ClangCpuVariantCflags["kryo"], " ")) strings.Join(arm64CpuVariantCflags["kryo"], " "))
pctx.StaticVariable("Arm64ClangExynosM1Cflags", pctx.StaticVariable("Arm64ClangExynosM1Cflags",
strings.Join(arm64ClangCpuVariantCflags["exynos-m1"], " ")) strings.Join(arm64CpuVariantCflags["exynos-m1"], " "))
pctx.StaticVariable("Arm64ClangExynosM2Cflags", pctx.StaticVariable("Arm64ClangExynosM2Cflags",
strings.Join(arm64ClangCpuVariantCflags["exynos-m2"], " ")) strings.Join(arm64CpuVariantCflags["exynos-m2"], " "))
} }
var ( var (
arm64ClangArchVariantCflagsVar = map[string]string{ arm64ArchVariantCflagsVar = map[string]string{
"armv8-a": "${config.Arm64ClangArmv8ACflags}", "armv8-a": "${config.Arm64ClangArmv8ACflags}",
"armv8-a-branchprot": "${config.Arm64ClangArmv8ABranchProtCflags}", "armv8-a-branchprot": "${config.Arm64ClangArmv8ABranchProtCflags}",
"armv8-2a": "${config.Arm64ClangArmv82ACflags}", "armv8-2a": "${config.Arm64ClangArmv82ACflags}",
"armv8-2a-dotprod": "${config.Arm64ClangArmv82ADotprodCflags}", "armv8-2a-dotprod": "${config.Arm64ClangArmv82ADotprodCflags}",
} }
arm64ClangCpuVariantCflagsVar = map[string]string{ arm64CpuVariantCflagsVar = map[string]string{
"": "", "": "",
"cortex-a53": "${config.Arm64ClangCortexA53Cflags}", "cortex-a53": "${config.Arm64ClangCortexA53Cflags}",
"cortex-a55": "${config.Arm64ClangCortexA55Cflags}", "cortex-a55": "${config.Arm64ClangCortexA55Cflags}",
@@ -154,7 +152,7 @@ type toolchainArm64 struct {
ldflags string ldflags string
lldflags string lldflags string
toolchainClangCflags string toolchainCflags string
} }
func (t *toolchainArm64) Name() string { func (t *toolchainArm64) Name() string {
@@ -181,24 +179,24 @@ func (t *toolchainArm64) ClangTriple() string {
return t.GccTriple() return t.GccTriple()
} }
func (t *toolchainArm64) ClangCflags() string { func (t *toolchainArm64) Cflags() string {
return "${config.Arm64ClangCflags}" return "${config.Arm64ClangCflags}"
} }
func (t *toolchainArm64) ClangCppflags() string { func (t *toolchainArm64) Cppflags() string {
return "${config.Arm64ClangCppflags}" return "${config.Arm64ClangCppflags}"
} }
func (t *toolchainArm64) ClangLdflags() string { func (t *toolchainArm64) Ldflags() string {
return t.ldflags return t.ldflags
} }
func (t *toolchainArm64) ClangLldflags() string { func (t *toolchainArm64) Lldflags() string {
return t.lldflags return t.lldflags
} }
func (t *toolchainArm64) ToolchainClangCflags() string { func (t *toolchainArm64) ToolchainCflags() string {
return t.toolchainClangCflags return t.toolchainCflags
} }
func (toolchainArm64) LibclangRuntimeLibraryArch() string { func (toolchainArm64) LibclangRuntimeLibraryArch() string {
@@ -216,9 +214,9 @@ func arm64ToolchainFactory(arch android.Arch) Toolchain {
panic(fmt.Sprintf("Unknown ARM architecture version: %q", arch.ArchVariant)) panic(fmt.Sprintf("Unknown ARM architecture version: %q", arch.ArchVariant))
} }
toolchainClangCflags := []string{arm64ClangArchVariantCflagsVar[arch.ArchVariant]} toolchainCflags := []string{arm64ArchVariantCflagsVar[arch.ArchVariant]}
toolchainClangCflags = append(toolchainClangCflags, toolchainCflags = append(toolchainCflags,
variantOrDefault(arm64ClangCpuVariantCflagsVar, arch.CpuVariant)) variantOrDefault(arm64CpuVariantCflagsVar, arch.CpuVariant))
var extraLdflags string var extraLdflags string
switch arch.CpuVariant { switch arch.CpuVariant {
@@ -235,7 +233,7 @@ func arm64ToolchainFactory(arch android.Arch) Toolchain {
"${config.Arm64Lldflags}", "${config.Arm64Lldflags}",
extraLdflags, extraLdflags,
}, " "), }, " "),
toolchainClangCflags: strings.Join(toolchainClangCflags, " "), toolchainCflags: strings.Join(toolchainCflags, " "),
} }
} }

View File

@@ -42,47 +42,31 @@ func (t *toolchainFuchsiaArm64) GccVersion() string {
return arm64GccVersion return arm64GccVersion
} }
func (t *toolchainFuchsiaArm64) Cflags() string {
return ""
}
func (t *toolchainFuchsiaArm64) Cppflags() string {
return ""
}
func (t *toolchainFuchsiaArm64) Ldflags() string {
return "-Wl,--fix-cortex-a53-843419"
}
func (t *toolchainFuchsiaArm64) IncludeFlags() string { func (t *toolchainFuchsiaArm64) IncludeFlags() string {
return "" return ""
} }
func (t *toolchainFuchsiaArm64) ToolchainCflags() string {
return "-mcpu=cortex-a53"
}
func (t *toolchainFuchsiaArm64) ClangTriple() string { func (t *toolchainFuchsiaArm64) ClangTriple() string {
return "arm64-fuchsia-android" return "arm64-fuchsia-android"
} }
func (t *toolchainFuchsiaArm64) ClangCppflags() string { func (t *toolchainFuchsiaArm64) Cppflags() string {
return "-Wno-error=deprecated-declarations" return "-Wno-error=deprecated-declarations"
} }
func (t *toolchainFuchsiaArm64) ClangLdflags() string { func (t *toolchainFuchsiaArm64) Ldflags() string {
return "--target=arm64-fuchsia --sysroot=" + fuchsiaArm64SysRoot + " -L" + fuchsiaArm64PrebuiltLibsRoot + "/aarch64-fuchsia/lib " + "-Lprebuilts/fuchsia_sdk/arch/arm64/dist/" return "--target=arm64-fuchsia --sysroot=" + fuchsiaArm64SysRoot + " -L" + fuchsiaArm64PrebuiltLibsRoot + "/aarch64-fuchsia/lib " + "-Lprebuilts/fuchsia_sdk/arch/arm64/dist/"
} }
func (t *toolchainFuchsiaArm64) ClangLldflags() string { func (t *toolchainFuchsiaArm64) Lldflags() string {
return "--target=arm64-fuchsia --sysroot=" + fuchsiaArm64SysRoot + " -L" + fuchsiaArm64PrebuiltLibsRoot + "/aarch64-fuchsia/lib " + "-Lprebuilts/fuchsia_sdk/arch/arm64/dist/" return "--target=arm64-fuchsia --sysroot=" + fuchsiaArm64SysRoot + " -L" + fuchsiaArm64PrebuiltLibsRoot + "/aarch64-fuchsia/lib " + "-Lprebuilts/fuchsia_sdk/arch/arm64/dist/"
} }
func (t *toolchainFuchsiaArm64) ClangCflags() string { func (t *toolchainFuchsiaArm64) Cflags() string {
return "--target=arm64-fuchsia --sysroot=" + fuchsiaArm64SysRoot + " -I" + fuchsiaArm64SysRoot + "/include" return "--target=arm64-fuchsia --sysroot=" + fuchsiaArm64SysRoot + " -I" + fuchsiaArm64SysRoot + "/include"
} }
func (t *toolchainFuchsiaArm64) ToolchainClangCflags() string { func (t *toolchainFuchsiaArm64) ToolchainCflags() string {
return "-march=armv8-a" return "-march=armv8-a"
} }

View File

@@ -15,14 +15,15 @@
package config package config
import ( import (
"android/soong/android"
"strings" "strings"
"android/soong/android"
) )
var ( var (
// This is a host toolchain but flags for device toolchain are required // This is a host toolchain but flags for device toolchain are required
// as the flags are actually for Bionic-based builds. // as the flags are actually for Bionic-based builds.
linuxCrossCflags = ClangFilterUnknownCflags(append(deviceGlobalCflags, linuxCrossCflags = append(deviceGlobalCflags,
// clang by default enables PIC when the clang triple is set to *-android. // clang by default enables PIC when the clang triple is set to *-android.
// See toolchain/llvm-project/clang/lib/Driver/ToolChains/CommonArgs.cpp#920. // See toolchain/llvm-project/clang/lib/Driver/ToolChains/CommonArgs.cpp#920.
// However, for this host target, we don't set "-android" to avoid __ANDROID__ macro // However, for this host target, we don't set "-android" to avoid __ANDROID__ macro
@@ -33,9 +34,9 @@ var (
// This is normally in ClangExtraTargetCflags, but that's for device and we need // This is normally in ClangExtraTargetCflags, but that's for device and we need
// the same for host // the same for host
"-nostdlibinc", "-nostdlibinc",
)) )
linuxCrossLdflags = ClangFilterUnknownCflags([]string{ linuxCrossLdflags = []string{
"-Wl,-z,noexecstack", "-Wl,-z,noexecstack",
"-Wl,-z,relro", "-Wl,-z,relro",
"-Wl,-z,now", "-Wl,-z,now",
@@ -44,7 +45,7 @@ var (
"-Wl,--fatal-warnings", "-Wl,--fatal-warnings",
"-Wl,--hash-style=gnu", "-Wl,--hash-style=gnu",
"-Wl,--no-undefined-version", "-Wl,--no-undefined-version",
}) }
// Embed the linker into host bionic binaries. This is needed to support host bionic, // Embed the linker into host bionic binaries. This is needed to support host bionic,
// as the linux kernel requires that the ELF interpreter referenced by PT_INTERP be // as the linux kernel requires that the ELF interpreter referenced by PT_INTERP be
@@ -73,7 +74,7 @@ func (toolchainLinuxArm64) ClangTriple() string {
return "aarch64-linux" return "aarch64-linux"
} }
func (toolchainLinuxArm64) ClangCflags() string { func (toolchainLinuxArm64) Cflags() string {
// The inherited flags + extra flags // The inherited flags + extra flags
return "${config.Arm64ClangCflags} ${config.LinuxBionicArm64Cflags}" return "${config.Arm64ClangCflags} ${config.LinuxBionicArm64Cflags}"
} }
@@ -84,7 +85,7 @@ func (toolchainLinuxArm64) CrtBeginSharedBinary() []string {
func linuxArm64ToolchainFactory(arch android.Arch) Toolchain { func linuxArm64ToolchainFactory(arch android.Arch) Toolchain {
archVariant := "armv8-a" // for host, default to armv8-a archVariant := "armv8-a" // for host, default to armv8-a
toolchainClangCflags := []string{arm64ClangArchVariantCflagsVar[archVariant]} toolchainCflags := []string{arm64ArchVariantCflagsVar[archVariant]}
// We don't specify CPU architecture for host. Conservatively assume // We don't specify CPU architecture for host. Conservatively assume
// the host CPU needs the fix // the host CPU needs the fix
@@ -103,7 +104,7 @@ func linuxArm64ToolchainFactory(arch android.Arch) Toolchain {
"${config.LinuxBionicArm64Ldflags}", "${config.LinuxBionicArm64Ldflags}",
extraLdflags, extraLdflags,
}, " ") }, " ")
ret.toolchainArm64.toolchainClangCflags = strings.Join(toolchainClangCflags, " ") ret.toolchainArm64.toolchainCflags = strings.Join(toolchainCflags, " ")
return &ret return &ret
} }

View File

@@ -23,7 +23,6 @@ import (
var ( var (
armToolchainCflags = []string{ armToolchainCflags = []string{
"-mthumb-interwork",
"-msoft-float", "-msoft-float",
} }
@@ -38,7 +37,7 @@ var (
"-Wl,-m,armelf", "-Wl,-m,armelf",
} }
armLldflags = ClangFilterUnknownLldflags(armLdflags) armLldflags = armLdflags
armArmCflags = []string{ armArmCflags = []string{
"-fstrict-aliasing", "-fstrict-aliasing",
@@ -49,7 +48,7 @@ var (
"-Os", "-Os",
} }
armClangArchVariantCflags = map[string][]string{ armArchVariantCflags = map[string][]string{
"armv7-a": []string{ "armv7-a": []string{
"-march=armv7-a", "-march=armv7-a",
"-mfloat-abi=softfp", "-mfloat-abi=softfp",
@@ -72,7 +71,7 @@ var (
}, },
} }
armClangCpuVariantCflags = map[string][]string{ armCpuVariantCflags = map[string][]string{
"cortex-a7": []string{ "cortex-a7": []string{
"-mcpu=cortex-a7", "-mcpu=cortex-a7",
"-mfpu=neon-vfpv4", "-mfpu=neon-vfpv4",
@@ -181,42 +180,40 @@ func init() {
exportStringListStaticVariable("ArmLldflags", armLldflags) exportStringListStaticVariable("ArmLldflags", armLldflags)
// Clang cflags // Clang cflags
exportStringListStaticVariable("ArmToolchainClangCflags", ClangFilterUnknownCflags(armToolchainCflags)) exportStringListStaticVariable("ArmToolchainClangCflags", armToolchainCflags)
exportStringListStaticVariable("ArmClangCflags", ClangFilterUnknownCflags(armCflags)) exportStringListStaticVariable("ArmClangCflags", armCflags)
exportStringListStaticVariable("ArmClangLdflags", ClangFilterUnknownCflags(armLdflags)) exportStringListStaticVariable("ArmClangCppflags", armCppflags)
exportStringListStaticVariable("ArmClangLldflags", ClangFilterUnknownCflags(armLldflags))
exportStringListStaticVariable("ArmClangCppflags", ClangFilterUnknownCflags(armCppflags))
// Clang ARM vs. Thumb instruction set cflags // Clang ARM vs. Thumb instruction set cflags
exportStringListStaticVariable("ArmClangArmCflags", ClangFilterUnknownCflags(armArmCflags)) exportStringListStaticVariable("ArmClangArmCflags", armArmCflags)
exportStringListStaticVariable("ArmClangThumbCflags", ClangFilterUnknownCflags(armThumbCflags)) exportStringListStaticVariable("ArmClangThumbCflags", armThumbCflags)
// Clang arch variant cflags // Clang arch variant cflags
exportStringListStaticVariable("ArmClangArmv7ACflags", armClangArchVariantCflags["armv7-a"]) exportStringListStaticVariable("ArmClangArmv7ACflags", armArchVariantCflags["armv7-a"])
exportStringListStaticVariable("ArmClangArmv7ANeonCflags", armClangArchVariantCflags["armv7-a-neon"]) exportStringListStaticVariable("ArmClangArmv7ANeonCflags", armArchVariantCflags["armv7-a-neon"])
exportStringListStaticVariable("ArmClangArmv8ACflags", armClangArchVariantCflags["armv8-a"]) exportStringListStaticVariable("ArmClangArmv8ACflags", armArchVariantCflags["armv8-a"])
exportStringListStaticVariable("ArmClangArmv82ACflags", armClangArchVariantCflags["armv8-2a"]) exportStringListStaticVariable("ArmClangArmv82ACflags", armArchVariantCflags["armv8-2a"])
// Clang cpu variant cflags // Clang cpu variant cflags
exportStringListStaticVariable("ArmClangGenericCflags", armClangCpuVariantCflags[""]) exportStringListStaticVariable("ArmClangGenericCflags", armCpuVariantCflags[""])
exportStringListStaticVariable("ArmClangCortexA7Cflags", armClangCpuVariantCflags["cortex-a7"]) exportStringListStaticVariable("ArmClangCortexA7Cflags", armCpuVariantCflags["cortex-a7"])
exportStringListStaticVariable("ArmClangCortexA8Cflags", armClangCpuVariantCflags["cortex-a8"]) exportStringListStaticVariable("ArmClangCortexA8Cflags", armCpuVariantCflags["cortex-a8"])
exportStringListStaticVariable("ArmClangCortexA15Cflags", armClangCpuVariantCflags["cortex-a15"]) exportStringListStaticVariable("ArmClangCortexA15Cflags", armCpuVariantCflags["cortex-a15"])
exportStringListStaticVariable("ArmClangCortexA53Cflags", armClangCpuVariantCflags["cortex-a53"]) exportStringListStaticVariable("ArmClangCortexA53Cflags", armCpuVariantCflags["cortex-a53"])
exportStringListStaticVariable("ArmClangCortexA55Cflags", armClangCpuVariantCflags["cortex-a55"]) exportStringListStaticVariable("ArmClangCortexA55Cflags", armCpuVariantCflags["cortex-a55"])
exportStringListStaticVariable("ArmClangKraitCflags", armClangCpuVariantCflags["krait"]) exportStringListStaticVariable("ArmClangKraitCflags", armCpuVariantCflags["krait"])
exportStringListStaticVariable("ArmClangKryoCflags", armClangCpuVariantCflags["kryo"]) exportStringListStaticVariable("ArmClangKryoCflags", armCpuVariantCflags["kryo"])
} }
var ( var (
armClangArchVariantCflagsVar = map[string]string{ armArchVariantCflagsVar = map[string]string{
"armv7-a": "${config.ArmClangArmv7ACflags}", "armv7-a": "${config.ArmClangArmv7ACflags}",
"armv7-a-neon": "${config.ArmClangArmv7ANeonCflags}", "armv7-a-neon": "${config.ArmClangArmv7ANeonCflags}",
"armv8-a": "${config.ArmClangArmv8ACflags}", "armv8-a": "${config.ArmClangArmv8ACflags}",
"armv8-2a": "${config.ArmClangArmv82ACflags}", "armv8-2a": "${config.ArmClangArmv82ACflags}",
} }
armClangCpuVariantCflagsVar = map[string]string{ armCpuVariantCflagsVar = map[string]string{
"": "${config.ArmClangGenericCflags}", "": "${config.ArmClangGenericCflags}",
"cortex-a7": "${config.ArmClangCortexA7Cflags}", "cortex-a7": "${config.ArmClangCortexA7Cflags}",
"cortex-a8": "${config.ArmClangCortexA8Cflags}", "cortex-a8": "${config.ArmClangCortexA8Cflags}",
@@ -241,7 +238,7 @@ type toolchainArm struct {
toolchain32Bit toolchain32Bit
ldflags string ldflags string
lldflags string lldflags string
toolchainClangCflags string toolchainCflags string
} }
func (t *toolchainArm) Name() string { func (t *toolchainArm) Name() string {
@@ -274,34 +271,34 @@ func (t *toolchainArm) ndkTriple() string {
return t.GccTriple() return t.GccTriple()
} }
func (t *toolchainArm) ToolchainClangCflags() string { func (t *toolchainArm) ToolchainCflags() string {
return t.toolchainClangCflags return t.toolchainCflags
} }
func (t *toolchainArm) ClangCflags() string { func (t *toolchainArm) Cflags() string {
return "${config.ArmClangCflags}" return "${config.ArmClangCflags}"
} }
func (t *toolchainArm) ClangCppflags() string { func (t *toolchainArm) Cppflags() string {
return "${config.ArmClangCppflags}" return "${config.ArmClangCppflags}"
} }
func (t *toolchainArm) ClangLdflags() string { func (t *toolchainArm) Ldflags() string {
return t.ldflags return t.ldflags
} }
func (t *toolchainArm) ClangLldflags() string { func (t *toolchainArm) Lldflags() string {
return t.lldflags // TODO: handle V8 cases return t.lldflags // TODO: handle V8 cases
} }
func (t *toolchainArm) ClangInstructionSetFlags(isa string) (string, error) { func (t *toolchainArm) InstructionSetFlags(isa string) (string, error) {
switch isa { switch isa {
case "arm": case "arm":
return "${config.ArmClangArmCflags}", nil return "${config.ArmClangArmCflags}", nil
case "thumb", "": case "thumb", "":
return "${config.ArmClangThumbCflags}", nil return "${config.ArmClangThumbCflags}", nil
default: default:
return t.toolchainBase.ClangInstructionSetFlags(isa) return t.toolchainBase.InstructionSetFlags(isa)
} }
} }
@@ -311,13 +308,13 @@ func (toolchainArm) LibclangRuntimeLibraryArch() string {
func armToolchainFactory(arch android.Arch) Toolchain { func armToolchainFactory(arch android.Arch) Toolchain {
var fixCortexA8 string var fixCortexA8 string
toolchainClangCflags := make([]string, 2, 3) toolchainCflags := make([]string, 2, 3)
toolchainClangCflags[0] = "${config.ArmToolchainClangCflags}" toolchainCflags[0] = "${config.ArmToolchainClangCflags}"
toolchainClangCflags[1] = armClangArchVariantCflagsVar[arch.ArchVariant] toolchainCflags[1] = armArchVariantCflagsVar[arch.ArchVariant]
toolchainClangCflags = append(toolchainClangCflags, toolchainCflags = append(toolchainCflags,
variantOrDefault(armClangCpuVariantCflagsVar, arch.CpuVariant)) variantOrDefault(armCpuVariantCflagsVar, arch.CpuVariant))
switch arch.ArchVariant { switch arch.ArchVariant {
case "armv7-a-neon": case "armv7-a-neon":
@@ -342,7 +339,7 @@ func armToolchainFactory(arch android.Arch) Toolchain {
fixCortexA8, fixCortexA8,
}, " "), }, " "),
lldflags: "${config.ArmLldflags}", lldflags: "${config.ArmLldflags}",
toolchainClangCflags: strings.Join(toolchainClangCflags, " "), toolchainCflags: strings.Join(toolchainCflags, " "),
} }
} }

View File

@@ -15,9 +15,10 @@
package config package config
import ( import (
"android/soong/android"
"sort" "sort"
"strings" "strings"
"android/soong/android"
) )
// Cflags that should be filtered out when compiling with clang // Cflags that should be filtered out when compiling with clang
@@ -80,12 +81,6 @@ var ClangUnknownCflags = sorted([]string{
"--enable-stdcall-fixup", "--enable-stdcall-fixup",
}) })
// Ldflags that should be filtered out when linking with clang lld
var ClangUnknownLldflags = sorted([]string{
"-Wl,--fix-cortex-a8",
"-Wl,--no-fix-cortex-a8",
})
var ClangLibToolingUnknownCflags = sorted([]string{}) var ClangLibToolingUnknownCflags = sorted([]string{})
// List of tidy checks that should be disabled globally. When the compiler is // List of tidy checks that should be disabled globally. When the compiler is
@@ -153,80 +148,6 @@ func init() {
"-D__ANDROID_UNAVAILABLE_SYMBOLS_ARE_WEAK__", "-D__ANDROID_UNAVAILABLE_SYMBOLS_ARE_WEAK__",
}) })
exportStringListStaticVariable("ClangExtraCppflags", []string{
// -Wimplicit-fallthrough is not enabled by -Wall.
"-Wimplicit-fallthrough",
// Enable clang's thread-safety annotations in libcxx.
"-D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS",
// libc++'s math.h has an #include_next outside of system_headers.
"-Wno-gnu-include-next",
})
exportStringListStaticVariable("ClangExtraTargetCflags", []string{"-nostdlibinc"})
exportStringListStaticVariable("ClangExtraNoOverrideCflags", []string{
"-Werror=address-of-temporary",
// Bug: http://b/29823425 Disable -Wnull-dereference until the
// new cases detected by this warning in Clang r271374 are
// fixed.
//"-Werror=null-dereference",
"-Werror=return-type",
// http://b/72331526 Disable -Wtautological-* until the instances detected by these
// new warnings are fixed.
"-Wno-tautological-constant-compare",
"-Wno-tautological-type-limit-compare",
// http://b/145210666
"-Wno-reorder-init-list",
// http://b/145211066
"-Wno-implicit-int-float-conversion",
// New warnings to be fixed after clang-r377782.
"-Wno-int-in-bool-context", // http://b/148287349
"-Wno-sizeof-array-div", // http://b/148815709
"-Wno-tautological-overlap-compare", // http://b/148815696
// New warnings to be fixed after clang-r383902.
"-Wno-deprecated-copy", // http://b/153746672
"-Wno-range-loop-construct", // http://b/153747076
"-Wno-misleading-indentation", // http://b/153746954
"-Wno-zero-as-null-pointer-constant", // http://b/68236239
"-Wno-deprecated-anon-enum-enum-conversion", // http://b/153746485
"-Wno-deprecated-enum-enum-conversion", // http://b/153746563
"-Wno-string-compare", // http://b/153764102
"-Wno-enum-enum-conversion", // http://b/154138986
"-Wno-enum-float-conversion", // http://b/154255917
"-Wno-pessimizing-move", // http://b/154270751
// New warnings to be fixed after clang-r399163
"-Wno-non-c-typedef-for-linkage", // http://b/161304145
// New warnings to be fixed after clang-r407598
"-Wno-string-concatenation", // http://b/175068488
})
// Extra cflags for external third-party projects to disable warnings that
// are infeasible to fix in all the external projects and their upstream repos.
exportStringListStaticVariable("ClangExtraExternalCflags", []string{
"-Wno-enum-compare",
"-Wno-enum-compare-switch",
// http://b/72331524 Allow null pointer arithmetic until the instances detected by
// this new warning are fixed.
"-Wno-null-pointer-arithmetic",
// Bug: http://b/29823425 Disable -Wnull-dereference until the
// new instances detected by this warning are fixed.
"-Wno-null-dereference",
// http://b/145211477
"-Wno-pointer-compare",
// http://b/145211022
"-Wno-xor-used-as-pow",
// http://b/145211022
"-Wno-final-dtor-non-final-class",
// http://b/165945989
"-Wno-psabi",
})
} }
func ClangFilterUnknownCflags(cflags []string) []string { func ClangFilterUnknownCflags(cflags []string) []string {
@@ -255,26 +176,10 @@ func ClangRewriteTidyChecks(checks []string) []string {
return result return result
} }
func ClangFilterUnknownLldflags(lldflags []string) []string {
result, _ := android.FilterList(lldflags, ClangUnknownLldflags)
return result
}
func ClangLibToolingFilterUnknownCflags(libToolingFlags []string) []string { func ClangLibToolingFilterUnknownCflags(libToolingFlags []string) []string {
return android.RemoveListFromList(libToolingFlags, ClangLibToolingUnknownCflags) return android.RemoveListFromList(libToolingFlags, ClangLibToolingUnknownCflags)
} }
func inListSorted(s string, list []string) bool {
for _, l := range list {
if s == l {
return true
} else if s < l {
return false
}
}
return false
}
func sorted(list []string) []string { func sorted(list []string) []string {
sort.Strings(list) sort.Strings(list)
return list return list

View File

@@ -36,7 +36,6 @@ var (
// Make paths in deps files relative // Make paths in deps files relative
"-no-canonical-prefixes", "-no-canonical-prefixes",
"-fno-canonical-system-headers",
"-DNDEBUG", "-DNDEBUG",
"-UDEBUG", "-UDEBUG",
@@ -61,8 +60,6 @@ var (
commonGlobalConlyflags = []string{} commonGlobalConlyflags = []string{}
deviceGlobalCflags = []string{ deviceGlobalCflags = []string{
"-fdiagnostics-color",
"-ffunction-sections", "-ffunction-sections",
"-fdata-sections", "-fdata-sections",
"-fno-short-enums", "-fno-short-enums",
@@ -78,6 +75,7 @@ var (
"-Werror=address", "-Werror=address",
"-Werror=sequence-point", "-Werror=sequence-point",
"-Werror=format-security", "-Werror=format-security",
"-nostdlibinc",
} }
deviceGlobalCppflags = []string{ deviceGlobalCppflags = []string{
@@ -101,7 +99,7 @@ var (
"-Wl,--icf=safe", "-Wl,--icf=safe",
} }
deviceGlobalLldflags = append(ClangFilterUnknownLldflags(deviceGlobalLdflags), deviceGlobalLldflags = append(deviceGlobalLdflags,
[]string{ []string{
"-fuse-ld=lld", "-fuse-ld=lld",
}...) }...)
@@ -116,6 +114,15 @@ var (
commonGlobalCppflags = []string{ commonGlobalCppflags = []string{
"-Wsign-promo", "-Wsign-promo",
// -Wimplicit-fallthrough is not enabled by -Wall.
"-Wimplicit-fallthrough",
// Enable clang's thread-safety annotations in libcxx.
"-D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS",
// libc++'s math.h has an #include_next outside of system_headers.
"-Wno-gnu-include-next",
} }
noOverrideGlobalCflags = []string{ noOverrideGlobalCflags = []string{
@@ -133,6 +140,66 @@ var (
// http://b/161386391 for -Wno-pointer-to-int-cast // http://b/161386391 for -Wno-pointer-to-int-cast
"-Wno-pointer-to-int-cast", "-Wno-pointer-to-int-cast",
"-Werror=fortify-source", "-Werror=fortify-source",
"-Werror=address-of-temporary",
// Bug: http://b/29823425 Disable -Wnull-dereference until the
// new cases detected by this warning in Clang r271374 are
// fixed.
//"-Werror=null-dereference",
"-Werror=return-type",
// http://b/72331526 Disable -Wtautological-* until the instances detected by these
// new warnings are fixed.
"-Wno-tautological-constant-compare",
"-Wno-tautological-type-limit-compare",
// http://b/145210666
"-Wno-reorder-init-list",
// http://b/145211066
"-Wno-implicit-int-float-conversion",
// New warnings to be fixed after clang-r377782.
"-Wno-int-in-bool-context", // http://b/148287349
"-Wno-sizeof-array-div", // http://b/148815709
"-Wno-tautological-overlap-compare", // http://b/148815696
// New warnings to be fixed after clang-r383902.
"-Wno-deprecated-copy", // http://b/153746672
"-Wno-range-loop-construct", // http://b/153747076
"-Wno-misleading-indentation", // http://b/153746954
"-Wno-zero-as-null-pointer-constant", // http://b/68236239
"-Wno-deprecated-anon-enum-enum-conversion", // http://b/153746485
"-Wno-deprecated-enum-enum-conversion", // http://b/153746563
"-Wno-string-compare", // http://b/153764102
"-Wno-enum-enum-conversion", // http://b/154138986
"-Wno-enum-float-conversion", // http://b/154255917
"-Wno-pessimizing-move", // http://b/154270751
// New warnings to be fixed after clang-r399163
"-Wno-non-c-typedef-for-linkage", // http://b/161304145
// New warnings to be fixed after clang-r407598
"-Wno-string-concatenation", // http://b/175068488
}
// Extra cflags for external third-party projects to disable warnings that
// are infeasible to fix in all the external projects and their upstream repos.
extraExternalCflags = []string{
"-Wno-enum-compare",
"-Wno-enum-compare-switch",
// http://b/72331524 Allow null pointer arithmetic until the instances detected by
// this new warning are fixed.
"-Wno-null-pointer-arithmetic",
// Bug: http://b/29823425 Disable -Wnull-dereference until the
// new instances detected by this warning are fixed.
"-Wno-null-dereference",
// http://b/145211477
"-Wno-pointer-compare",
// http://b/145211022
"-Wno-xor-used-as-pow",
// http://b/145211022
"-Wno-final-dtor-non-final-class",
// http://b/165945989
"-Wno-psabi",
} }
IllegalFlags = []string{ IllegalFlags = []string{
@@ -177,7 +244,7 @@ func init() {
// Export the static default CommonClangGlobalCflags to Bazel. // Export the static default CommonClangGlobalCflags to Bazel.
// TODO(187086342): handle cflags that are set in VariableFuncs. // TODO(187086342): handle cflags that are set in VariableFuncs.
commonClangGlobalCFlags := append( commonClangGlobalCFlags := append(
ClangFilterUnknownCflags(commonGlobalCflags), commonGlobalCflags,
[]string{ []string{
"${ClangExtraCflags}", "${ClangExtraCflags}",
// Default to zero initialization. // Default to zero initialization.
@@ -187,7 +254,7 @@ func init() {
exportedStringListVars.Set("CommonClangGlobalCflags", commonClangGlobalCFlags) exportedStringListVars.Set("CommonClangGlobalCflags", commonClangGlobalCFlags)
pctx.VariableFunc("CommonClangGlobalCflags", func(ctx android.PackageVarContext) string { pctx.VariableFunc("CommonClangGlobalCflags", func(ctx android.PackageVarContext) string {
flags := ClangFilterUnknownCflags(commonGlobalCflags) flags := commonGlobalCflags
flags = append(flags, "${ClangExtraCflags}") flags = append(flags, "${ClangExtraCflags}")
// http://b/131390872 // http://b/131390872
@@ -208,21 +275,16 @@ func init() {
// Export the static default DeviceClangGlobalCflags to Bazel. // Export the static default DeviceClangGlobalCflags to Bazel.
// TODO(187086342): handle cflags that are set in VariableFuncs. // TODO(187086342): handle cflags that are set in VariableFuncs.
deviceClangGlobalCflags := append(ClangFilterUnknownCflags(deviceGlobalCflags), "${ClangExtraTargetCflags}") exportedStringListVars.Set("DeviceClangGlobalCflags", deviceGlobalCflags)
exportedStringListVars.Set("DeviceClangGlobalCflags", deviceClangGlobalCflags)
pctx.VariableFunc("DeviceClangGlobalCflags", func(ctx android.PackageVarContext) string { pctx.VariableFunc("DeviceClangGlobalCflags", func(ctx android.PackageVarContext) string {
if ctx.Config().Fuchsia() { return strings.Join(deviceGlobalCflags, " ")
return strings.Join(ClangFilterUnknownCflags(deviceGlobalCflags), " ")
} else {
return strings.Join(deviceClangGlobalCflags, " ")
}
}) })
exportStringListStaticVariable("HostClangGlobalCflags", ClangFilterUnknownCflags(hostGlobalCflags)) exportStringListStaticVariable("HostClangGlobalCflags", hostGlobalCflags)
exportStringListStaticVariable("NoOverrideClangGlobalCflags", append(ClangFilterUnknownCflags(noOverrideGlobalCflags), "${ClangExtraNoOverrideCflags}")) exportStringListStaticVariable("NoOverrideClangGlobalCflags", noOverrideGlobalCflags)
exportStringListStaticVariable("CommonClangGlobalCppflags", append(ClangFilterUnknownCflags(commonGlobalCppflags), "${ClangExtraCppflags}")) exportStringListStaticVariable("CommonClangGlobalCppflags", commonGlobalCppflags)
exportStringListStaticVariable("ClangExternalCflags", []string{"${ClangExtraExternalCflags}"}) exportStringListStaticVariable("ClangExternalCflags", extraExternalCflags)
// Everything in these lists is a crime against abstraction and dependency tracking. // Everything in these lists is a crime against abstraction and dependency tracking.
// Do not add anything to this list. // Do not add anything to this list.

View File

@@ -82,14 +82,14 @@ type Toolchain interface {
IncludeFlags() string IncludeFlags() string
ClangTriple() string ClangTriple() string
ToolchainClangCflags() string ToolchainCflags() string
ToolchainClangLdflags() string ToolchainLdflags() string
ClangAsflags() string Asflags() string
ClangCflags() string Cflags() string
ClangCppflags() string Cppflags() string
ClangLdflags() string Ldflags() string
ClangLldflags() string Lldflags() string
ClangInstructionSetFlags(string) (string, error) InstructionSetFlags(string) (string, error)
ndkTriple() string ndkTriple() string
@@ -136,18 +136,18 @@ func NDKTriple(toolchain Toolchain) string {
return triple return triple
} }
func (toolchainBase) ClangInstructionSetFlags(s string) (string, error) { func (toolchainBase) InstructionSetFlags(s string) (string, error) {
if s != "" { if s != "" {
return "", fmt.Errorf("instruction_set: %s is not a supported instruction set", s) return "", fmt.Errorf("instruction_set: %s is not a supported instruction set", s)
} }
return "", nil return "", nil
} }
func (toolchainBase) ToolchainClangCflags() string { func (toolchainBase) ToolchainCflags() string {
return "" return ""
} }
func (toolchainBase) ToolchainClangLdflags() string { func (toolchainBase) ToolchainLdflags() string {
return "" return ""
} }
@@ -159,7 +159,7 @@ func (toolchainBase) ExecutableSuffix() string {
return "" return ""
} }
func (toolchainBase) ClangAsflags() string { func (toolchainBase) Asflags() string {
return "" return ""
} }

View File

@@ -32,8 +32,6 @@ var (
"-Wl,--hash-style=gnu", "-Wl,--hash-style=gnu",
} }
x86_64Lldflags = ClangFilterUnknownLldflags(x86_64Ldflags)
x86_64ArchVariantCflags = map[string][]string{ x86_64ArchVariantCflags = map[string][]string{
"": []string{ "": []string{
"-march=x86-64", "-march=x86-64",
@@ -102,13 +100,11 @@ func init() {
pctx.StaticVariable("X86_64ToolchainLdflags", "-m64") pctx.StaticVariable("X86_64ToolchainLdflags", "-m64")
pctx.StaticVariable("X86_64Ldflags", strings.Join(x86_64Ldflags, " ")) pctx.StaticVariable("X86_64Ldflags", strings.Join(x86_64Ldflags, " "))
pctx.StaticVariable("X86_64Lldflags", strings.Join(x86_64Lldflags, " ")) pctx.StaticVariable("X86_64Lldflags", strings.Join(x86_64Ldflags, " "))
// Clang cflags // Clang cflags
pctx.StaticVariable("X86_64ClangCflags", strings.Join(ClangFilterUnknownCflags(x86_64Cflags), " ")) pctx.StaticVariable("X86_64ClangCflags", strings.Join(x86_64Cflags, " "))
pctx.StaticVariable("X86_64ClangLdflags", strings.Join(ClangFilterUnknownCflags(x86_64Ldflags), " ")) pctx.StaticVariable("X86_64ClangCppflags", strings.Join(x86_64Cppflags, " "))
pctx.StaticVariable("X86_64ClangLldflags", strings.Join(ClangFilterUnknownCflags(x86_64Lldflags), " "))
pctx.StaticVariable("X86_64ClangCppflags", strings.Join(ClangFilterUnknownCflags(x86_64Cppflags), " "))
// Yasm flags // Yasm flags
pctx.StaticVariable("X86_64YasmFlags", "-f elf64 -m amd64") pctx.StaticVariable("X86_64YasmFlags", "-f elf64 -m amd64")
@@ -118,14 +114,14 @@ func init() {
// Architecture variant cflags // Architecture variant cflags
for variant, cflags := range x86_64ArchVariantCflags { for variant, cflags := range x86_64ArchVariantCflags {
pctx.StaticVariable("X86_64"+variant+"VariantClangCflags", pctx.StaticVariable("X86_64"+variant+"VariantClangCflags",
strings.Join(ClangFilterUnknownCflags(cflags), " ")) strings.Join(cflags, " "))
} }
} }
type toolchainX86_64 struct { type toolchainX86_64 struct {
toolchainBionic toolchainBionic
toolchain64Bit toolchain64Bit
toolchainClangCflags string toolchainCflags string
} }
func (t *toolchainX86_64) Name() string { func (t *toolchainX86_64) Name() string {
@@ -152,27 +148,27 @@ func (t *toolchainX86_64) ClangTriple() string {
return t.GccTriple() return t.GccTriple()
} }
func (t *toolchainX86_64) ToolchainClangLdflags() string { func (t *toolchainX86_64) ToolchainLdflags() string {
return "${config.X86_64ToolchainLdflags}" return "${config.X86_64ToolchainLdflags}"
} }
func (t *toolchainX86_64) ToolchainClangCflags() string { func (t *toolchainX86_64) ToolchainCflags() string {
return t.toolchainClangCflags return t.toolchainCflags
} }
func (t *toolchainX86_64) ClangCflags() string { func (t *toolchainX86_64) Cflags() string {
return "${config.X86_64ClangCflags}" return "${config.X86_64ClangCflags}"
} }
func (t *toolchainX86_64) ClangCppflags() string { func (t *toolchainX86_64) Cppflags() string {
return "${config.X86_64ClangCppflags}" return "${config.X86_64ClangCppflags}"
} }
func (t *toolchainX86_64) ClangLdflags() string { func (t *toolchainX86_64) Ldflags() string {
return "${config.X86_64Ldflags}" return "${config.X86_64Ldflags}"
} }
func (t *toolchainX86_64) ClangLldflags() string { func (t *toolchainX86_64) Lldflags() string {
return "${config.X86_64Lldflags}" return "${config.X86_64Lldflags}"
} }
@@ -185,17 +181,17 @@ func (toolchainX86_64) LibclangRuntimeLibraryArch() string {
} }
func x86_64ToolchainFactory(arch android.Arch) Toolchain { func x86_64ToolchainFactory(arch android.Arch) Toolchain {
toolchainClangCflags := []string{ toolchainCflags := []string{
"${config.X86_64ToolchainCflags}", "${config.X86_64ToolchainCflags}",
"${config.X86_64" + arch.ArchVariant + "VariantClangCflags}", "${config.X86_64" + arch.ArchVariant + "VariantClangCflags}",
} }
for _, feature := range arch.ArchFeatures { for _, feature := range arch.ArchFeatures {
toolchainClangCflags = append(toolchainClangCflags, x86_64ArchFeatureCflags[feature]...) toolchainCflags = append(toolchainCflags, x86_64ArchFeatureCflags[feature]...)
} }
return &toolchainX86_64{ return &toolchainX86_64{
toolchainClangCflags: strings.Join(toolchainClangCflags, " "), toolchainCflags: strings.Join(toolchainCflags, " "),
} }
} }

View File

@@ -46,18 +46,6 @@ func (t *toolchainFuchsiaX8664) GccVersion() string {
return x86_64GccVersion return x86_64GccVersion
} }
func (t *toolchainFuchsiaX8664) Cflags() string {
return ""
}
func (t *toolchainFuchsiaX8664) Cppflags() string {
return ""
}
func (t *toolchainFuchsiaX8664) Ldflags() string {
return ""
}
func (t *toolchainFuchsiaX8664) IncludeFlags() string { func (t *toolchainFuchsiaX8664) IncludeFlags() string {
return "" return ""
} }
@@ -66,20 +54,20 @@ func (t *toolchainFuchsiaX8664) ClangTriple() string {
return "x86_64-fuchsia-android" return "x86_64-fuchsia-android"
} }
func (t *toolchainFuchsiaX8664) ClangCppflags() string { func (t *toolchainFuchsiaX8664) Cppflags() string {
return "-Wno-error=deprecated-declarations" return "-Wno-error=deprecated-declarations"
} }
func (t *toolchainFuchsiaX8664) ClangLdflags() string { func (t *toolchainFuchsiaX8664) Ldflags() string {
return "--target=x86_64-fuchsia --sysroot=" + fuchsiaSysRoot + " -L" + fuchsiaPrebuiltLibsRoot + "/x86_64-fuchsia/lib " + "-Lprebuilts/fuchsia_sdk/arch/x64/dist/" return "--target=x86_64-fuchsia --sysroot=" + fuchsiaSysRoot + " -L" + fuchsiaPrebuiltLibsRoot + "/x86_64-fuchsia/lib " + "-Lprebuilts/fuchsia_sdk/arch/x64/dist/"
} }
func (t *toolchainFuchsiaX8664) ClangLldflags() string { func (t *toolchainFuchsiaX8664) Lldflags() string {
return "--target=x86_64-fuchsia --sysroot=" + fuchsiaSysRoot + " -L" + fuchsiaPrebuiltLibsRoot + "/x86_64-fuchsia/lib " + "-Lprebuilts/fuchsia_sdk/arch/x64/dist/" return "--target=x86_64-fuchsia --sysroot=" + fuchsiaSysRoot + " -L" + fuchsiaPrebuiltLibsRoot + "/x86_64-fuchsia/lib " + "-Lprebuilts/fuchsia_sdk/arch/x64/dist/"
} }
func (t *toolchainFuchsiaX8664) ClangCflags() string { func (t *toolchainFuchsiaX8664) Cflags() string {
return "--target=x86_64-fuchsia --sysroot=" + fuchsiaSysRoot + " -I" + fuchsiaSysRoot + "/include" return "--target=x86_64-fuchsia --sysroot=" + fuchsiaSysRoot + " -I" + fuchsiaSysRoot + "/include"
} }
@@ -87,7 +75,7 @@ func (t *toolchainFuchsiaX8664) YasmFlags() string {
return "-f elf64 -m amd64" return "-f elf64 -m amd64"
} }
func (t *toolchainFuchsiaX8664) ToolchainClangCflags() string { func (t *toolchainFuchsiaX8664) ToolchainCflags() string {
return "-mssse3" return "-mssse3"
} }

View File

@@ -26,8 +26,6 @@ import (
var ( var (
darwinCflags = []string{ darwinCflags = []string{
"-fdiagnostics-color",
"-fPIC", "-fPIC",
"-funwind-tables", "-funwind-tables",
@@ -41,6 +39,9 @@ var (
"-DMACOSX_DEPLOYMENT_TARGET=${macMinVersion}", "-DMACOSX_DEPLOYMENT_TARGET=${macMinVersion}",
"-m64", "-m64",
"-integrated-as",
"-fstack-protector-strong",
} }
darwinLdflags = []string{ darwinLdflags = []string{
@@ -50,15 +51,6 @@ var (
"-m64", "-m64",
} }
darwinClangCflags = append(ClangFilterUnknownCflags(darwinCflags), []string{
"-integrated-as",
"-fstack-protector-strong",
}...)
darwinClangLdflags = ClangFilterUnknownCflags(darwinLdflags)
darwinClangLldflags = ClangFilterUnknownLldflags(darwinClangLdflags)
darwinSupportedSdkVersions = []string{ darwinSupportedSdkVersions = []string{
"10.10", "10.10",
"10.11", "10.11",
@@ -115,9 +107,9 @@ func init() {
pctx.StaticVariable("DarwinGccTriple", "i686-apple-darwin11") pctx.StaticVariable("DarwinGccTriple", "i686-apple-darwin11")
pctx.StaticVariable("DarwinClangCflags", strings.Join(darwinClangCflags, " ")) pctx.StaticVariable("DarwinClangCflags", strings.Join(darwinCflags, " "))
pctx.StaticVariable("DarwinClangLdflags", strings.Join(darwinClangLdflags, " ")) pctx.StaticVariable("DarwinClangLdflags", strings.Join(darwinLdflags, " "))
pctx.StaticVariable("DarwinClangLldflags", strings.Join(darwinClangLldflags, " ")) pctx.StaticVariable("DarwinClangLldflags", strings.Join(darwinLdflags, " "))
pctx.StaticVariable("DarwinYasmFlags", "-f macho -m amd64") pctx.StaticVariable("DarwinYasmFlags", "-f macho -m amd64")
} }
@@ -213,19 +205,19 @@ func (t *toolchainDarwin) ClangTriple() string {
return "x86_64-apple-darwin" return "x86_64-apple-darwin"
} }
func (t *toolchainDarwin) ClangCflags() string { func (t *toolchainDarwin) Cflags() string {
return "${config.DarwinClangCflags}" return "${config.DarwinClangCflags}"
} }
func (t *toolchainDarwin) ClangCppflags() string { func (t *toolchainDarwin) Cppflags() string {
return "" return ""
} }
func (t *toolchainDarwin) ClangLdflags() string { func (t *toolchainDarwin) Ldflags() string {
return "${config.DarwinClangLdflags}" return "${config.DarwinClangLdflags}"
} }
func (t *toolchainDarwin) ClangLldflags() string { func (t *toolchainDarwin) Lldflags() string {
return "${config.DarwinClangLldflags}" return "${config.DarwinClangLldflags}"
} }

View File

@@ -21,16 +21,14 @@ import (
) )
var ( var (
x86Cflags = []string{} x86Cflags = []string{
x86ClangCflags = append(x86Cflags, []string{
"-msse3", "-msse3",
// -mstackrealign is needed to realign stack in native code // -mstackrealign is needed to realign stack in native code
// that could be called from JNI, so that movaps instruction // that could be called from JNI, so that movaps instruction
// will work on assumed stack aligned local variables. // will work on assumed stack aligned local variables.
"-mstackrealign", "-mstackrealign",
}...) }
x86Cppflags = []string{} x86Cppflags = []string{}
@@ -38,8 +36,6 @@ var (
"-Wl,--hash-style=gnu", "-Wl,--hash-style=gnu",
} }
x86Lldflags = ClangFilterUnknownLldflags(x86Ldflags)
x86ArchVariantCflags = map[string][]string{ x86ArchVariantCflags = map[string][]string{
"": []string{ "": []string{
"-march=prescott", "-march=prescott",
@@ -49,35 +45,27 @@ var (
}, },
"atom": []string{ "atom": []string{
"-march=atom", "-march=atom",
"-mfpmath=sse",
}, },
"broadwell": []string{ "broadwell": []string{
"-march=broadwell", "-march=broadwell",
"-mfpmath=sse",
}, },
"haswell": []string{ "haswell": []string{
"-march=core-avx2", "-march=core-avx2",
"-mfpmath=sse",
}, },
"ivybridge": []string{ "ivybridge": []string{
"-march=core-avx-i", "-march=core-avx-i",
"-mfpmath=sse",
}, },
"sandybridge": []string{ "sandybridge": []string{
"-march=corei7", "-march=corei7",
"-mfpmath=sse",
}, },
"silvermont": []string{ "silvermont": []string{
"-march=slm", "-march=slm",
"-mfpmath=sse",
}, },
"skylake": []string{ "skylake": []string{
"-march=skylake", "-march=skylake",
"-mfpmath=sse",
}, },
"stoneyridge": []string{ "stoneyridge": []string{
"-march=bdver4", "-march=bdver4",
"-mfpmath=sse",
}, },
} }
@@ -113,13 +101,12 @@ func init() {
pctx.StaticVariable("X86ToolchainLdflags", "-m32") pctx.StaticVariable("X86ToolchainLdflags", "-m32")
pctx.StaticVariable("X86Ldflags", strings.Join(x86Ldflags, " ")) pctx.StaticVariable("X86Ldflags", strings.Join(x86Ldflags, " "))
pctx.StaticVariable("X86Lldflags", strings.Join(x86Lldflags, " ")) pctx.StaticVariable("X86Lldflags", strings.Join(x86Ldflags, " "))
// Clang cflags // Clang cflags
pctx.StaticVariable("X86ClangCflags", strings.Join(ClangFilterUnknownCflags(x86ClangCflags), " ")) pctx.StaticVariable("X86ClangLldflags", strings.Join(x86Ldflags, " "))
pctx.StaticVariable("X86ClangLdflags", strings.Join(ClangFilterUnknownCflags(x86Ldflags), " ")) pctx.StaticVariable("X86ClangCflags", strings.Join(x86Cflags, " "))
pctx.StaticVariable("X86ClangLldflags", strings.Join(ClangFilterUnknownCflags(x86Lldflags), " ")) pctx.StaticVariable("X86ClangCppflags", strings.Join(x86Cppflags, " "))
pctx.StaticVariable("X86ClangCppflags", strings.Join(ClangFilterUnknownCflags(x86Cppflags), " "))
// Yasm flags // Yasm flags
pctx.StaticVariable("X86YasmFlags", "-f elf32 -m x86") pctx.StaticVariable("X86YasmFlags", "-f elf32 -m x86")
@@ -129,14 +116,14 @@ func init() {
// Architecture variant cflags // Architecture variant cflags
for variant, cflags := range x86ArchVariantCflags { for variant, cflags := range x86ArchVariantCflags {
pctx.StaticVariable("X86"+variant+"VariantClangCflags", pctx.StaticVariable("X86"+variant+"VariantClangCflags",
strings.Join(ClangFilterUnknownCflags(cflags), " ")) strings.Join(cflags, " "))
} }
} }
type toolchainX86 struct { type toolchainX86 struct {
toolchainBionic toolchainBionic
toolchain32Bit toolchain32Bit
toolchainClangCflags string toolchainCflags string
} }
func (t *toolchainX86) Name() string { func (t *toolchainX86) Name() string {
@@ -163,27 +150,27 @@ func (t *toolchainX86) ClangTriple() string {
return "i686-linux-android" return "i686-linux-android"
} }
func (t *toolchainX86) ToolchainClangLdflags() string { func (t *toolchainX86) ToolchainLdflags() string {
return "${config.X86ToolchainLdflags}" return "${config.X86ToolchainLdflags}"
} }
func (t *toolchainX86) ToolchainClangCflags() string { func (t *toolchainX86) ToolchainCflags() string {
return t.toolchainClangCflags return t.toolchainCflags
} }
func (t *toolchainX86) ClangCflags() string { func (t *toolchainX86) Cflags() string {
return "${config.X86ClangCflags}" return "${config.X86ClangCflags}"
} }
func (t *toolchainX86) ClangCppflags() string { func (t *toolchainX86) Cppflags() string {
return "${config.X86ClangCppflags}" return "${config.X86ClangCppflags}"
} }
func (t *toolchainX86) ClangLdflags() string { func (t *toolchainX86) Ldflags() string {
return "${config.X86Ldflags}" return "${config.X86Ldflags}"
} }
func (t *toolchainX86) ClangLldflags() string { func (t *toolchainX86) Lldflags() string {
return "${config.X86Lldflags}" return "${config.X86Lldflags}"
} }
@@ -196,17 +183,17 @@ func (toolchainX86) LibclangRuntimeLibraryArch() string {
} }
func x86ToolchainFactory(arch android.Arch) Toolchain { func x86ToolchainFactory(arch android.Arch) Toolchain {
toolchainClangCflags := []string{ toolchainCflags := []string{
"${config.X86ToolchainCflags}", "${config.X86ToolchainCflags}",
"${config.X86" + arch.ArchVariant + "VariantClangCflags}", "${config.X86" + arch.ArchVariant + "VariantClangCflags}",
} }
for _, feature := range arch.ArchFeatures { for _, feature := range arch.ArchFeatures {
toolchainClangCflags = append(toolchainClangCflags, x86ArchFeatureCflags[feature]...) toolchainCflags = append(toolchainCflags, x86ArchFeatureCflags[feature]...)
} }
return &toolchainX86{ return &toolchainX86{
toolchainClangCflags: strings.Join(toolchainClangCflags, " "), toolchainCflags: strings.Join(toolchainCflags, " "),
} }
} }

View File

@@ -21,9 +21,7 @@ import (
) )
var ( var (
linuxBionicCflags = ClangFilterUnknownCflags([]string{ linuxBionicCflags = []string{
"-fdiagnostics-color",
"-Wa,--noexecstack", "-Wa,--noexecstack",
"-fPIC", "-fPIC",
@@ -34,21 +32,17 @@ var (
// From x86_64_device // From x86_64_device
"-ffunction-sections", "-ffunction-sections",
"-finline-functions",
"-finline-limit=300",
"-fno-short-enums", "-fno-short-enums",
"-funswitch-loops",
"-funwind-tables", "-funwind-tables",
"-fno-canonical-system-headers",
// Tell clang where the gcc toolchain is // Tell clang where the gcc toolchain is
"--gcc-toolchain=${LinuxBionicGccRoot}", "--gcc-toolchain=${LinuxBionicGccRoot}",
// This is normally in ClangExtraTargetCflags, but this is considered host // This is normally in ClangExtraTargetCflags, but this is considered host
"-nostdlibinc", "-nostdlibinc",
}) }
linuxBionicLdflags = ClangFilterUnknownCflags([]string{ linuxBionicLdflags = []string{
"-Wl,-z,noexecstack", "-Wl,-z,noexecstack",
"-Wl,-z,relro", "-Wl,-z,relro",
"-Wl,-z,now", "-Wl,-z,now",
@@ -60,9 +54,7 @@ var (
// Use the device gcc toolchain // Use the device gcc toolchain
"--gcc-toolchain=${LinuxBionicGccRoot}", "--gcc-toolchain=${LinuxBionicGccRoot}",
}) }
linuxBionicLldflags = ClangFilterUnknownLldflags(linuxBionicLdflags)
// Embed the linker into host bionic binaries. This is needed to support host bionic, // Embed the linker into host bionic binaries. This is needed to support host bionic,
// as the linux kernel requires that the ELF interpreter referenced by PT_INTERP be // as the linux kernel requires that the ELF interpreter referenced by PT_INTERP be
@@ -78,7 +70,7 @@ var (
func init() { func init() {
pctx.StaticVariable("LinuxBionicCflags", strings.Join(linuxBionicCflags, " ")) pctx.StaticVariable("LinuxBionicCflags", strings.Join(linuxBionicCflags, " "))
pctx.StaticVariable("LinuxBionicLdflags", strings.Join(linuxBionicLdflags, " ")) pctx.StaticVariable("LinuxBionicLdflags", strings.Join(linuxBionicLdflags, " "))
pctx.StaticVariable("LinuxBionicLldflags", strings.Join(linuxBionicLldflags, " ")) pctx.StaticVariable("LinuxBionicLldflags", strings.Join(linuxBionicLdflags, " "))
// Use the device gcc toolchain for now // Use the device gcc toolchain for now
pctx.StaticVariable("LinuxBionicGccRoot", "${X86_64GccRoot}") pctx.StaticVariable("LinuxBionicGccRoot", "${X86_64GccRoot}")
@@ -114,29 +106,29 @@ func (t *toolchainLinuxBionic) ClangTriple() string {
return "x86_64-linux-android" return "x86_64-linux-android"
} }
func (t *toolchainLinuxBionic) ClangCflags() string { func (t *toolchainLinuxBionic) Cflags() string {
return "${config.LinuxBionicCflags}" return "${config.LinuxBionicCflags}"
} }
func (t *toolchainLinuxBionic) ClangCppflags() string { func (t *toolchainLinuxBionic) Cppflags() string {
return "" return ""
} }
func (t *toolchainLinuxBionic) ClangLdflags() string { func (t *toolchainLinuxBionic) Ldflags() string {
return "${config.LinuxBionicLdflags}" return "${config.LinuxBionicLdflags}"
} }
func (t *toolchainLinuxBionic) ClangLldflags() string { func (t *toolchainLinuxBionic) Lldflags() string {
return "${config.LinuxBionicLldflags}" return "${config.LinuxBionicLldflags}"
} }
func (t *toolchainLinuxBionic) ToolchainClangCflags() string { func (t *toolchainLinuxBionic) ToolchainCflags() string {
return "-m64 -march=x86-64" + return "-m64 -march=x86-64" +
// TODO: We're not really android, but we don't have a triple yet b/31393676 // TODO: We're not really android, but we don't have a triple yet b/31393676
" -U__ANDROID__" " -U__ANDROID__"
} }
func (t *toolchainLinuxBionic) ToolchainClangLdflags() string { func (t *toolchainLinuxBionic) ToolchainLdflags() string {
return "-m64" return "-m64"
} }

View File

@@ -22,8 +22,6 @@ import (
var ( var (
linuxCflags = []string{ linuxCflags = []string{
"-fdiagnostics-color",
"-Wa,--noexecstack", "-Wa,--noexecstack",
"-fPIC", "-fPIC",
@@ -36,6 +34,10 @@ var (
//See bug 12708004. //See bug 12708004.
"-D__STDC_FORMAT_MACROS", "-D__STDC_FORMAT_MACROS",
"-D__STDC_CONSTANT_MACROS", "-D__STDC_CONSTANT_MACROS",
"--gcc-toolchain=${LinuxGccRoot}",
"--sysroot ${LinuxGccRoot}/sysroot",
"-fstack-protector-strong",
} }
linuxLdflags = []string{ linuxLdflags = []string{
@@ -43,12 +45,14 @@ var (
"-Wl,-z,relro", "-Wl,-z,relro",
"-Wl,-z,now", "-Wl,-z,now",
"-Wl,--no-undefined-version", "-Wl,--no-undefined-version",
"--gcc-toolchain=${LinuxGccRoot}",
"--sysroot ${LinuxGccRoot}/sysroot",
} }
// Extended cflags // Extended cflags
linuxX86Cflags = []string{ linuxX86Cflags = []string{
"-msse3", "-msse3",
"-mfpmath=sse",
"-m32", "-m32",
"-march=prescott", "-march=prescott",
"-D_FILE_OFFSET_BITS=64", "-D_FILE_OFFSET_BITS=64",
@@ -61,40 +65,17 @@ var (
linuxX86Ldflags = []string{ linuxX86Ldflags = []string{
"-m32", "-m32",
"-B${LinuxGccRoot}/lib/gcc/${LinuxGccTriple}/${LinuxGccVersion}/32",
"-L${LinuxGccRoot}/lib/gcc/${LinuxGccTriple}/${LinuxGccVersion}/32",
"-L${LinuxGccRoot}/${LinuxGccTriple}/lib32",
} }
linuxX8664Ldflags = []string{ linuxX8664Ldflags = []string{
"-m64", "-m64",
}
linuxClangCflags = append(ClangFilterUnknownCflags(linuxCflags), []string{
"--gcc-toolchain=${LinuxGccRoot}",
"--sysroot ${LinuxGccRoot}/sysroot",
"-fstack-protector-strong",
}...)
linuxClangLdflags = append(ClangFilterUnknownCflags(linuxLdflags), []string{
"--gcc-toolchain=${LinuxGccRoot}",
"--sysroot ${LinuxGccRoot}/sysroot",
}...)
linuxClangLldflags = ClangFilterUnknownLldflags(linuxClangLdflags)
linuxX86ClangLdflags = append(ClangFilterUnknownCflags(linuxX86Ldflags), []string{
"-B${LinuxGccRoot}/lib/gcc/${LinuxGccTriple}/${LinuxGccVersion}/32",
"-L${LinuxGccRoot}/lib/gcc/${LinuxGccTriple}/${LinuxGccVersion}/32",
"-L${LinuxGccRoot}/${LinuxGccTriple}/lib32",
}...)
linuxX86ClangLldflags = ClangFilterUnknownLldflags(linuxX86ClangLdflags)
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",
}...) }
linuxX8664ClangLldflags = ClangFilterUnknownLldflags(linuxX8664ClangLdflags)
linuxAvailableLibraries = addPrefix([]string{ linuxAvailableLibraries = addPrefix([]string{
"c", "c",
@@ -130,18 +111,16 @@ func init() {
pctx.StaticVariable("LinuxGccTriple", "x86_64-linux") pctx.StaticVariable("LinuxGccTriple", "x86_64-linux")
pctx.StaticVariable("LinuxClangCflags", strings.Join(linuxClangCflags, " ")) pctx.StaticVariable("LinuxClangCflags", strings.Join(linuxCflags, " "))
pctx.StaticVariable("LinuxClangLdflags", strings.Join(linuxClangLdflags, " ")) pctx.StaticVariable("LinuxClangLdflags", strings.Join(linuxLdflags, " "))
pctx.StaticVariable("LinuxClangLldflags", strings.Join(linuxClangLldflags, " ")) pctx.StaticVariable("LinuxClangLldflags", strings.Join(linuxLdflags, " "))
pctx.StaticVariable("LinuxX86ClangCflags", pctx.StaticVariable("LinuxX86ClangCflags", strings.Join(linuxX86Cflags, " "))
strings.Join(ClangFilterUnknownCflags(linuxX86Cflags), " ")) pctx.StaticVariable("LinuxX8664ClangCflags", strings.Join(linuxX8664Cflags, " "))
pctx.StaticVariable("LinuxX8664ClangCflags", pctx.StaticVariable("LinuxX86ClangLdflags", strings.Join(linuxX86Ldflags, " "))
strings.Join(ClangFilterUnknownCflags(linuxX8664Cflags), " ")) pctx.StaticVariable("LinuxX86ClangLldflags", strings.Join(linuxX86Ldflags, " "))
pctx.StaticVariable("LinuxX86ClangLdflags", strings.Join(linuxX86ClangLdflags, " ")) pctx.StaticVariable("LinuxX8664ClangLdflags", strings.Join(linuxX8664Ldflags, " "))
pctx.StaticVariable("LinuxX86ClangLldflags", strings.Join(linuxX86ClangLldflags, " ")) pctx.StaticVariable("LinuxX8664ClangLldflags", strings.Join(linuxX8664Ldflags, " "))
pctx.StaticVariable("LinuxX8664ClangLdflags", strings.Join(linuxX8664ClangLdflags, " "))
pctx.StaticVariable("LinuxX8664ClangLldflags", strings.Join(linuxX8664ClangLldflags, " "))
// Yasm flags // Yasm flags
pctx.StaticVariable("LinuxX86YasmFlags", "-f elf32 -m x86") pctx.StaticVariable("LinuxX86YasmFlags", "-f elf32 -m x86")
pctx.StaticVariable("LinuxX8664YasmFlags", "-f elf64 -m amd64") pctx.StaticVariable("LinuxX8664YasmFlags", "-f elf64 -m amd64")
@@ -189,11 +168,11 @@ func (t *toolchainLinuxX86) ClangTriple() string {
return "i686-linux-gnu" return "i686-linux-gnu"
} }
func (t *toolchainLinuxX86) ClangCflags() string { func (t *toolchainLinuxX86) Cflags() string {
return "${config.LinuxClangCflags} ${config.LinuxX86ClangCflags}" return "${config.LinuxClangCflags} ${config.LinuxX86ClangCflags}"
} }
func (t *toolchainLinuxX86) ClangCppflags() string { func (t *toolchainLinuxX86) Cppflags() string {
return "" return ""
} }
@@ -201,27 +180,27 @@ func (t *toolchainLinuxX8664) ClangTriple() string {
return "x86_64-linux-gnu" return "x86_64-linux-gnu"
} }
func (t *toolchainLinuxX8664) ClangCflags() string { func (t *toolchainLinuxX8664) Cflags() string {
return "${config.LinuxClangCflags} ${config.LinuxX8664ClangCflags}" return "${config.LinuxClangCflags} ${config.LinuxX8664ClangCflags}"
} }
func (t *toolchainLinuxX8664) ClangCppflags() string { func (t *toolchainLinuxX8664) Cppflags() string {
return "" return ""
} }
func (t *toolchainLinuxX86) ClangLdflags() string { func (t *toolchainLinuxX86) Ldflags() string {
return "${config.LinuxClangLdflags} ${config.LinuxX86ClangLdflags}" return "${config.LinuxClangLdflags} ${config.LinuxX86ClangLdflags}"
} }
func (t *toolchainLinuxX86) ClangLldflags() string { func (t *toolchainLinuxX86) Lldflags() string {
return "${config.LinuxClangLldflags} ${config.LinuxX86ClangLldflags}" return "${config.LinuxClangLldflags} ${config.LinuxX86ClangLldflags}"
} }
func (t *toolchainLinuxX8664) ClangLdflags() string { func (t *toolchainLinuxX8664) Ldflags() string {
return "${config.LinuxClangLdflags} ${config.LinuxX8664ClangLdflags}" return "${config.LinuxClangLdflags} ${config.LinuxX8664ClangLdflags}"
} }
func (t *toolchainLinuxX8664) ClangLldflags() string { func (t *toolchainLinuxX8664) Lldflags() string {
return "${config.LinuxClangLldflags} ${config.LinuxX8664ClangLldflags}" return "${config.LinuxClangLldflags} ${config.LinuxX8664ClangLldflags}"
} }

View File

@@ -44,32 +44,28 @@ var (
"--sysroot ${WindowsGccRoot}/${WindowsGccTriple}", "--sysroot ${WindowsGccRoot}/${WindowsGccTriple}",
} }
windowsClangCflags = append(ClangFilterUnknownCflags(windowsCflags), []string{}...)
windowsIncludeFlags = []string{ windowsIncludeFlags = []string{
"-isystem ${WindowsGccRoot}/${WindowsGccTriple}/include", "-isystem ${WindowsGccRoot}/${WindowsGccTriple}/include",
} }
windowsClangCppflags = []string{} windowsCppflags = []string{}
windowsX86ClangCppflags = []string{ windowsX86Cppflags = []string{
// Use SjLj exceptions for 32-bit. libgcc_eh implements SjLj // Use SjLj exceptions for 32-bit. libgcc_eh implements SjLj
// exception model for 32-bit. // exception model for 32-bit.
"-fsjlj-exceptions", "-fsjlj-exceptions",
} }
windowsX8664ClangCppflags = []string{} windowsX8664Cppflags = []string{}
windowsLdflags = []string{ windowsLdflags = []string{
"--enable-stdcall-fixup",
"-Wl,--dynamicbase", "-Wl,--dynamicbase",
"-Wl,--nxcompat", "-Wl,--nxcompat",
} }
windowsLldflags = []string{ windowsLldflags = append(windowsLdflags, []string{
"-Wl,--Xlink=-Brepro", // Enable deterministic build "-Wl,--Xlink=-Brepro", // Enable deterministic build
} }...)
windowsClangLdflags = append(ClangFilterUnknownCflags(windowsLdflags), []string{}...)
windowsClangLldflags = append(ClangFilterUnknownLldflags(windowsClangLdflags), windowsLldflags...)
windowsX86Cflags = []string{ windowsX86Cflags = []string{
"-m32", "-m32",
@@ -84,28 +80,24 @@ var (
"-Wl,--large-address-aware", "-Wl,--large-address-aware",
"-L${WindowsGccRoot}/${WindowsGccTriple}/lib32", "-L${WindowsGccRoot}/${WindowsGccTriple}/lib32",
"-static-libgcc", "-static-libgcc",
}
windowsX86ClangLdflags = append(ClangFilterUnknownCflags(windowsX86Ldflags), []string{
"-B${WindowsGccRoot}/${WindowsGccTriple}/bin", "-B${WindowsGccRoot}/${WindowsGccTriple}/bin",
"-B${WindowsGccRoot}/lib/gcc/${WindowsGccTriple}/4.8.3/32", "-B${WindowsGccRoot}/lib/gcc/${WindowsGccTriple}/4.8.3/32",
"-L${WindowsGccRoot}/lib/gcc/${WindowsGccTriple}/4.8.3/32", "-L${WindowsGccRoot}/lib/gcc/${WindowsGccTriple}/4.8.3/32",
"-B${WindowsGccRoot}/${WindowsGccTriple}/lib32", "-B${WindowsGccRoot}/${WindowsGccTriple}/lib32",
}...) }
windowsX86ClangLldflags = ClangFilterUnknownLldflags(windowsX86ClangLdflags)
windowsX8664Ldflags = []string{ windowsX8664Ldflags = []string{
"-m64", "-m64",
"-L${WindowsGccRoot}/${WindowsGccTriple}/lib64", "-L${WindowsGccRoot}/${WindowsGccTriple}/lib64",
"-Wl,--high-entropy-va", "-Wl,--high-entropy-va",
"-static-libgcc", "-static-libgcc",
}
windowsX8664ClangLdflags = append(ClangFilterUnknownCflags(windowsX8664Ldflags), []string{
"-B${WindowsGccRoot}/${WindowsGccTriple}/bin", "-B${WindowsGccRoot}/${WindowsGccTriple}/bin",
"-B${WindowsGccRoot}/lib/gcc/${WindowsGccTriple}/4.8.3", "-B${WindowsGccRoot}/lib/gcc/${WindowsGccTriple}/4.8.3",
"-L${WindowsGccRoot}/lib/gcc/${WindowsGccTriple}/4.8.3", "-L${WindowsGccRoot}/lib/gcc/${WindowsGccTriple}/4.8.3",
"-B${WindowsGccRoot}/${WindowsGccTriple}/lib64", "-B${WindowsGccRoot}/${WindowsGccTriple}/lib64",
}...) }
windowsX8664ClangLldflags = ClangFilterUnknownLldflags(windowsX8664ClangLdflags)
windowsAvailableLibraries = addPrefix([]string{ windowsAvailableLibraries = addPrefix([]string{
"gdi32", "gdi32",
@@ -138,21 +130,19 @@ func init() {
pctx.StaticVariable("WindowsGccTriple", "x86_64-w64-mingw32") pctx.StaticVariable("WindowsGccTriple", "x86_64-w64-mingw32")
pctx.StaticVariable("WindowsClangCflags", strings.Join(windowsClangCflags, " ")) pctx.StaticVariable("WindowsClangCflags", strings.Join(windowsCflags, " "))
pctx.StaticVariable("WindowsClangLdflags", strings.Join(windowsClangLdflags, " ")) pctx.StaticVariable("WindowsClangLdflags", strings.Join(windowsLdflags, " "))
pctx.StaticVariable("WindowsClangLldflags", strings.Join(windowsClangLldflags, " ")) pctx.StaticVariable("WindowsClangLldflags", strings.Join(windowsLldflags, " "))
pctx.StaticVariable("WindowsClangCppflags", strings.Join(windowsClangCppflags, " ")) pctx.StaticVariable("WindowsClangCppflags", strings.Join(windowsCppflags, " "))
pctx.StaticVariable("WindowsX86ClangCflags", pctx.StaticVariable("WindowsX86ClangCflags", strings.Join(windowsX86Cflags, " "))
strings.Join(ClangFilterUnknownCflags(windowsX86Cflags), " ")) pctx.StaticVariable("WindowsX8664ClangCflags", strings.Join(windowsX8664Cflags, " "))
pctx.StaticVariable("WindowsX8664ClangCflags", pctx.StaticVariable("WindowsX86ClangLdflags", strings.Join(windowsX86Ldflags, " "))
strings.Join(ClangFilterUnknownCflags(windowsX8664Cflags), " ")) pctx.StaticVariable("WindowsX86ClangLldflags", strings.Join(windowsX86Ldflags, " "))
pctx.StaticVariable("WindowsX86ClangLdflags", strings.Join(windowsX86ClangLdflags, " ")) pctx.StaticVariable("WindowsX8664ClangLdflags", strings.Join(windowsX8664Ldflags, " "))
pctx.StaticVariable("WindowsX86ClangLldflags", strings.Join(windowsX86ClangLldflags, " ")) pctx.StaticVariable("WindowsX8664ClangLldflags", strings.Join(windowsX8664Ldflags, " "))
pctx.StaticVariable("WindowsX8664ClangLdflags", strings.Join(windowsX8664ClangLdflags, " ")) pctx.StaticVariable("WindowsX86ClangCppflags", strings.Join(windowsX86Cppflags, " "))
pctx.StaticVariable("WindowsX8664ClangLldflags", strings.Join(windowsX8664ClangLldflags, " ")) pctx.StaticVariable("WindowsX8664ClangCppflags", strings.Join(windowsX8664Cppflags, " "))
pctx.StaticVariable("WindowsX86ClangCppflags", strings.Join(windowsX86ClangCppflags, " "))
pctx.StaticVariable("WindowsX8664ClangCppflags", strings.Join(windowsX8664ClangCppflags, " "))
pctx.StaticVariable("WindowsIncludeFlags", strings.Join(windowsIncludeFlags, " ")) pctx.StaticVariable("WindowsIncludeFlags", strings.Join(windowsIncludeFlags, " "))
// Yasm flags // Yasm flags
@@ -214,35 +204,35 @@ func (t *toolchainWindowsX8664) ClangTriple() string {
return "x86_64-pc-windows-gnu" return "x86_64-pc-windows-gnu"
} }
func (t *toolchainWindowsX86) ClangCflags() string { func (t *toolchainWindowsX86) Cflags() string {
return "${config.WindowsClangCflags} ${config.WindowsX86ClangCflags}" return "${config.WindowsClangCflags} ${config.WindowsX86ClangCflags}"
} }
func (t *toolchainWindowsX8664) ClangCflags() string { func (t *toolchainWindowsX8664) Cflags() string {
return "${config.WindowsClangCflags} ${config.WindowsX8664ClangCflags}" return "${config.WindowsClangCflags} ${config.WindowsX8664ClangCflags}"
} }
func (t *toolchainWindowsX86) ClangCppflags() string { func (t *toolchainWindowsX86) Cppflags() string {
return "${config.WindowsClangCppflags} ${config.WindowsX86ClangCppflags}" return "${config.WindowsClangCppflags} ${config.WindowsX86ClangCppflags}"
} }
func (t *toolchainWindowsX8664) ClangCppflags() string { func (t *toolchainWindowsX8664) Cppflags() string {
return "${config.WindowsClangCppflags} ${config.WindowsX8664ClangCppflags}" return "${config.WindowsClangCppflags} ${config.WindowsX8664ClangCppflags}"
} }
func (t *toolchainWindowsX86) ClangLdflags() string { func (t *toolchainWindowsX86) Ldflags() string {
return "${config.WindowsClangLdflags} ${config.WindowsX86ClangLdflags}" return "${config.WindowsClangLdflags} ${config.WindowsX86ClangLdflags}"
} }
func (t *toolchainWindowsX86) ClangLldflags() string { func (t *toolchainWindowsX86) Lldflags() string {
return "${config.WindowsClangLldflags} ${config.WindowsX86ClangLldflags}" return "${config.WindowsClangLldflags} ${config.WindowsX86ClangLldflags}"
} }
func (t *toolchainWindowsX8664) ClangLdflags() string { func (t *toolchainWindowsX8664) Ldflags() string {
return "${config.WindowsClangLdflags} ${config.WindowsX8664ClangLdflags}" return "${config.WindowsClangLdflags} ${config.WindowsX8664ClangLdflags}"
} }
func (t *toolchainWindowsX8664) ClangLldflags() string { func (t *toolchainWindowsX8664) Lldflags() string {
return "${config.WindowsClangLldflags} ${config.WindowsX8664ClangLldflags}" return "${config.WindowsClangLldflags} ${config.WindowsX8664ClangLldflags}"
} }

View File

@@ -479,9 +479,9 @@ func (linker *baseLinker) linkerFlags(ctx ModuleContext, flags Flags) Flags {
} }
if linker.useClangLld(ctx) { if linker.useClangLld(ctx) {
flags.Global.LdFlags = append(flags.Global.LdFlags, toolchain.ClangLldflags()) flags.Global.LdFlags = append(flags.Global.LdFlags, toolchain.Lldflags())
} else { } else {
flags.Global.LdFlags = append(flags.Global.LdFlags, toolchain.ClangLdflags()) flags.Global.LdFlags = append(flags.Global.LdFlags, toolchain.Ldflags())
} }
if !ctx.toolchain().Bionic() && !ctx.Fuchsia() { if !ctx.toolchain().Bionic() && !ctx.Fuchsia() {
@@ -535,7 +535,7 @@ func (linker *baseLinker) linkerFlags(ctx ModuleContext, flags Flags) Flags {
flags.Global.LdFlags = append(flags.Global.LdFlags, "-Wl,--hash-style=both") flags.Global.LdFlags = append(flags.Global.LdFlags, "-Wl,--hash-style=both")
} }
flags.Global.LdFlags = append(flags.Global.LdFlags, toolchain.ToolchainClangLdflags()) flags.Global.LdFlags = append(flags.Global.LdFlags, toolchain.ToolchainLdflags())
if Bool(linker.Properties.Group_static_libs) { if Bool(linker.Properties.Group_static_libs) {
flags.GroupStaticLibs = true flags.GroupStaticLibs = true

View File

@@ -212,13 +212,13 @@ func makeVarsToolchain(ctx android.MakeVarsContext, secondPrefix string,
ctx.StrictRaw(makePrefix+"C_SYSTEM_INCLUDES", strings.Join(systemIncludes, " ")) ctx.StrictRaw(makePrefix+"C_SYSTEM_INCLUDES", strings.Join(systemIncludes, " "))
if target.Arch.ArchType == android.Arm { if target.Arch.ArchType == android.Arm {
flags, err := toolchain.ClangInstructionSetFlags("arm") flags, err := toolchain.InstructionSetFlags("arm")
if err != nil { if err != nil {
panic(err) panic(err)
} }
ctx.Strict(makePrefix+"arm_CFLAGS", flags) ctx.Strict(makePrefix+"arm_CFLAGS", flags)
flags, err = toolchain.ClangInstructionSetFlags("thumb") flags, err = toolchain.InstructionSetFlags("thumb")
if err != nil { if err != nil {
panic(err) panic(err)
} }
@@ -230,29 +230,29 @@ func makeVarsToolchain(ctx android.MakeVarsContext, secondPrefix string,
ctx.Strict(clangPrefix+"TRIPLE", toolchain.ClangTriple()) ctx.Strict(clangPrefix+"TRIPLE", toolchain.ClangTriple())
ctx.Strict(clangPrefix+"GLOBAL_CFLAGS", strings.Join([]string{ ctx.Strict(clangPrefix+"GLOBAL_CFLAGS", strings.Join([]string{
toolchain.ClangCflags(), toolchain.Cflags(),
"${config.CommonClangGlobalCflags}", "${config.CommonClangGlobalCflags}",
fmt.Sprintf("${config.%sClangGlobalCflags}", hod), fmt.Sprintf("${config.%sClangGlobalCflags}", hod),
toolchain.ToolchainClangCflags(), toolchain.ToolchainCflags(),
clangExtras, clangExtras,
productExtraCflags, productExtraCflags,
}, " ")) }, " "))
ctx.Strict(clangPrefix+"GLOBAL_CPPFLAGS", strings.Join([]string{ ctx.Strict(clangPrefix+"GLOBAL_CPPFLAGS", strings.Join([]string{
"${config.CommonClangGlobalCppflags}", "${config.CommonClangGlobalCppflags}",
fmt.Sprintf("${config.%sGlobalCppflags}", hod), fmt.Sprintf("${config.%sGlobalCppflags}", hod),
toolchain.ClangCppflags(), toolchain.Cppflags(),
}, " ")) }, " "))
ctx.Strict(clangPrefix+"GLOBAL_LDFLAGS", strings.Join([]string{ ctx.Strict(clangPrefix+"GLOBAL_LDFLAGS", strings.Join([]string{
fmt.Sprintf("${config.%sGlobalLdflags}", hod), fmt.Sprintf("${config.%sGlobalLdflags}", hod),
toolchain.ClangLdflags(), toolchain.Ldflags(),
toolchain.ToolchainClangLdflags(), toolchain.ToolchainLdflags(),
productExtraLdflags, productExtraLdflags,
clangExtras, clangExtras,
}, " ")) }, " "))
ctx.Strict(clangPrefix+"GLOBAL_LLDFLAGS", strings.Join([]string{ ctx.Strict(clangPrefix+"GLOBAL_LLDFLAGS", strings.Join([]string{
fmt.Sprintf("${config.%sGlobalLldflags}", hod), fmt.Sprintf("${config.%sGlobalLldflags}", hod),
toolchain.ClangLldflags(), toolchain.Lldflags(),
toolchain.ToolchainClangLdflags(), toolchain.ToolchainLdflags(),
productExtraLdflags, productExtraLdflags,
clangExtras, clangExtras,
}, " ")) }, " "))

View File

@@ -231,7 +231,7 @@ func (object *objectLinker) linkerDeps(ctx DepsContext, deps Deps) Deps {
} }
func (object *objectLinker) linkerFlags(ctx ModuleContext, flags Flags) Flags { func (object *objectLinker) linkerFlags(ctx ModuleContext, flags Flags) Flags {
flags.Global.LdFlags = append(flags.Global.LdFlags, ctx.toolchain().ToolchainClangLdflags()) flags.Global.LdFlags = append(flags.Global.LdFlags, ctx.toolchain().ToolchainLdflags())
if lds := android.OptionalPathForModuleSrc(ctx, object.Properties.Linker_script); lds.Valid() { if lds := android.OptionalPathForModuleSrc(ctx, object.Properties.Linker_script); lds.Valid() {
flags.Local.LdFlags = append(flags.Local.LdFlags, "-Wl,-T,"+lds.String()) flags.Local.LdFlags = append(flags.Local.LdFlags, "-Wl,-T,"+lds.String())

View File

@@ -144,8 +144,8 @@ func (b *bindgenDecorator) GenerateSource(ctx ModuleContext, deps PathDeps) andr
// Toolchain clang flags // Toolchain clang flags
cflags = append(cflags, "-target "+ccToolchain.ClangTriple()) cflags = append(cflags, "-target "+ccToolchain.ClangTriple())
cflags = append(cflags, strings.ReplaceAll(ccToolchain.ClangCflags(), "${config.", "${cc_config.")) cflags = append(cflags, strings.ReplaceAll(ccToolchain.Cflags(), "${config.", "${cc_config."))
cflags = append(cflags, strings.ReplaceAll(ccToolchain.ToolchainClangCflags(), "${config.", "${cc_config.")) cflags = append(cflags, strings.ReplaceAll(ccToolchain.ToolchainCflags(), "${config.", "${cc_config."))
// Dependency clang flags and include paths // Dependency clang flags and include paths
cflags = append(cflags, deps.depClangFlags...) cflags = append(cflags, deps.depClangFlags...)