platform_build_soong/cc/linkable.go

127 lines
2.9 KiB
Go
Raw Normal View History

package cc
import (
"android/soong/android"
"github.com/google/blueprint"
)
type LinkableInterface interface {
Module() android.Module
CcLibrary() bool
CcLibraryInterface() bool
OutputFile() android.OptionalPath
CoverageFiles() android.Paths
NonCcVariants() bool
StubsVersions(android.BaseMutatorContext) []string
BuildStubs() bool
SetBuildStubs()
SetStubsVersion(string)
StubsVersion() string
SetAllStubsVersions([]string)
AllStubsVersions() []string
HasStubsVariants() bool
SelectedStl() string
ApiLevel() string
BuildStaticVariant() bool
BuildSharedVariant() bool
SetStatic()
SetShared()
Static() bool
Shared() bool
Toc() android.OptionalPath
Host() bool
InRamdisk() bool
OnlyInRamdisk() bool
InRecovery() bool
OnlyInRecovery() bool
UseSdk() bool
UseVndk() bool
MustUseVendorVariant() bool
IsVndk() bool
HasVendorVariant() bool
SdkVersion() string
AlwaysSdk() bool
Don't create version variants for SDK variants When a lib has sdk_version set, an SDK variant and a platform variant are created by the sdkMutator. Then by the versionMutator, if the library had 'stubs.versions' property, one or more versioned variants and one impl variant are created for each of the two (SDK and platform) variants. As a concrete example, cc_library { name: "foo", sdk_version: "current", stubs: { versions: ["1", "2"], }, } would create 6 variants: 1) (sdk: "", version: "") 2) (sdk: "", version: "1") 3) (sdk: "", version: "2") 4) (sdk: "sdk", version: "") 5) (sdk: "sdk", version: "1") 6) (sdk: "sdk", version: "2") This is somewhat uncessary because the need for the SDK mutator is to have the platform variant (sdk:"") of a lib where sdk_version is unset, which actually makes sens for the impl variant (version:""), but not the versioned variants (version:"1" or version:"2"). This is not only unncessary, but also causes duplicate module definitions in the Make side when doing an unbundled build. Specifically, The #1 and #4 above both are emitted to Make and get the same name "foo". To fix the problem and not to create unnecessary variants, the versioned variants are no longer created for the sdk variant. So, foo now has the following variants only. 1) (sdk: "", version: "") // not emitted to Make (by versionMutator) 2) (sdk: "", version: "1") // not emitted to Make (by versionMutator) 3) (sdk: "", version: "2") // emitted to Make (by versionMutator) 4) (sdk: "sdk", version: "") // not emitted to Make (by versionMutator) Bug: 159106705 Test: Add sdk_version:"minimum" to libnativehelper in libnativehelper/Android.bp. m SOONG_ALLOW_MISSING_DEPENDENCIES=true TARGET_BUILD_UNBUNDLED=true libnativehelper Change-Id: I6f02f4189e5504286174ccff1642166da82d00c9
2020-06-16 20:58:53 +08:00
IsSdkVariant() bool
ToolchainLibrary() bool
NdkPrebuiltStl() bool
StubDecorator() bool
SplitPerApiLevel() bool
}
var (
CrtBeginDepTag = dependencyTag{name: "crtbegin"}
CrtEndDepTag = dependencyTag{name: "crtend"}
CoverageDepTag = dependencyTag{name: "coverage"}
)
func SharedDepTag() blueprint.DependencyTag {
return libraryDependencyTag{Kind: sharedLibraryDependency}
}
func StaticDepTag() blueprint.DependencyTag {
return libraryDependencyTag{Kind: staticLibraryDependency}
}
type SharedLibraryInfo struct {
SharedLibrary android.Path
UnstrippedSharedLibrary android.Path
TableOfContents android.OptionalPath
CoverageSharedLibrary android.OptionalPath
StaticAnalogue *StaticLibraryInfo
}
var SharedLibraryInfoProvider = blueprint.NewProvider(SharedLibraryInfo{})
type SharedLibraryImplementationStubsInfo struct {
SharedLibraryStubsInfos []SharedLibraryStubsInfo
IsLLNDK bool
}
var SharedLibraryImplementationStubsInfoProvider = blueprint.NewProvider(SharedLibraryImplementationStubsInfo{})
type SharedLibraryStubsInfo struct {
Version string
SharedLibraryInfo SharedLibraryInfo
FlagExporterInfo FlagExporterInfo
}
var SharedLibraryStubsInfoProvider = blueprint.NewProvider(SharedLibraryStubsInfo{})
type StaticLibraryInfo struct {
StaticLibrary android.Path
Objects Objects
ReuseObjects Objects
// This isn't the actual transitive DepSet, shared library dependencies have been
// converted into static library analogues. It is only used to order the static
// library dependencies that were specified for the current module.
TransitiveStaticLibrariesForOrdering *android.DepSet
}
var StaticLibraryInfoProvider = blueprint.NewProvider(StaticLibraryInfo{})
type FlagExporterInfo struct {
IncludeDirs android.Paths
SystemIncludeDirs android.Paths
Flags []string
Deps android.Paths
GeneratedHeaders android.Paths
}
var FlagExporterInfoProvider = blueprint.NewProvider(FlagExporterInfo{})