Loading rust/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ bootstrap_go_package { testSrcs: [ "binary_test.go", "bindgen_test.go", "builder_test.go", "clippy_test.go", "compiler_test.go", "coverage_test.go", Loading rust/bindgen.go +3 −0 Original line number Diff line number Diff line Loading @@ -147,6 +147,9 @@ func (b *bindgenDecorator) sourceProviderProps() []interface{} { &b.Properties) } // rust_bindgen generates Rust FFI bindings to C libraries using bindgen given a wrapper header as the primary input. // Bindgen has a number of flags to control the generated source, and additional flags can be passed to clang to ensure // the header and generated source is appropriately handled. func RustBindgenFactory() android.Module { module, _ := NewRustBindgen(android.HostAndDeviceSupported) return module.Init() Loading rust/builder.go +4 −3 Original line number Diff line number Diff line Loading @@ -200,15 +200,16 @@ func transformSrctoCrate(ctx ModuleContext, main android.Path, deps PathDeps, fl } if len(deps.SrcDeps) > 0 { moduleGenDir := android.PathForModuleOut(ctx, "out/") genSubDir := "out/" moduleGenDir := android.PathForModuleOut(ctx, genSubDir) var outputs android.WritablePaths for _, genSrc := range deps.SrcDeps { if android.SuffixInList(outputs.Strings(), "out/"+genSrc.Base()) { if android.SuffixInList(outputs.Strings(), genSubDir+genSrc.Base()) { ctx.PropertyErrorf("srcs", "multiple source providers generate the same filename output: "+genSrc.Base()) } outputs = append(outputs, android.PathForModuleOut(ctx, "out/"+genSrc.Base())) outputs = append(outputs, android.PathForModuleOut(ctx, genSubDir+genSrc.Base())) } ctx.Build(pctx, android.BuildParams{ Loading rust/builder_test.go 0 → 100644 +40 −0 Original line number Diff line number Diff line // Copyright 2020 The Android Open Source Project // // 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 rust import "testing" func TestSourceProviderCollision(t *testing.T) { testRustError(t, "multiple source providers generate the same filename output: bindings.rs", ` rust_binary { name: "source_collider", srcs: [ "foo.rs", ":libbindings1", ":libbindings2", ], } rust_bindgen { name: "libbindings1", stem: "bindings", wrapper_src: "src/any.h", } rust_bindgen { name: "libbindings2", stem: "bindings", wrapper_src: "src/any.h", } `) } Loading
rust/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ bootstrap_go_package { testSrcs: [ "binary_test.go", "bindgen_test.go", "builder_test.go", "clippy_test.go", "compiler_test.go", "coverage_test.go", Loading
rust/bindgen.go +3 −0 Original line number Diff line number Diff line Loading @@ -147,6 +147,9 @@ func (b *bindgenDecorator) sourceProviderProps() []interface{} { &b.Properties) } // rust_bindgen generates Rust FFI bindings to C libraries using bindgen given a wrapper header as the primary input. // Bindgen has a number of flags to control the generated source, and additional flags can be passed to clang to ensure // the header and generated source is appropriately handled. func RustBindgenFactory() android.Module { module, _ := NewRustBindgen(android.HostAndDeviceSupported) return module.Init() Loading
rust/builder.go +4 −3 Original line number Diff line number Diff line Loading @@ -200,15 +200,16 @@ func transformSrctoCrate(ctx ModuleContext, main android.Path, deps PathDeps, fl } if len(deps.SrcDeps) > 0 { moduleGenDir := android.PathForModuleOut(ctx, "out/") genSubDir := "out/" moduleGenDir := android.PathForModuleOut(ctx, genSubDir) var outputs android.WritablePaths for _, genSrc := range deps.SrcDeps { if android.SuffixInList(outputs.Strings(), "out/"+genSrc.Base()) { if android.SuffixInList(outputs.Strings(), genSubDir+genSrc.Base()) { ctx.PropertyErrorf("srcs", "multiple source providers generate the same filename output: "+genSrc.Base()) } outputs = append(outputs, android.PathForModuleOut(ctx, "out/"+genSrc.Base())) outputs = append(outputs, android.PathForModuleOut(ctx, genSubDir+genSrc.Base())) } ctx.Build(pctx, android.BuildParams{ Loading
rust/builder_test.go 0 → 100644 +40 −0 Original line number Diff line number Diff line // Copyright 2020 The Android Open Source Project // // 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 rust import "testing" func TestSourceProviderCollision(t *testing.T) { testRustError(t, "multiple source providers generate the same filename output: bindings.rs", ` rust_binary { name: "source_collider", srcs: [ "foo.rs", ":libbindings1", ":libbindings2", ], } rust_bindgen { name: "libbindings1", stem: "bindings", wrapper_src: "src/any.h", } rust_bindgen { name: "libbindings2", stem: "bindings", wrapper_src: "src/any.h", } `) }