blob: 489063f1fa4a2881403fc93486226e68da442f92 [file] [log] [blame]
Ivan Lozano183a3212019-10-18 14:18:45 -07001package cc
2
3import (
Ivan Lozano183a3212019-10-18 14:18:45 -07004 "android/soong/android"
Colin Cross6e511a92020-07-27 21:26:48 -07005
6 "github.com/google/blueprint"
Ivan Lozano183a3212019-10-18 14:18:45 -07007)
8
Chris Parsons3c27ca32020-11-20 12:42:07 -05009// LinkableInterface is an interface for a type of module that is linkable in a C++ library.
Ivan Lozano183a3212019-10-18 14:18:45 -070010type LinkableInterface interface {
Ivan Lozanof9e21722020-12-02 09:00:51 -050011 android.Module
12
Ivan Lozano183a3212019-10-18 14:18:45 -070013 Module() android.Module
14 CcLibrary() bool
15 CcLibraryInterface() bool
16
Ivan Lozano183a3212019-10-18 14:18:45 -070017 OutputFile() android.OptionalPath
Ivan Lozanoa0cd8f92020-04-09 09:56:02 -040018 CoverageFiles() android.Paths
Ivan Lozano183a3212019-10-18 14:18:45 -070019
Ivan Lozano2b262972019-11-21 12:30:50 -080020 NonCcVariants() bool
21
Ivan Lozano52767be2019-10-18 14:49:46 -070022 SelectedStl() string
Ivan Lozano183a3212019-10-18 14:18:45 -070023
24 BuildStaticVariant() bool
25 BuildSharedVariant() bool
26 SetStatic()
27 SetShared()
Ivan Lozano52767be2019-10-18 14:49:46 -070028 Static() bool
29 Shared() bool
30 Toc() android.OptionalPath
31
Jooyung Han624d35c2020-04-10 12:57:24 +090032 Host() bool
33
Yifan Hong1b3348d2020-01-21 15:53:22 -080034 InRamdisk() bool
35 OnlyInRamdisk() bool
36
Yifan Hong60e0cfb2020-10-21 15:17:56 -070037 InVendorRamdisk() bool
38 OnlyInVendorRamdisk() bool
39
Ivan Lozano52767be2019-10-18 14:49:46 -070040 InRecovery() bool
41 OnlyInRecovery() bool
42
Colin Crossc511bc52020-04-07 16:50:32 +000043 UseSdk() bool
Ivan Lozano52767be2019-10-18 14:49:46 -070044 UseVndk() bool
45 MustUseVendorVariant() bool
Colin Cross127bb8b2020-12-16 16:46:01 -080046 IsLlndk() bool
47 IsLlndkPublic() bool
Ivan Lozano52767be2019-10-18 14:49:46 -070048 IsVndk() bool
Ivan Lozanof9e21722020-12-02 09:00:51 -050049 IsVndkExt() bool
Colin Cross127bb8b2020-12-16 16:46:01 -080050 IsVndkPrivate() bool
Ivan Lozano52767be2019-10-18 14:49:46 -070051 HasVendorVariant() bool
Ivan Lozanof9e21722020-12-02 09:00:51 -050052 InProduct() bool
Ivan Lozano52767be2019-10-18 14:49:46 -070053
54 SdkVersion() string
Colin Crossc511bc52020-04-07 16:50:32 +000055 AlwaysSdk() bool
Jiyong Park2286afd2020-06-16 21:58:53 +090056 IsSdkVariant() bool
Ivan Lozano52767be2019-10-18 14:49:46 -070057
Colin Cross1348ce32020-10-01 13:37:16 -070058 SplitPerApiLevel() bool
Ivan Lozano183a3212019-10-18 14:18:45 -070059}
60
Colin Cross6e511a92020-07-27 21:26:48 -070061var (
Chris Parsons3c27ca32020-11-20 12:42:07 -050062 // Dependency tag for crtbegin, an object file responsible for initialization.
Colin Cross6e511a92020-07-27 21:26:48 -070063 CrtBeginDepTag = dependencyTag{name: "crtbegin"}
Chris Parsons3c27ca32020-11-20 12:42:07 -050064 // Dependency tag for crtend, an object file responsible for program termination.
65 CrtEndDepTag = dependencyTag{name: "crtend"}
66 // Dependency tag for coverage library.
Colin Cross6e511a92020-07-27 21:26:48 -070067 CoverageDepTag = dependencyTag{name: "coverage"}
68)
Ivan Lozano183a3212019-10-18 14:18:45 -070069
Chris Parsons3c27ca32020-11-20 12:42:07 -050070// SharedDepTag returns the dependency tag for any C++ shared libraries.
Colin Cross6e511a92020-07-27 21:26:48 -070071func SharedDepTag() blueprint.DependencyTag {
72 return libraryDependencyTag{Kind: sharedLibraryDependency}
Ivan Lozano183a3212019-10-18 14:18:45 -070073}
74
Chris Parsons3c27ca32020-11-20 12:42:07 -050075// StaticDepTag returns the dependency tag for any C++ static libraries.
Colin Cross6e511a92020-07-27 21:26:48 -070076func StaticDepTag() blueprint.DependencyTag {
77 return libraryDependencyTag{Kind: staticLibraryDependency}
78}
Colin Cross0de8a1e2020-09-18 14:15:30 -070079
Chris Parsons3c27ca32020-11-20 12:42:07 -050080// HeaderDepTag returns the dependency tag for any C++ "header-only" libraries.
Zach Johnson3df4e632020-11-06 11:56:27 -080081func HeaderDepTag() blueprint.DependencyTag {
82 return libraryDependencyTag{Kind: headerLibraryDependency}
83}
84
Chris Parsons3c27ca32020-11-20 12:42:07 -050085// SharedLibraryInfo is a provider to propagate information about a shared C++ library.
Colin Cross0de8a1e2020-09-18 14:15:30 -070086type SharedLibraryInfo struct {
87 SharedLibrary android.Path
88 UnstrippedSharedLibrary android.Path
89
90 TableOfContents android.OptionalPath
91 CoverageSharedLibrary android.OptionalPath
92
93 StaticAnalogue *StaticLibraryInfo
94}
95
96var SharedLibraryInfoProvider = blueprint.NewProvider(SharedLibraryInfo{})
97
Chris Parsons3c27ca32020-11-20 12:42:07 -050098// SharedStubLibrary is a struct containing information about a stub shared library.
99// Stub libraries are used for cross-APEX dependencies; when a library is to depend on a shared
100// library in another APEX, it must depend on the stub version of that library.
101type SharedStubLibrary struct {
102 // The version of the stub (corresponding to the stable version of the shared library being
103 // stubbed).
Colin Cross0de8a1e2020-09-18 14:15:30 -0700104 Version string
105 SharedLibraryInfo SharedLibraryInfo
106 FlagExporterInfo FlagExporterInfo
107}
108
Chris Parsons3c27ca32020-11-20 12:42:07 -0500109// SharedLibraryStubsInfo is a provider to propagate information about all shared library stubs
110// which are dependencies of a library.
111// Stub libraries are used for cross-APEX dependencies; when a library is to depend on a shared
112// library in another APEX, it must depend on the stub version of that library.
113type SharedLibraryStubsInfo struct {
114 SharedStubLibraries []SharedStubLibrary
Colin Cross0de8a1e2020-09-18 14:15:30 -0700115
Chris Parsons3c27ca32020-11-20 12:42:07 -0500116 IsLLNDK bool
117}
118
119var SharedLibraryStubsProvider = blueprint.NewProvider(SharedLibraryStubsInfo{})
120
121// StaticLibraryInfo is a provider to propagate information about a static C++ library.
Colin Cross0de8a1e2020-09-18 14:15:30 -0700122type StaticLibraryInfo struct {
123 StaticLibrary android.Path
124 Objects Objects
125 ReuseObjects Objects
126
127 // This isn't the actual transitive DepSet, shared library dependencies have been
128 // converted into static library analogues. It is only used to order the static
129 // library dependencies that were specified for the current module.
130 TransitiveStaticLibrariesForOrdering *android.DepSet
131}
132
133var StaticLibraryInfoProvider = blueprint.NewProvider(StaticLibraryInfo{})
134
Colin Cross649d8172020-12-10 12:30:21 -0800135// HeaderLibraryInfo is a marker provider that identifies a module as a header library.
136type HeaderLibraryInfo struct {
137}
138
139// HeaderLibraryInfoProvider is a marker provider that identifies a module as a header library.
140var HeaderLibraryInfoProvider = blueprint.NewProvider(HeaderLibraryInfo{})
141
Chris Parsons3c27ca32020-11-20 12:42:07 -0500142// FlagExporterInfo is a provider to propagate transitive library information
143// pertaining to exported include paths and flags.
Colin Cross0de8a1e2020-09-18 14:15:30 -0700144type FlagExporterInfo struct {
Chris Parsons3c27ca32020-11-20 12:42:07 -0500145 IncludeDirs android.Paths // Include directories to be included with -I
146 SystemIncludeDirs android.Paths // System include directories to be included with -isystem
147 Flags []string // Exported raw flags.
Colin Cross0de8a1e2020-09-18 14:15:30 -0700148 Deps android.Paths
149 GeneratedHeaders android.Paths
150}
151
152var FlagExporterInfoProvider = blueprint.NewProvider(FlagExporterInfo{})