diff options
author | 2019-10-18 14:18:45 -0700 | |
---|---|---|
committer | 2019-10-28 13:45:12 -0700 | |
commit | 183a3218e257b6d1dcd6636f136ede87411b13f4 (patch) | |
tree | 148db1dfbe780a54b145d02583f7bcbbc96d5668 /rust/rust.go | |
parent | ce6b216c5ef685eda3c5e7f01b8517b1aa049514 (diff) |
Add a common interface for cc linkable libraries.
Adds an interface, CcLinkableInterface, for cc linkable dependencies
which come from other toolchains such as Rust.
Bug: 140726209
Test: Soong tests pass, rust modules still compile.
Change-Id: I7378a46fad94fd0b735746aaf4e265fd2c2c04d8
Diffstat (limited to 'rust/rust.go')
-rw-r--r-- | rust/rust.go | 135 |
1 files changed, 127 insertions, 8 deletions
diff --git a/rust/rust.go b/rust/rust.go index 707de4b91..a9321bef2 100644 --- a/rust/rust.go +++ b/rust/rust.go @@ -15,6 +15,7 @@ package rust import ( + "fmt" "strings" "github.com/google/blueprint" @@ -150,6 +151,124 @@ func (mod *Module) CrateName() string { return strings.Replace(mod.BaseModuleName(), "-", "_", -1) } +func (mod *Module) CcLibrary() bool { + if mod.compiler != nil { + if _, ok := mod.compiler.(*libraryDecorator); ok { + return true + } + } + return false +} + +func (mod *Module) CcLibraryInterface() bool { + if mod.compiler != nil { + if _, ok := mod.compiler.(libraryInterface); ok { + return true + } + } + return false +} + +func (mod *Module) IncludeDirs() android.Paths { + if mod.compiler != nil { + if _, ok := mod.compiler.(*libraryDecorator); ok { + //TODO add Include_dirs to libraryDecorator for C libraries. + return android.Paths{} + } + } + panic(fmt.Errorf("IncludeDirs called on non-library module: %q", mod.BaseModuleName())) +} + +func (mod *Module) SetStatic() { + if mod.compiler != nil { + if _, ok := mod.compiler.(*libraryDecorator); ok { + //TODO add support for static variants. + return + } + } + panic(fmt.Errorf("SetStatic called on non-library module: %q", mod.BaseModuleName())) +} + +func (mod *Module) SetShared() { + if mod.compiler != nil { + if _, ok := mod.compiler.(*libraryDecorator); ok { + //TODO add support for shared variants. + return + } + } + panic(fmt.Errorf("SetShared called on non-library module: %q", mod.BaseModuleName())) +} + +func (mod *Module) SetBuildStubs() { + panic("SetBuildStubs not yet implemented for rust modules") +} + +func (mod *Module) SetStubsVersions(string) { + panic("SetStubsVersions not yet implemented for rust modules") +} + +func (mod *Module) BuildStaticVariant() bool { + if mod.compiler != nil { + if _, ok := mod.compiler.(*libraryDecorator); ok { + //TODO add support for static variants. + return false + } + } + panic(fmt.Errorf("BuildStaticVariant called on non-library module: %q", mod.BaseModuleName())) +} + +func (mod *Module) BuildSharedVariant() bool { + if mod.compiler != nil { + if _, ok := mod.compiler.(*libraryDecorator); ok { + //TODO add support for shared variants. + return false + } + } + panic(fmt.Errorf("BuildSharedVariant called on non-library module: %q", mod.BaseModuleName())) +} + +// Rust module deps don't have a link order (?) +func (mod *Module) SetDepsInLinkOrder([]android.Path) {} + +func (mod *Module) GetDepsInLinkOrder() []android.Path { + return []android.Path{} +} + +func (mod *Module) GetStaticVariant() cc.LinkableInterface { + return nil +} + +func (mod *Module) Module() android.Module { + return mod +} + +func (mod *Module) StubsVersions() []string { + // For now, Rust has no stubs versions. + if mod.compiler != nil { + if _, ok := mod.compiler.(*libraryDecorator); ok { + return []string{} + } + } + panic(fmt.Errorf("StubsVersions called on non-library module: %q", mod.BaseModuleName())) +} + +func (mod *Module) OutputFile() android.OptionalPath { + return mod.outputFile +} + +func (mod *Module) InRecovery() bool { + // For now, Rust has no notion of the recovery image + return false +} +func (mod *Module) HasStaticVariant() bool { + if mod.GetStaticVariant() != nil { + return true + } + return false +} + +var _ cc.LinkableInterface = (*Module)(nil) + func (mod *Module) Init() android.Module { mod.AddProperties(&mod.Properties) @@ -387,20 +506,20 @@ func (mod *Module) depsToPaths(ctx android.ModuleContext) PathDeps { exportDep := false switch depTag { - case cc.StaticDepTag(): + case cc.StaticDepTag: depPaths.linkDirs = append(depPaths.linkDirs, linkPath) depPaths.depFlags = append(depPaths.depFlags, "-l"+libName) directStaticLibDeps = append(directStaticLibDeps, ccDep) mod.Properties.AndroidMkStaticLibs = append(mod.Properties.AndroidMkStaticLibs, depName) - case cc.SharedDepTag(): + case cc.SharedDepTag: depPaths.linkDirs = append(depPaths.linkDirs, linkPath) depPaths.depFlags = append(depPaths.depFlags, "-l"+libName) directSharedLibDeps = append(directSharedLibDeps, ccDep) mod.Properties.AndroidMkSharedLibs = append(mod.Properties.AndroidMkSharedLibs, depName) exportDep = true - case cc.CrtBeginDepTag(): + case cc.CrtBeginDepTag: depPaths.CrtBegin = linkFile - case cc.CrtEndDepTag(): + case cc.CrtEndDepTag: depPaths.CrtEnd = linkFile } @@ -481,14 +600,14 @@ func (mod *Module) DepsMutator(actx android.BottomUpMutatorContext) { if !mod.Host() { ccDepVariations = append(ccDepVariations, blueprint.Variation{Mutator: "image", Variation: "core"}) } - actx.AddVariationDependencies(append(ccDepVariations, blueprint.Variation{Mutator: "link", Variation: "shared"}), cc.SharedDepTag(), deps.SharedLibs...) - actx.AddVariationDependencies(append(ccDepVariations, blueprint.Variation{Mutator: "link", Variation: "static"}), cc.StaticDepTag(), deps.StaticLibs...) + actx.AddVariationDependencies(append(ccDepVariations, blueprint.Variation{Mutator: "link", Variation: "shared"}), cc.SharedDepTag, deps.SharedLibs...) + actx.AddVariationDependencies(append(ccDepVariations, blueprint.Variation{Mutator: "link", Variation: "static"}), cc.StaticDepTag, deps.StaticLibs...) if deps.CrtBegin != "" { - actx.AddVariationDependencies(ccDepVariations, cc.CrtBeginDepTag(), deps.CrtBegin) + actx.AddVariationDependencies(ccDepVariations, cc.CrtBeginDepTag, deps.CrtBegin) } if deps.CrtEnd != "" { - actx.AddVariationDependencies(ccDepVariations, cc.CrtEndDepTag(), deps.CrtEnd) + actx.AddVariationDependencies(ccDepVariations, cc.CrtEndDepTag, deps.CrtEnd) } // proc_macros are compiler plugins, and so we need the host arch variant as a dependendcy. |