Merge "Add source collision test, rust_bindgen doc."
This commit is contained in:
@@ -27,6 +27,7 @@ bootstrap_go_package {
|
|||||||
testSrcs: [
|
testSrcs: [
|
||||||
"binary_test.go",
|
"binary_test.go",
|
||||||
"bindgen_test.go",
|
"bindgen_test.go",
|
||||||
|
"builder_test.go",
|
||||||
"clippy_test.go",
|
"clippy_test.go",
|
||||||
"compiler_test.go",
|
"compiler_test.go",
|
||||||
"coverage_test.go",
|
"coverage_test.go",
|
||||||
|
@@ -147,6 +147,9 @@ func (b *bindgenDecorator) sourceProviderProps() []interface{} {
|
|||||||
&b.Properties)
|
&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 {
|
func RustBindgenFactory() android.Module {
|
||||||
module, _ := NewRustBindgen(android.HostAndDeviceSupported)
|
module, _ := NewRustBindgen(android.HostAndDeviceSupported)
|
||||||
return module.Init()
|
return module.Init()
|
||||||
|
@@ -200,15 +200,16 @@ func transformSrctoCrate(ctx ModuleContext, main android.Path, deps PathDeps, fl
|
|||||||
}
|
}
|
||||||
|
|
||||||
if len(deps.SrcDeps) > 0 {
|
if len(deps.SrcDeps) > 0 {
|
||||||
moduleGenDir := android.PathForModuleOut(ctx, "out/")
|
genSubDir := "out/"
|
||||||
|
moduleGenDir := android.PathForModuleOut(ctx, genSubDir)
|
||||||
var outputs android.WritablePaths
|
var outputs android.WritablePaths
|
||||||
|
|
||||||
for _, genSrc := range deps.SrcDeps {
|
for _, genSrc := range deps.SrcDeps {
|
||||||
if android.SuffixInList(outputs.Strings(), "out/"+genSrc.Base()) {
|
if android.SuffixInList(outputs.Strings(), genSubDir+genSrc.Base()) {
|
||||||
ctx.PropertyErrorf("srcs",
|
ctx.PropertyErrorf("srcs",
|
||||||
"multiple source providers generate the same filename output: "+genSrc.Base())
|
"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{
|
ctx.Build(pctx, android.BuildParams{
|
||||||
|
40
rust/builder_test.go
Normal file
40
rust/builder_test.go
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
// 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",
|
||||||
|
}
|
||||||
|
`)
|
||||||
|
}
|
Reference in New Issue
Block a user