Make the srcs and exclude_srcs properties configurable
Bug: 358377461
Bug: 342006386
Test: Presubmits
Change-Id: I21c20254a3ad3e75dd401ab807eb57ddbbeac047
diff --git a/cc/compiler.go b/cc/compiler.go
index ed10533..0e0b9a7 100644
--- a/cc/compiler.go
+++ b/cc/compiler.go
@@ -37,7 +37,7 @@
// list of source files used to compile the C/C++ module. May be .c, .cpp, or .S files.
// srcs may reference the outputs of other modules that produce source files like genrule
// or filegroup using the syntax ":module".
- Srcs []string `android:"path,arch_variant"`
+ Srcs proptools.Configurable[[]string] `android:"path,arch_variant"`
// list of source files that should not be compiled with clang-tidy.
Tidy_disabled_srcs []string `android:"path,arch_variant"`
@@ -47,7 +47,7 @@
// list of source files that should not be used to build the C/C++ module.
// This is most useful in the arch/multilib variants to remove non-common files
- Exclude_srcs []string `android:"path,arch_variant"`
+ Exclude_srcs proptools.Configurable[[]string] `android:"path,arch_variant"`
// list of module-specific flags that will be used for C and C++ compiles.
Cflags proptools.Configurable[[]string] `android:"arch_variant"`
@@ -229,7 +229,7 @@
} `android:"arch_variant"`
// Stores the original list of source files before being cleared by library reuse
- OriginalSrcs []string `blueprint:"mutated"`
+ OriginalSrcs proptools.Configurable[[]string] `blueprint:"mutated"`
// Build and link with OpenMP
Openmp *bool `android:"arch_variant"`
@@ -300,7 +300,7 @@
deps.AidlLibs = append(deps.AidlLibs, compiler.Properties.Aidl.Libs...)
android.ProtoDeps(ctx, &compiler.Proto)
- if compiler.hasSrcExt(".proto") {
+ if compiler.hasSrcExt(ctx, ".proto") {
deps = protoDeps(ctx, deps, &compiler.Proto, Bool(compiler.Properties.Proto.Static))
}
@@ -363,7 +363,9 @@
tc := ctx.toolchain()
modulePath := ctx.ModuleDir()
- compiler.srcsBeforeGen = android.PathsForModuleSrcExcludes(ctx, compiler.Properties.Srcs, compiler.Properties.Exclude_srcs)
+ srcs := compiler.Properties.Srcs.GetOrDefault(ctx, nil)
+ exclude_srcs := compiler.Properties.Exclude_srcs.GetOrDefault(ctx, nil)
+ compiler.srcsBeforeGen = android.PathsForModuleSrcExcludes(ctx, srcs, exclude_srcs)
compiler.srcsBeforeGen = append(compiler.srcsBeforeGen, deps.GeneratedSources...)
cflags := compiler.Properties.Cflags.GetOrDefault(ctx, nil)
@@ -603,11 +605,11 @@
flags.Global.CFlags = append(flags.Global.CFlags, "-DANDROID_STRICT")
}
- if compiler.hasSrcExt(".proto") {
+ if compiler.hasSrcExt(ctx, ".proto") {
flags = protoFlags(ctx, flags, &compiler.Proto)
}
- if compiler.hasSrcExt(".y") || compiler.hasSrcExt(".yy") {
+ if compiler.hasSrcExt(ctx, ".y") || compiler.hasSrcExt(ctx, ".yy") {
flags.Local.CommonFlags = append(flags.Local.CommonFlags,
"-I"+android.PathForModuleGen(ctx, "yacc", ctx.ModuleDir()).String())
}
@@ -617,7 +619,7 @@
ctx.ModuleErrorf("aidl.libs and (aidl.include_dirs or aidl.local_include_dirs) can't be set at the same time. For aidl headers, please only use aidl.libs prop")
}
- if compiler.hasAidl(deps) {
+ if compiler.hasAidl(ctx, deps) {
flags.aidlFlags = append(flags.aidlFlags, compiler.Properties.Aidl.Flags...)
if len(compiler.Properties.Aidl.Local_include_dirs) > 0 {
localAidlIncludeDirs := android.PathsForModuleSrc(ctx, compiler.Properties.Aidl.Local_include_dirs)
@@ -646,7 +648,7 @@
}
flags.aidlFlags = append(flags.aidlFlags, "--min_sdk_version="+aidlMinSdkVersion)
- if compiler.hasSrcExt(".aidl") {
+ if compiler.hasSrcExt(ctx, ".aidl") {
flags.Local.CommonFlags = append(flags.Local.CommonFlags,
"-I"+android.PathForModuleGen(ctx, "aidl").String())
}
@@ -656,16 +658,16 @@
}
}
- if compiler.hasSrcExt(".rscript") || compiler.hasSrcExt(".fs") {
+ if compiler.hasSrcExt(ctx, ".rscript") || compiler.hasSrcExt(ctx, ".fs") {
flags = rsFlags(ctx, flags, &compiler.Properties)
}
- if compiler.hasSrcExt(".sysprop") {
+ if compiler.hasSrcExt(ctx, ".sysprop") {
flags.Local.CommonFlags = append(flags.Local.CommonFlags,
"-I"+android.PathForModuleGen(ctx, "sysprop", "include").String())
}
- if len(compiler.Properties.Srcs) > 0 {
+ if len(srcs) > 0 {
module := ctx.ModuleDir() + "/Android.bp:" + ctx.ModuleName()
if inList("-Wno-error", flags.Local.CFlags) || inList("-Wno-error", flags.Local.CppFlags) {
addToModuleList(ctx, modulesUsingWnoErrorKey, module)
@@ -706,18 +708,18 @@
return flags
}
-func (compiler *baseCompiler) hasSrcExt(ext string) bool {
+func (compiler *baseCompiler) hasSrcExt(ctx BaseModuleContext, ext string) bool {
for _, src := range compiler.srcsBeforeGen {
if src.Ext() == ext {
return true
}
}
- for _, src := range compiler.Properties.Srcs {
+ for _, src := range compiler.Properties.Srcs.GetOrDefault(ctx, nil) {
if filepath.Ext(src) == ext {
return true
}
}
- for _, src := range compiler.Properties.OriginalSrcs {
+ for _, src := range compiler.Properties.OriginalSrcs.GetOrDefault(ctx, nil) {
if filepath.Ext(src) == ext {
return true
}
@@ -745,8 +747,8 @@
return nil
}
-func (compiler *baseCompiler) hasAidl(deps PathDeps) bool {
- return len(deps.AidlLibraryInfos) > 0 || compiler.hasSrcExt(".aidl")
+func (compiler *baseCompiler) hasAidl(ctx BaseModuleContext, deps PathDeps) bool {
+ return len(deps.AidlLibraryInfos) > 0 || compiler.hasSrcExt(ctx, ".aidl")
}
func (compiler *baseCompiler) compile(ctx ModuleContext, flags Flags, deps PathDeps) Objects {