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-android",
"soong-bazel", "soong-bazel",
"soong-genrule", "soong-genrule",
"soong-sh",
], ],
testSrcs: [ testSrcs: [
"build_conversion_test.go", "build_conversion_test.go",

View File

@ -17,6 +17,7 @@ package bp2build
import ( import (
"android/soong/android" "android/soong/android"
"android/soong/genrule" "android/soong/genrule"
"android/soong/sh"
"strings" "strings"
"testing" "testing"
) )
@ -357,6 +358,12 @@ load("//build/bazel/rules:java.bzl", "java_binary")`,
ruleClass: "genrule", ruleClass: "genrule",
// Note: no bzlLoadLocation for native rules // 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") expectedLoadStatements: `load("//build/bazel/rules:cc.bzl", "cc_binary")
load("//build/bazel/rules:java.bzl", "java_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 := "." dir := "."

View File

@ -24,6 +24,7 @@ import (
"github.com/google/blueprint/proptools" "github.com/google/blueprint/proptools"
"android/soong/android" "android/soong/android"
"android/soong/bazel"
"android/soong/cc" "android/soong/cc"
"android/soong/tradefed" "android/soong/tradefed"
) )
@ -43,6 +44,8 @@ func init() {
android.RegisterModuleType("sh_binary_host", ShBinaryHostFactory) android.RegisterModuleType("sh_binary_host", ShBinaryHostFactory)
android.RegisterModuleType("sh_test", ShTestFactory) android.RegisterModuleType("sh_test", ShTestFactory)
android.RegisterModuleType("sh_test_host", ShTestHostFactory) android.RegisterModuleType("sh_test_host", ShTestHostFactory)
android.RegisterBp2BuildMutator("sh_binary", ShBinaryBp2Build)
} }
type shBinaryProperties struct { type shBinaryProperties struct {
@ -81,6 +84,9 @@ type shBinaryProperties struct {
// Make this module available when building for recovery. // Make this module available when building for recovery.
Recovery_available *bool Recovery_available *bool
// Properties for Bazel migration purposes.
bazel.Properties
} }
type TestProperties struct { type TestProperties struct {
@ -461,4 +467,62 @@ func ShTestHostFactory() android.Module {
return 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 var Bool = proptools.Bool