• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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