diff options
author | 2022-06-27 20:57:44 +0000 | |
---|---|---|
committer | 2022-09-22 20:17:19 +0000 | |
commit | 5918d649a4c2e4e77efca5d50cbd0dfafb004251 (patch) | |
tree | 265d9c51a2c06a9532dafe86be1b2c26b75ba527 /xml | |
parent | 2c27b17f8e0edc27526d0fa8bb95d0290ab5d8d5 (diff) |
Implement bp2build for prebuilt_etc_xml
Bug: 237039154
Test: xml_conversion_test.go & bp2build
Change-Id: I1f2c57b9532138f73041d8fc08feea3f66b2ebbc
Diffstat (limited to 'xml')
-rw-r--r-- | xml/Android.bp | 2 | ||||
-rw-r--r-- | xml/xml.go | 38 | ||||
-rw-r--r-- | xml/xml_conversion_test.go | 129 |
3 files changed, 169 insertions, 0 deletions
diff --git a/xml/Android.bp b/xml/Android.bp index 154293032..d4753de62 100644 --- a/xml/Android.bp +++ b/xml/Android.bp @@ -9,6 +9,7 @@ bootstrap_go_package { "blueprint", "blueprint-pathtools", "soong", + "soong-bp2build", "soong-android", "soong-etc", ], @@ -18,6 +19,7 @@ bootstrap_go_package { ], testSrcs: [ "xml_test.go", + "xml_conversion_test.go", ], pluginFor: ["soong_build"], } diff --git a/xml/xml.go b/xml/xml.go index c28107847..8c0c07282 100644 --- a/xml/xml.go +++ b/xml/xml.go @@ -16,6 +16,7 @@ package xml import ( "android/soong/android" + "android/soong/bazel" "android/soong/etc" "github.com/google/blueprint" @@ -67,6 +68,8 @@ type prebuiltEtcXmlProperties struct { } type prebuiltEtcXml struct { + android.BazelModuleBase + etc.PrebuiltEtc properties prebuiltEtcXmlProperties @@ -129,5 +132,40 @@ func PrebuiltEtcXmlFactory() android.Module { etc.InitPrebuiltEtcModule(&module.PrebuiltEtc, "etc") // This module is device-only android.InitAndroidArchModule(module, android.DeviceSupported, android.MultilibFirst) + android.InitBazelModule(module) return module } + +type bazelPrebuiltEtcXmlAttributes struct { + Src bazel.LabelAttribute + Filename bazel.LabelAttribute + Dir string + Installable bazel.BoolAttribute + Filename_from_src bazel.BoolAttribute + Schema *string +} + +func (p *prebuiltEtcXml) ConvertWithBp2build(ctx android.TopDownMutatorContext) { + baseAttrs := p.PrebuiltEtc.Bp2buildHelper(ctx) + + var schema *string + if p.properties.Schema != nil { + schema = p.properties.Schema + } + + attrs := &bazelPrebuiltEtcXmlAttributes{ + Src: baseAttrs.Src, + Filename: baseAttrs.Filename, + Dir: baseAttrs.Dir, + Installable: baseAttrs.Installable, + Filename_from_src: baseAttrs.Filename_from_src, + Schema: schema, + } + + props := bazel.BazelTargetModuleProperties{ + Rule_class: "prebuilt_xml", + Bzl_load_location: "//build/bazel/rules/prebuilt_xml.bzl", + } + + ctx.CreateBazelTargetModule(props, android.CommonAttributes{Name: p.Name()}, attrs) +} diff --git a/xml/xml_conversion_test.go b/xml/xml_conversion_test.go new file mode 100644 index 000000000..6606ddca6 --- /dev/null +++ b/xml/xml_conversion_test.go @@ -0,0 +1,129 @@ +// Copyright 2022 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 xml + +import ( + "android/soong/android" + "android/soong/bp2build" + + "testing" +) + +func runXmlPrebuiltEtcTestCase(t *testing.T, tc bp2build.Bp2buildTestCase) { + t.Helper() + (&tc).ModuleTypeUnderTest = "prebuilt_etc_xml" + (&tc).ModuleTypeUnderTestFactory = PrebuiltEtcXmlFactory + bp2build.RunBp2BuildTestCase(t, registerXmlModuleTypes, tc) +} + +func registerXmlModuleTypes(ctx android.RegistrationContext) { +} + +func TestXmlPrebuiltEtcSimple(t *testing.T) { + runXmlPrebuiltEtcTestCase(t, bp2build.Bp2buildTestCase{ + Description: "prebuilt_etc_xml - simple example", + Filesystem: map[string]string{}, + Blueprint: ` +prebuilt_etc_xml { + name: "foo", + src: "fooSrc", + filename: "fooFileName", + sub_dir: "fooDir", + schema: "foo.dtd", +} +`, + ExpectedBazelTargets: []string{ + bp2build.MakeBazelTarget("prebuilt_xml", "foo", bp2build.AttrNameToString{ + "src": `"fooSrc"`, + "filename": `"fooFileName"`, + "dir": `"etc/fooDir"`, + "schema": `"foo.dtd"`, + })}}) +} + +func TestXmlPrebuiltEtcFilenameFromSrc(t *testing.T) { + runXmlPrebuiltEtcTestCase(t, bp2build.Bp2buildTestCase{ + Description: "prebuilt_etc_xml - filenameFromSrc True ", + Filesystem: map[string]string{}, + Blueprint: ` +prebuilt_etc_xml { + name: "foo", + src: "fooSrc", + filename_from_src: true, + sub_dir: "fooDir", + schema: "foo.dtd", +} +`, + ExpectedBazelTargets: []string{ + bp2build.MakeBazelTarget("prebuilt_xml", "foo", bp2build.AttrNameToString{ + "src": `"fooSrc"`, + "filename": `"fooSrc"`, + "dir": `"etc/fooDir"`, + "schema": `"foo.dtd"`, + })}}) +} + +func TestXmlPrebuiltEtcFilenameAndFilenameFromSrc(t *testing.T) { + runXmlPrebuiltEtcTestCase(t, bp2build.Bp2buildTestCase{ + Description: "prebuilt_etc_xml - filename provided and filenameFromSrc True ", + Filesystem: map[string]string{}, + Blueprint: ` +prebuilt_etc_xml { + name: "foo", + src: "fooSrc", + filename: "fooFileName", + filename_from_src: true, + sub_dir: "fooDir", + schema: "foo.dtd", +} +`, + ExpectedBazelTargets: []string{ + bp2build.MakeBazelTarget("prebuilt_xml", "foo", bp2build.AttrNameToString{ + "src": `"fooSrc"`, + "filename": `"fooFileName"`, + "dir": `"etc/fooDir"`, + "schema": `"foo.dtd"`, + })}}) +} + +func TestXmlPrebuiltEtcFileNameFromSrcMultipleSrcs(t *testing.T) { + runXmlPrebuiltEtcTestCase(t, bp2build.Bp2buildTestCase{ + Description: "prebuilt_etc - filename_from_src is true but there are multiple srcs", + Filesystem: map[string]string{}, + Blueprint: ` +prebuilt_etc_xml { + name: "foo", + filename_from_src: true, + arch: { + arm: { + src: "barSrc", + }, + arm64: { + src: "bazSrc", + }, + } +} +`, + ExpectedBazelTargets: []string{ + bp2build.MakeBazelTarget("prebuilt_xml", "foo", bp2build.AttrNameToString{ + "filename_from_src": `True`, + "dir": `"etc"`, + "src": `select({ + "//build/bazel/platforms/arch:arm": "barSrc", + "//build/bazel/platforms/arch:arm64": "bazSrc", + "//conditions:default": None, + })`, + })}}) +} |