diff options
Diffstat (limited to 'rust/library.go')
-rw-r--r-- | rust/library.go | 40 |
1 files changed, 29 insertions, 11 deletions
diff --git a/rust/library.go b/rust/library.go index 3f031c10c..7bb82bcc2 100644 --- a/rust/library.go +++ b/rust/library.go @@ -485,11 +485,28 @@ func (library *libraryDecorator) compilerFlags(ctx ModuleContext, flags Flags) F return flags } +func (library *libraryDecorator) compilationSourcesAndData(ctx ModuleContext) android.Paths { + var extraSrcs android.Paths + if library.rlib() { + extraSrcs = android.PathsForModuleSrc(ctx, library.Properties.Rlib.Srcs) + } else if library.dylib() { + extraSrcs = android.PathsForModuleSrc(ctx, library.Properties.Dylib.Srcs) + } else if library.static() { + extraSrcs = android.PathsForModuleSrc(ctx, library.Properties.Static.Srcs) + } else if library.shared() { + extraSrcs = android.PathsForModuleSrc(ctx, library.Properties.Shared.Srcs) + } + return android.Concat( + library.baseCompiler.compilationSourcesAndData(ctx), + extraSrcs, + ) +} + func (library *libraryDecorator) compile(ctx ModuleContext, flags Flags, deps PathDeps) buildOutput { var outputFile android.ModuleOutPath var ret buildOutput var fileName string - srcPath := library.srcPath(ctx, deps) + crateRootPath := library.crateRootPath(ctx, deps) if library.sourceProvider != nil { deps.srcProviderFiles = append(deps.srcProviderFiles, library.sourceProvider.Srcs()...) @@ -525,7 +542,6 @@ func (library *libraryDecorator) compile(ctx ModuleContext, flags Flags, deps Pa flags.RustFlags = append(flags.RustFlags, deps.depFlags...) flags.LinkFlags = append(flags.LinkFlags, deps.depLinkFlags...) - flags.LinkFlags = append(flags.LinkFlags, deps.linkObjects.Strings()...) if library.dylib() { // We need prefer-dynamic for now to avoid linking in the static stdlib. See: @@ -536,13 +552,13 @@ func (library *libraryDecorator) compile(ctx ModuleContext, flags Flags, deps Pa // Call the appropriate builder for this library type if library.rlib() { - ret.kytheFile = TransformSrctoRlib(ctx, srcPath, deps, flags, outputFile).kytheFile + ret.kytheFile = TransformSrctoRlib(ctx, library, crateRootPath, deps, flags, outputFile).kytheFile } else if library.dylib() { - ret.kytheFile = TransformSrctoDylib(ctx, srcPath, deps, flags, outputFile).kytheFile + ret.kytheFile = TransformSrctoDylib(ctx, library, crateRootPath, deps, flags, outputFile).kytheFile } else if library.static() { - ret.kytheFile = TransformSrctoStatic(ctx, srcPath, deps, flags, outputFile).kytheFile + ret.kytheFile = TransformSrctoStatic(ctx, library, crateRootPath, deps, flags, outputFile).kytheFile } else if library.shared() { - ret.kytheFile = TransformSrctoShared(ctx, srcPath, deps, flags, outputFile).kytheFile + ret.kytheFile = TransformSrctoShared(ctx, library, crateRootPath, deps, flags, outputFile).kytheFile } if library.rlib() || library.dylib() { @@ -585,13 +601,15 @@ func (library *libraryDecorator) compile(ctx ModuleContext, flags Flags, deps Pa return ret } -func (library *libraryDecorator) srcPath(ctx ModuleContext, _ PathDeps) android.Path { +func (library *libraryDecorator) crateRootPath(ctx ModuleContext, _ PathDeps) android.Path { if library.sourceProvider != nil { // Assume the first source from the source provider is the library entry point. return library.sourceProvider.Srcs()[0] - } else { + } else if library.baseCompiler.Properties.Crate_root == nil { path, _ := srcPathFromModuleSrcs(ctx, library.baseCompiler.Properties.Srcs) return path + } else { + return android.PathForModuleSrc(ctx, *library.baseCompiler.Properties.Crate_root) } } @@ -606,7 +624,7 @@ func (library *libraryDecorator) rustdoc(ctx ModuleContext, flags Flags, return android.OptionalPath{} } - return android.OptionalPathForPath(Rustdoc(ctx, library.srcPath(ctx, deps), + return android.OptionalPathForPath(Rustdoc(ctx, library.crateRootPath(ctx, deps), deps, flags)) } @@ -810,7 +828,7 @@ type rustLibraryAttributes struct { Proc_macro_deps bazel.LabelListAttribute } -func libraryBp2build(ctx android.TopDownMutatorContext, m *Module) { +func libraryBp2build(ctx android.Bp2buildMutatorContext, m *Module) { lib := m.compiler.(*libraryDecorator) srcs, compileData := srcsAndCompileDataAttrs(ctx, *lib.baseCompiler) @@ -887,7 +905,7 @@ type cargoBuildScriptAttributes struct { Version bazel.StringAttribute } -func cargoBuildScriptBp2build(ctx android.TopDownMutatorContext, m *Module) *string { +func cargoBuildScriptBp2build(ctx android.Bp2buildMutatorContext, m *Module) *string { // Soong treats some crates like libprotobuf as special in that they have // cargo build script ran to produce an out folder and check it into AOSP // For example, https://cs.android.com/android/platform/superproject/main/+/main:external/rust/crates/protobuf/out/ |