Merge "Add sh_binary support to bp2build converter."

This commit is contained in:
Treehugger Robot 2021-02-09 16:29:55 +00:00 committed by Gerrit Code Review
commit 6f833664f0
3 changed files with 89 additions and 0 deletions

View File

@ -12,6 +12,7 @@ bootstrap_go_package {
"soong-android",
"soong-bazel",
"soong-genrule",
"soong-sh",
],
testSrcs: [
"build_conversion_test.go",

View File

@ -17,6 +17,7 @@ package bp2build
import (
"android/soong/android"
"android/soong/genrule"
"android/soong/sh"
"strings"
"testing"
)
@ -357,6 +358,12 @@ load("//build/bazel/rules:java.bzl", "java_binary")`,
ruleClass: "genrule",
// Note: no bzlLoadLocation for native rules
},
BazelTarget{
name: "sh_binary_target",
ruleClass: "sh_binary",
// Note: no bzlLoadLocation for native rules
// TODO(ruperts): Could open source the existing, experimental Starlark sh_ rules?
},
},
expectedLoadStatements: `load("//build/bazel/rules:cc.bzl", "cc_binary")
load("//build/bazel/rules:java.bzl", "java_binary")`,
@ -853,6 +860,23 @@ genrule {
)`,
},
},
{
description: "sh_binary test",
moduleTypeUnderTest: "sh_binary",
moduleTypeUnderTestFactory: sh.ShBinaryFactory,
moduleTypeUnderTestBp2BuildMutator: sh.ShBinaryBp2Build,
bp: `sh_binary {
name: "foo",
src: "foo.sh",
bazel_module: { bp2build_available: true },
}`,
expectedBazelTargets: []string{`sh_binary(
name = "foo",
srcs = [
"foo.sh",
],
)`},
},
}
dir := "."

View File

@ -24,6 +24,7 @@ import (
"github.com/google/blueprint/proptools"
"android/soong/android"
"android/soong/bazel"
"android/soong/cc"
"android/soong/tradefed"
)
@ -43,6 +44,8 @@ func init() {
android.RegisterModuleType("sh_binary_host", ShBinaryHostFactory)
android.RegisterModuleType("sh_test", ShTestFactory)
android.RegisterModuleType("sh_test_host", ShTestHostFactory)
android.RegisterBp2BuildMutator("sh_binary", ShBinaryBp2Build)
}
type shBinaryProperties struct {
@ -81,6 +84,9 @@ type shBinaryProperties struct {
// Make this module available when building for recovery.
Recovery_available *bool
// Properties for Bazel migration purposes.
bazel.Properties
}
type TestProperties struct {
@ -461,4 +467,62 @@ func ShTestHostFactory() android.Module {
return module
}
type bazelShBinaryAttributes struct {
Srcs bazel.LabelList
// Bazel also supports the attributes below, but (so far) these are not required for Bionic
// deps
// data
// args
// compatible_with
// deprecation
// distribs
// env
// exec_compatible_with
// exec_properties
// features
// licenses
// output_licenses
// restricted_to
// tags
// target_compatible_with
// testonly
// toolchains
// visibility
}
type bazelShBinary struct {
android.BazelTargetModuleBase
bazelShBinaryAttributes
}
func BazelShBinaryFactory() android.Module {
module := &bazelShBinary{}
module.AddProperties(&module.bazelShBinaryAttributes)
android.InitBazelTargetModule(module)
return module
}
func ShBinaryBp2Build(ctx android.TopDownMutatorContext) {
m, ok := ctx.Module().(*ShBinary)
if !ok || !m.properties.Bazel_module.Bp2build_available {
return
}
srcs := android.BazelLabelForModuleSrc(ctx, []string{*m.properties.Src})
attrs := &bazelShBinaryAttributes{
Srcs: srcs,
}
props := bazel.NewBazelTargetModuleProperties(m.Name(), "sh_binary", "")
ctx.CreateBazelTargetModule(BazelShBinaryFactory, props, attrs)
}
func (m *bazelShBinary) Name() string {
return m.BaseModuleName()
}
func (m *bazelShBinary) GenerateAndroidBuildActions(ctx android.ModuleContext) {}
var Bool = proptools.Bool