blob: 1fd675fb77d80d0ee85e01cc97aa24346e1cbc2e [file] [log] [blame]
Ivan Lozano10735d92020-07-22 09:14:47 -04001// Copyright 2020 The Android Open Source Project
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15package rust
16
Sam Delmerico079a97c2023-09-27 09:29:32 +000017import (
18 "android/soong/android"
19 "sort"
20 "testing"
21)
Ivan Lozano10735d92020-07-22 09:14:47 -040022
23func TestSourceProviderCollision(t *testing.T) {
24 testRustError(t, "multiple source providers generate the same filename output: bindings.rs", `
25 rust_binary {
26 name: "source_collider",
27 srcs: [
28 "foo.rs",
29 ":libbindings1",
30 ":libbindings2",
31 ],
32 }
33 rust_bindgen {
34 name: "libbindings1",
Ivan Lozano26ecd6c2020-07-31 13:40:31 -040035 source_stem: "bindings",
36 crate_name: "bindings1",
Ivan Lozano10735d92020-07-22 09:14:47 -040037 wrapper_src: "src/any.h",
38 }
39 rust_bindgen {
40 name: "libbindings2",
Ivan Lozano26ecd6c2020-07-31 13:40:31 -040041 source_stem: "bindings",
42 crate_name: "bindings2",
Ivan Lozano10735d92020-07-22 09:14:47 -040043 wrapper_src: "src/any.h",
44 }
45 `)
46}
Sam Delmerico079a97c2023-09-27 09:29:32 +000047
48func TestCompilationOutputFiles(t *testing.T) {
49 ctx := testRust(t, `
50 rust_library {
51 name: "libfizz_buzz",
52 crate_name:"fizz_buzz",
53 srcs: ["lib.rs"],
54 }
55 rust_binary {
56 name: "fizz_buzz",
57 crate_name:"fizz_buzz",
58 srcs: ["lib.rs"],
59 }
60 rust_ffi {
61 name: "librust_ffi",
62 crate_name: "rust_ffi",
63 srcs: ["lib.rs"],
64 }
65 `)
66 testcases := []struct {
67 testName string
68 moduleName string
69 variant string
70 expectedFiles []string
71 }{
72 {
73 testName: "dylib",
74 moduleName: "libfizz_buzz",
75 variant: "android_arm64_armv8-a_dylib",
76 expectedFiles: []string{
77 "out/soong/.intermediates/libfizz_buzz/android_arm64_armv8-a_dylib/libfizz_buzz.dylib.so",
78 "out/soong/.intermediates/libfizz_buzz/android_arm64_armv8-a_dylib/libfizz_buzz.dylib.so.clippy",
79 "out/soong/.intermediates/libfizz_buzz/android_arm64_armv8-a_dylib/libfizz_buzz.dylib.so.rsp",
80 "out/soong/.intermediates/libfizz_buzz/android_arm64_armv8-a_dylib/libfizz_buzz.dylib.so.rsp.a",
81 "out/soong/.intermediates/libfizz_buzz/android_arm64_armv8-a_dylib/libfizz_buzz.dylib.so.rsp.whole.a",
82 "out/soong/.intermediates/libfizz_buzz/android_arm64_armv8-a_dylib/unstripped/libfizz_buzz.dylib.so",
83 "out/soong/target/product/test_device/system/lib64/libfizz_buzz.dylib.so",
84 "out/soong/.intermediates/libfizz_buzz/android_arm64_armv8-a_dylib/meta_lic",
85 },
86 },
87 {
88 testName: "rlib dylib-std",
89 moduleName: "libfizz_buzz",
90 variant: "android_arm64_armv8-a_rlib_dylib-std",
91 expectedFiles: []string{
92 "out/soong/.intermediates/libfizz_buzz/android_arm64_armv8-a_rlib_dylib-std/libfizz_buzz.rlib",
93 "out/soong/.intermediates/libfizz_buzz/android_arm64_armv8-a_rlib_dylib-std/libfizz_buzz.rlib.clippy",
94 "out/soong/.intermediates/libfizz_buzz/android_arm64_armv8-a_rlib_dylib-std/meta_lic",
95 },
96 },
97 {
98 testName: "rlib rlib-std",
99 moduleName: "libfizz_buzz",
100 variant: "android_arm64_armv8-a_rlib_rlib-std",
101 expectedFiles: []string{
102 "out/soong/.intermediates/libfizz_buzz/android_arm64_armv8-a_rlib_rlib-std/libfizz_buzz.rlib",
103 "out/soong/.intermediates/libfizz_buzz/android_arm64_armv8-a_rlib_rlib-std/libfizz_buzz.rlib.clippy",
104 "out/soong/.intermediates/libfizz_buzz/android_arm64_armv8-a_rlib_rlib-std/meta_lic",
105 "out/soong/.intermediates/libfizz_buzz/android_arm64_armv8-a_rlib_rlib-std/rustdoc.timestamp",
106 },
107 },
108 {
109 testName: "rust_binary",
110 moduleName: "fizz_buzz",
111 variant: "android_arm64_armv8-a",
112 expectedFiles: []string{
113 "out/soong/.intermediates/fizz_buzz/android_arm64_armv8-a/fizz_buzz",
114 "out/soong/.intermediates/fizz_buzz/android_arm64_armv8-a/fizz_buzz.clippy",
115 "out/soong/.intermediates/fizz_buzz/android_arm64_armv8-a/fizz_buzz.rsp",
116 "out/soong/.intermediates/fizz_buzz/android_arm64_armv8-a/fizz_buzz.rsp.a",
117 "out/soong/.intermediates/fizz_buzz/android_arm64_armv8-a/fizz_buzz.rsp.whole.a",
118 "out/soong/.intermediates/fizz_buzz/android_arm64_armv8-a/unstripped/fizz_buzz",
119 "out/soong/target/product/test_device/system/bin/fizz_buzz",
120 "out/soong/.intermediates/fizz_buzz/android_arm64_armv8-a/meta_lic",
121 },
122 },
123 {
124 testName: "rust_ffi static",
125 moduleName: "librust_ffi",
126 variant: "android_arm64_armv8-a_static",
127 expectedFiles: []string{
128 "out/soong/.intermediates/librust_ffi/android_arm64_armv8-a_static/librust_ffi.a",
129 "out/soong/.intermediates/librust_ffi/android_arm64_armv8-a_static/librust_ffi.a.clippy",
130 "out/soong/.intermediates/librust_ffi/android_arm64_armv8-a_static/meta_lic",
131 "out/soong/.intermediates/librust_ffi/android_arm64_armv8-a_static/rustdoc.timestamp",
132 },
133 },
134 {
135 testName: "rust_ffi shared",
136 moduleName: "librust_ffi",
137 variant: "android_arm64_armv8-a_shared",
138 expectedFiles: []string{
139 "out/soong/.intermediates/librust_ffi/android_arm64_armv8-a_shared/librust_ffi.so",
140 "out/soong/.intermediates/librust_ffi/android_arm64_armv8-a_shared/librust_ffi.so.clippy",
141 "out/soong/.intermediates/librust_ffi/android_arm64_armv8-a_shared/librust_ffi.so.rsp",
142 "out/soong/.intermediates/librust_ffi/android_arm64_armv8-a_shared/librust_ffi.so.rsp.a",
143 "out/soong/.intermediates/librust_ffi/android_arm64_armv8-a_shared/librust_ffi.so.rsp.whole.a",
144 "out/soong/.intermediates/librust_ffi/android_arm64_armv8-a_shared/unstripped/librust_ffi.so",
145 "out/soong/.intermediates/librust_ffi/android_arm64_armv8-a_shared/unstripped/librust_ffi.so.toc",
146 "out/soong/.intermediates/librust_ffi/android_arm64_armv8-a_shared/meta_lic",
147 "out/soong/target/product/test_device/system/lib64/librust_ffi.so",
148 },
149 },
150 }
151 for _, tc := range testcases {
152 t.Run(tc.testName, func(t *testing.T) {
153 modOutputs := ctx.ModuleForTests(tc.moduleName, tc.variant).AllOutputs()
154 sort.Strings(tc.expectedFiles)
155 sort.Strings(modOutputs)
156 android.AssertStringPathsRelativeToTopEquals(
157 t,
158 "incorrect outputs from rust module",
159 ctx.Config(),
160 tc.expectedFiles,
161 modOutputs,
162 )
163 })
164 }
165}