Change stdlib linkage for C libraries.

Rust C libraries cannot currently depend on dylibs. This prevents device
libraries from attempting to link the stdlib dynamically, instead using
rlibs.

Bug: 144861059
Test: Simple Rust library compiles as a shared/static library.
Change-Id: I38e5aae90e50ddcc5fc72d5a8d1820d92955cf48
This commit is contained in:
Ivan Lozano 2019-11-21 14:35:20 -08:00
parent c6e9f92cfa
commit 88f2b1ce53
1 changed files with 10 additions and 0 deletions

View File

@ -19,6 +19,7 @@ import (
"strings"
"android/soong/android"
"android/soong/rust/config"
)
func init() {
@ -304,6 +305,15 @@ func (library *libraryDecorator) compilerProps() []interface{} {
}
func (library *libraryDecorator) compilerDeps(ctx DepsContext, deps Deps) Deps {
// TODO(b/144861059) Remove if C libraries support dylib linkage in the future.
if !ctx.Host() && (library.static() || library.shared()) {
library.setNoStdlibs()
for _, stdlib := range config.Stdlibs {
deps.Rlibs = append(deps.Rlibs, stdlib+".static")
}
}
deps = library.baseCompiler.compilerDeps(ctx, deps)
if ctx.toolchain().Bionic() && (library.dylib() || library.shared()) {