blob: ae5ccde27c5e85cc4b8dda3a86ad250abdde25f5 [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) {
Ivan Lozano0a468a42024-05-13 21:03:34 -040049
50 // Note: Rustdoc output is produced for the PrimaryModule, so if the variant
51 // order changes, then it may be produced for a different variant.
Sam Delmerico079a97c2023-09-27 09:29:32 +000052 ctx := testRust(t, `
53 rust_library {
54 name: "libfizz_buzz",
55 crate_name:"fizz_buzz",
56 srcs: ["lib.rs"],
57 }
58 rust_binary {
59 name: "fizz_buzz",
60 crate_name:"fizz_buzz",
61 srcs: ["lib.rs"],
62 }
63 rust_ffi {
64 name: "librust_ffi",
65 crate_name: "rust_ffi",
66 srcs: ["lib.rs"],
67 }
Ivan Lozanofd47b1a2024-05-17 14:13:41 -040068 rust_ffi_static {
69 name: "librust_ffi_static",
70 crate_name: "rust_ffi",
71 srcs: ["lib.rs"],
72 }
Sam Delmerico079a97c2023-09-27 09:29:32 +000073 `)
74 testcases := []struct {
75 testName string
76 moduleName string
77 variant string
78 expectedFiles []string
79 }{
80 {
81 testName: "dylib",
82 moduleName: "libfizz_buzz",
83 variant: "android_arm64_armv8-a_dylib",
84 expectedFiles: []string{
85 "out/soong/.intermediates/libfizz_buzz/android_arm64_armv8-a_dylib/libfizz_buzz.dylib.so",
86 "out/soong/.intermediates/libfizz_buzz/android_arm64_armv8-a_dylib/libfizz_buzz.dylib.so.clippy",
Sam Delmerico079a97c2023-09-27 09:29:32 +000087 "out/soong/.intermediates/libfizz_buzz/android_arm64_armv8-a_dylib/unstripped/libfizz_buzz.dylib.so",
88 "out/soong/target/product/test_device/system/lib64/libfizz_buzz.dylib.so",
89 "out/soong/.intermediates/libfizz_buzz/android_arm64_armv8-a_dylib/meta_lic",
90 },
91 },
92 {
93 testName: "rlib dylib-std",
94 moduleName: "libfizz_buzz",
95 variant: "android_arm64_armv8-a_rlib_dylib-std",
96 expectedFiles: []string{
97 "out/soong/.intermediates/libfizz_buzz/android_arm64_armv8-a_rlib_dylib-std/libfizz_buzz.rlib",
98 "out/soong/.intermediates/libfizz_buzz/android_arm64_armv8-a_rlib_dylib-std/libfizz_buzz.rlib.clippy",
99 "out/soong/.intermediates/libfizz_buzz/android_arm64_armv8-a_rlib_dylib-std/meta_lic",
100 },
101 },
102 {
103 testName: "rlib rlib-std",
104 moduleName: "libfizz_buzz",
105 variant: "android_arm64_armv8-a_rlib_rlib-std",
106 expectedFiles: []string{
107 "out/soong/.intermediates/libfizz_buzz/android_arm64_armv8-a_rlib_rlib-std/libfizz_buzz.rlib",
108 "out/soong/.intermediates/libfizz_buzz/android_arm64_armv8-a_rlib_rlib-std/libfizz_buzz.rlib.clippy",
109 "out/soong/.intermediates/libfizz_buzz/android_arm64_armv8-a_rlib_rlib-std/meta_lic",
110 "out/soong/.intermediates/libfizz_buzz/android_arm64_armv8-a_rlib_rlib-std/rustdoc.timestamp",
111 },
112 },
113 {
114 testName: "rust_binary",
115 moduleName: "fizz_buzz",
116 variant: "android_arm64_armv8-a",
117 expectedFiles: []string{
118 "out/soong/.intermediates/fizz_buzz/android_arm64_armv8-a/fizz_buzz",
119 "out/soong/.intermediates/fizz_buzz/android_arm64_armv8-a/fizz_buzz.clippy",
Sam Delmerico079a97c2023-09-27 09:29:32 +0000120 "out/soong/.intermediates/fizz_buzz/android_arm64_armv8-a/unstripped/fizz_buzz",
121 "out/soong/target/product/test_device/system/bin/fizz_buzz",
122 "out/soong/.intermediates/fizz_buzz/android_arm64_armv8-a/meta_lic",
123 },
124 },
125 {
Ivan Lozanofd47b1a2024-05-17 14:13:41 -0400126 testName: "rust_ffi_static rlib",
127 moduleName: "librust_ffi_static",
128 variant: "android_arm64_armv8-a_rlib_rlib-std",
Sam Delmerico079a97c2023-09-27 09:29:32 +0000129 expectedFiles: []string{
Ivan Lozanofd47b1a2024-05-17 14:13:41 -0400130 "out/soong/.intermediates/librust_ffi_static/android_arm64_armv8-a_rlib_rlib-std/librust_ffi_static.rlib",
131 "out/soong/.intermediates/librust_ffi_static/android_arm64_armv8-a_rlib_rlib-std/librust_ffi_static.rlib.clippy",
132 "out/soong/.intermediates/librust_ffi_static/android_arm64_armv8-a_rlib_rlib-std/meta_lic",
133 "out/soong/.intermediates/librust_ffi_static/android_arm64_armv8-a_rlib_rlib-std/rustdoc.timestamp",
Sam Delmerico079a97c2023-09-27 09:29:32 +0000134 },
135 },
136 {
Ivan Lozano0a468a42024-05-13 21:03:34 -0400137 testName: "rust_ffi rlib",
138 moduleName: "librust_ffi",
139 variant: "android_arm64_armv8-a_rlib_rlib-std",
140 expectedFiles: []string{
141 "out/soong/.intermediates/librust_ffi/android_arm64_armv8-a_rlib_rlib-std/librust_ffi.rlib",
142 "out/soong/.intermediates/librust_ffi/android_arm64_armv8-a_rlib_rlib-std/librust_ffi.rlib.clippy",
143 "out/soong/.intermediates/librust_ffi/android_arm64_armv8-a_rlib_rlib-std/meta_lic",
144 },
145 },
146 {
Sam Delmerico079a97c2023-09-27 09:29:32 +0000147 testName: "rust_ffi shared",
148 moduleName: "librust_ffi",
149 variant: "android_arm64_armv8-a_shared",
150 expectedFiles: []string{
151 "out/soong/.intermediates/librust_ffi/android_arm64_armv8-a_shared/librust_ffi.so",
152 "out/soong/.intermediates/librust_ffi/android_arm64_armv8-a_shared/librust_ffi.so.clippy",
Sam Delmerico079a97c2023-09-27 09:29:32 +0000153 "out/soong/.intermediates/librust_ffi/android_arm64_armv8-a_shared/unstripped/librust_ffi.so",
154 "out/soong/.intermediates/librust_ffi/android_arm64_armv8-a_shared/unstripped/librust_ffi.so.toc",
155 "out/soong/.intermediates/librust_ffi/android_arm64_armv8-a_shared/meta_lic",
Ivan Lozanofd47b1a2024-05-17 14:13:41 -0400156 "out/soong/.intermediates/librust_ffi/android_arm64_armv8-a_shared/rustdoc.timestamp",
Sam Delmerico079a97c2023-09-27 09:29:32 +0000157 "out/soong/target/product/test_device/system/lib64/librust_ffi.so",
158 },
159 },
160 }
161 for _, tc := range testcases {
162 t.Run(tc.testName, func(t *testing.T) {
163 modOutputs := ctx.ModuleForTests(tc.moduleName, tc.variant).AllOutputs()
164 sort.Strings(tc.expectedFiles)
165 sort.Strings(modOutputs)
166 android.AssertStringPathsRelativeToTopEquals(
167 t,
168 "incorrect outputs from rust module",
169 ctx.Config(),
170 tc.expectedFiles,
171 modOutputs,
172 )
173 })
174 }
175}