diff options
Diffstat (limited to 'cc/library.go')
-rw-r--r-- | cc/library.go | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/cc/library.go b/cc/library.go index ee7610d08..8a2b6bdbd 100644 --- a/cc/library.go +++ b/cc/library.go @@ -220,6 +220,7 @@ func init() { func RegisterLibraryBuildComponents(ctx android.RegistrationContext) { ctx.RegisterModuleType("cc_library_static", LibraryStaticFactory) + ctx.RegisterModuleType("cc_rustlibs_for_make", LibraryMakeRustlibsFactory) ctx.RegisterModuleType("cc_library_shared", LibrarySharedFactory) ctx.RegisterModuleType("cc_library", LibraryFactory) ctx.RegisterModuleType("cc_library_host_static", LibraryHostStaticFactory) @@ -249,6 +250,19 @@ func LibraryStaticFactory() android.Module { return module.Init() } +// cc_rustlibs_for_make creates a static library which bundles together rust_ffi_static +// deps for Make. This should not be depended on in Soong, and is probably not the +// module you need unless you are sure of what you're doing. These should only +// be declared as dependencies in Make. To ensure inclusion, rust_ffi_static modules +// should be declared in the whole_static_libs property. +func LibraryMakeRustlibsFactory() android.Module { + module, library := NewLibrary(android.HostAndDeviceSupported) + library.BuildOnlyStatic() + library.wideStaticlibForMake = true + module.sdkMemberTypes = []android.SdkMemberType{staticLibrarySdkMemberType} + return module.Init() +} + // cc_library_shared creates a shared library for a device and/or host. func LibrarySharedFactory() android.Module { module, library := NewLibrary(android.HostAndDeviceSupported) @@ -437,6 +451,10 @@ type libraryDecorator struct { // Path to the file containing the APIs exported by this library stubsSymbolFilePath android.Path + + // Forces production of the generated Rust staticlib for cc_library_static. + // Intended to be used to provide these generated staticlibs for Make. + wideStaticlibForMake bool } // linkerProps returns the list of properties structs relevant for this library. (For example, if @@ -1055,6 +1073,16 @@ func (library *libraryDecorator) linkStatic(ctx ModuleContext, library.objects = library.objects.Append(objs) library.wholeStaticLibsFromPrebuilts = android.CopyOfPaths(deps.WholeStaticLibsFromPrebuilts) + if library.wideStaticlibForMake { + if generatedLib := GenerateRustStaticlib(ctx, deps.RustRlibDeps); generatedLib != nil { + // WholeStaticLibsFromPrebuilts are .a files that get included whole into the resulting staticlib + // so reuse that here for our Rust staticlibs because we don't have individual object files for + // these. + deps.WholeStaticLibsFromPrebuilts = append(deps.WholeStaticLibsFromPrebuilts, generatedLib) + } + + } + fileName := ctx.ModuleName() + staticLibraryExtension outputFile := android.PathForModuleOut(ctx, fileName) builderFlags := flagsToBuilderFlags(flags) |