| Colin Cross | 3f40fa4 | 2015-01-30 17:27:36 -0800 | [diff] [blame] | 1 | package cc | 
|  | 2 |  | 
|  | 3 | import ( | 
|  | 4 | "sort" | 
|  | 5 | "strings" | 
|  | 6 | ) | 
|  | 7 |  | 
|  | 8 | // Cflags that should be filtered out when compiling with clang | 
| Dan Willemsen | e654045 | 2015-10-20 15:21:33 -0700 | [diff] [blame] | 9 | var clangUnknownCflags = sorted([]string{ | 
| Colin Cross | 3f40fa4 | 2015-01-30 17:27:36 -0800 | [diff] [blame] | 10 | "-finline-functions", | 
|  | 11 | "-finline-limit=64", | 
|  | 12 | "-fno-canonical-system-headers", | 
| Dan Willemsen | 3bf6b47 | 2015-09-11 17:41:10 -0700 | [diff] [blame] | 13 | "-Wno-clobbered", | 
|  | 14 | "-fno-devirtualize", | 
| Colin Cross | 3f40fa4 | 2015-01-30 17:27:36 -0800 | [diff] [blame] | 15 | "-fno-tree-sra", | 
| Colin Cross | a360e8b | 2015-03-16 16:22:28 -0700 | [diff] [blame] | 16 | "-fprefetch-loop-arrays", | 
| Colin Cross | 3f40fa4 | 2015-01-30 17:27:36 -0800 | [diff] [blame] | 17 | "-funswitch-loops", | 
| Dan Willemsen | e8c5237 | 2016-05-19 16:57:11 -0700 | [diff] [blame] | 18 | "-Werror=unused-but-set-parameter", | 
|  | 19 | "-Werror=unused-but-set-variable", | 
| Colin Cross | 3f40fa4 | 2015-01-30 17:27:36 -0800 | [diff] [blame] | 20 | "-Wmaybe-uninitialized", | 
| Dan Willemsen | 3bf6b47 | 2015-09-11 17:41:10 -0700 | [diff] [blame] | 21 | "-Wno-error=clobbered", | 
| Colin Cross | 3f40fa4 | 2015-01-30 17:27:36 -0800 | [diff] [blame] | 22 | "-Wno-error=maybe-uninitialized", | 
| Colin Cross | 74d1ec0 | 2015-04-28 13:30:13 -0700 | [diff] [blame] | 23 | "-Wno-error=unused-but-set-parameter", | 
|  | 24 | "-Wno-error=unused-but-set-variable", | 
| Colin Cross | 3f40fa4 | 2015-01-30 17:27:36 -0800 | [diff] [blame] | 25 | "-Wno-free-nonheap-object", | 
|  | 26 | "-Wno-literal-suffix", | 
|  | 27 | "-Wno-maybe-uninitialized", | 
|  | 28 | "-Wno-old-style-declaration", | 
|  | 29 | "-Wno-psabi", | 
| Colin Cross | 3f40fa4 | 2015-01-30 17:27:36 -0800 | [diff] [blame] | 30 | "-Wno-unused-but-set-parameter", | 
| Colin Cross | 74d1ec0 | 2015-04-28 13:30:13 -0700 | [diff] [blame] | 31 | "-Wno-unused-but-set-variable", | 
| Colin Cross | 3f40fa4 | 2015-01-30 17:27:36 -0800 | [diff] [blame] | 32 | "-Wno-unused-local-typedefs", | 
| Colin Cross | 62ec5f4 | 2015-03-18 17:20:28 -0700 | [diff] [blame] | 33 | "-Wunused-but-set-parameter", | 
| Colin Cross | 74d1ec0 | 2015-04-28 13:30:13 -0700 | [diff] [blame] | 34 | "-Wunused-but-set-variable", | 
| Dan Willemsen | e654045 | 2015-10-20 15:21:33 -0700 | [diff] [blame] | 35 | "-fdiagnostics-color", | 
| Colin Cross | 3f40fa4 | 2015-01-30 17:27:36 -0800 | [diff] [blame] | 36 |  | 
|  | 37 | // arm + arm64 + mips + mips64 | 
|  | 38 | "-fgcse-after-reload", | 
|  | 39 | "-frerun-cse-after-loop", | 
|  | 40 | "-frename-registers", | 
|  | 41 | "-fno-strict-volatile-bitfields", | 
|  | 42 |  | 
|  | 43 | // arm + arm64 | 
|  | 44 | "-fno-align-jumps", | 
| Colin Cross | 3f40fa4 | 2015-01-30 17:27:36 -0800 | [diff] [blame] | 45 |  | 
|  | 46 | // arm | 
|  | 47 | "-mthumb-interwork", | 
|  | 48 | "-fno-builtin-sin", | 
|  | 49 | "-fno-caller-saves", | 
|  | 50 | "-fno-early-inlining", | 
|  | 51 | "-fno-move-loop-invariants", | 
|  | 52 | "-fno-partial-inlining", | 
|  | 53 | "-fno-tree-copy-prop", | 
|  | 54 | "-fno-tree-loop-optimize", | 
|  | 55 |  | 
|  | 56 | // mips + mips64 | 
|  | 57 | "-msynci", | 
| Dan Willemsen | 3bf6b47 | 2015-09-11 17:41:10 -0700 | [diff] [blame] | 58 | "-mno-synci", | 
| Colin Cross | 3f40fa4 | 2015-01-30 17:27:36 -0800 | [diff] [blame] | 59 | "-mno-fused-madd", | 
|  | 60 |  | 
|  | 61 | // x86 + x86_64 | 
|  | 62 | "-finline-limit=300", | 
|  | 63 | "-fno-inline-functions-called-once", | 
|  | 64 | "-mfpmath=sse", | 
|  | 65 | "-mbionic", | 
| Dan Willemsen | e654045 | 2015-10-20 15:21:33 -0700 | [diff] [blame] | 66 | }) | 
| Colin Cross | 3f40fa4 | 2015-01-30 17:27:36 -0800 | [diff] [blame] | 67 |  | 
|  | 68 | func init() { | 
| Colin Cross | 3f40fa4 | 2015-01-30 17:27:36 -0800 | [diff] [blame] | 69 | pctx.StaticVariable("clangExtraCflags", strings.Join([]string{ | 
|  | 70 | "-D__compiler_offsetof=__builtin_offsetof", | 
|  | 71 |  | 
|  | 72 | // Help catch common 32/64-bit errors. | 
|  | 73 | "-Werror=int-conversion", | 
|  | 74 |  | 
| Colin Cross | 74d1ec0 | 2015-04-28 13:30:13 -0700 | [diff] [blame] | 75 | // Disable overly aggressive warning for macros defined with a leading underscore | 
|  | 76 | // This happens in AndroidConfig.h, which is included nearly everywhere. | 
| Dan Willemsen | 3bf6b47 | 2015-09-11 17:41:10 -0700 | [diff] [blame] | 77 | // TODO: can we remove this now? | 
| Colin Cross | 74d1ec0 | 2015-04-28 13:30:13 -0700 | [diff] [blame] | 78 | "-Wno-reserved-id-macro", | 
|  | 79 |  | 
|  | 80 | // Disable overly aggressive warning for format strings. | 
|  | 81 | // Bug: 20148343 | 
|  | 82 | "-Wno-format-pedantic", | 
|  | 83 |  | 
| Colin Cross | 3f40fa4 | 2015-01-30 17:27:36 -0800 | [diff] [blame] | 84 | // Workaround for ccache with clang. | 
|  | 85 | // See http://petereisentraut.blogspot.com/2011/05/ccache-and-clang.html. | 
|  | 86 | "-Wno-unused-command-line-argument", | 
|  | 87 |  | 
| Dan Willemsen | e654045 | 2015-10-20 15:21:33 -0700 | [diff] [blame] | 88 | // Force clang to always output color diagnostics. Ninja will strip the ANSI | 
|  | 89 | // color codes if it is not running in a terminal. | 
|  | 90 | "-fcolor-diagnostics", | 
| Colin Cross | 3f40fa4 | 2015-01-30 17:27:36 -0800 | [diff] [blame] | 91 | }, " ")) | 
|  | 92 |  | 
|  | 93 | pctx.StaticVariable("clangExtraConlyflags", strings.Join([]string{ | 
|  | 94 | "-std=gnu99", | 
|  | 95 | }, " ")) | 
|  | 96 |  | 
| Dan Willemsen | ac5e1cb | 2016-01-12 16:22:40 -0800 | [diff] [blame] | 97 | pctx.StaticVariable("clangExtraCppflags", strings.Join([]string{ | 
|  | 98 | // Disable -Winconsistent-missing-override until we can clean up the existing | 
|  | 99 | // codebase for it. | 
|  | 100 | "-Wno-inconsistent-missing-override", | 
|  | 101 | }, " ")) | 
|  | 102 |  | 
| Colin Cross | 3f40fa4 | 2015-01-30 17:27:36 -0800 | [diff] [blame] | 103 | pctx.StaticVariable("clangExtraTargetCflags", strings.Join([]string{ | 
|  | 104 | "-nostdlibinc", | 
|  | 105 | }, " ")) | 
| Dan Willemsen | be03f34 | 2016-03-03 17:21:04 -0800 | [diff] [blame] | 106 |  | 
|  | 107 | pctx.StaticVariable("clangExtraNoOverrideCflags", strings.Join([]string{ | 
|  | 108 | "-Werror=address-of-temporary", | 
|  | 109 | "-Werror=null-dereference", | 
|  | 110 | "-Werror=return-type", | 
|  | 111 | }, " ")) | 
| Colin Cross | 3f40fa4 | 2015-01-30 17:27:36 -0800 | [diff] [blame] | 112 | } | 
|  | 113 |  | 
|  | 114 | func clangFilterUnknownCflags(cflags []string) []string { | 
|  | 115 | ret := make([]string, 0, len(cflags)) | 
|  | 116 | for _, f := range cflags { | 
|  | 117 | if !inListSorted(f, clangUnknownCflags) { | 
|  | 118 | ret = append(ret, f) | 
|  | 119 | } | 
|  | 120 | } | 
|  | 121 |  | 
|  | 122 | return ret | 
|  | 123 | } | 
|  | 124 |  | 
|  | 125 | func inListSorted(s string, list []string) bool { | 
|  | 126 | for _, l := range list { | 
|  | 127 | if s == l { | 
|  | 128 | return true | 
|  | 129 | } else if s < l { | 
|  | 130 | return false | 
|  | 131 | } | 
|  | 132 | } | 
|  | 133 | return false | 
|  | 134 | } | 
| Dan Willemsen | e654045 | 2015-10-20 15:21:33 -0700 | [diff] [blame] | 135 |  | 
|  | 136 | func sorted(list []string) []string { | 
|  | 137 | sort.Strings(list) | 
|  | 138 | return list | 
|  | 139 | } |