Loading rust/bindgen.go +21 −4 Original line number Diff line number Diff line Loading @@ -41,12 +41,12 @@ var ( bindgen = pctx.AndroidStaticRule("bindgen", blueprint.RuleParams{ Command: "CLANG_PATH=$bindgenClang LIBCLANG_PATH=$bindgenLibClang RUSTFMT=${config.RustBin}/rustfmt " + "$bindgenCmd $flags $in -o $out -- -MD -MF $out.d $cflags", CommandDeps: []string{"$bindgenCmd"}, "$cmd $flags $in -o $out -- -MD -MF $out.d $cflags", CommandDeps: []string{"$cmd"}, Deps: blueprint.DepsGCC, Depfile: "$out.d", }, "flags", "cflags") "cmd", "flags", "cflags") ) func init() { Loading Loading @@ -76,6 +76,12 @@ type BindgenProperties struct { // list of shared libraries that provide headers for this binding. Shared_libs []string `android:"arch_variant"` // module name of a custom binary/script which should be used instead of the 'bindgen' binary. This custom // binary must expect arguments in a similar fashion to bindgen, e.g. // // "my_bindgen [flags] wrapper_header.h -o [output_path] -- [clang flags]" Custom_bindgen string `android:"path"` //TODO(b/161141999) Add support for headers from cc_library_header modules. } Loading Loading @@ -130,17 +136,28 @@ func (b *bindgenDecorator) generateSource(ctx android.ModuleContext, deps PathDe outputFile := android.PathForModuleOut(ctx, b.baseSourceProvider.getStem(ctx)+".rs") var cmd, cmdDesc string if b.Properties.Custom_bindgen != "" { cmd = ctx.GetDirectDepWithTag(b.Properties.Custom_bindgen, customBindgenDepTag).(*Module).HostToolPath().String() cmdDesc = b.Properties.Custom_bindgen } else { cmd = "$bindgenCmd" cmdDesc = "bindgen" } ctx.Build(pctx, android.BuildParams{ Rule: bindgen, Description: "bindgen " + wrapperFile.Path().Rel(), Description: strings.Join([]string{cmdDesc, wrapperFile.Path().Rel()}, " "), Output: outputFile, Input: wrapperFile.Path(), Implicits: implicits, Args: map[string]string{ "cmd": cmd, "flags": strings.Join(bindgenFlags, " "), "cflags": strings.Join(cflags, " "), }, }) b.baseSourceProvider.outputFile = outputFile return outputFile } Loading rust/bindgen_test.go +26 −0 Original line number Diff line number Diff line Loading @@ -55,3 +55,29 @@ func TestRustBindgen(t *testing.T) { t.Errorf("missing static_libs exported includes in rust_bindgen rule: cflags %#v", libbindgen.Args["cflags"]) } } func TestRustBindgenCustomBindgen(t *testing.T) { ctx := testRust(t, ` rust_bindgen { name: "libbindgen", wrapper_src: "src/any.h", crate_name: "bindgen", stem: "libbindgen", source_stem: "bindings", custom_bindgen: "my_bindgen" } rust_binary_host { name: "my_bindgen", srcs: ["foo.rs"], } `) libbindgen := ctx.ModuleForTests("libbindgen", "android_arm64_armv8-a").Output("bindings.rs") // The rule description should contain the custom binary name rather than bindgen, so checking the description // should be sufficient. if !strings.Contains(libbindgen.Description, "my_bindgen") { t.Errorf("Custom bindgen binary %s not used for libbindgen: rule description %#v", "my_bindgen", libbindgen.Description) } } rust/rust.go +12 −4 Original line number Diff line number Diff line Loading @@ -722,6 +722,7 @@ type dependencyTag struct { } var ( customBindgenDepTag = dependencyTag{name: "customBindgenTag"} rlibDepTag = dependencyTag{name: "rlibTag", library: true} dylibDepTag = dependencyTag{name: "dylib", library: true} procMacroDepTag = dependencyTag{name: "procMacro", proc_macro: true} Loading Loading @@ -1009,6 +1010,13 @@ func (mod *Module) DepsMutator(actx android.BottomUpMutatorContext) { actx.AddVariationDependencies(commonDepVariations, cc.CrtEndDepTag, deps.CrtEnd) } if mod.sourceProvider != nil { if bindgen, ok := mod.sourceProvider.(*bindgenDecorator); ok && bindgen.Properties.Custom_bindgen != "" { actx.AddFarVariationDependencies(ctx.Config().BuildOSTarget.Variations(), customBindgenDepTag, bindgen.Properties.Custom_bindgen) } } // proc_macros are compiler plugins, and so we need the host arch variant as a dependendcy. actx.AddFarVariationDependencies(ctx.Config().BuildOSTarget.Variations(), procMacroDepTag, deps.ProcMacros...) } Loading Loading
rust/bindgen.go +21 −4 Original line number Diff line number Diff line Loading @@ -41,12 +41,12 @@ var ( bindgen = pctx.AndroidStaticRule("bindgen", blueprint.RuleParams{ Command: "CLANG_PATH=$bindgenClang LIBCLANG_PATH=$bindgenLibClang RUSTFMT=${config.RustBin}/rustfmt " + "$bindgenCmd $flags $in -o $out -- -MD -MF $out.d $cflags", CommandDeps: []string{"$bindgenCmd"}, "$cmd $flags $in -o $out -- -MD -MF $out.d $cflags", CommandDeps: []string{"$cmd"}, Deps: blueprint.DepsGCC, Depfile: "$out.d", }, "flags", "cflags") "cmd", "flags", "cflags") ) func init() { Loading Loading @@ -76,6 +76,12 @@ type BindgenProperties struct { // list of shared libraries that provide headers for this binding. Shared_libs []string `android:"arch_variant"` // module name of a custom binary/script which should be used instead of the 'bindgen' binary. This custom // binary must expect arguments in a similar fashion to bindgen, e.g. // // "my_bindgen [flags] wrapper_header.h -o [output_path] -- [clang flags]" Custom_bindgen string `android:"path"` //TODO(b/161141999) Add support for headers from cc_library_header modules. } Loading Loading @@ -130,17 +136,28 @@ func (b *bindgenDecorator) generateSource(ctx android.ModuleContext, deps PathDe outputFile := android.PathForModuleOut(ctx, b.baseSourceProvider.getStem(ctx)+".rs") var cmd, cmdDesc string if b.Properties.Custom_bindgen != "" { cmd = ctx.GetDirectDepWithTag(b.Properties.Custom_bindgen, customBindgenDepTag).(*Module).HostToolPath().String() cmdDesc = b.Properties.Custom_bindgen } else { cmd = "$bindgenCmd" cmdDesc = "bindgen" } ctx.Build(pctx, android.BuildParams{ Rule: bindgen, Description: "bindgen " + wrapperFile.Path().Rel(), Description: strings.Join([]string{cmdDesc, wrapperFile.Path().Rel()}, " "), Output: outputFile, Input: wrapperFile.Path(), Implicits: implicits, Args: map[string]string{ "cmd": cmd, "flags": strings.Join(bindgenFlags, " "), "cflags": strings.Join(cflags, " "), }, }) b.baseSourceProvider.outputFile = outputFile return outputFile } Loading
rust/bindgen_test.go +26 −0 Original line number Diff line number Diff line Loading @@ -55,3 +55,29 @@ func TestRustBindgen(t *testing.T) { t.Errorf("missing static_libs exported includes in rust_bindgen rule: cflags %#v", libbindgen.Args["cflags"]) } } func TestRustBindgenCustomBindgen(t *testing.T) { ctx := testRust(t, ` rust_bindgen { name: "libbindgen", wrapper_src: "src/any.h", crate_name: "bindgen", stem: "libbindgen", source_stem: "bindings", custom_bindgen: "my_bindgen" } rust_binary_host { name: "my_bindgen", srcs: ["foo.rs"], } `) libbindgen := ctx.ModuleForTests("libbindgen", "android_arm64_armv8-a").Output("bindings.rs") // The rule description should contain the custom binary name rather than bindgen, so checking the description // should be sufficient. if !strings.Contains(libbindgen.Description, "my_bindgen") { t.Errorf("Custom bindgen binary %s not used for libbindgen: rule description %#v", "my_bindgen", libbindgen.Description) } }
rust/rust.go +12 −4 Original line number Diff line number Diff line Loading @@ -722,6 +722,7 @@ type dependencyTag struct { } var ( customBindgenDepTag = dependencyTag{name: "customBindgenTag"} rlibDepTag = dependencyTag{name: "rlibTag", library: true} dylibDepTag = dependencyTag{name: "dylib", library: true} procMacroDepTag = dependencyTag{name: "procMacro", proc_macro: true} Loading Loading @@ -1009,6 +1010,13 @@ func (mod *Module) DepsMutator(actx android.BottomUpMutatorContext) { actx.AddVariationDependencies(commonDepVariations, cc.CrtEndDepTag, deps.CrtEnd) } if mod.sourceProvider != nil { if bindgen, ok := mod.sourceProvider.(*bindgenDecorator); ok && bindgen.Properties.Custom_bindgen != "" { actx.AddFarVariationDependencies(ctx.Config().BuildOSTarget.Variations(), customBindgenDepTag, bindgen.Properties.Custom_bindgen) } } // proc_macros are compiler plugins, and so we need the host arch variant as a dependendcy. actx.AddFarVariationDependencies(ctx.Config().BuildOSTarget.Variations(), procMacroDepTag, deps.ProcMacros...) } Loading