diff options
author | 2023-06-21 15:16:23 -0700 | |
---|---|---|
committer | 2023-06-21 15:16:23 -0700 | |
commit | 981c926269035b79bd59d15480e806e652575a54 (patch) | |
tree | 6523210015f82f5db7badf3bb6001b80dd51be1b /aconfig/aconfig_value_set.go | |
parent | 81b25ed02b11753e4dcc224ebead3107b433861e (diff) |
Rename device_config --> aconfig and definitions --> declarations
Bug: 285303012
Test: for x in next trunk trunk_food trunk_staging ; do lunch aosp_panther-$x-eng ; m nothing ; done
Change-Id: I3375f46b3ecbbc516d1bee6ab3f80725fcccde8f
Diffstat (limited to 'aconfig/aconfig_value_set.go')
-rw-r--r-- | aconfig/aconfig_value_set.go | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/aconfig/aconfig_value_set.go b/aconfig/aconfig_value_set.go new file mode 100644 index 000000000..252908fa3 --- /dev/null +++ b/aconfig/aconfig_value_set.go @@ -0,0 +1,92 @@ +// Copyright 2023 Google Inc. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package aconfig + +import ( + "android/soong/android" + "github.com/google/blueprint" +) + +// Properties for "aconfig_value_set" +type ValueSetModule struct { + android.ModuleBase + android.DefaultableModuleBase + + properties struct { + // aconfig_values modules + Values []string + } +} + +func ValueSetFactory() android.Module { + module := &ValueSetModule{} + + android.InitAndroidModule(module) + android.InitDefaultableModule(module) + module.AddProperties(&module.properties) + // TODO: bp2build + //android.InitBazelModule(module) + + return module +} + +// Dependency tag for values property +type valueSetType struct { + blueprint.BaseDependencyTag +} + +var valueSetTag = valueSetType{} + +// Provider published by aconfig_value_set +type valueSetProviderData struct { + // The package of each of the + // (map of package --> aconfig_module) + AvailablePackages map[string]android.Paths +} + +var valueSetProviderKey = blueprint.NewProvider(valueSetProviderData{}) + +func (module *ValueSetModule) DepsMutator(ctx android.BottomUpMutatorContext) { + deps := ctx.AddDependency(ctx.Module(), valueSetTag, module.properties.Values...) + for _, dep := range deps { + _, ok := dep.(*ValuesModule) + if !ok { + ctx.PropertyErrorf("values", "values must be a aconfig_values module") + return + } + } +} + +func (module *ValueSetModule) GenerateAndroidBuildActions(ctx android.ModuleContext) { + // Accumulate the packages of the values modules listed, and set that as an + // valueSetProviderKey provider that aconfig modules can read and use + // to append values to their aconfig actions. + packages := make(map[string]android.Paths) + ctx.VisitDirectDeps(func(dep android.Module) { + if !ctx.OtherModuleHasProvider(dep, valuesProviderKey) { + // Other modules get injected as dependencies too, for example the license modules + return + } + depData := ctx.OtherModuleProvider(dep, valuesProviderKey).(valuesProviderData) + + srcs := make([]android.Path, len(depData.Values)) + copy(srcs, depData.Values) + packages[depData.Package] = srcs + + }) + ctx.SetProvider(valueSetProviderKey, valueSetProviderData{ + AvailablePackages: packages, + }) +} |