xref: /aosp_15_r20/build/soong/bpf/bpf.go (revision 333d2b3687b3a337dbcca9d65000bca186795e39)
1*333d2b36SAndroid Build Coastguard Worker// Copyright (C) 2018 The Android Open Source Project
2*333d2b36SAndroid Build Coastguard Worker//
3*333d2b36SAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License");
4*333d2b36SAndroid Build Coastguard Worker// you may not use this file except in compliance with the License.
5*333d2b36SAndroid Build Coastguard Worker// You may obtain a copy of the License at
6*333d2b36SAndroid Build Coastguard Worker//
7*333d2b36SAndroid Build Coastguard Worker//     http://www.apache.org/licenses/LICENSE-2.0
8*333d2b36SAndroid Build Coastguard Worker//
9*333d2b36SAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software
10*333d2b36SAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS,
11*333d2b36SAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*333d2b36SAndroid Build Coastguard Worker// See the License for the specific language governing permissions and
13*333d2b36SAndroid Build Coastguard Worker// limitations under the License.
14*333d2b36SAndroid Build Coastguard Worker
15*333d2b36SAndroid Build Coastguard Workerpackage bpf
16*333d2b36SAndroid Build Coastguard Worker
17*333d2b36SAndroid Build Coastguard Workerimport (
18*333d2b36SAndroid Build Coastguard Worker	"fmt"
19*333d2b36SAndroid Build Coastguard Worker	"io"
20*333d2b36SAndroid Build Coastguard Worker	"path/filepath"
21*333d2b36SAndroid Build Coastguard Worker	"runtime"
22*333d2b36SAndroid Build Coastguard Worker	"strings"
23*333d2b36SAndroid Build Coastguard Worker
24*333d2b36SAndroid Build Coastguard Worker	"android/soong/android"
25*333d2b36SAndroid Build Coastguard Worker	"android/soong/cc"
26*333d2b36SAndroid Build Coastguard Worker
27*333d2b36SAndroid Build Coastguard Worker	"github.com/google/blueprint"
28*333d2b36SAndroid Build Coastguard Worker	"github.com/google/blueprint/proptools"
29*333d2b36SAndroid Build Coastguard Worker)
30*333d2b36SAndroid Build Coastguard Worker
31*333d2b36SAndroid Build Coastguard Workerfunc init() {
32*333d2b36SAndroid Build Coastguard Worker	registerBpfBuildComponents(android.InitRegistrationContext)
33*333d2b36SAndroid Build Coastguard Worker	pctx.Import("android/soong/cc/config")
34*333d2b36SAndroid Build Coastguard Worker	pctx.StaticVariable("relPwd", cc.PwdPrefix())
35*333d2b36SAndroid Build Coastguard Worker}
36*333d2b36SAndroid Build Coastguard Worker
37*333d2b36SAndroid Build Coastguard Workervar (
38*333d2b36SAndroid Build Coastguard Worker	pctx = android.NewPackageContext("android/soong/bpf")
39*333d2b36SAndroid Build Coastguard Worker
40*333d2b36SAndroid Build Coastguard Worker	ccRule = pctx.AndroidRemoteStaticRule("ccRule", android.RemoteRuleSupports{Goma: true},
41*333d2b36SAndroid Build Coastguard Worker		blueprint.RuleParams{
42*333d2b36SAndroid Build Coastguard Worker			Depfile:     "${out}.d",
43*333d2b36SAndroid Build Coastguard Worker			Deps:        blueprint.DepsGCC,
44*333d2b36SAndroid Build Coastguard Worker			Command:     "$relPwd $ccCmd --target=bpf -c $cFlags -MD -MF ${out}.d -o $out $in",
45*333d2b36SAndroid Build Coastguard Worker			CommandDeps: []string{"$ccCmd"},
46*333d2b36SAndroid Build Coastguard Worker		},
47*333d2b36SAndroid Build Coastguard Worker		"ccCmd", "cFlags")
48*333d2b36SAndroid Build Coastguard Worker
49*333d2b36SAndroid Build Coastguard Worker	stripRule = pctx.AndroidStaticRule("stripRule",
50*333d2b36SAndroid Build Coastguard Worker		blueprint.RuleParams{
51*333d2b36SAndroid Build Coastguard Worker			Command: `$stripCmd --strip-unneeded --remove-section=.rel.BTF ` +
52*333d2b36SAndroid Build Coastguard Worker				`--remove-section=.rel.BTF.ext --remove-section=.BTF.ext $in -o $out`,
53*333d2b36SAndroid Build Coastguard Worker			CommandDeps: []string{"$stripCmd"},
54*333d2b36SAndroid Build Coastguard Worker		},
55*333d2b36SAndroid Build Coastguard Worker		"stripCmd")
56*333d2b36SAndroid Build Coastguard Worker)
57*333d2b36SAndroid Build Coastguard Worker
58*333d2b36SAndroid Build Coastguard Workerfunc registerBpfBuildComponents(ctx android.RegistrationContext) {
59*333d2b36SAndroid Build Coastguard Worker	ctx.RegisterModuleType("bpf_defaults", defaultsFactory)
60*333d2b36SAndroid Build Coastguard Worker	ctx.RegisterModuleType("bpf", BpfFactory)
61*333d2b36SAndroid Build Coastguard Worker}
62*333d2b36SAndroid Build Coastguard Worker
63*333d2b36SAndroid Build Coastguard Workervar PrepareForTestWithBpf = android.FixtureRegisterWithContext(registerBpfBuildComponents)
64*333d2b36SAndroid Build Coastguard Worker
65*333d2b36SAndroid Build Coastguard Worker// BpfModule interface is used by the apex package to gather information from a bpf module.
66*333d2b36SAndroid Build Coastguard Workertype BpfModule interface {
67*333d2b36SAndroid Build Coastguard Worker	android.Module
68*333d2b36SAndroid Build Coastguard Worker
69*333d2b36SAndroid Build Coastguard Worker	// Returns the sub install directory if the bpf module is included by apex.
70*333d2b36SAndroid Build Coastguard Worker	SubDir() string
71*333d2b36SAndroid Build Coastguard Worker}
72*333d2b36SAndroid Build Coastguard Worker
73*333d2b36SAndroid Build Coastguard Workertype BpfProperties struct {
74*333d2b36SAndroid Build Coastguard Worker	// source paths to the files.
75*333d2b36SAndroid Build Coastguard Worker	Srcs []string `android:"path"`
76*333d2b36SAndroid Build Coastguard Worker
77*333d2b36SAndroid Build Coastguard Worker	// additional cflags that should be used to build the bpf variant of
78*333d2b36SAndroid Build Coastguard Worker	// the C/C++ module.
79*333d2b36SAndroid Build Coastguard Worker	Cflags []string
80*333d2b36SAndroid Build Coastguard Worker
81*333d2b36SAndroid Build Coastguard Worker	// list of directories relative to the root of the source tree that
82*333d2b36SAndroid Build Coastguard Worker	// will be added to the include paths using -I.
83*333d2b36SAndroid Build Coastguard Worker	// If possible, don't use this. If adding paths from the current
84*333d2b36SAndroid Build Coastguard Worker	// directory, use local_include_dirs. If adding paths from other
85*333d2b36SAndroid Build Coastguard Worker	// modules, use export_include_dirs in that module.
86*333d2b36SAndroid Build Coastguard Worker	Include_dirs []string
87*333d2b36SAndroid Build Coastguard Worker
88*333d2b36SAndroid Build Coastguard Worker	// list of directories relative to the Blueprint file that will be
89*333d2b36SAndroid Build Coastguard Worker	// added to the include path using -I.
90*333d2b36SAndroid Build Coastguard Worker	Local_include_dirs []string
91*333d2b36SAndroid Build Coastguard Worker	// optional subdirectory under which this module is installed into.
92*333d2b36SAndroid Build Coastguard Worker	Sub_dir string
93*333d2b36SAndroid Build Coastguard Worker
94*333d2b36SAndroid Build Coastguard Worker	// if set to true, generate BTF debug info for maps & programs.
95*333d2b36SAndroid Build Coastguard Worker	Btf *bool
96*333d2b36SAndroid Build Coastguard Worker
97*333d2b36SAndroid Build Coastguard Worker	Vendor *bool
98*333d2b36SAndroid Build Coastguard Worker
99*333d2b36SAndroid Build Coastguard Worker	VendorInternal bool `blueprint:"mutated"`
100*333d2b36SAndroid Build Coastguard Worker}
101*333d2b36SAndroid Build Coastguard Worker
102*333d2b36SAndroid Build Coastguard Workertype bpf struct {
103*333d2b36SAndroid Build Coastguard Worker	android.ModuleBase
104*333d2b36SAndroid Build Coastguard Worker	android.DefaultableModuleBase
105*333d2b36SAndroid Build Coastguard Worker	properties BpfProperties
106*333d2b36SAndroid Build Coastguard Worker
107*333d2b36SAndroid Build Coastguard Worker	objs android.Paths
108*333d2b36SAndroid Build Coastguard Worker}
109*333d2b36SAndroid Build Coastguard Worker
110*333d2b36SAndroid Build Coastguard Workervar _ android.ImageInterface = (*bpf)(nil)
111*333d2b36SAndroid Build Coastguard Worker
112*333d2b36SAndroid Build Coastguard Workerfunc (bpf *bpf) ImageMutatorBegin(ctx android.ImageInterfaceContext) {}
113*333d2b36SAndroid Build Coastguard Worker
114*333d2b36SAndroid Build Coastguard Workerfunc (bpf *bpf) VendorVariantNeeded(ctx android.ImageInterfaceContext) bool {
115*333d2b36SAndroid Build Coastguard Worker	return proptools.Bool(bpf.properties.Vendor)
116*333d2b36SAndroid Build Coastguard Worker}
117*333d2b36SAndroid Build Coastguard Worker
118*333d2b36SAndroid Build Coastguard Workerfunc (bpf *bpf) ProductVariantNeeded(ctx android.ImageInterfaceContext) bool {
119*333d2b36SAndroid Build Coastguard Worker	return false
120*333d2b36SAndroid Build Coastguard Worker}
121*333d2b36SAndroid Build Coastguard Worker
122*333d2b36SAndroid Build Coastguard Workerfunc (bpf *bpf) CoreVariantNeeded(ctx android.ImageInterfaceContext) bool {
123*333d2b36SAndroid Build Coastguard Worker	return !proptools.Bool(bpf.properties.Vendor)
124*333d2b36SAndroid Build Coastguard Worker}
125*333d2b36SAndroid Build Coastguard Worker
126*333d2b36SAndroid Build Coastguard Workerfunc (bpf *bpf) RamdiskVariantNeeded(ctx android.ImageInterfaceContext) bool {
127*333d2b36SAndroid Build Coastguard Worker	return false
128*333d2b36SAndroid Build Coastguard Worker}
129*333d2b36SAndroid Build Coastguard Worker
130*333d2b36SAndroid Build Coastguard Workerfunc (bpf *bpf) VendorRamdiskVariantNeeded(ctx android.ImageInterfaceContext) bool {
131*333d2b36SAndroid Build Coastguard Worker	return false
132*333d2b36SAndroid Build Coastguard Worker}
133*333d2b36SAndroid Build Coastguard Worker
134*333d2b36SAndroid Build Coastguard Workerfunc (bpf *bpf) DebugRamdiskVariantNeeded(ctx android.ImageInterfaceContext) bool {
135*333d2b36SAndroid Build Coastguard Worker	return false
136*333d2b36SAndroid Build Coastguard Worker}
137*333d2b36SAndroid Build Coastguard Worker
138*333d2b36SAndroid Build Coastguard Workerfunc (bpf *bpf) RecoveryVariantNeeded(ctx android.ImageInterfaceContext) bool {
139*333d2b36SAndroid Build Coastguard Worker	return false
140*333d2b36SAndroid Build Coastguard Worker}
141*333d2b36SAndroid Build Coastguard Worker
142*333d2b36SAndroid Build Coastguard Workerfunc (bpf *bpf) ExtraImageVariations(ctx android.ImageInterfaceContext) []string {
143*333d2b36SAndroid Build Coastguard Worker	return nil
144*333d2b36SAndroid Build Coastguard Worker}
145*333d2b36SAndroid Build Coastguard Worker
146*333d2b36SAndroid Build Coastguard Workerfunc (bpf *bpf) SetImageVariation(ctx android.ImageInterfaceContext, variation string) {
147*333d2b36SAndroid Build Coastguard Worker	bpf.properties.VendorInternal = variation == "vendor"
148*333d2b36SAndroid Build Coastguard Worker}
149*333d2b36SAndroid Build Coastguard Worker
150*333d2b36SAndroid Build Coastguard Workerfunc (bpf *bpf) GenerateAndroidBuildActions(ctx android.ModuleContext) {
151*333d2b36SAndroid Build Coastguard Worker	cflags := []string{
152*333d2b36SAndroid Build Coastguard Worker		"-nostdlibinc",
153*333d2b36SAndroid Build Coastguard Worker
154*333d2b36SAndroid Build Coastguard Worker		// Make paths in deps files relative
155*333d2b36SAndroid Build Coastguard Worker		"-no-canonical-prefixes",
156*333d2b36SAndroid Build Coastguard Worker
157*333d2b36SAndroid Build Coastguard Worker		"-O2",
158*333d2b36SAndroid Build Coastguard Worker		"-Wall",
159*333d2b36SAndroid Build Coastguard Worker		"-Werror",
160*333d2b36SAndroid Build Coastguard Worker		"-Wextra",
161*333d2b36SAndroid Build Coastguard Worker
162*333d2b36SAndroid Build Coastguard Worker		"-isystem bionic/libc/include",
163*333d2b36SAndroid Build Coastguard Worker		"-isystem bionic/libc/kernel/uapi",
164*333d2b36SAndroid Build Coastguard Worker		// The architecture doesn't matter here, but asm/types.h is included by linux/types.h.
165*333d2b36SAndroid Build Coastguard Worker		"-isystem bionic/libc/kernel/uapi/asm-arm64",
166*333d2b36SAndroid Build Coastguard Worker		"-isystem bionic/libc/kernel/android/uapi",
167*333d2b36SAndroid Build Coastguard Worker		"-I       packages/modules/Connectivity/bpf/headers/include",
168*333d2b36SAndroid Build Coastguard Worker		// TODO(b/149785767): only give access to specific file with AID_* constants
169*333d2b36SAndroid Build Coastguard Worker		"-I       system/core/libcutils/include",
170*333d2b36SAndroid Build Coastguard Worker		"-I " + ctx.ModuleDir(),
171*333d2b36SAndroid Build Coastguard Worker	}
172*333d2b36SAndroid Build Coastguard Worker
173*333d2b36SAndroid Build Coastguard Worker	for _, dir := range android.PathsForModuleSrc(ctx, bpf.properties.Local_include_dirs) {
174*333d2b36SAndroid Build Coastguard Worker		cflags = append(cflags, "-I "+dir.String())
175*333d2b36SAndroid Build Coastguard Worker	}
176*333d2b36SAndroid Build Coastguard Worker
177*333d2b36SAndroid Build Coastguard Worker	for _, dir := range android.PathsForSource(ctx, bpf.properties.Include_dirs) {
178*333d2b36SAndroid Build Coastguard Worker		cflags = append(cflags, "-I "+dir.String())
179*333d2b36SAndroid Build Coastguard Worker	}
180*333d2b36SAndroid Build Coastguard Worker
181*333d2b36SAndroid Build Coastguard Worker	cflags = append(cflags, bpf.properties.Cflags...)
182*333d2b36SAndroid Build Coastguard Worker
183*333d2b36SAndroid Build Coastguard Worker	if proptools.BoolDefault(bpf.properties.Btf, true) {
184*333d2b36SAndroid Build Coastguard Worker		cflags = append(cflags, "-g")
185*333d2b36SAndroid Build Coastguard Worker		if runtime.GOOS != "darwin" {
186*333d2b36SAndroid Build Coastguard Worker			cflags = append(cflags, "-fdebug-prefix-map=/proc/self/cwd=")
187*333d2b36SAndroid Build Coastguard Worker		}
188*333d2b36SAndroid Build Coastguard Worker	}
189*333d2b36SAndroid Build Coastguard Worker
190*333d2b36SAndroid Build Coastguard Worker	srcs := android.PathsForModuleSrc(ctx, bpf.properties.Srcs)
191*333d2b36SAndroid Build Coastguard Worker
192*333d2b36SAndroid Build Coastguard Worker	for _, src := range srcs {
193*333d2b36SAndroid Build Coastguard Worker		if strings.ContainsRune(filepath.Base(src.String()), '_') {
194*333d2b36SAndroid Build Coastguard Worker			ctx.ModuleErrorf("invalid character '_' in source name")
195*333d2b36SAndroid Build Coastguard Worker		}
196*333d2b36SAndroid Build Coastguard Worker		obj := android.ObjPathWithExt(ctx, "unstripped", src, "o")
197*333d2b36SAndroid Build Coastguard Worker
198*333d2b36SAndroid Build Coastguard Worker		ctx.Build(pctx, android.BuildParams{
199*333d2b36SAndroid Build Coastguard Worker			Rule:   ccRule,
200*333d2b36SAndroid Build Coastguard Worker			Input:  src,
201*333d2b36SAndroid Build Coastguard Worker			Output: obj,
202*333d2b36SAndroid Build Coastguard Worker			Args: map[string]string{
203*333d2b36SAndroid Build Coastguard Worker				"cFlags": strings.Join(cflags, " "),
204*333d2b36SAndroid Build Coastguard Worker				"ccCmd":  "${config.ClangBin}/clang",
205*333d2b36SAndroid Build Coastguard Worker			},
206*333d2b36SAndroid Build Coastguard Worker		})
207*333d2b36SAndroid Build Coastguard Worker
208*333d2b36SAndroid Build Coastguard Worker		if proptools.BoolDefault(bpf.properties.Btf, true) {
209*333d2b36SAndroid Build Coastguard Worker			objStripped := android.ObjPathWithExt(ctx, "", src, "o")
210*333d2b36SAndroid Build Coastguard Worker			ctx.Build(pctx, android.BuildParams{
211*333d2b36SAndroid Build Coastguard Worker				Rule:   stripRule,
212*333d2b36SAndroid Build Coastguard Worker				Input:  obj,
213*333d2b36SAndroid Build Coastguard Worker				Output: objStripped,
214*333d2b36SAndroid Build Coastguard Worker				Args: map[string]string{
215*333d2b36SAndroid Build Coastguard Worker					"stripCmd": "${config.ClangBin}/llvm-strip",
216*333d2b36SAndroid Build Coastguard Worker				},
217*333d2b36SAndroid Build Coastguard Worker			})
218*333d2b36SAndroid Build Coastguard Worker			bpf.objs = append(bpf.objs, objStripped.WithoutRel())
219*333d2b36SAndroid Build Coastguard Worker		} else {
220*333d2b36SAndroid Build Coastguard Worker			bpf.objs = append(bpf.objs, obj.WithoutRel())
221*333d2b36SAndroid Build Coastguard Worker		}
222*333d2b36SAndroid Build Coastguard Worker
223*333d2b36SAndroid Build Coastguard Worker	}
224*333d2b36SAndroid Build Coastguard Worker
225*333d2b36SAndroid Build Coastguard Worker	installDir := android.PathForModuleInstall(ctx, "etc", "bpf")
226*333d2b36SAndroid Build Coastguard Worker	if len(bpf.properties.Sub_dir) > 0 {
227*333d2b36SAndroid Build Coastguard Worker		installDir = installDir.Join(ctx, bpf.properties.Sub_dir)
228*333d2b36SAndroid Build Coastguard Worker	}
229*333d2b36SAndroid Build Coastguard Worker	for _, obj := range bpf.objs {
230*333d2b36SAndroid Build Coastguard Worker		ctx.PackageFile(installDir, obj.Base(), obj)
231*333d2b36SAndroid Build Coastguard Worker	}
232*333d2b36SAndroid Build Coastguard Worker
233*333d2b36SAndroid Build Coastguard Worker	android.SetProvider(ctx, blueprint.SrcsFileProviderKey, blueprint.SrcsFileProviderData{SrcPaths: srcs.Strings()})
234*333d2b36SAndroid Build Coastguard Worker
235*333d2b36SAndroid Build Coastguard Worker	ctx.SetOutputFiles(bpf.objs, "")
236*333d2b36SAndroid Build Coastguard Worker}
237*333d2b36SAndroid Build Coastguard Worker
238*333d2b36SAndroid Build Coastguard Workerfunc (bpf *bpf) AndroidMk() android.AndroidMkData {
239*333d2b36SAndroid Build Coastguard Worker	return android.AndroidMkData{
240*333d2b36SAndroid Build Coastguard Worker		Custom: func(w io.Writer, name, prefix, moduleDir string, data android.AndroidMkData) {
241*333d2b36SAndroid Build Coastguard Worker			var names []string
242*333d2b36SAndroid Build Coastguard Worker			fmt.Fprintln(w)
243*333d2b36SAndroid Build Coastguard Worker			fmt.Fprintln(w, "LOCAL_PATH :=", moduleDir)
244*333d2b36SAndroid Build Coastguard Worker			fmt.Fprintln(w)
245*333d2b36SAndroid Build Coastguard Worker			var localModulePath string
246*333d2b36SAndroid Build Coastguard Worker			if bpf.properties.VendorInternal {
247*333d2b36SAndroid Build Coastguard Worker				localModulePath = "LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR_ETC)/bpf"
248*333d2b36SAndroid Build Coastguard Worker			} else {
249*333d2b36SAndroid Build Coastguard Worker				localModulePath = "LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/bpf"
250*333d2b36SAndroid Build Coastguard Worker			}
251*333d2b36SAndroid Build Coastguard Worker			if len(bpf.properties.Sub_dir) > 0 {
252*333d2b36SAndroid Build Coastguard Worker				localModulePath += "/" + bpf.properties.Sub_dir
253*333d2b36SAndroid Build Coastguard Worker			}
254*333d2b36SAndroid Build Coastguard Worker			for _, obj := range bpf.objs {
255*333d2b36SAndroid Build Coastguard Worker				objName := name + "_" + obj.Base()
256*333d2b36SAndroid Build Coastguard Worker				names = append(names, objName)
257*333d2b36SAndroid Build Coastguard Worker				fmt.Fprintln(w, "include $(CLEAR_VARS)", " # bpf.bpf.obj")
258*333d2b36SAndroid Build Coastguard Worker				fmt.Fprintln(w, "LOCAL_MODULE := ", objName)
259*333d2b36SAndroid Build Coastguard Worker				fmt.Fprintln(w, "LOCAL_PREBUILT_MODULE_FILE :=", obj.String())
260*333d2b36SAndroid Build Coastguard Worker				fmt.Fprintln(w, "LOCAL_MODULE_STEM :=", obj.Base())
261*333d2b36SAndroid Build Coastguard Worker				fmt.Fprintln(w, "LOCAL_MODULE_CLASS := ETC")
262*333d2b36SAndroid Build Coastguard Worker				fmt.Fprintln(w, localModulePath)
263*333d2b36SAndroid Build Coastguard Worker				// AconfigUpdateAndroidMkData may have added elements to Extra.  Process them here.
264*333d2b36SAndroid Build Coastguard Worker				for _, extra := range data.Extra {
265*333d2b36SAndroid Build Coastguard Worker					extra(w, nil)
266*333d2b36SAndroid Build Coastguard Worker				}
267*333d2b36SAndroid Build Coastguard Worker				fmt.Fprintln(w, "include $(BUILD_PREBUILT)")
268*333d2b36SAndroid Build Coastguard Worker				fmt.Fprintln(w)
269*333d2b36SAndroid Build Coastguard Worker			}
270*333d2b36SAndroid Build Coastguard Worker			fmt.Fprintln(w, "include $(CLEAR_VARS)", " # bpf.bpf")
271*333d2b36SAndroid Build Coastguard Worker			fmt.Fprintln(w, "LOCAL_MODULE := ", name)
272*333d2b36SAndroid Build Coastguard Worker			android.AndroidMkEmitAssignList(w, "LOCAL_REQUIRED_MODULES", names)
273*333d2b36SAndroid Build Coastguard Worker			fmt.Fprintln(w, "include $(BUILD_PHONY_PACKAGE)")
274*333d2b36SAndroid Build Coastguard Worker		},
275*333d2b36SAndroid Build Coastguard Worker	}
276*333d2b36SAndroid Build Coastguard Worker}
277*333d2b36SAndroid Build Coastguard Worker
278*333d2b36SAndroid Build Coastguard Workertype Defaults struct {
279*333d2b36SAndroid Build Coastguard Worker	android.ModuleBase
280*333d2b36SAndroid Build Coastguard Worker	android.DefaultsModuleBase
281*333d2b36SAndroid Build Coastguard Worker}
282*333d2b36SAndroid Build Coastguard Worker
283*333d2b36SAndroid Build Coastguard Workerfunc defaultsFactory() android.Module {
284*333d2b36SAndroid Build Coastguard Worker	return DefaultsFactory()
285*333d2b36SAndroid Build Coastguard Worker}
286*333d2b36SAndroid Build Coastguard Worker
287*333d2b36SAndroid Build Coastguard Workerfunc DefaultsFactory(props ...interface{}) android.Module {
288*333d2b36SAndroid Build Coastguard Worker	module := &Defaults{}
289*333d2b36SAndroid Build Coastguard Worker
290*333d2b36SAndroid Build Coastguard Worker	module.AddProperties(props...)
291*333d2b36SAndroid Build Coastguard Worker	module.AddProperties(&BpfProperties{})
292*333d2b36SAndroid Build Coastguard Worker
293*333d2b36SAndroid Build Coastguard Worker	android.InitDefaultsModule(module)
294*333d2b36SAndroid Build Coastguard Worker
295*333d2b36SAndroid Build Coastguard Worker	return module
296*333d2b36SAndroid Build Coastguard Worker}
297*333d2b36SAndroid Build Coastguard Worker
298*333d2b36SAndroid Build Coastguard Workerfunc (bpf *bpf) SubDir() string {
299*333d2b36SAndroid Build Coastguard Worker	return bpf.properties.Sub_dir
300*333d2b36SAndroid Build Coastguard Worker}
301*333d2b36SAndroid Build Coastguard Worker
302*333d2b36SAndroid Build Coastguard Workerfunc BpfFactory() android.Module {
303*333d2b36SAndroid Build Coastguard Worker	module := &bpf{}
304*333d2b36SAndroid Build Coastguard Worker
305*333d2b36SAndroid Build Coastguard Worker	module.AddProperties(&module.properties)
306*333d2b36SAndroid Build Coastguard Worker
307*333d2b36SAndroid Build Coastguard Worker	android.InitAndroidArchModule(module, android.DeviceSupported, android.MultilibCommon)
308*333d2b36SAndroid Build Coastguard Worker	android.InitDefaultableModule(module)
309*333d2b36SAndroid Build Coastguard Worker
310*333d2b36SAndroid Build Coastguard Worker	return module
311*333d2b36SAndroid Build Coastguard Worker}
312