Add bp2build converter for bpf
Bug: 240163393 Test: m bp2build Test: bp2build/bpf_conversion_test.go Change-Id: Ie3bbc64511146b099a766d7e8b56e93cef58ef68
This commit is contained in:
parent
c0d3527a0d
commit
b3cb38c3c8
3 changed files with 102 additions and 0 deletions
|
@ -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
|
||||
|
|
65
bp2build/bpf_conversion_test.go
Normal file
65
bp2build/bpf_conversion_test.go
Normal 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"]`,
|
||||
}),
|
||||
},
|
||||
})
|
||||
}
|
36
bpf/bpf.go
36
bpf/bpf.go
|
@ -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)
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue