diff options
Diffstat (limited to 'rust/binary.go')
| -rw-r--r-- | rust/binary.go | 89 | 
1 files changed, 89 insertions, 0 deletions
diff --git a/rust/binary.go b/rust/binary.go index e6f153996..1e24bebab 100644 --- a/rust/binary.go +++ b/rust/binary.go @@ -16,6 +16,8 @@ package rust  import (  	"android/soong/android" +	"android/soong/bazel" +	"fmt"  )  func init() { @@ -60,6 +62,8 @@ func RustBinaryHostFactory() android.Module {  func NewRustBinary(hod android.HostOrDeviceSupported) (*Module, *binaryDecorator) {  	module := newModule(hod, android.MultilibFirst) +	android.InitBazelModule(module) +  	binary := &binaryDecorator{  		baseCompiler: NewBaseCompiler("bin", "", InstallInSystem),  	} @@ -183,3 +187,88 @@ func (binary *binaryDecorator) staticallyLinked() bool {  func (binary *binaryDecorator) testBinary() bool {  	return false  } + +type rustBinaryLibraryAttributes struct { +	Srcs            bazel.LabelListAttribute +	Compile_data    bazel.LabelListAttribute +	Crate_name      bazel.StringAttribute +	Edition         bazel.StringAttribute +	Crate_features  bazel.StringListAttribute +	Deps            bazel.LabelListAttribute +	Proc_macro_deps bazel.LabelListAttribute +	Rustc_flags     bazel.StringListAttribute +} + +func binaryBp2build(ctx android.TopDownMutatorContext, m *Module) { +	binary := m.compiler.(*binaryDecorator) + +	var srcs bazel.LabelList +	var compileData bazel.LabelList + +	if binary.baseCompiler.Properties.Srcs[0] == "src/main.rs" { +		srcs = android.BazelLabelForModuleSrc(ctx, []string{"src/**/*.rs"}) +		compileData = android.BazelLabelForModuleSrc( +			ctx, +			[]string{ +				"src/**/*.proto", +				"examples/**/*.rs", +				"**/*.md", +				"templates/**/*.template", +			}, +		) +	} else { +		srcs = android.BazelLabelForModuleSrc(ctx, binary.baseCompiler.Properties.Srcs) +	} + +	deps := android.BazelLabelForModuleDeps(ctx, append( +		binary.baseCompiler.Properties.Rustlibs, +	)) + +	procMacroDeps := android.BazelLabelForModuleDeps(ctx, binary.baseCompiler.Properties.Proc_macros) + +	var rustcFLags []string +	for _, cfg := range binary.baseCompiler.Properties.Cfgs { +		rustcFLags = append(rustcFLags, fmt.Sprintf("--cfg=%s", cfg)) +	} + +	attrs := &rustBinaryLibraryAttributes{ +		Srcs: bazel.MakeLabelListAttribute( +			srcs, +		), +		Compile_data: bazel.MakeLabelListAttribute( +			compileData, +		), +		Crate_name: bazel.StringAttribute{ +			Value: &binary.baseCompiler.Properties.Crate_name, +		}, +		Edition: bazel.StringAttribute{ +			Value: binary.baseCompiler.Properties.Edition, +		}, +		Crate_features: bazel.StringListAttribute{ +			Value: binary.baseCompiler.Properties.Features, +		}, +		Deps: bazel.MakeLabelListAttribute( +			deps, +		), +		Proc_macro_deps: bazel.MakeLabelListAttribute( +			procMacroDeps, +		), +		Rustc_flags: bazel.StringListAttribute{ +			Value: append( +				rustcFLags, +				binary.baseCompiler.Properties.Flags..., +			), +		}, +	} + +	ctx.CreateBazelTargetModule( +		bazel.BazelTargetModuleProperties{ +			Rule_class:        "rust_binary", +			Bzl_load_location: "@rules_rust//rust:defs.bzl", +		}, +		android.CommonAttributes{ +			Name: m.Name(), +		}, +		attrs, +	) +}  |