From e96c16a806053d7db9b1de164f7dba8e499e4a44 Mon Sep 17 00:00:00 2001 From: Cole Faust Date: Thu, 13 Jun 2024 14:51:14 -0700 Subject: [PATCH] Make the cflags property configurable So that you can use select statements on it. The current modivation is to convert a module from make to bp with minimal soong config variable boilerplate. Bug: 342006386 Bug: 346922064 Test: m nothing --no-skip-soong-tests Change-Id: I48d5a11ad3aa65c24cc199458634a5fdbeab2f64 --- cc/cmake_module_cc.txt | 2 +- cc/cmake_snapshot.go | 4 ++++ cc/compiler.go | 11 ++++++----- cc/library.go | 10 +++++----- rust/bindgen.go | 5 +++-- 5 files changed, 19 insertions(+), 13 deletions(-) diff --git a/cc/cmake_module_cc.txt b/cc/cmake_module_cc.txt index 693406d52..0dc45aed1 100644 --- a/cc/cmake_module_cc.txt +++ b/cc/cmake_module_cc.txt @@ -1,6 +1,6 @@ <<$srcs := getSources .M>> <<$includeDirs := getIncludeDirs .Ctx .M>> -<<$cflags := (getCompilerProperties .M).Cflags>> +<<$cflags := getCflagsProperty .Ctx .M>> <<$deps := mapLibraries .Ctx .M (concat5 (getLinkerProperties .M).Whole_static_libs (getLinkerProperties .M).Static_libs diff --git a/cc/cmake_snapshot.go b/cc/cmake_snapshot.go index ad7beedab..b4d1268b6 100644 --- a/cc/cmake_snapshot.go +++ b/cc/cmake_snapshot.go @@ -187,6 +187,10 @@ func parseTemplate(templateContents string) *template.Template { "getCompilerProperties": func(m *Module) BaseCompilerProperties { return m.compiler.baseCompilerProps() }, + "getCflagsProperty": func(ctx android.ModuleContext, m *Module) []string { + cflags := m.compiler.baseCompilerProps().Cflags + return cflags.GetOrDefault(ctx, nil) + }, "getLinkerProperties": func(m *Module) BaseLinkerProperties { return m.linker.baseLinkerProps() }, diff --git a/cc/compiler.go b/cc/compiler.go index ede6a5d0a..33f762b5e 100644 --- a/cc/compiler.go +++ b/cc/compiler.go @@ -50,7 +50,7 @@ type BaseCompilerProperties struct { Exclude_srcs []string `android:"path,arch_variant"` // list of module-specific flags that will be used for C and C++ compiles. - Cflags []string `android:"arch_variant"` + Cflags proptools.Configurable[[]string] `android:"arch_variant"` // list of module-specific flags that will be used for C++ compiles Cppflags []string `android:"arch_variant"` @@ -274,7 +274,7 @@ func (compiler *baseCompiler) Srcs() android.Paths { } func (compiler *baseCompiler) appendCflags(flags []string) { - compiler.Properties.Cflags = append(compiler.Properties.Cflags, flags...) + compiler.Properties.Cflags.AppendSimpleValue(flags) } func (compiler *baseCompiler) appendAsflags(flags []string) { @@ -372,7 +372,8 @@ func (compiler *baseCompiler) compilerFlags(ctx ModuleContext, flags Flags, deps compiler.srcsBeforeGen = android.PathsForModuleSrcExcludes(ctx, compiler.Properties.Srcs, compiler.Properties.Exclude_srcs) compiler.srcsBeforeGen = append(compiler.srcsBeforeGen, deps.GeneratedSources...) - CheckBadCompilerFlags(ctx, "cflags", compiler.Properties.Cflags) + cflags := compiler.Properties.Cflags.GetOrDefault(ctx, nil) + CheckBadCompilerFlags(ctx, "cflags", cflags) CheckBadCompilerFlags(ctx, "cppflags", compiler.Properties.Cppflags) CheckBadCompilerFlags(ctx, "conlyflags", compiler.Properties.Conlyflags) CheckBadCompilerFlags(ctx, "asflags", compiler.Properties.Asflags) @@ -385,7 +386,7 @@ func (compiler *baseCompiler) compilerFlags(ctx ModuleContext, flags Flags, deps esc := proptools.NinjaAndShellEscapeList - flags.Local.CFlags = append(flags.Local.CFlags, esc(compiler.Properties.Cflags)...) + flags.Local.CFlags = append(flags.Local.CFlags, esc(cflags)...) flags.Local.CppFlags = append(flags.Local.CppFlags, esc(compiler.Properties.Cppflags)...) flags.Local.ConlyFlags = append(flags.Local.ConlyFlags, esc(compiler.Properties.Conlyflags)...) flags.Local.AsFlags = append(flags.Local.AsFlags, esc(compiler.Properties.Asflags)...) @@ -819,7 +820,7 @@ type RustBindgenClangProperties struct { Header_libs []string `android:"arch_variant,variant_prepend"` // list of clang flags required to correctly interpret the headers. - Cflags []string `android:"arch_variant"` + Cflags proptools.Configurable[[]string] `android:"arch_variant"` // list of c++ specific clang flags required to correctly interpret the headers. // This is provided primarily to make sure cppflags defined in cc_defaults are pulled in. diff --git a/cc/library.go b/cc/library.go index 090908f79..d692b40b3 100644 --- a/cc/library.go +++ b/cc/library.go @@ -149,7 +149,7 @@ type StaticOrSharedProperties struct { Sanitized Sanitized `android:"arch_variant"` - Cflags []string `android:"arch_variant"` + Cflags proptools.Configurable[[]string] `android:"arch_variant"` Enabled *bool `android:"arch_variant"` Whole_static_libs []string `android:"arch_variant"` @@ -464,9 +464,9 @@ func (library *libraryDecorator) linkerFlags(ctx ModuleContext, flags Flags) Fla } if library.static() { - flags.Local.CFlags = append(flags.Local.CFlags, library.StaticProperties.Static.Cflags...) + flags.Local.CFlags = append(flags.Local.CFlags, library.StaticProperties.Static.Cflags.GetOrDefault(ctx, nil)...) } else if library.shared() { - flags.Local.CFlags = append(flags.Local.CFlags, library.SharedProperties.Shared.Cflags...) + flags.Local.CFlags = append(flags.Local.CFlags, library.SharedProperties.Shared.Cflags.GetOrDefault(ctx, nil)...) } if library.shared() { @@ -2081,8 +2081,8 @@ func reuseStaticLibrary(mctx android.BottomUpMutatorContext, static, shared *Mod // Check libraries in addition to cflags, since libraries may be exporting different // include directories. - if len(staticCompiler.StaticProperties.Static.Cflags) == 0 && - len(sharedCompiler.SharedProperties.Shared.Cflags) == 0 && + if len(staticCompiler.StaticProperties.Static.Cflags.GetOrDefault(mctx, nil)) == 0 && + len(sharedCompiler.SharedProperties.Shared.Cflags.GetOrDefault(mctx, nil)) == 0 && len(staticCompiler.StaticProperties.Static.Whole_static_libs) == 0 && len(sharedCompiler.SharedProperties.Shared.Whole_static_libs) == 0 && len(staticCompiler.StaticProperties.Static.Static_libs) == 0 && diff --git a/rust/bindgen.go b/rust/bindgen.go index 427775351..83a6e9590 100644 --- a/rust/bindgen.go +++ b/rust/bindgen.go @@ -236,7 +236,8 @@ func (b *bindgenDecorator) GenerateSource(ctx ModuleContext, deps PathDeps) andr esc := proptools.NinjaAndShellEscapeList // Filter out invalid cflags - for _, flag := range b.ClangProperties.Cflags { + cflagsProp := b.ClangProperties.Cflags.GetOrDefault(ctx, nil) + for _, flag := range cflagsProp { if flag == "-x c++" || flag == "-xc++" { ctx.PropertyErrorf("cflags", "-x c++ should not be specified in cflags; setting cpp_std specifies this is a C++ header, or change the file extension to '.hpp' or '.hh'") @@ -248,7 +249,7 @@ func (b *bindgenDecorator) GenerateSource(ctx ModuleContext, deps PathDeps) andr } // Module defined clang flags and include paths - cflags = append(cflags, esc(b.ClangProperties.Cflags)...) + cflags = append(cflags, esc(cflagsProp)...) for _, include := range b.ClangProperties.Local_include_dirs { cflags = append(cflags, "-I"+android.PathForModuleSrc(ctx, include).String()) implicits = append(implicits, android.PathForModuleSrc(ctx, include))