Make required a configurable property
So that users can use select statements with it. Fixes: 347605145 Bug: 342006386 Test: m nothing --no-skip-soong-tests Change-Id: Ica0ca6d1725b000b3748c0293e5a9f9b38ed87f9
This commit is contained in:
@@ -499,6 +499,7 @@ type fillInEntriesContext interface {
|
|||||||
Config() Config
|
Config() Config
|
||||||
moduleProvider(module blueprint.Module, provider blueprint.AnyProviderKey) (any, bool)
|
moduleProvider(module blueprint.Module, provider blueprint.AnyProviderKey) (any, bool)
|
||||||
ModuleType(module blueprint.Module) string
|
ModuleType(module blueprint.Module) string
|
||||||
|
OtherModulePropertyErrorf(module Module, property string, fmt string, args ...interface{})
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *AndroidMkEntries) fillInEntries(ctx fillInEntriesContext, mod blueprint.Module) {
|
func (a *AndroidMkEntries) fillInEntries(ctx fillInEntriesContext, mod blueprint.Module) {
|
||||||
@@ -514,7 +515,7 @@ func (a *AndroidMkEntries) fillInEntries(ctx fillInEntriesContext, mod blueprint
|
|||||||
if a.Include == "" {
|
if a.Include == "" {
|
||||||
a.Include = "$(BUILD_PREBUILT)"
|
a.Include = "$(BUILD_PREBUILT)"
|
||||||
}
|
}
|
||||||
a.Required = append(a.Required, amod.RequiredModuleNames()...)
|
a.Required = append(a.Required, amod.RequiredModuleNames(ctx)...)
|
||||||
a.Host_required = append(a.Host_required, amod.HostRequiredModuleNames()...)
|
a.Host_required = append(a.Host_required, amod.HostRequiredModuleNames()...)
|
||||||
a.Target_required = append(a.Target_required, amod.TargetRequiredModuleNames()...)
|
a.Target_required = append(a.Target_required, amod.TargetRequiredModuleNames()...)
|
||||||
|
|
||||||
|
@@ -113,7 +113,7 @@ type Module interface {
|
|||||||
// Get information about the properties that can contain visibility rules.
|
// Get information about the properties that can contain visibility rules.
|
||||||
visibilityProperties() []visibilityProperty
|
visibilityProperties() []visibilityProperty
|
||||||
|
|
||||||
RequiredModuleNames() []string
|
RequiredModuleNames(ctx ConfigAndErrorContext) []string
|
||||||
HostRequiredModuleNames() []string
|
HostRequiredModuleNames() []string
|
||||||
TargetRequiredModuleNames() []string
|
TargetRequiredModuleNames() []string
|
||||||
|
|
||||||
@@ -422,7 +422,7 @@ type commonProperties struct {
|
|||||||
Vintf_fragments []string `android:"path"`
|
Vintf_fragments []string `android:"path"`
|
||||||
|
|
||||||
// names of other modules to install if this module is installed
|
// names of other modules to install if this module is installed
|
||||||
Required []string `android:"arch_variant"`
|
Required proptools.Configurable[[]string] `android:"arch_variant"`
|
||||||
|
|
||||||
// names of other modules to install on host if this module is installed
|
// names of other modules to install on host if this module is installed
|
||||||
Host_required []string `android:"arch_variant"`
|
Host_required []string `android:"arch_variant"`
|
||||||
@@ -1101,7 +1101,7 @@ func addRequiredDeps(ctx BottomUpMutatorContext) {
|
|||||||
hostTargets = append(hostTargets, ctx.Config().BuildOSCommonTarget)
|
hostTargets = append(hostTargets, ctx.Config().BuildOSCommonTarget)
|
||||||
|
|
||||||
if ctx.Device() {
|
if ctx.Device() {
|
||||||
for _, depName := range ctx.Module().RequiredModuleNames() {
|
for _, depName := range ctx.Module().RequiredModuleNames(ctx) {
|
||||||
for _, target := range deviceTargets {
|
for _, target := range deviceTargets {
|
||||||
addDep(target, depName)
|
addDep(target, depName)
|
||||||
}
|
}
|
||||||
@@ -1114,7 +1114,7 @@ func addRequiredDeps(ctx BottomUpMutatorContext) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ctx.Host() {
|
if ctx.Host() {
|
||||||
for _, depName := range ctx.Module().RequiredModuleNames() {
|
for _, depName := range ctx.Module().RequiredModuleNames(ctx) {
|
||||||
for _, target := range hostTargets {
|
for _, target := range hostTargets {
|
||||||
// When a host module requires another host module, don't make a
|
// When a host module requires another host module, don't make a
|
||||||
// dependency if they have different OSes (i.e. hostcross).
|
// dependency if they have different OSes (i.e. hostcross).
|
||||||
@@ -1619,8 +1619,8 @@ func (m *ModuleBase) InRecovery() bool {
|
|||||||
return m.base().commonProperties.ImageVariation == RecoveryVariation
|
return m.base().commonProperties.ImageVariation == RecoveryVariation
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *ModuleBase) RequiredModuleNames() []string {
|
func (m *ModuleBase) RequiredModuleNames(ctx ConfigAndErrorContext) []string {
|
||||||
return m.base().commonProperties.Required
|
return m.base().commonProperties.Required.GetOrDefault(m.ConfigurableEvaluator(ctx), nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *ModuleBase) HostRequiredModuleNames() []string {
|
func (m *ModuleBase) HostRequiredModuleNames() []string {
|
||||||
@@ -1992,7 +1992,7 @@ func (m *ModuleBase) GenerateBuildActions(blueprintCtx blueprint.ModuleContext)
|
|||||||
TargetDependencies: targetRequired,
|
TargetDependencies: targetRequired,
|
||||||
HostDependencies: hostRequired,
|
HostDependencies: hostRequired,
|
||||||
Data: data,
|
Data: data,
|
||||||
Required: m.RequiredModuleNames(),
|
Required: m.RequiredModuleNames(ctx),
|
||||||
}
|
}
|
||||||
SetProvider(ctx, ModuleInfoJSONProvider, m.moduleInfoJSON)
|
SetProvider(ctx, ModuleInfoJSONProvider, m.moduleInfoJSON)
|
||||||
}
|
}
|
||||||
|
@@ -183,7 +183,7 @@ type ModuleContext interface {
|
|||||||
InstallInVendor() bool
|
InstallInVendor() bool
|
||||||
InstallForceOS() (*OsType, *ArchType)
|
InstallForceOS() (*OsType, *ArchType)
|
||||||
|
|
||||||
RequiredModuleNames() []string
|
RequiredModuleNames(ctx ConfigAndErrorContext) []string
|
||||||
HostRequiredModuleNames() []string
|
HostRequiredModuleNames() []string
|
||||||
TargetRequiredModuleNames() []string
|
TargetRequiredModuleNames() []string
|
||||||
|
|
||||||
@@ -755,8 +755,8 @@ func (m *moduleContext) ExpandOptionalSource(srcFile *string, _ string) Optional
|
|||||||
return OptionalPath{}
|
return OptionalPath{}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *moduleContext) RequiredModuleNames() []string {
|
func (m *moduleContext) RequiredModuleNames(ctx ConfigAndErrorContext) []string {
|
||||||
return m.module.RequiredModuleNames()
|
return m.module.RequiredModuleNames(ctx)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *moduleContext) HostRequiredModuleNames() []string {
|
func (m *moduleContext) HostRequiredModuleNames() []string {
|
||||||
|
@@ -824,11 +824,16 @@ func (s *listVariable) printfIntoPropertyRecursive(fieldName []string, propStruc
|
|||||||
}
|
}
|
||||||
field.Set(newField)
|
field.Set(newField)
|
||||||
case reflect.Struct:
|
case reflect.Struct:
|
||||||
fieldName = append(fieldName, propStruct.Type().Field(i).Name)
|
if proptools.IsConfigurable(field.Type()) {
|
||||||
if err := s.printfIntoPropertyRecursive(fieldName, field, configValues); err != nil {
|
fieldName = append(fieldName, propStruct.Type().Field(i).Name)
|
||||||
return err
|
return fmt.Errorf("soong_config_variables.%s.%s: list variables are not supported on configurable properties", s.variable, strings.Join(fieldName, "."))
|
||||||
|
} else {
|
||||||
|
fieldName = append(fieldName, propStruct.Type().Field(i).Name)
|
||||||
|
if err := s.printfIntoPropertyRecursive(fieldName, field, configValues); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
fieldName = fieldName[:len(fieldName)-1]
|
||||||
}
|
}
|
||||||
fieldName = fieldName[:len(fieldName)-1]
|
|
||||||
default:
|
default:
|
||||||
fieldName = append(fieldName, propStruct.Type().Field(i).Name)
|
fieldName = append(fieldName, propStruct.Type().Field(i).Name)
|
||||||
return fmt.Errorf("soong_config_variables.%s.%s: unsupported property type %q", s.variable, strings.Join(fieldName, "."), kind)
|
return fmt.Errorf("soong_config_variables.%s.%s: unsupported property type %q", s.variable, strings.Join(fieldName, "."), kind)
|
||||||
|
@@ -224,6 +224,10 @@ func (ctx *TestContext) OtherModuleProviderAdaptor() OtherModuleProviderContext
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (ctx *TestContext) OtherModulePropertyErrorf(module Module, property string, fmt_ string, args ...interface{}) {
|
||||||
|
panic(fmt.Sprintf(fmt_, args...))
|
||||||
|
}
|
||||||
|
|
||||||
// registeredComponentOrder defines the order in which a sortableComponent type is registered at
|
// registeredComponentOrder defines the order in which a sortableComponent type is registered at
|
||||||
// runtime and provides support for reordering the components registered for a test in the same
|
// runtime and provides support for reordering the components registered for a test in the same
|
||||||
// way.
|
// way.
|
||||||
|
@@ -218,7 +218,7 @@ func (a *apexBundle) writeRequiredModules(w io.Writer, moduleNames []string) {
|
|||||||
var required []string
|
var required []string
|
||||||
var targetRequired []string
|
var targetRequired []string
|
||||||
var hostRequired []string
|
var hostRequired []string
|
||||||
required = append(required, a.RequiredModuleNames()...)
|
required = append(required, a.required...)
|
||||||
targetRequired = append(targetRequired, a.TargetRequiredModuleNames()...)
|
targetRequired = append(targetRequired, a.TargetRequiredModuleNames()...)
|
||||||
hostRequired = append(hostRequired, a.HostRequiredModuleNames()...)
|
hostRequired = append(hostRequired, a.HostRequiredModuleNames()...)
|
||||||
for _, fi := range a.filesInfo {
|
for _, fi := range a.filesInfo {
|
||||||
|
@@ -490,6 +490,9 @@ type apexBundle struct {
|
|||||||
javaApisUsedByModuleFile android.ModuleOutPath
|
javaApisUsedByModuleFile android.ModuleOutPath
|
||||||
|
|
||||||
aconfigFiles []android.Path
|
aconfigFiles []android.Path
|
||||||
|
|
||||||
|
// Required modules, filled out during GenerateAndroidBuildActions and used in AndroidMk
|
||||||
|
required []string
|
||||||
}
|
}
|
||||||
|
|
||||||
// apexFileClass represents a type of file that can be included in APEX.
|
// apexFileClass represents a type of file that can be included in APEX.
|
||||||
@@ -568,7 +571,7 @@ func newApexFile(ctx android.BaseModuleContext, builtFile android.Path, androidM
|
|||||||
if module != nil {
|
if module != nil {
|
||||||
ret.moduleDir = ctx.OtherModuleDir(module)
|
ret.moduleDir = ctx.OtherModuleDir(module)
|
||||||
ret.partition = module.PartitionTag(ctx.DeviceConfig())
|
ret.partition = module.PartitionTag(ctx.DeviceConfig())
|
||||||
ret.requiredModuleNames = module.RequiredModuleNames()
|
ret.requiredModuleNames = module.RequiredModuleNames(ctx)
|
||||||
ret.targetRequiredModuleNames = module.TargetRequiredModuleNames()
|
ret.targetRequiredModuleNames = module.TargetRequiredModuleNames()
|
||||||
ret.hostRequiredModuleNames = module.HostRequiredModuleNames()
|
ret.hostRequiredModuleNames = module.HostRequiredModuleNames()
|
||||||
ret.multilib = module.Target().Arch.ArchType.Multilib
|
ret.multilib = module.Target().Arch.ArchType.Multilib
|
||||||
@@ -2449,6 +2452,8 @@ func (a *apexBundle) GenerateAndroidBuildActions(ctx android.ModuleContext) {
|
|||||||
a.provideApexExportsInfo(ctx)
|
a.provideApexExportsInfo(ctx)
|
||||||
|
|
||||||
a.providePrebuiltInfo(ctx)
|
a.providePrebuiltInfo(ctx)
|
||||||
|
|
||||||
|
a.required = a.RequiredModuleNames(ctx)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set prebuiltInfoProvider. This will be used by `apex_prebuiltinfo_singleton` to print out a metadata file
|
// Set prebuiltInfoProvider. This will be used by `apex_prebuiltinfo_singleton` to print out a metadata file
|
||||||
|
4
cc/cc.go
4
cc/cc.go
@@ -1007,8 +1007,8 @@ func (c *Module) HiddenFromMake() bool {
|
|||||||
return c.Properties.HideFromMake
|
return c.Properties.HideFromMake
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Module) RequiredModuleNames() []string {
|
func (c *Module) RequiredModuleNames(ctx android.ConfigAndErrorContext) []string {
|
||||||
required := android.CopyOf(c.ModuleBase.RequiredModuleNames())
|
required := android.CopyOf(c.ModuleBase.RequiredModuleNames(ctx))
|
||||||
if c.ImageVariation().Variation == android.CoreVariation {
|
if c.ImageVariation().Variation == android.CoreVariation {
|
||||||
required = append(required, c.Properties.Target.Platform.Required...)
|
required = append(required, c.Properties.Target.Platform.Required...)
|
||||||
required = removeListFromList(required, c.Properties.Target.Platform.Exclude_required)
|
required = removeListFromList(required, c.Properties.Target.Platform.Exclude_required)
|
||||||
|
@@ -1501,7 +1501,7 @@ func (j *TestHost) GenerateAndroidBuildActions(ctx android.ModuleContext) {
|
|||||||
InstalledFiles: j.data,
|
InstalledFiles: j.data,
|
||||||
OutputFile: j.outputFile,
|
OutputFile: j.outputFile,
|
||||||
TestConfig: j.testConfig,
|
TestConfig: j.testConfig,
|
||||||
RequiredModuleNames: j.RequiredModuleNames(),
|
RequiredModuleNames: j.RequiredModuleNames(ctx),
|
||||||
TestSuites: j.testProperties.Test_suites,
|
TestSuites: j.testProperties.Test_suites,
|
||||||
IsHost: true,
|
IsHost: true,
|
||||||
LocalSdkVersion: j.sdkVersion.String(),
|
LocalSdkVersion: j.sdkVersion.String(),
|
||||||
|
@@ -49,7 +49,7 @@ func PhonyFactory() android.Module {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (p *phony) GenerateAndroidBuildActions(ctx android.ModuleContext) {
|
func (p *phony) GenerateAndroidBuildActions(ctx android.ModuleContext) {
|
||||||
p.requiredModuleNames = ctx.RequiredModuleNames()
|
p.requiredModuleNames = ctx.RequiredModuleNames(ctx)
|
||||||
p.hostRequiredModuleNames = ctx.HostRequiredModuleNames()
|
p.hostRequiredModuleNames = ctx.HostRequiredModuleNames()
|
||||||
p.targetRequiredModuleNames = ctx.TargetRequiredModuleNames()
|
p.targetRequiredModuleNames = ctx.TargetRequiredModuleNames()
|
||||||
}
|
}
|
||||||
|
@@ -129,12 +129,12 @@ func (c *hostFakeSingleton) GenerateBuildActions(ctx android.SingletonContext) {
|
|||||||
if !seen[outFile] {
|
if !seen[outFile] {
|
||||||
seen[outFile] = true
|
seen[outFile] = true
|
||||||
outputs = append(outputs, WriteStringToFileRule(ctx, "", outFile))
|
outputs = append(outputs, WriteStringToFileRule(ctx, "", outFile))
|
||||||
jsonData = append(jsonData, hostSnapshotFakeJsonFlags{*hostJsonDesc(module), false})
|
jsonData = append(jsonData, hostSnapshotFakeJsonFlags{*hostJsonDesc(ctx, module), false})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
// Update any module prebuilt information
|
// Update any module prebuilt information
|
||||||
for idx, _ := range jsonData {
|
for idx := range jsonData {
|
||||||
if _, ok := prebuilts[jsonData[idx].ModuleName]; ok {
|
if _, ok := prebuilts[jsonData[idx].ModuleName]; ok {
|
||||||
// Prebuilt exists for this module
|
// Prebuilt exists for this module
|
||||||
jsonData[idx].Prebuilt = true
|
jsonData[idx].Prebuilt = true
|
||||||
|
@@ -101,7 +101,7 @@ func (f *hostSnapshot) CreateMetaData(ctx android.ModuleContext, fileName string
|
|||||||
|
|
||||||
// Create JSON file based on the direct dependencies
|
// Create JSON file based on the direct dependencies
|
||||||
ctx.VisitDirectDeps(func(dep android.Module) {
|
ctx.VisitDirectDeps(func(dep android.Module) {
|
||||||
desc := hostJsonDesc(dep)
|
desc := hostJsonDesc(ctx, dep)
|
||||||
if desc != nil {
|
if desc != nil {
|
||||||
jsonData = append(jsonData, *desc)
|
jsonData = append(jsonData, *desc)
|
||||||
}
|
}
|
||||||
@@ -209,7 +209,7 @@ func hostRelativePathString(m android.Module) string {
|
|||||||
|
|
||||||
// Create JSON description for given module, only create descriptions for binary modules
|
// Create JSON description for given module, only create descriptions for binary modules
|
||||||
// and rust_proc_macro modules which provide a valid HostToolPath
|
// and rust_proc_macro modules which provide a valid HostToolPath
|
||||||
func hostJsonDesc(m android.Module) *SnapshotJsonFlags {
|
func hostJsonDesc(ctx android.ConfigAndErrorContext, m android.Module) *SnapshotJsonFlags {
|
||||||
path := hostToolPath(m)
|
path := hostToolPath(m)
|
||||||
relPath := hostRelativePathString(m)
|
relPath := hostRelativePathString(m)
|
||||||
procMacro := false
|
procMacro := false
|
||||||
@@ -226,7 +226,7 @@ func hostJsonDesc(m android.Module) *SnapshotJsonFlags {
|
|||||||
props := &SnapshotJsonFlags{
|
props := &SnapshotJsonFlags{
|
||||||
ModuleStemName: moduleStem,
|
ModuleStemName: moduleStem,
|
||||||
Filename: path.String(),
|
Filename: path.String(),
|
||||||
Required: append(m.HostRequiredModuleNames(), m.RequiredModuleNames()...),
|
Required: append(m.HostRequiredModuleNames(), m.RequiredModuleNames(ctx)...),
|
||||||
RelativeInstallPath: relPath,
|
RelativeInstallPath: relPath,
|
||||||
RustProcMacro: procMacro,
|
RustProcMacro: procMacro,
|
||||||
CrateName: crateName,
|
CrateName: crateName,
|
||||||
|
Reference in New Issue
Block a user