cc: Filter out unknown clang cflags from InstructionSetFlags
-funswitch-loops is in the arm instruction set flags, but unsupported by
clang. Make removes clang unknown cflags from the instruction set flags.
This was producing a warning, causing -Werror to fail on libm.
Change-Id: Ibc69c9af04a738aa8adeb5549900e2b53ab754f0
diff --git a/cc/arm_device.go b/cc/arm_device.go
index ce8a1cb..8f3485e 100644
--- a/cc/arm_device.go
+++ b/cc/arm_device.go
@@ -172,6 +172,10 @@
pctx.StaticVariable("armClangLdflags", strings.Join(clangFilterUnknownCflags(armLdflags), " "))
pctx.StaticVariable("armClangCppflags", strings.Join(clangFilterUnknownCflags(armCppflags), " "))
+ // Clang ARM vs. Thumb instruction set cflags
+ pctx.StaticVariable("armClangArmCflags", strings.Join(clangFilterUnknownCflags(armArmCflags), " "))
+ pctx.StaticVariable("armClangThumbCflags", strings.Join(clangFilterUnknownCflags(armThumbCflags), " "))
+
// Clang cpu variant cflags
pctx.StaticVariable("armClangArmv5TECflags",
strings.Join(armClangArchVariantCflags["armv5te"], " "))
@@ -291,6 +295,17 @@
return t.ldflags
}
+func (t *toolchainArm) ClangInstructionSetFlags(isa string) (string, error) {
+ switch isa {
+ case "arm":
+ return "${armClangArmCflags}", nil
+ case "thumb", "":
+ return "${armClangThumbCflags}", nil
+ default:
+ return t.toolchainBase.ClangInstructionSetFlags(isa)
+ }
+}
+
func armToolchainFactory(archVariant string, cpuVariant string) Toolchain {
var fixCortexA8 string
switch cpuVariant {
diff --git a/cc/cc.go b/cc/cc.go
index 2278ec0..c4e1d0e 100644
--- a/cc/cc.go
+++ b/cc/cc.go
@@ -488,15 +488,6 @@
}...)
}
- instructionSet := c.Properties.Instruction_set
- instructionSetFlags, err := toolchain.InstructionSetFlags(instructionSet)
- if err != nil {
- ctx.ModuleErrorf("%s", err)
- }
-
- // TODO: debug
- flags.CFlags = append(flags.CFlags, c.Properties.Release.Cflags...)
-
if !ctx.ContainsProperty("clang") {
if ctx.Host() {
flags.Clang = true
@@ -507,6 +498,18 @@
}
}
+ instructionSet := c.Properties.Instruction_set
+ instructionSetFlags, err := toolchain.InstructionSetFlags(instructionSet)
+ if flags.Clang {
+ instructionSetFlags, err = toolchain.ClangInstructionSetFlags(instructionSet)
+ }
+ if err != nil {
+ ctx.ModuleErrorf("%s", err)
+ }
+
+ // TODO: debug
+ flags.CFlags = append(flags.CFlags, c.Properties.Release.Cflags...)
+
if flags.Clang {
flags.CFlags = clangFilterUnknownCflags(flags.CFlags)
flags.CFlags = append(flags.CFlags, c.Properties.Clang_cflags...)
diff --git a/cc/toolchain.go b/cc/toolchain.go
index d188845..e17e345 100644
--- a/cc/toolchain.go
+++ b/cc/toolchain.go
@@ -49,6 +49,7 @@
ClangCflags() string
ClangCppflags() string
ClangLdflags() string
+ ClangInstructionSetFlags(string) (string, error)
Is64Bit() bool
}
@@ -63,6 +64,13 @@
return "", nil
}
+func (toolchainBase) ClangInstructionSetFlags(s string) (string, error) {
+ if s != "" {
+ return "", fmt.Errorf("instruction_set: %s is not a supported instruction set", s)
+ }
+ return "", nil
+}
+
type toolchain64Bit struct {
toolchainBase
}