[Rust] cdylibs can now link against dylibs.
Bug: 144861059 Test: cd external/rust/crates; mma Test: Manual verification through ldd that libstd is a dependency Change-Id: I603cf519215317aa8c400cd0f6ebb1b58f5bcf15
This commit is contained in:
parent
2752d926a9
commit
7e741cca30
|
@ -311,8 +311,8 @@ func (library *libraryDecorator) compilerProps() []interface{} {
|
||||||
|
|
||||||
func (library *libraryDecorator) compilerDeps(ctx DepsContext, deps Deps) Deps {
|
func (library *libraryDecorator) compilerDeps(ctx DepsContext, deps Deps) Deps {
|
||||||
|
|
||||||
// TODO(b/144861059) Remove if C libraries support dylib linkage in the future.
|
// TODO(b/155498724) Remove if C static libraries no longer require libstd as an rlib dependency.
|
||||||
if !ctx.Host() && (library.static() || library.shared()) {
|
if !ctx.Host() && library.static() {
|
||||||
library.setNoStdlibs()
|
library.setNoStdlibs()
|
||||||
for _, stdlib := range config.Stdlibs {
|
for _, stdlib := range config.Stdlibs {
|
||||||
deps.Rlibs = append(deps.Rlibs, stdlib+".static")
|
deps.Rlibs = append(deps.Rlibs, stdlib+".static")
|
||||||
|
|
|
@ -17,6 +17,8 @@ package rust
|
||||||
import (
|
import (
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"android/soong/android"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Test that variants are being generated correctly, and that crate-types are correct.
|
// Test that variants are being generated correctly, and that crate-types are correct.
|
||||||
|
@ -115,16 +117,24 @@ func TestValidateLibraryStem(t *testing.T) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestSharedLibraryFlags(t *testing.T) {
|
func TestSharedLibrary(t *testing.T) {
|
||||||
ctx := testRust(t, `
|
ctx := testRust(t, `
|
||||||
rust_library_host {
|
rust_library {
|
||||||
name: "libfoo",
|
name: "libfoo",
|
||||||
srcs: ["foo.rs"],
|
srcs: ["foo.rs"],
|
||||||
crate_name: "foo",
|
crate_name: "foo",
|
||||||
}`)
|
}`)
|
||||||
|
|
||||||
libfooShared := ctx.ModuleForTests("libfoo", "linux_glibc_x86_64_shared").Output("libfoo.so")
|
libfoo := ctx.ModuleForTests("libfoo", "android_arm64_armv8-a_shared")
|
||||||
if !strings.Contains(libfooShared.Args["linkFlags"], "-Wl,-soname=libfoo.so") {
|
|
||||||
t.Errorf("missing expected -Wl,-soname linker flag for libfoo shared lib, linkFlags: %#v", libfooShared.Args["linkFlags"])
|
libfooOutput := libfoo.Output("libfoo.so")
|
||||||
|
if !strings.Contains(libfooOutput.Args["linkFlags"], "-Wl,-soname=libfoo.so") {
|
||||||
|
t.Errorf("missing expected -Wl,-soname linker flag for libfoo shared lib, linkFlags: %#v",
|
||||||
|
libfooOutput.Args["linkFlags"])
|
||||||
|
}
|
||||||
|
|
||||||
|
if !android.InList("libstd", libfoo.Module().(*Module).Properties.AndroidMkDylibs) {
|
||||||
|
t.Errorf("Non-static libstd dylib expected to be a dependency of Rust shared libraries. Dylib deps are: %#v",
|
||||||
|
libfoo.Module().(*Module).Properties.AndroidMkDylibs)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue