Add bp2build converter for bpf

Bug: 240163393
Test: m bp2build
Test: bp2build/bpf_conversion_test.go
Change-Id: Ie3bbc64511146b099a766d7e8b56e93cef58ef68
This commit is contained in:
Zi Wang 2022-09-23 16:36:11 -07:00
parent c0d3527a0d
commit b3cb38c3c8
3 changed files with 102 additions and 0 deletions

View file

@ -589,6 +589,7 @@ var (
"ndk_headers",
"ndk_library",
"sysprop_library",
"bpf",
}
// Add the names of modules that bp2build should never convert, if it is

View file

@ -0,0 +1,65 @@
// 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 bp2build
import (
"android/soong/android"
"android/soong/bpf"
"testing"
)
func runBpfTestCase(t *testing.T, tc Bp2buildTestCase) {
t.Helper()
(&tc).ModuleTypeUnderTest = "bpf"
(&tc).ModuleTypeUnderTestFactory = bpf.BpfFactory
RunBp2BuildTestCase(t, registerBpfModuleTypes, tc)
}
func registerBpfModuleTypes(ctx android.RegistrationContext) {}
func TestBpfSupportedAttrs(t *testing.T) {
runBpfTestCase(t, Bp2buildTestCase{
Description: "Bpf module only converts supported attributes",
Filesystem: map[string]string{},
Blueprint: `
bpf {
name: "bpfTestOut.o",
srcs: ["bpfTestSrcOne.c",
"bpfTestSrcTwo.c"],
btf: true,
cflags: ["-bpfCflagOne",
"-bpfCflagTwo"],
include_dirs: ["ia/ib/ic"],
sub_dir: "sa/ab",
}
`,
ExpectedBazelTargets: []string{
MakeBazelTarget("bpf", "bpfTestOut.o", AttrNameToString{
"absolute_includes": `["ia/ib/ic"]`,
"btf": `True`,
"copts": `[
"-bpfCflagOne",
"-bpfCflagTwo",
]`,
"srcs": `[
"bpfTestSrcOne.c",
"bpfTestSrcTwo.c",
]`,
"target_compatible_with": `["//build/bazel/platforms/os:android"]`,
}),
},
})
}

View file

@ -21,6 +21,7 @@ import (
"strings"
"android/soong/android"
"android/soong/bazel"
"github.com/google/blueprint"
"github.com/google/blueprint/proptools"
@ -93,6 +94,7 @@ type BpfProperties struct {
type bpf struct {
android.ModuleBase
android.BazelModuleBase
properties BpfProperties
@ -260,5 +262,39 @@ func BpfFactory() android.Module {
module.AddProperties(&module.properties)
android.InitAndroidArchModule(module, android.DeviceSupported, android.MultilibCommon)
android.InitBazelModule(module)
return module
}
type bazelBpfAttributes struct {
Srcs bazel.LabelListAttribute
Copts bazel.StringListAttribute
Absolute_includes bazel.StringListAttribute
Btf *bool
// TODO(b/249528391): Add support for sub_dir
}
// bpf bp2build converter
func (b *bpf) ConvertWithBp2build(ctx android.TopDownMutatorContext) {
if ctx.ModuleType() != "bpf" {
return
}
srcs := bazel.MakeLabelListAttribute(android.BazelLabelForModuleSrc(ctx, b.properties.Srcs))
copts := bazel.MakeStringListAttribute(b.properties.Cflags)
absolute_includes := bazel.MakeStringListAttribute(b.properties.Include_dirs)
btf := b.properties.Btf
attrs := bazelBpfAttributes{
Srcs: srcs,
Copts: copts,
Absolute_includes: absolute_includes,
Btf: btf,
}
props := bazel.BazelTargetModuleProperties{
Rule_class: "bpf",
Bzl_load_location: "//build/bazel/rules/bpf:bpf.bzl",
}
ctx.CreateBazelTargetModule(props, android.CommonAttributes{Name: b.Name()}, &attrs)
}