diff --git a/cc/compiler.go b/cc/compiler.go index 8f119cf3c..10cec8cea 100644 --- a/cc/compiler.go +++ b/cc/compiler.go @@ -392,6 +392,12 @@ func (compiler *baseCompiler) compilerFlags(ctx ModuleContext, flags Flags, deps fmt.Sprintf("${config.%sGlobalCflags}", hod)) } + if flags.Clang { + if strings.HasPrefix(android.PathForModuleSrc(ctx).String(), "external/") { + flags.GlobalFlags = append([]string{"${config.ClangExternalCflags}"}, flags.GlobalFlags...) + } + } + if ctx.Device() { if Bool(compiler.Properties.Rtti) { flags.CppFlags = append(flags.CppFlags, "-frtti") diff --git a/cc/config/clang.go b/cc/config/clang.go index ba1cd3c01..22e428fba 100644 --- a/cc/config/clang.go +++ b/cc/config/clang.go @@ -182,6 +182,11 @@ func init() { // compatibility. "-Wno-c++98-compat-extra-semi", }, " ")) + + // Extra cflags for projects under external/ directory + pctx.StaticVariable("ClangExtraExternalCflags", strings.Join([]string{ + // TODO(yikong): Move -Wno flags here + }, " ")) } func ClangFilterUnknownCflags(cflags []string) []string { diff --git a/cc/config/global.go b/cc/config/global.go index 06f6f9ae6..c734c2eeb 100644 --- a/cc/config/global.go +++ b/cc/config/global.go @@ -170,6 +170,8 @@ func init() { pctx.StaticVariable("CommonClangGlobalCppflags", strings.Join(append(ClangFilterUnknownCflags(commonGlobalCppflags), "${ClangExtraCppflags}"), " ")) + pctx.StaticVariable("ClangExternalCflags", "${ClangExtraExternalCflags}") + // Everything in these lists is a crime against abstraction and dependency tracking. // Do not add anything to this list. pctx.PrefixedExistentPathsForSourcesVariable("CommonGlobalIncludes", "-I", diff --git a/cc/makevars.go b/cc/makevars.go index c95bad2cc..d036bb686 100644 --- a/cc/makevars.go +++ b/cc/makevars.go @@ -83,6 +83,7 @@ func makeVarsProvider(ctx android.MakeVarsContext) { ctx.Strict("RS_LLVM_AS", "${config.RSLLVMPrebuiltsPath}/llvm-as") ctx.Strict("RS_LLVM_LINK", "${config.RSLLVMPrebuiltsPath}/llvm-link") + ctx.Strict("CLANG_EXTERNAL_CFLAGS", "${config.ClangExternalCflags}") ctx.Strict("GLOBAL_CFLAGS_NO_OVERRIDE", "${config.NoOverrideGlobalCflags}") ctx.Strict("GLOBAL_CLANG_CFLAGS_NO_OVERRIDE", "${config.ClangExtraNoOverrideCflags}") ctx.Strict("GLOBAL_CPPFLAGS_NO_OVERRIDE", "")