Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 394a12b3 authored by Alix Espino's avatar Alix Espino Committed by Gerrit Code Review
Browse files

Merge "Implement bp2build for prebuilt_etc_xml"

parents 4d0a6c86 5918d649
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -467,6 +467,10 @@ var (
		"libavb",
		"avb_headers",

		//external/libxml2
		"xmllint",
		"libxml2",

		//external/fec
		"libfec_rs",

+20 −7
Original line number Diff line number Diff line
@@ -678,9 +678,10 @@ type bazelPrebuiltFileAttributes struct {
	Filename_from_src bazel.BoolAttribute
}

// ConvertWithBp2build performs bp2build conversion of PrebuiltEtc
// All prebuilt_* modules are PrebuiltEtc, which we treat uniformily as *PrebuiltFile*
func (module *PrebuiltEtc) ConvertWithBp2build(ctx android.TopDownMutatorContext) {
// Bp2buildHelper returns a bazelPrebuiltFileAttributes used for the conversion
// of prebuilt_*  modules. bazelPrebuiltFileAttributes has the common attributes
// used by both prebuilt_etc_xml and other prebuilt_* moodules
func (module *PrebuiltEtc) Bp2buildHelper(ctx android.TopDownMutatorContext) *bazelPrebuiltFileAttributes {
	var src bazel.LabelAttribute
	for axis, configToProps := range module.GetArchVariantProperties(ctx, &prebuiltEtcProperties{}) {
		for config, p := range configToProps {
@@ -727,10 +728,6 @@ func (module *PrebuiltEtc) ConvertWithBp2build(ctx android.TopDownMutatorContext
	}

	var dir = module.installDirBase
	// prebuilt_file supports only `etc` or `usr/share`
	if !(dir == "etc" || dir == "usr/share") {
		return
	}
	if subDir := module.subdirProperties.Sub_dir; subDir != nil {
		dir = dir + "/" + *subDir
	}
@@ -752,6 +749,22 @@ func (module *PrebuiltEtc) ConvertWithBp2build(ctx android.TopDownMutatorContext
		attrs.Filename_from_src = bazel.BoolAttribute{Value: moduleProps.Filename_from_src}
	}

	return attrs

}

// ConvertWithBp2build performs bp2build conversion of PrebuiltEtc
// prebuilt_* modules (except prebuilt_etc_xml) are PrebuiltEtc,
// which we treat as *PrebuiltFile*
func (module *PrebuiltEtc) ConvertWithBp2build(ctx android.TopDownMutatorContext) {
	var dir = module.installDirBase
	// prebuilt_file supports only `etc` or `usr/share`
	if !(dir == "etc" || dir == "usr/share") {
		return
	}

	attrs := module.Bp2buildHelper(ctx)

	props := bazel.BazelTargetModuleProperties{
		Rule_class:        "prebuilt_file",
		Bzl_load_location: "//build/bazel/rules:prebuilt_file.bzl",
+2 −0
Original line number Diff line number Diff line
@@ -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"],
}
+38 −0
Original line number Diff line number Diff line
@@ -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)
}
+129 −0
Original line number Diff line number Diff line
// 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,
    })`,
			})}})
}