1// Copyright 2021 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 17import ( 18 "android/soong/android" 19) 20 21// snapshotLibraryInterface is an interface for libraries captured to VNDK / vendor snapshots. 22type snapshotLibraryInterface interface { 23 libraryInterface 24 25 // collectHeadersForSnapshot is called in GenerateAndroidBuildActions for snapshot aware 26 // modules (See isSnapshotAware below). 27 // This function should gather all headers needed for snapshot. 28 collectHeadersForSnapshot(ctx android.ModuleContext, deps PathDeps) 29 30 // snapshotHeaders should return collected headers by collectHeadersForSnapshot. 31 // Calling snapshotHeaders before collectHeadersForSnapshot is an error. 32 snapshotHeaders() android.Paths 33} 34 35func (mod *Module) ExcludeFromVendorSnapshot() bool { 36 return Bool(mod.Properties.Exclude_from_vendor_snapshot) 37} 38 39func (mod *Module) ExcludeFromRecoverySnapshot() bool { 40 return Bool(mod.Properties.Exclude_from_recovery_snapshot) 41} 42 43func (mod *Module) IsSnapshotLibrary() bool { 44 if lib, ok := mod.compiler.(libraryInterface); ok { 45 // Rust-native dylibs are not snapshot supported yet. Only snapshot the rlib-std variants of rlibs. 46 return lib.shared() || lib.static() || (lib.rlib() && lib.rlibStd()) 47 } 48 return false 49} 50 51func (mod *Module) SnapshotRuntimeLibs() []string { 52 // TODO Rust does not yet support a runtime libs notion similar to CC 53 return []string{} 54} 55 56func (mod *Module) SnapshotSharedLibs() []string { 57 return mod.Properties.SnapshotSharedLibs 58} 59 60func (mod *Module) SnapshotStaticLibs() []string { 61 return mod.Properties.SnapshotStaticLibs 62} 63 64func (mod *Module) Symlinks() []string { 65 // TODO update this to return the list of symlinks when Rust supports defining symlinks 66 return nil 67} 68 69func (m *Module) SnapshotHeaders() android.Paths { 70 if l, ok := m.compiler.(snapshotLibraryInterface); ok { 71 return l.snapshotHeaders() 72 } 73 return android.Paths{} 74} 75