Use one mutator for all bp2build conversion.
Each conversion required defining a separate mutator, which will each operate on _all_ modules and requires each to repeat checks whether the mutator should operator. Instead, we introduce a single mutator and modules can define a ConvertWithBp2build to implement bp2build conversion for that module. Test: bp2build.sh Bug: 183079158 Change-Id: I99d4b51f441c2903879092c5b56313d606d4338d
This commit is contained in:
38
cc/binary.go
38
cc/binary.go
@@ -69,13 +69,14 @@ func RegisterBinaryBuildComponents(ctx android.RegistrationContext) {
|
||||
|
||||
// cc_binary produces a binary that is runnable on a device.
|
||||
func BinaryFactory() android.Module {
|
||||
module, _ := NewBinary(android.HostAndDeviceSupported)
|
||||
module, _ := newBinary(android.HostAndDeviceSupported, true)
|
||||
return module.Init()
|
||||
}
|
||||
|
||||
// cc_binary_host produces a binary that is runnable on a host.
|
||||
func BinaryHostFactory() android.Module {
|
||||
module, _ := NewBinary(android.HostSupported)
|
||||
module, _ := newBinary(android.HostSupported, true)
|
||||
module.bazelable = true
|
||||
return module.Init()
|
||||
}
|
||||
|
||||
@@ -193,6 +194,10 @@ func (binary *binaryDecorator) linkerDeps(ctx DepsContext, deps Deps) Deps {
|
||||
// Individual module implementations which comprise a C++ binary should call this function,
|
||||
// set some fields on the result, and then call the Init function.
|
||||
func NewBinary(hod android.HostOrDeviceSupported) (*Module, *binaryDecorator) {
|
||||
return newBinary(hod, true)
|
||||
}
|
||||
|
||||
func newBinary(hod android.HostOrDeviceSupported, bazelable bool) (*Module, *binaryDecorator) {
|
||||
module := newModule(hod, android.MultilibFirst)
|
||||
binary := &binaryDecorator{
|
||||
baseLinker: NewBaseLinker(module.sanitize),
|
||||
@@ -201,6 +206,7 @@ func NewBinary(hod android.HostOrDeviceSupported) (*Module, *binaryDecorator) {
|
||||
module.compiler = NewBaseCompiler()
|
||||
module.linker = binary
|
||||
module.installer = binary
|
||||
module.bazelable = bazelable
|
||||
|
||||
// Allow module to be added as member of an sdk/module_exports.
|
||||
module.sdkMemberTypes = []android.SdkMemberType{
|
||||
@@ -551,33 +557,7 @@ func (binary *binaryDecorator) verifyHostBionicLinker(ctx ModuleContext, in, lin
|
||||
})
|
||||
}
|
||||
|
||||
func init() {
|
||||
android.RegisterBp2BuildMutator("cc_binary", BinaryBp2build)
|
||||
android.RegisterBp2BuildMutator("cc_binary_host", BinaryHostBp2build)
|
||||
}
|
||||
|
||||
func BinaryBp2build(ctx android.TopDownMutatorContext) {
|
||||
binaryBp2build(ctx, "cc_binary")
|
||||
}
|
||||
|
||||
func BinaryHostBp2build(ctx android.TopDownMutatorContext) {
|
||||
binaryBp2build(ctx, "cc_binary_host")
|
||||
}
|
||||
|
||||
func binaryBp2build(ctx android.TopDownMutatorContext, typ string) {
|
||||
m, ok := ctx.Module().(*Module)
|
||||
if !ok {
|
||||
// Not a cc module
|
||||
return
|
||||
}
|
||||
if !m.ConvertWithBp2build(ctx) {
|
||||
return
|
||||
}
|
||||
|
||||
if ctx.ModuleType() != typ {
|
||||
return
|
||||
}
|
||||
|
||||
func binaryBp2build(ctx android.TopDownMutatorContext, m *Module, typ string) {
|
||||
var compatibleWith bazel.StringListAttribute
|
||||
if typ == "cc_binary_host" {
|
||||
//incompatible with android OS
|
||||
|
62
cc/cc.go
62
cc/cc.go
@@ -786,8 +786,9 @@ type Module struct {
|
||||
Properties BaseProperties
|
||||
|
||||
// initialize before calling Init
|
||||
hod android.HostOrDeviceSupported
|
||||
multilib android.Multilib
|
||||
hod android.HostOrDeviceSupported
|
||||
multilib android.Multilib
|
||||
bazelable bool
|
||||
|
||||
// Allowable SdkMemberTypes of this module type.
|
||||
sdkMemberTypes []android.SdkMemberType
|
||||
@@ -1150,7 +1151,9 @@ func (c *Module) Init() android.Module {
|
||||
}
|
||||
|
||||
android.InitAndroidArchModule(c, c.hod, c.multilib)
|
||||
android.InitBazelModule(c)
|
||||
if c.bazelable {
|
||||
android.InitBazelModule(c)
|
||||
}
|
||||
android.InitApexModule(c)
|
||||
android.InitSdkAwareModule(c)
|
||||
android.InitDefaultableModule(c)
|
||||
@@ -3185,6 +3188,24 @@ func (c *Module) testBinary() bool {
|
||||
return false
|
||||
}
|
||||
|
||||
func (c *Module) benchmarkBinary() bool {
|
||||
if b, ok := c.linker.(interface {
|
||||
benchmarkBinary() bool
|
||||
}); ok {
|
||||
return b.benchmarkBinary()
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func (c *Module) fuzzBinary() bool {
|
||||
if f, ok := c.linker.(interface {
|
||||
fuzzBinary() bool
|
||||
}); ok {
|
||||
return f.fuzzBinary()
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// Header returns true if the module is a header-only variant. (See cc/library.go header()).
|
||||
func (c *Module) Header() bool {
|
||||
if h, ok := c.linker.(interface {
|
||||
@@ -3430,6 +3451,41 @@ func (c *Module) AlwaysRequiresPlatformApexVariant() bool {
|
||||
|
||||
var _ snapshot.RelativeInstallPath = (*Module)(nil)
|
||||
|
||||
// ConvertWithBp2build converts Module to Bazel for bp2build.
|
||||
func (c *Module) ConvertWithBp2build(ctx android.TopDownMutatorContext) {
|
||||
if c.Binary() {
|
||||
binaryBp2build(ctx, c, ctx.ModuleType())
|
||||
} else if c.Object() {
|
||||
objectBp2Build(ctx, c)
|
||||
} else if c.CcLibrary() {
|
||||
if c.hod == android.HostSupported {
|
||||
return
|
||||
}
|
||||
|
||||
static := c.BuildStaticVariant()
|
||||
shared := c.BuildSharedVariant()
|
||||
prebuilt := c.IsPrebuilt()
|
||||
|
||||
if static && shared {
|
||||
libraryBp2Build(ctx, c)
|
||||
} else if !static && !shared {
|
||||
libraryHeadersBp2Build(ctx, c)
|
||||
} else if static {
|
||||
if prebuilt {
|
||||
prebuiltLibraryStaticBp2Build(ctx, c)
|
||||
} else {
|
||||
sharedOrStaticLibraryBp2Build(ctx, c, true)
|
||||
}
|
||||
} else if shared {
|
||||
if prebuilt {
|
||||
prebuiltLibrarySharedBp2Build(ctx, c)
|
||||
} else {
|
||||
sharedOrStaticLibraryBp2Build(ctx, c, false)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Defaults
|
||||
//
|
||||
|
@@ -52,6 +52,10 @@ type fuzzBinary struct {
|
||||
installedSharedDeps []string
|
||||
}
|
||||
|
||||
func (fuzz *fuzzBinary) fuzzBinary() bool {
|
||||
return true
|
||||
}
|
||||
|
||||
func (fuzz *fuzzBinary) linkerProps() []interface{} {
|
||||
props := fuzz.binaryDecorator.linkerProps()
|
||||
props = append(props, &fuzz.fuzzPackagedModule.FuzzProperties)
|
||||
@@ -234,7 +238,7 @@ func (fuzz *fuzzBinary) install(ctx ModuleContext, file android.Path) {
|
||||
}
|
||||
|
||||
func NewFuzz(hod android.HostOrDeviceSupported) *Module {
|
||||
module, binary := NewBinary(hod)
|
||||
module, binary := newBinary(hod, false)
|
||||
|
||||
binary.baseInstaller = NewFuzzInstaller()
|
||||
module.sanitize.SetSanitizer(Fuzzer, true)
|
||||
|
@@ -207,10 +207,6 @@ type FlagExporterProperties struct {
|
||||
|
||||
func init() {
|
||||
RegisterLibraryBuildComponents(android.InitRegistrationContext)
|
||||
|
||||
android.RegisterBp2BuildMutator("cc_library_static", CcLibraryStaticBp2Build)
|
||||
android.RegisterBp2BuildMutator("cc_library_shared", CcLibrarySharedBp2Build)
|
||||
android.RegisterBp2BuildMutator("cc_library", CcLibraryBp2Build)
|
||||
}
|
||||
|
||||
func RegisterLibraryBuildComponents(ctx android.RegistrationContext) {
|
||||
@@ -277,21 +273,12 @@ type stripAttributes struct {
|
||||
None bazel.BoolAttribute
|
||||
}
|
||||
|
||||
func CcLibraryBp2Build(ctx android.TopDownMutatorContext) {
|
||||
m, ok := ctx.Module().(*Module)
|
||||
if !ok || !m.ConvertWithBp2build(ctx) {
|
||||
return
|
||||
}
|
||||
|
||||
if ctx.ModuleType() != "cc_library" {
|
||||
return
|
||||
}
|
||||
|
||||
func libraryBp2Build(ctx android.TopDownMutatorContext, m *Module) {
|
||||
// For some cc_library modules, their static variants are ready to be
|
||||
// converted, but not their shared variants. For these modules, delegate to
|
||||
// the cc_library_static bp2build converter temporarily instead.
|
||||
if android.GenerateCcLibraryStaticOnly(ctx.Module().Name()) {
|
||||
ccSharedOrStaticBp2BuildMutatorInternal(ctx, m, "cc_library_static")
|
||||
sharedOrStaticLibraryBp2Build(ctx, m, true)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -421,6 +408,7 @@ func LibraryFactory() android.Module {
|
||||
staticLibrarySdkMemberType,
|
||||
staticAndSharedLibrarySdkMemberType,
|
||||
}
|
||||
module.bazelable = true
|
||||
module.bazelHandler = &ccLibraryBazelHandler{module: module}
|
||||
return module.Init()
|
||||
}
|
||||
@@ -430,6 +418,7 @@ func LibraryStaticFactory() android.Module {
|
||||
module, library := NewLibrary(android.HostAndDeviceSupported)
|
||||
library.BuildOnlyStatic()
|
||||
module.sdkMemberTypes = []android.SdkMemberType{staticLibrarySdkMemberType}
|
||||
module.bazelable = true
|
||||
module.bazelHandler = &ccLibraryBazelHandler{module: module}
|
||||
return module.Init()
|
||||
}
|
||||
@@ -439,6 +428,7 @@ func LibrarySharedFactory() android.Module {
|
||||
module, library := NewLibrary(android.HostAndDeviceSupported)
|
||||
library.BuildOnlyShared()
|
||||
module.sdkMemberTypes = []android.SdkMemberType{sharedLibrarySdkMemberType}
|
||||
module.bazelable = true
|
||||
module.bazelHandler = &ccLibraryBazelHandler{module: module}
|
||||
return module.Init()
|
||||
}
|
||||
@@ -2413,25 +2403,7 @@ func maybeInjectBoringSSLHash(ctx android.ModuleContext, outputFile android.Modu
|
||||
return outputFile
|
||||
}
|
||||
|
||||
func ccSharedOrStaticBp2BuildMutator(ctx android.TopDownMutatorContext, modType string) {
|
||||
module, ok := ctx.Module().(*Module)
|
||||
if !ok {
|
||||
// Not a cc module
|
||||
return
|
||||
}
|
||||
if !module.ConvertWithBp2build(ctx) {
|
||||
return
|
||||
}
|
||||
|
||||
ccSharedOrStaticBp2BuildMutatorInternal(ctx, module, modType)
|
||||
}
|
||||
|
||||
func ccSharedOrStaticBp2BuildMutatorInternal(ctx android.TopDownMutatorContext, module *Module, modType string) {
|
||||
if modType != "cc_library_static" && modType != "cc_library_shared" {
|
||||
panic("ccSharedOrStaticBp2BuildMutatorInternal only supports cc_library_{static,shared}")
|
||||
}
|
||||
isStatic := modType == "cc_library_static"
|
||||
|
||||
func sharedOrStaticLibraryBp2Build(ctx android.TopDownMutatorContext, module *Module, isStatic bool) {
|
||||
baseAttributes := bp2BuildParseBaseProps(ctx, module)
|
||||
compilerAttrs := baseAttributes.compilerAttributes
|
||||
linkerAttrs := baseAttributes.linkerAttributes
|
||||
@@ -2541,6 +2513,12 @@ func ccSharedOrStaticBp2BuildMutatorInternal(ctx android.TopDownMutatorContext,
|
||||
}
|
||||
}
|
||||
|
||||
var modType string
|
||||
if isStatic {
|
||||
modType = "cc_library_static"
|
||||
} else {
|
||||
modType = "cc_library_shared"
|
||||
}
|
||||
props := bazel.BazelTargetModuleProperties{
|
||||
Rule_class: modType,
|
||||
Bzl_load_location: fmt.Sprintf("//build/bazel/rules:%s.bzl", modType),
|
||||
@@ -2575,18 +2553,6 @@ type bazelCcLibraryStaticAttributes struct {
|
||||
Features bazel.StringListAttribute
|
||||
}
|
||||
|
||||
func CcLibraryStaticBp2Build(ctx android.TopDownMutatorContext) {
|
||||
isLibraryStatic := ctx.ModuleType() == "cc_library_static"
|
||||
if b, ok := ctx.Module().(android.Bazelable); ok {
|
||||
// This is created by a custom soong config module type, so its ctx.ModuleType() is not
|
||||
// cc_library_static. Check its BaseModuleType.
|
||||
isLibraryStatic = isLibraryStatic || b.BaseModuleType() == "cc_library_static"
|
||||
}
|
||||
if isLibraryStatic {
|
||||
ccSharedOrStaticBp2BuildMutator(ctx, "cc_library_static")
|
||||
}
|
||||
}
|
||||
|
||||
// TODO(b/199902614): Can this be factored to share with the other Attributes?
|
||||
type bazelCcLibrarySharedAttributes struct {
|
||||
staticOrSharedAttributes
|
||||
@@ -2618,15 +2584,3 @@ type bazelCcLibrarySharedAttributes struct {
|
||||
|
||||
Features bazel.StringListAttribute
|
||||
}
|
||||
|
||||
func CcLibrarySharedBp2Build(ctx android.TopDownMutatorContext) {
|
||||
isLibraryShared := ctx.ModuleType() == "cc_library_shared"
|
||||
if b, ok := ctx.Module().(android.Bazelable); ok {
|
||||
// This is created by a custom soong config module type, so its ctx.ModuleType() is not
|
||||
// cc_library_shared. Check its BaseModuleType.
|
||||
isLibraryShared = isLibraryShared || b.BaseModuleType() == "cc_library_shared"
|
||||
}
|
||||
if isLibraryShared {
|
||||
ccSharedOrStaticBp2BuildMutator(ctx, "cc_library_shared")
|
||||
}
|
||||
}
|
||||
|
@@ -25,7 +25,6 @@ func init() {
|
||||
// Register sdk member types.
|
||||
android.RegisterSdkMemberType(headersLibrarySdkMemberType)
|
||||
|
||||
android.RegisterBp2BuildMutator("cc_library_headers", CcLibraryHeadersBp2Build)
|
||||
}
|
||||
|
||||
var headersLibrarySdkMemberType = &librarySdkMemberType{
|
||||
@@ -96,6 +95,7 @@ func LibraryHeaderFactory() android.Module {
|
||||
module, library := NewLibrary(android.HostAndDeviceSupported)
|
||||
library.HeaderOnly()
|
||||
module.sdkMemberTypes = []android.SdkMemberType{headersLibrarySdkMemberType}
|
||||
module.bazelable = true
|
||||
module.bazelHandler = &libraryHeaderBazelHander{module: module, library: library}
|
||||
return module.Init()
|
||||
}
|
||||
@@ -117,21 +117,7 @@ type bazelCcLibraryHeadersAttributes struct {
|
||||
System_dynamic_deps bazel.LabelListAttribute
|
||||
}
|
||||
|
||||
func CcLibraryHeadersBp2Build(ctx android.TopDownMutatorContext) {
|
||||
module, ok := ctx.Module().(*Module)
|
||||
if !ok {
|
||||
// Not a cc module
|
||||
return
|
||||
}
|
||||
|
||||
if !module.ConvertWithBp2build(ctx) {
|
||||
return
|
||||
}
|
||||
|
||||
if ctx.ModuleType() != "cc_library_headers" {
|
||||
return
|
||||
}
|
||||
|
||||
func libraryHeadersBp2Build(ctx android.TopDownMutatorContext, module *Module) {
|
||||
baseAttributes := bp2BuildParseBaseProps(ctx, module)
|
||||
exportedIncludes := bp2BuildParseExportedIncludes(ctx, module, baseAttributes.includes)
|
||||
linkerAttrs := baseAttributes.linkerAttributes
|
||||
|
16
cc/object.go
16
cc/object.go
@@ -29,7 +29,6 @@ func init() {
|
||||
android.RegisterModuleType("cc_object", ObjectFactory)
|
||||
android.RegisterSdkMemberType(ccObjectSdkMemberType)
|
||||
|
||||
android.RegisterBp2BuildMutator("cc_object", ObjectBp2Build)
|
||||
}
|
||||
|
||||
var ccObjectSdkMemberType = &librarySdkMemberType{
|
||||
@@ -117,6 +116,7 @@ func ObjectFactory() android.Module {
|
||||
|
||||
module.sdkMemberTypes = []android.SdkMemberType{ccObjectSdkMemberType}
|
||||
|
||||
module.bazelable = true
|
||||
return module.Init()
|
||||
}
|
||||
|
||||
@@ -135,19 +135,9 @@ type bazelObjectAttributes struct {
|
||||
Linker_script bazel.LabelAttribute
|
||||
}
|
||||
|
||||
// ObjectBp2Build is the bp2build converter from cc_object modules to the
|
||||
// objectBp2Build is the bp2build converter from cc_object modules to the
|
||||
// Bazel equivalent target, plus any necessary include deps for the cc_object.
|
||||
func ObjectBp2Build(ctx android.TopDownMutatorContext) {
|
||||
m, ok := ctx.Module().(*Module)
|
||||
if !ok || !m.ConvertWithBp2build(ctx) {
|
||||
return
|
||||
}
|
||||
|
||||
// a Module can be something other than a cc_object.
|
||||
if ctx.ModuleType() != "cc_object" {
|
||||
return
|
||||
}
|
||||
|
||||
func objectBp2Build(ctx android.TopDownMutatorContext, m *Module) {
|
||||
if m.compiler == nil {
|
||||
// a cc_object must have access to the compiler decorator for its props.
|
||||
ctx.ModuleErrorf("compiler must not be nil for a cc_object module")
|
||||
|
@@ -32,8 +32,6 @@ func RegisterPrebuiltBuildComponents(ctx android.RegistrationContext) {
|
||||
ctx.RegisterModuleType("cc_prebuilt_test_library_shared", PrebuiltSharedTestLibraryFactory)
|
||||
ctx.RegisterModuleType("cc_prebuilt_object", prebuiltObjectFactory)
|
||||
ctx.RegisterModuleType("cc_prebuilt_binary", prebuiltBinaryFactory)
|
||||
|
||||
android.RegisterBp2BuildMutator("cc_prebuilt_library_shared", PrebuiltLibrarySharedBp2Build)
|
||||
}
|
||||
|
||||
type prebuiltLinkerInterface interface {
|
||||
@@ -299,6 +297,7 @@ func PrebuiltSharedTestLibraryFactory() android.Module {
|
||||
func NewPrebuiltSharedLibrary(hod android.HostOrDeviceSupported) (*Module, *libraryDecorator) {
|
||||
module, library := NewPrebuiltLibrary(hod, "srcs")
|
||||
library.BuildOnlyShared()
|
||||
module.bazelable = true
|
||||
|
||||
// Prebuilt shared libraries can be included in APEXes
|
||||
android.InitApexModule(module)
|
||||
@@ -316,31 +315,41 @@ func PrebuiltStaticLibraryFactory() android.Module {
|
||||
func NewPrebuiltStaticLibrary(hod android.HostOrDeviceSupported) (*Module, *libraryDecorator) {
|
||||
module, library := NewPrebuiltLibrary(hod, "srcs")
|
||||
library.BuildOnlyStatic()
|
||||
module.bazelable = true
|
||||
module.bazelHandler = &prebuiltStaticLibraryBazelHandler{module: module, library: library}
|
||||
return module, library
|
||||
}
|
||||
|
||||
type bazelPrebuiltLibraryStaticAttributes struct {
|
||||
Static_library bazel.LabelAttribute
|
||||
Export_includes bazel.StringListAttribute
|
||||
Export_system_includes bazel.StringListAttribute
|
||||
}
|
||||
|
||||
func prebuiltLibraryStaticBp2Build(ctx android.TopDownMutatorContext, module *Module) {
|
||||
prebuiltAttrs := Bp2BuildParsePrebuiltLibraryProps(ctx, module)
|
||||
exportedIncludes := Bp2BuildParseExportedIncludesForPrebuiltLibrary(ctx, module)
|
||||
|
||||
attrs := &bazelPrebuiltLibraryStaticAttributes{
|
||||
Static_library: prebuiltAttrs.Src,
|
||||
Export_includes: exportedIncludes.Includes,
|
||||
Export_system_includes: exportedIncludes.SystemIncludes,
|
||||
}
|
||||
|
||||
props := bazel.BazelTargetModuleProperties{
|
||||
Rule_class: "prebuilt_library_static",
|
||||
Bzl_load_location: "//build/bazel/rules:prebuilt_library_static.bzl",
|
||||
}
|
||||
|
||||
name := android.RemoveOptionalPrebuiltPrefix(module.Name())
|
||||
ctx.CreateBazelTargetModule(props, android.CommonAttributes{Name: name}, attrs)
|
||||
}
|
||||
|
||||
type bazelPrebuiltLibrarySharedAttributes struct {
|
||||
Shared_library bazel.LabelAttribute
|
||||
}
|
||||
|
||||
func PrebuiltLibrarySharedBp2Build(ctx android.TopDownMutatorContext) {
|
||||
module, ok := ctx.Module().(*Module)
|
||||
if !ok {
|
||||
// Not a cc module
|
||||
return
|
||||
}
|
||||
if !module.ConvertWithBp2build(ctx) {
|
||||
return
|
||||
}
|
||||
if ctx.ModuleType() != "cc_prebuilt_library_shared" {
|
||||
return
|
||||
}
|
||||
|
||||
prebuiltLibrarySharedBp2BuildInternal(ctx, module)
|
||||
}
|
||||
|
||||
func prebuiltLibrarySharedBp2BuildInternal(ctx android.TopDownMutatorContext, module *Module) {
|
||||
func prebuiltLibrarySharedBp2Build(ctx android.TopDownMutatorContext, module *Module) {
|
||||
prebuiltAttrs := Bp2BuildParsePrebuiltLibraryProps(ctx, module)
|
||||
|
||||
attrs := &bazelPrebuiltLibrarySharedAttributes{
|
||||
|
@@ -461,7 +461,7 @@ func (test *testBinary) install(ctx ModuleContext, file android.Path) {
|
||||
}
|
||||
|
||||
func NewTest(hod android.HostOrDeviceSupported) *Module {
|
||||
module, binary := NewBinary(hod)
|
||||
module, binary := newBinary(hod, false)
|
||||
module.multilib = android.MultilibBoth
|
||||
binary.baseInstaller = NewTestInstaller()
|
||||
|
||||
@@ -551,6 +551,10 @@ type benchmarkDecorator struct {
|
||||
testConfig android.Path
|
||||
}
|
||||
|
||||
func (benchmark *benchmarkDecorator) benchmarkBinary() bool {
|
||||
return true
|
||||
}
|
||||
|
||||
func (benchmark *benchmarkDecorator) linkerInit(ctx BaseModuleContext) {
|
||||
runpath := "../../lib"
|
||||
if ctx.toolchain().Is64Bit() {
|
||||
@@ -588,7 +592,7 @@ func (benchmark *benchmarkDecorator) install(ctx ModuleContext, file android.Pat
|
||||
}
|
||||
|
||||
func NewBenchmark(hod android.HostOrDeviceSupported) *Module {
|
||||
module, binary := NewBinary(hod)
|
||||
module, binary := newBinary(hod, false)
|
||||
module.multilib = android.MultilibBoth
|
||||
binary.baseInstaller = NewBaseInstaller("benchmarktest", "benchmarktest64", InstallInData)
|
||||
|
||||
|
Reference in New Issue
Block a user