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