diff --git a/cc/builder.go b/cc/builder.go index e4d5be2c7..f28f47fa2 100644 --- a/cc/builder.go +++ b/cc/builder.go @@ -375,13 +375,14 @@ type builderFlags struct { localCppFlags string localLdFlags string - libFlags string // Flags to add to the linker directly after specifying libraries to link. - extraLibFlags string // Flags to add to the linker last. - tidyFlags string // Flags that apply to clang-tidy - sAbiFlags string // Flags that apply to header-abi-dumps - aidlFlags string // Flags that apply to aidl source files - rsFlags string // Flags that apply to renderscript source files - toolchain config.Toolchain + noOverrideFlags string // Flags appended at the end so they are not overridden. + libFlags string // Flags to add to the linker directly after specifying libraries to link. + extraLibFlags string // Flags to add to the linker last. + tidyFlags string // Flags that apply to clang-tidy + sAbiFlags string // Flags that apply to header-abi-dumps + aidlFlags string // Flags that apply to aidl source files + rsFlags string // Flags that apply to renderscript source files + toolchain config.Toolchain // True if these extra features are enabled. tidy bool @@ -485,7 +486,8 @@ func transformSourceToObj(ctx ModuleContext, subdir string, srcFiles, noTidySrcs flags.localCommonFlags + " " + flags.localToolingCFlags + " " + flags.localConlyFlags + " " + - flags.systemIncludeFlags + flags.systemIncludeFlags + " " + + flags.noOverrideFlags cflags := flags.globalCommonFlags + " " + flags.globalCFlags + " " + @@ -493,7 +495,8 @@ func transformSourceToObj(ctx ModuleContext, subdir string, srcFiles, noTidySrcs flags.localCommonFlags + " " + flags.localCFlags + " " + flags.localConlyFlags + " " + - flags.systemIncludeFlags + flags.systemIncludeFlags + " " + + flags.noOverrideFlags toolingCppflags := flags.globalCommonFlags + " " + flags.globalToolingCFlags + " " + @@ -501,7 +504,8 @@ func transformSourceToObj(ctx ModuleContext, subdir string, srcFiles, noTidySrcs flags.localCommonFlags + " " + flags.localToolingCFlags + " " + flags.localToolingCppFlags + " " + - flags.systemIncludeFlags + flags.systemIncludeFlags + " " + + flags.noOverrideFlags cppflags := flags.globalCommonFlags + " " + flags.globalCFlags + " " + @@ -509,7 +513,8 @@ func transformSourceToObj(ctx ModuleContext, subdir string, srcFiles, noTidySrcs flags.localCommonFlags + " " + flags.localCFlags + " " + flags.localCppFlags + " " + - flags.systemIncludeFlags + flags.systemIncludeFlags + " " + + flags.noOverrideFlags asflags := flags.globalCommonFlags + " " + flags.globalAsFlags + " " + @@ -522,26 +527,6 @@ func transformSourceToObj(ctx ModuleContext, subdir string, srcFiles, noTidySrcs sAbiDumpFiles = make(android.Paths, 0, len(srcFiles)) } - cflags += " ${config.NoOverrideGlobalCflags}" - toolingCflags += " ${config.NoOverrideGlobalCflags}" - cppflags += " ${config.NoOverrideGlobalCflags}" - toolingCppflags += " ${config.NoOverrideGlobalCflags}" - - if flags.toolchain.Is64Bit() { - cflags += " ${config.NoOverride64GlobalCflags}" - toolingCflags += " ${config.NoOverride64GlobalCflags}" - cppflags += " ${config.NoOverride64GlobalCflags}" - toolingCppflags += " ${config.NoOverride64GlobalCflags}" - } - - modulePath := ctx.ModuleDir() - if android.IsThirdPartyPath(modulePath) { - cflags += " ${config.NoOverrideExternalGlobalCflags}" - toolingCflags += " ${config.NoOverrideExternalGlobalCflags}" - cppflags += " ${config.NoOverrideExternalGlobalCflags}" - toolingCppflags += " ${config.NoOverrideExternalGlobalCflags}" - } - // Multiple source files have build rules usually share the same cFlags or tidyFlags. // Define only one version in this module and share it in multiple build rules. // To simplify the code, the shared variables are all named as $flags. diff --git a/cc/cc.go b/cc/cc.go index 90185ea96..40e40e96b 100644 --- a/cc/cc.go +++ b/cc/cc.go @@ -215,7 +215,8 @@ type Flags struct { // Local flags (which individual modules are responsible for). These may override global flags. Local LocalOrGlobalFlags // Global flags (which build system or toolchain is responsible for). - Global LocalOrGlobalFlags + Global LocalOrGlobalFlags + NoOverrideFlags []string // Flags applied to the end of list of flags so they are not overridden aidlFlags []string // Flags that apply to aidl source files rsFlags []string // Flags that apply to renderscript source files diff --git a/cc/compdb.go b/cc/compdb.go index 617be1a19..da2818324 100644 --- a/cc/compdb.go +++ b/cc/compdb.go @@ -164,6 +164,7 @@ func getArguments(src android.Path, ctx android.SingletonContext, ccModule *Modu args = append(args, expandAllVars(ctx, ccModule.flags.Local.ConlyFlags)...) } args = append(args, expandAllVars(ctx, ccModule.flags.SystemIncludeFlags)...) + args = append(args, expandAllVars(ctx, ccModule.flags.NoOverrideFlags)...) args = append(args, src.String()) return args } diff --git a/cc/compiler.go b/cc/compiler.go index de1ae719a..9a961cfb9 100644 --- a/cc/compiler.go +++ b/cc/compiler.go @@ -539,7 +539,6 @@ func (compiler *baseCompiler) compilerFlags(ctx ModuleContext, flags Flags, deps flags.Global.CommonFlags = append(flags.Global.CommonFlags, tc.ToolchainCflags()) } - cStd := parseCStd(compiler.Properties.C_std) cppStd := parseCppStd(compiler.Properties.Cpp_std) @@ -671,6 +670,16 @@ func (compiler *baseCompiler) compilerFlags(ctx ModuleContext, flags Flags, deps flags.Local.CFlags = append(flags.Local.CFlags, "-DDO_NOT_CHECK_MANUAL_BINDER_INTERFACES") } + flags.NoOverrideFlags = append(flags.NoOverrideFlags, "${config.NoOverrideGlobalCflags}") + + if flags.Toolchain.Is64Bit() { + flags.NoOverrideFlags = append(flags.NoOverrideFlags, "${config.NoOverride64GlobalCflags}") + } + + if android.IsThirdPartyPath(ctx.ModuleDir()) { + flags.NoOverrideFlags = append(flags.NoOverrideFlags, "${config.NoOverrideExternalGlobalCflags}") + } + return flags } diff --git a/cc/util.go b/cc/util.go index c93646b98..d6089aba8 100644 --- a/cc/util.go +++ b/cc/util.go @@ -56,18 +56,19 @@ func flagsToBuilderFlags(in Flags) builderFlags { localCppFlags: strings.Join(in.Local.CppFlags, " "), localLdFlags: strings.Join(in.Local.LdFlags, " "), - aidlFlags: strings.Join(in.aidlFlags, " "), - rsFlags: strings.Join(in.rsFlags, " "), - libFlags: strings.Join(in.libFlags, " "), - extraLibFlags: strings.Join(in.extraLibFlags, " "), - tidyFlags: strings.Join(in.TidyFlags, " "), - sAbiFlags: strings.Join(in.SAbiFlags, " "), - toolchain: in.Toolchain, - gcovCoverage: in.GcovCoverage, - tidy: in.Tidy, - needTidyFiles: in.NeedTidyFiles, - sAbiDump: in.SAbiDump, - emitXrefs: in.EmitXrefs, + noOverrideFlags: strings.Join(in.NoOverrideFlags, " "), + aidlFlags: strings.Join(in.aidlFlags, " "), + rsFlags: strings.Join(in.rsFlags, " "), + libFlags: strings.Join(in.libFlags, " "), + extraLibFlags: strings.Join(in.extraLibFlags, " "), + tidyFlags: strings.Join(in.TidyFlags, " "), + sAbiFlags: strings.Join(in.SAbiFlags, " "), + toolchain: in.Toolchain, + gcovCoverage: in.GcovCoverage, + tidy: in.Tidy, + needTidyFiles: in.NeedTidyFiles, + sAbiDump: in.SAbiDump, + emitXrefs: in.EmitXrefs, systemIncludeFlags: strings.Join(in.SystemIncludeFlags, " "),