diff options
Diffstat (limited to 'cc/prebuilt.go')
| -rw-r--r-- | cc/prebuilt.go | 156 |
1 files changed, 127 insertions, 29 deletions
diff --git a/cc/prebuilt.go b/cc/prebuilt.go index 48e466715..b7c0bf2fd 100644 --- a/cc/prebuilt.go +++ b/cc/prebuilt.go @@ -19,9 +19,15 @@ import ( ) func init() { - android.RegisterModuleType("cc_prebuilt_library_shared", prebuiltSharedLibraryFactory) - android.RegisterModuleType("cc_prebuilt_library_static", prebuiltStaticLibraryFactory) - android.RegisterModuleType("cc_prebuilt_binary", prebuiltBinaryFactory) + RegisterPrebuiltBuildComponents(android.InitRegistrationContext) +} + +func RegisterPrebuiltBuildComponents(ctx android.RegistrationContext) { + ctx.RegisterModuleType("cc_prebuilt_library", PrebuiltLibraryFactory) + ctx.RegisterModuleType("cc_prebuilt_library_shared", PrebuiltSharedLibraryFactory) + ctx.RegisterModuleType("cc_prebuilt_library_static", PrebuiltStaticLibraryFactory) + ctx.RegisterModuleType("cc_prebuilt_object", prebuiltObjectFactory) + ctx.RegisterModuleType("cc_prebuilt_binary", prebuiltBinaryFactory) } type prebuiltLinkerInterface interface { @@ -83,22 +89,32 @@ func (p *prebuiltLibraryLinker) linkerProps() []interface{} { func (p *prebuiltLibraryLinker) link(ctx ModuleContext, flags Flags, deps PathDeps, objs Objects) android.Path { - // TODO(ccross): verify shared library dependencies - if len(p.properties.Srcs) > 0 { - p.libraryDecorator.exportIncludes(ctx, "-I") - p.libraryDecorator.reexportFlags(deps.ReexportedFlags) - p.libraryDecorator.reexportDeps(deps.ReexportedFlagsDeps) + p.libraryDecorator.exportIncludes(ctx) + p.libraryDecorator.reexportDirs(deps.ReexportedDirs...) + p.libraryDecorator.reexportSystemDirs(deps.ReexportedSystemDirs...) + p.libraryDecorator.reexportFlags(deps.ReexportedFlags...) + p.libraryDecorator.reexportDeps(deps.ReexportedDeps...) + p.libraryDecorator.addExportedGeneratedHeaders(deps.ReexportedGeneratedHeaders...) + + // TODO(ccross): verify shared library dependencies + srcs := p.prebuiltSrcs() + if len(srcs) > 0 { builderFlags := flagsToBuilderFlags(flags) - in := p.Prebuilt.SingleSourcePath(ctx) + if len(srcs) > 1 { + ctx.PropertyErrorf("srcs", "multiple prebuilt source files") + return nil + } + + in := android.PathForModuleSrc(ctx, srcs[0]) if p.shared() { p.unstrippedOutputFile = in - libName := ctx.baseModuleName() + flags.Toolchain.ShlibSuffix() + libName := p.libraryDecorator.getLibName(ctx) + flags.Toolchain.ShlibSuffix() if p.needsStrip(ctx) { stripped := android.PathForModuleOut(ctx, "stripped", libName) - p.strip(ctx, in, stripped, builderFlags) + p.stripExecutableOrSharedLib(ctx, in, stripped, builderFlags) in = stripped } @@ -115,6 +131,18 @@ func (p *prebuiltLibraryLinker) link(ctx ModuleContext, return nil } +func (p *prebuiltLibraryLinker) prebuiltSrcs() []string { + srcs := p.properties.Srcs + if p.static() { + srcs = append(srcs, p.libraryDecorator.StaticProperties.Static.Srcs...) + } + if p.shared() { + srcs = append(srcs, p.libraryDecorator.SharedProperties.Shared.Srcs...) + } + + return srcs +} + func (p *prebuiltLibraryLinker) shared() bool { return p.libraryDecorator.shared() } @@ -127,28 +155,56 @@ func (p *prebuiltLibraryLinker) disablePrebuilt() { p.properties.Srcs = nil } -// cc_prebuilt_library_shared installs a precompiled shared library that are -// listed in the srcs property in the device's directory. -func prebuiltSharedLibraryFactory() android.Module { - module, _ := NewPrebuiltSharedLibrary(android.HostAndDeviceSupported) - return module.Init() +func (p *prebuiltLibraryLinker) skipInstall(mod *Module) { + mod.ModuleBase.SkipInstall() } -func NewPrebuiltSharedLibrary(hod android.HostOrDeviceSupported) (*Module, *libraryDecorator) { +func NewPrebuiltLibrary(hod android.HostOrDeviceSupported) (*Module, *libraryDecorator) { module, library := NewLibrary(hod) - library.BuildOnlyShared() module.compiler = nil prebuilt := &prebuiltLibraryLinker{ libraryDecorator: library, } module.linker = prebuilt + module.installer = prebuilt module.AddProperties(&prebuilt.properties) - android.InitPrebuiltModule(module, &prebuilt.properties.Srcs) + srcsSupplier := func() []string { + return prebuilt.prebuiltSrcs() + } + + android.InitPrebuiltModuleWithSrcSupplier(module, srcsSupplier, "srcs") + + // Prebuilt libraries can be used in SDKs. + android.InitSdkAwareModule(module) + return module, library +} - // Prebuilt libraries can be included in APEXes +// cc_prebuilt_library installs a precompiled shared library that are +// listed in the srcs property in the device's directory. +func PrebuiltLibraryFactory() android.Module { + module, _ := NewPrebuiltLibrary(android.HostAndDeviceSupported) + + // Prebuilt shared libraries can be included in APEXes + android.InitApexModule(module) + + return module.Init() +} + +// cc_prebuilt_library_shared installs a precompiled shared library that are +// listed in the srcs property in the device's directory. +func PrebuiltSharedLibraryFactory() android.Module { + module, _ := NewPrebuiltSharedLibrary(android.HostAndDeviceSupported) + return module.Init() +} + +func NewPrebuiltSharedLibrary(hod android.HostOrDeviceSupported) (*Module, *libraryDecorator) { + module, library := NewPrebuiltLibrary(hod) + library.BuildOnlyShared() + + // Prebuilt shared libraries can be included in APEXes android.InitApexModule(module) return module, library @@ -156,25 +212,63 @@ func NewPrebuiltSharedLibrary(hod android.HostOrDeviceSupported) (*Module, *libr // cc_prebuilt_library_static installs a precompiled static library that are // listed in the srcs property in the device's directory. -func prebuiltStaticLibraryFactory() android.Module { +func PrebuiltStaticLibraryFactory() android.Module { module, _ := NewPrebuiltStaticLibrary(android.HostAndDeviceSupported) return module.Init() } func NewPrebuiltStaticLibrary(hod android.HostOrDeviceSupported) (*Module, *libraryDecorator) { - module, library := NewLibrary(hod) + module, library := NewPrebuiltLibrary(hod) library.BuildOnlyStatic() - module.compiler = nil + return module, library +} - prebuilt := &prebuiltLibraryLinker{ - libraryDecorator: library, +type prebuiltObjectProperties struct { + Srcs []string `android:"path,arch_variant"` +} + +type prebuiltObjectLinker struct { + android.Prebuilt + objectLinker + + properties prebuiltObjectProperties +} + +func (p *prebuiltObjectLinker) prebuilt() *android.Prebuilt { + return &p.Prebuilt +} + +var _ prebuiltLinkerInterface = (*prebuiltObjectLinker)(nil) + +func (p *prebuiltObjectLinker) link(ctx ModuleContext, + flags Flags, deps PathDeps, objs Objects) android.Path { + if len(p.properties.Srcs) > 0 { + return p.Prebuilt.SingleSourcePath(ctx) } - module.linker = prebuilt + return nil +} - module.AddProperties(&prebuilt.properties) +func (p *prebuiltObjectLinker) object() bool { + return true +} +func newPrebuiltObject() *Module { + module := newObject() + prebuilt := &prebuiltObjectLinker{ + objectLinker: objectLinker{ + baseLinker: NewBaseLinker(nil), + }, + } + module.linker = prebuilt + module.AddProperties(&prebuilt.properties) android.InitPrebuiltModule(module, &prebuilt.properties.Srcs) - return module, library + android.InitSdkAwareModule(module) + return module +} + +func prebuiltObjectFactory() android.Module { + module := newPrebuiltObject() + return module.Init() } type prebuiltBinaryLinker struct { @@ -197,7 +291,7 @@ func (p *prebuiltBinaryLinker) link(ctx ModuleContext, if p.needsStrip(ctx) { stripped := android.PathForModuleOut(ctx, "stripped", fileName) - p.strip(ctx, in, stripped, builderFlags) + p.stripExecutableOrSharedLib(ctx, in, stripped, builderFlags) in = stripped } @@ -216,6 +310,10 @@ func (p *prebuiltBinaryLinker) link(ctx ModuleContext, return nil } +func (p *prebuiltBinaryLinker) binary() bool { + return true +} + // cc_prebuilt_binary installs a precompiled executable in srcs property in the // device's directory. func prebuiltBinaryFactory() android.Module { |