Merge changes from topic "aconfig_renames"

* changes:
  Rename device_config --> aconfig and definitions --> declarations
  Rename aconfig namespace to package.
This commit is contained in:
Joe Onorato
2023-06-22 13:30:53 +00:00
committed by Gerrit Code Review
13 changed files with 172 additions and 172 deletions

View File

@@ -3,8 +3,8 @@ package {
} }
bootstrap_go_package { bootstrap_go_package {
name: "soong-device_config", name: "soong-aconfig",
pkgPath: "android/soong/device_config", pkgPath: "android/soong/aconfig",
deps: [ deps: [
"blueprint", "blueprint",
"blueprint-pathtools", "blueprint-pathtools",
@@ -16,17 +16,17 @@ bootstrap_go_package {
"soong-java", "soong-java",
], ],
srcs: [ srcs: [
"device_config_definitions.go", "aconfig_declarations.go",
"device_config_values.go", "aconfig_values.go",
"device_config_value_set.go", "aconfig_value_set.go",
"init.go", "init.go",
"java_device_config_definitions_library.go", "java_aconfig_library.go",
"testing.go", "testing.go",
], ],
testSrcs: [ testSrcs: [
"device_config_definitions_test.go", "aconfig_declarations_test.go",
"device_config_values_test.go", "aconfig_values_test.go",
"device_config_value_set_test.go", "aconfig_value_set_test.go",
], ],
pluginFor: ["soong_build"], pluginFor: ["soong_build"],
} }

View File

@@ -12,7 +12,7 @@
// See the License for the specific language governing permissions and // See the License for the specific language governing permissions and
// limitations under the License. // limitations under the License.
package device_config package aconfig
import ( import (
"android/soong/android" "android/soong/android"
@@ -21,27 +21,27 @@ import (
"strings" "strings"
) )
type DefinitionsModule struct { type DeclarationsModule struct {
android.ModuleBase android.ModuleBase
android.DefaultableModuleBase android.DefaultableModuleBase
// Properties for "device_config_definitions" // Properties for "aconfig_declarations"
properties struct { properties struct {
// aconfig files, relative to this Android.bp file // aconfig files, relative to this Android.bp file
Srcs []string `android:"path"` Srcs []string `android:"path"`
// Release config flag namespace // Release config flag package
Namespace string Package string
// Values from TARGET_RELEASE / RELEASE_DEVICE_CONFIG_VALUE_SETS // Values from TARGET_RELEASE / RELEASE_ACONFIG_VALUE_SETS
Values []string `blueprint:"mutated"` Values []string `blueprint:"mutated"`
} }
intermediatePath android.WritablePath intermediatePath android.WritablePath
} }
func DefinitionsFactory() android.Module { func DeclarationsFactory() android.Module {
module := &DefinitionsModule{} module := &DeclarationsModule{}
android.InitAndroidModule(module) android.InitAndroidModule(module)
android.InitDefaultableModule(module) android.InitDefaultableModule(module)
@@ -58,24 +58,24 @@ type implicitValuesTagType struct {
var implicitValuesTag = implicitValuesTagType{} var implicitValuesTag = implicitValuesTagType{}
func (module *DefinitionsModule) DepsMutator(ctx android.BottomUpMutatorContext) { func (module *DeclarationsModule) DepsMutator(ctx android.BottomUpMutatorContext) {
// Validate Properties // Validate Properties
if len(module.properties.Srcs) == 0 { if len(module.properties.Srcs) == 0 {
ctx.PropertyErrorf("srcs", "missing source files") ctx.PropertyErrorf("srcs", "missing source files")
return return
} }
if len(module.properties.Namespace) == 0 { if len(module.properties.Package) == 0 {
ctx.PropertyErrorf("namespace", "missing namespace property") ctx.PropertyErrorf("package", "missing package property")
} }
// Add a dependency on the device_config_value_sets defined in // Add a dependency on the aconfig_value_sets defined in
// RELEASE_DEVICE_CONFIG_VALUE_SETS, and add any device_config_values that // RELEASE_ACONFIG_VALUE_SETS, and add any aconfig_values that
// match our namespace. // match our package.
valuesFromConfig := ctx.Config().ReleaseDeviceConfigValueSets() valuesFromConfig := ctx.Config().ReleaseAconfigValueSets()
ctx.AddDependency(ctx.Module(), implicitValuesTag, valuesFromConfig...) ctx.AddDependency(ctx.Module(), implicitValuesTag, valuesFromConfig...)
} }
func (module *DefinitionsModule) OutputFiles(tag string) (android.Paths, error) { func (module *DeclarationsModule) OutputFiles(tag string) (android.Paths, error) {
switch tag { switch tag {
case "": case "":
// The default output of this module is the intermediates format, which is // The default output of this module is the intermediates format, which is
@@ -83,7 +83,7 @@ func (module *DefinitionsModule) OutputFiles(tag string) (android.Paths, error)
// correctly. // correctly.
return []android.Path{module.intermediatePath}, nil return []android.Path{module.intermediatePath}, nil
default: default:
return nil, fmt.Errorf("unsupported device_config_definitions module reference tag %q", tag) return nil, fmt.Errorf("unsupported aconfig_declarations module reference tag %q", tag)
} }
} }
@@ -96,23 +96,23 @@ func joinAndPrefix(prefix string, values []string) string {
return sb.String() return sb.String()
} }
// Provider published by device_config_value_set // Provider published by aconfig_value_set
type definitionsProviderData struct { type declarationsProviderData struct {
namespace string Package string
intermediatePath android.WritablePath IntermediatePath android.WritablePath
} }
var definitionsProviderKey = blueprint.NewProvider(definitionsProviderData{}) var declarationsProviderKey = blueprint.NewProvider(declarationsProviderData{})
func (module *DefinitionsModule) GenerateAndroidBuildActions(ctx android.ModuleContext) { func (module *DeclarationsModule) GenerateAndroidBuildActions(ctx android.ModuleContext) {
// Get the values that came from the global RELEASE_DEVICE_CONFIG_VALUE_SETS flag // Get the values that came from the global RELEASE_ACONFIG_VALUE_SETS flag
ctx.VisitDirectDeps(func(dep android.Module) { ctx.VisitDirectDeps(func(dep android.Module) {
if !ctx.OtherModuleHasProvider(dep, valueSetProviderKey) { if !ctx.OtherModuleHasProvider(dep, valueSetProviderKey) {
// Other modules get injected as dependencies too, for example the license modules // Other modules get injected as dependencies too, for example the license modules
return return
} }
depData := ctx.OtherModuleProvider(dep, valueSetProviderKey).(valueSetProviderData) depData := ctx.OtherModuleProvider(dep, valueSetProviderKey).(valueSetProviderData)
valuesFiles, ok := depData.AvailableNamespaces[module.properties.Namespace] valuesFiles, ok := depData.AvailablePackages[module.properties.Package]
if ok { if ok {
for _, path := range valuesFiles { for _, path := range valuesFiles {
module.properties.Values = append(module.properties.Values, path.String()) module.properties.Values = append(module.properties.Values, path.String())
@@ -127,17 +127,17 @@ func (module *DefinitionsModule) GenerateAndroidBuildActions(ctx android.ModuleC
Rule: aconfigRule, Rule: aconfigRule,
Inputs: inputFiles, Inputs: inputFiles,
Output: intermediatePath, Output: intermediatePath,
Description: "device_config_definitions", Description: "aconfig_declarations",
Args: map[string]string{ Args: map[string]string{
"release_version": ctx.Config().ReleaseVersion(), "release_version": ctx.Config().ReleaseVersion(),
"namespace": module.properties.Namespace, "package": module.properties.Package,
"values": joinAndPrefix(" --values ", module.properties.Values), "values": joinAndPrefix(" --values ", module.properties.Values),
}, },
}) })
ctx.SetProvider(definitionsProviderKey, definitionsProviderData{ ctx.SetProvider(declarationsProviderKey, declarationsProviderData{
namespace: module.properties.Namespace, Package: module.properties.Package,
intermediatePath: intermediatePath, IntermediatePath: intermediatePath,
}) })
} }

View File

@@ -12,7 +12,7 @@
// See the License for the specific language governing permissions and // See the License for the specific language governing permissions and
// limitations under the License. // limitations under the License.
package device_config package aconfig
import ( import (
"strings" "strings"
@@ -21,22 +21,22 @@ import (
"android/soong/android" "android/soong/android"
) )
func TestDeviceConfigDefinitions(t *testing.T) { func TestAconfigDeclarations(t *testing.T) {
bp := ` bp := `
device_config_definitions { aconfig_declarations {
name: "module_name", name: "module_name",
namespace: "com.example.package", package: "com.example.package",
srcs: ["foo.aconfig"], srcs: ["foo.aconfig"],
} }
` `
result := runTest(t, android.FixtureExpectsNoErrors, bp) result := runTest(t, android.FixtureExpectsNoErrors, bp)
module := result.ModuleForTests("module_name", "").Module().(*DefinitionsModule) module := result.ModuleForTests("module_name", "").Module().(*DeclarationsModule)
// Check that the provider has the right contents // Check that the provider has the right contents
depData := result.ModuleProvider(module, definitionsProviderKey).(definitionsProviderData) depData := result.ModuleProvider(module, declarationsProviderKey).(declarationsProviderData)
android.AssertStringEquals(t, "namespace", depData.namespace, "com.example.package") android.AssertStringEquals(t, "package", depData.Package, "com.example.package")
if !strings.HasSuffix(depData.intermediatePath.String(), "/intermediate.pb") { if !strings.HasSuffix(depData.IntermediatePath.String(), "/intermediate.pb") {
t.Errorf("Missing intermediates path in provider: %s", depData.intermediatePath.String()) t.Errorf("Missing intermediates path in provider: %s", depData.IntermediatePath.String())
} }
} }

View File

@@ -12,20 +12,20 @@
// See the License for the specific language governing permissions and // See the License for the specific language governing permissions and
// limitations under the License. // limitations under the License.
package device_config package aconfig
import ( import (
"android/soong/android" "android/soong/android"
"github.com/google/blueprint" "github.com/google/blueprint"
) )
// Properties for "device_config_value_set" // Properties for "aconfig_value_set"
type ValueSetModule struct { type ValueSetModule struct {
android.ModuleBase android.ModuleBase
android.DefaultableModuleBase android.DefaultableModuleBase
properties struct { properties struct {
// device_config_values modules // aconfig_values modules
Values []string Values []string
} }
} }
@@ -49,11 +49,11 @@ type valueSetType struct {
var valueSetTag = valueSetType{} var valueSetTag = valueSetType{}
// Provider published by device_config_value_set // Provider published by aconfig_value_set
type valueSetProviderData struct { type valueSetProviderData struct {
// The namespace of each of the // The package of each of the
// (map of namespace --> device_config_module) // (map of package --> aconfig_module)
AvailableNamespaces map[string]android.Paths AvailablePackages map[string]android.Paths
} }
var valueSetProviderKey = blueprint.NewProvider(valueSetProviderData{}) var valueSetProviderKey = blueprint.NewProvider(valueSetProviderData{})
@@ -63,17 +63,17 @@ func (module *ValueSetModule) DepsMutator(ctx android.BottomUpMutatorContext) {
for _, dep := range deps { for _, dep := range deps {
_, ok := dep.(*ValuesModule) _, ok := dep.(*ValuesModule)
if !ok { if !ok {
ctx.PropertyErrorf("values", "values must be a device_config_values module") ctx.PropertyErrorf("values", "values must be a aconfig_values module")
return return
} }
} }
} }
func (module *ValueSetModule) GenerateAndroidBuildActions(ctx android.ModuleContext) { func (module *ValueSetModule) GenerateAndroidBuildActions(ctx android.ModuleContext) {
// Accumulate the namespaces of the values modules listed, and set that as an // Accumulate the packages of the values modules listed, and set that as an
// valueSetProviderKey provider that device_config modules can read and use // valueSetProviderKey provider that aconfig modules can read and use
// to append values to their aconfig actions. // to append values to their aconfig actions.
namespaces := make(map[string]android.Paths) packages := make(map[string]android.Paths)
ctx.VisitDirectDeps(func(dep android.Module) { ctx.VisitDirectDeps(func(dep android.Module) {
if !ctx.OtherModuleHasProvider(dep, valuesProviderKey) { if !ctx.OtherModuleHasProvider(dep, valuesProviderKey) {
// Other modules get injected as dependencies too, for example the license modules // Other modules get injected as dependencies too, for example the license modules
@@ -83,10 +83,10 @@ func (module *ValueSetModule) GenerateAndroidBuildActions(ctx android.ModuleCont
srcs := make([]android.Path, len(depData.Values)) srcs := make([]android.Path, len(depData.Values))
copy(srcs, depData.Values) copy(srcs, depData.Values)
namespaces[depData.Namespace] = srcs packages[depData.Package] = srcs
}) })
ctx.SetProvider(valueSetProviderKey, valueSetProviderData{ ctx.SetProvider(valueSetProviderKey, valueSetProviderData{
AvailableNamespaces: namespaces, AvailablePackages: packages,
}) })
} }

View File

@@ -12,7 +12,7 @@
// See the License for the specific language governing permissions and // See the License for the specific language governing permissions and
// limitations under the License. // limitations under the License.
package device_config package aconfig
import ( import (
"testing" "testing"
@@ -20,15 +20,15 @@ import (
"android/soong/android" "android/soong/android"
) )
func TestDeviceConfigValueSet(t *testing.T) { func TestAconfigValueSet(t *testing.T) {
bp := ` bp := `
device_config_values { aconfig_values {
name: "one", name: "one",
srcs: [ "blah.aconfig_values" ], srcs: [ "blah.aconfig_values" ],
namespace: "foo.namespace" package: "foo.package"
} }
device_config_value_set { aconfig_value_set {
name: "module_name", name: "module_name",
values: [ "one" ], values: [ "one" ],
} }
@@ -39,5 +39,5 @@ func TestDeviceConfigValueSet(t *testing.T) {
// Check that the provider has the right contents // Check that the provider has the right contents
depData := result.ModuleProvider(module, valueSetProviderKey).(valueSetProviderData) depData := result.ModuleProvider(module, valueSetProviderKey).(valueSetProviderData)
android.AssertStringEquals(t, "AvailableNamespaces", "blah.aconfig_values", depData.AvailableNamespaces["foo.namespace"][0].String()) android.AssertStringEquals(t, "AvailablePackages", "blah.aconfig_values", depData.AvailablePackages["foo.package"][0].String())
} }

View File

@@ -12,14 +12,14 @@
// See the License for the specific language governing permissions and // See the License for the specific language governing permissions and
// limitations under the License. // limitations under the License.
package device_config package aconfig
import ( import (
"android/soong/android" "android/soong/android"
"github.com/google/blueprint" "github.com/google/blueprint"
) )
// Properties for "device_config_value" // Properties for "aconfig_value"
type ValuesModule struct { type ValuesModule struct {
android.ModuleBase android.ModuleBase
android.DefaultableModuleBase android.DefaultableModuleBase
@@ -28,8 +28,8 @@ type ValuesModule struct {
// aconfig files, relative to this Android.bp file // aconfig files, relative to this Android.bp file
Srcs []string `android:"path"` Srcs []string `android:"path"`
// Release config flag namespace // Release config flag package
Namespace string Package string
} }
} }
@@ -45,10 +45,10 @@ func ValuesFactory() android.Module {
return module return module
} }
// Provider published by device_config_value_set // Provider published by aconfig_value_set
type valuesProviderData struct { type valuesProviderData struct {
// The namespace that this values module values // The package that this values module values
Namespace string Package string
// The values aconfig files, relative to the root of the tree // The values aconfig files, relative to the root of the tree
Values android.Paths Values android.Paths
@@ -57,14 +57,14 @@ type valuesProviderData struct {
var valuesProviderKey = blueprint.NewProvider(valuesProviderData{}) var valuesProviderKey = blueprint.NewProvider(valuesProviderData{})
func (module *ValuesModule) GenerateAndroidBuildActions(ctx android.ModuleContext) { func (module *ValuesModule) GenerateAndroidBuildActions(ctx android.ModuleContext) {
if len(module.properties.Namespace) == 0 { if len(module.properties.Package) == 0 {
ctx.PropertyErrorf("namespace", "missing namespace property") ctx.PropertyErrorf("package", "missing package property")
} }
// Provide the our source files list to the device_config_value_set as a list of files // Provide the our source files list to the aconfig_value_set as a list of files
providerData := valuesProviderData{ providerData := valuesProviderData{
Namespace: module.properties.Namespace, Package: module.properties.Package,
Values: android.PathsForModuleSrc(ctx, module.properties.Srcs), Values: android.PathsForModuleSrc(ctx, module.properties.Srcs),
} }
ctx.SetProvider(valuesProviderKey, providerData) ctx.SetProvider(valuesProviderKey, providerData)
} }

View File

@@ -12,7 +12,7 @@
// See the License for the specific language governing permissions and // See the License for the specific language governing permissions and
// limitations under the License. // limitations under the License.
package device_config package aconfig
import ( import (
"testing" "testing"
@@ -20,12 +20,12 @@ import (
"android/soong/android" "android/soong/android"
) )
func TestDeviceConfigValues(t *testing.T) { func TestAconfigValues(t *testing.T) {
bp := ` bp := `
device_config_values { aconfig_values {
name: "module_name", name: "module_name",
srcs: [ "blah.aconfig_values" ], srcs: [ "blah.aconfig_values" ],
namespace: "foo.namespace" package: "foo.package"
} }
` `
result := runTest(t, android.FixtureExpectsNoErrors, bp) result := runTest(t, android.FixtureExpectsNoErrors, bp)
@@ -34,6 +34,6 @@ func TestDeviceConfigValues(t *testing.T) {
// Check that the provider has the right contents // Check that the provider has the right contents
depData := result.ModuleProvider(module, valuesProviderKey).(valuesProviderData) depData := result.ModuleProvider(module, valuesProviderKey).(valuesProviderData)
android.AssertStringEquals(t, "namespace", "foo.namespace", depData.Namespace) android.AssertStringEquals(t, "package", "foo.package", depData.Package)
android.AssertPathsEndWith(t, "srcs", []string{"blah.aconfig_values"}, depData.Values) android.AssertPathsEndWith(t, "srcs", []string{"blah.aconfig_values"}, depData.Values)
} }

View File

@@ -12,7 +12,7 @@
// See the License for the specific language governing permissions and // See the License for the specific language governing permissions and
// limitations under the License. // limitations under the License.
package device_config package aconfig
import ( import (
"android/soong/android" "android/soong/android"
@@ -20,13 +20,13 @@ import (
) )
var ( var (
pctx = android.NewPackageContext("android/soong/device_config") pctx = android.NewPackageContext("android/soong/aconfig")
// For device_config_definitions: Generate cache file // For aconfig_declarations: Generate cache file
aconfigRule = pctx.AndroidStaticRule("aconfig", aconfigRule = pctx.AndroidStaticRule("aconfig",
blueprint.RuleParams{ blueprint.RuleParams{
Command: `${aconfig} create-cache` + Command: `${aconfig} create-cache` +
` --package ${namespace}` + ` --package ${package}` +
` --declarations ${in}` + ` --declarations ${in}` +
` ${values}` + ` ${values}` +
` --cache ${out}.tmp` + ` --cache ${out}.tmp` +
@@ -36,9 +36,9 @@ var (
"${aconfig}", "${aconfig}",
}, },
Restat: true, Restat: true,
}, "release_version", "namespace", "values") }, "release_version", "package", "values")
// For java_device_config_definitions_library: Generate java file // For java_aconfig_library: Generate java file
srcJarRule = pctx.AndroidStaticRule("aconfig_srcjar", srcJarRule = pctx.AndroidStaticRule("aconfig_srcjar",
blueprint.RuleParams{ blueprint.RuleParams{
Command: `rm -rf ${out}.tmp` + Command: `rm -rf ${out}.tmp` +
@@ -63,8 +63,8 @@ func init() {
} }
func registerBuildComponents(ctx android.RegistrationContext) { func registerBuildComponents(ctx android.RegistrationContext) {
ctx.RegisterModuleType("device_config_definitions", DefinitionsFactory) ctx.RegisterModuleType("aconfig_declarations", DeclarationsFactory)
ctx.RegisterModuleType("device_config_values", ValuesFactory) ctx.RegisterModuleType("aconfig_values", ValuesFactory)
ctx.RegisterModuleType("device_config_value_set", ValueSetFactory) ctx.RegisterModuleType("aconfig_value_set", ValueSetFactory)
ctx.RegisterModuleType("java_device_config_definitions_library", JavaDefinitionsLibraryFactory) ctx.RegisterModuleType("java_aconfig_library", JavaDeclarationsLibraryFactory)
} }

View File

@@ -0,0 +1,71 @@
// 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"
"android/soong/java"
"fmt"
"github.com/google/blueprint"
)
type declarationsTagType struct {
blueprint.BaseDependencyTag
}
var declarationsTag = declarationsTagType{}
type JavaAconfigDeclarationsLibraryProperties struct {
// name of the aconfig_declarations module to generate a library for
Aconfig_declarations string
}
type JavaAconfigDeclarationsLibraryCallbacks struct {
properties JavaAconfigDeclarationsLibraryProperties
}
func JavaDeclarationsLibraryFactory() android.Module {
callbacks := &JavaAconfigDeclarationsLibraryCallbacks{}
return java.GeneratedJavaLibraryModuleFactory("java_aconfig_library", callbacks, &callbacks.properties)
}
func (callbacks *JavaAconfigDeclarationsLibraryCallbacks) DepsMutator(module *java.GeneratedJavaLibraryModule, ctx android.BottomUpMutatorContext) {
declarations := callbacks.properties.Aconfig_declarations
if len(declarations) == 0 {
// TODO: Add test for this case
ctx.PropertyErrorf("aconfig_declarations", "aconfig_declarations property required")
} else {
ctx.AddDependency(ctx.Module(), declarationsTag, declarations)
}
}
func (callbacks *JavaAconfigDeclarationsLibraryCallbacks) GenerateSourceJarBuildActions(ctx android.ModuleContext) android.Path {
// Get the values that came from the global RELEASE_ACONFIG_VALUE_SETS flag
declarationsModules := ctx.GetDirectDepsWithTag(declarationsTag)
if len(declarationsModules) != 1 {
panic(fmt.Errorf("Exactly one aconfig_declarations property required"))
}
declarations := ctx.OtherModuleProvider(declarationsModules[0], declarationsProviderKey).(declarationsProviderData)
srcJarPath := android.PathForModuleGen(ctx, ctx.ModuleName()+".srcjar")
ctx.Build(pctx, android.BuildParams{
Rule: srcJarRule,
Input: declarations.IntermediatePath,
Output: srcJarPath,
Description: "aconfig.srcjar",
})
return srcJarPath
}

View File

@@ -12,7 +12,7 @@
// See the License for the specific language governing permissions and // See the License for the specific language governing permissions and
// limitations under the License. // limitations under the License.
package device_config package aconfig
import ( import (
"testing" "testing"
@@ -20,10 +20,10 @@ import (
"android/soong/android" "android/soong/android"
) )
var PrepareForTestWithDeviceConfigBuildComponents = android.FixtureRegisterWithContext(registerBuildComponents) var PrepareForTestWithAconfigBuildComponents = android.FixtureRegisterWithContext(registerBuildComponents)
func runTest(t *testing.T, errorHandler android.FixtureErrorHandler, bp string) *android.TestResult { func runTest(t *testing.T, errorHandler android.FixtureErrorHandler, bp string) *android.TestResult {
return android.GroupFixturePreparers(PrepareForTestWithDeviceConfigBuildComponents). return android.GroupFixturePreparers(PrepareForTestWithAconfigBuildComponents).
ExtendWithErrorHandler(errorHandler). ExtendWithErrorHandler(errorHandler).
RunTestWithBp(t, bp) RunTestWithBp(t, bp)
} }

View File

@@ -184,8 +184,8 @@ func (c Config) ReleaseVersion() string {
} }
// The flag values files passed to aconfig, derived from RELEASE_VERSION // The flag values files passed to aconfig, derived from RELEASE_VERSION
func (c Config) ReleaseDeviceConfigValueSets() []string { func (c Config) ReleaseAconfigValueSets() []string {
return c.config.productVariables.ReleaseDeviceConfigValueSets return c.config.productVariables.ReleaseAconfigValueSets
} }
// A DeviceConfig object represents the configuration for a particular device // A DeviceConfig object represents the configuration for a particular device

View File

@@ -477,8 +477,8 @@ type productVariables struct {
ProductBrand string `json:",omitempty"` ProductBrand string `json:",omitempty"`
BuildVersionTags []string `json:",omitempty"` BuildVersionTags []string `json:",omitempty"`
ReleaseVersion string `json:",omitempty"` ReleaseVersion string `json:",omitempty"`
ReleaseDeviceConfigValueSets []string `json:",omitempty"` ReleaseAconfigValueSets []string `json:",omitempty"`
} }
func boolPtr(v bool) *bool { func boolPtr(v bool) *bool {

View File

@@ -1,71 +0,0 @@
// 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 device_config
import (
"android/soong/android"
"android/soong/java"
"fmt"
"github.com/google/blueprint"
)
type definitionsTagType struct {
blueprint.BaseDependencyTag
}
var definitionsTag = definitionsTagType{}
type JavaDeviceConfigDefinitionsLibraryProperties struct {
// name of the device_config_definitions module to generate a library for
Device_config_definitions string
}
type JavaDeviceConfigDefinitionsLibraryCallbacks struct {
properties JavaDeviceConfigDefinitionsLibraryProperties
}
func JavaDefinitionsLibraryFactory() android.Module {
callbacks := &JavaDeviceConfigDefinitionsLibraryCallbacks{}
return java.GeneratedJavaLibraryModuleFactory("java_device_config_definitions_library", callbacks, &callbacks.properties)
}
func (callbacks *JavaDeviceConfigDefinitionsLibraryCallbacks) DepsMutator(module *java.GeneratedJavaLibraryModule, ctx android.BottomUpMutatorContext) {
definitions := callbacks.properties.Device_config_definitions
if len(definitions) == 0 {
// TODO: Add test for this case
ctx.PropertyErrorf("device_config_definitions", "device_config_definitions property required")
} else {
ctx.AddDependency(ctx.Module(), definitionsTag, definitions)
}
}
func (callbacks *JavaDeviceConfigDefinitionsLibraryCallbacks) GenerateSourceJarBuildActions(ctx android.ModuleContext) android.Path {
// Get the values that came from the global RELEASE_DEVICE_CONFIG_VALUE_SETS flag
definitionsModules := ctx.GetDirectDepsWithTag(definitionsTag)
if len(definitionsModules) != 1 {
panic(fmt.Errorf("Exactly one device_config_definitions property required"))
}
definitions := ctx.OtherModuleProvider(definitionsModules[0], definitionsProviderKey).(definitionsProviderData)
srcJarPath := android.PathForModuleGen(ctx, ctx.ModuleName()+".srcjar")
ctx.Build(pctx, android.BuildParams{
Rule: srcJarRule,
Input: definitions.intermediatePath,
Output: srcJarPath,
Description: "device_config.srcjar",
})
return srcJarPath
}