Provide 32-bit and 64-bit Rust libs by default.
CC libraries which depend on Rust libraries get missing dependency errors when building 32-bit variants dependent on Rust modules which don't explicitly have "multilib: both" declared. Because CC libraries use MultilibBoth by default, Rust should do the same. This also fixes a bug where the ARM32 toolchain incorrectly embedded toolchain64Bit instead of toolchain32Bit. Bug: 154730212 Test: Rust libraries provide both variants by default. Change-Id: Ia545fe069d3c6b77c3d18f4f10267e2c72ee0bab
This commit is contained in:
parent
52c0b7b35b
commit
9d1df10e2a
|
@ -108,8 +108,8 @@ func transformSrctoCrate(ctx android.ModuleContext, main android.Path, deps Path
|
||||||
}
|
}
|
||||||
// TODO once we have static libraries in the host prebuilt .bp, this
|
// TODO once we have static libraries in the host prebuilt .bp, this
|
||||||
// should be unconditionally added.
|
// should be unconditionally added.
|
||||||
if !ctx.Host() {
|
if !(ctx.Host() && ctx.TargetPrimary()) {
|
||||||
// If we're on a device build, do not use an implicit sysroot
|
// If we're not targeting the host primary arch, do not use an implicit sysroot
|
||||||
rustcFlags = append(rustcFlags, "--sysroot=/dev/null")
|
rustcFlags = append(rustcFlags, "--sysroot=/dev/null")
|
||||||
}
|
}
|
||||||
// Collect linker flags
|
// Collect linker flags
|
||||||
|
|
|
@ -183,8 +183,8 @@ func (compiler *baseCompiler) compilerDeps(ctx DepsContext, deps Deps) Deps {
|
||||||
|
|
||||||
if !Bool(compiler.Properties.No_stdlibs) {
|
if !Bool(compiler.Properties.No_stdlibs) {
|
||||||
for _, stdlib := range config.Stdlibs {
|
for _, stdlib := range config.Stdlibs {
|
||||||
// If we're building for host, use the compiler's stdlibs
|
// If we're building for the primary host target, use the compiler's stdlibs
|
||||||
if ctx.Host() {
|
if ctx.Host() && ctx.TargetPrimary() {
|
||||||
stdlib = stdlib + "_" + ctx.toolchain().RustTriple()
|
stdlib = stdlib + "_" + ctx.toolchain().RustTriple()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -192,9 +192,12 @@ func (compiler *baseCompiler) compilerDeps(ctx DepsContext, deps Deps) Deps {
|
||||||
// static linking is the default, if one of our static
|
// static linking is the default, if one of our static
|
||||||
// dependencies uses a dynamic library, we need to dynamically
|
// dependencies uses a dynamic library, we need to dynamically
|
||||||
// link the stdlib as well.
|
// link the stdlib as well.
|
||||||
if (len(deps.Dylibs) > 0) || (!ctx.Host()) {
|
if (len(deps.Dylibs) > 0) || ctx.Device() {
|
||||||
// Dynamically linked stdlib
|
// Dynamically linked stdlib
|
||||||
deps.Dylibs = append(deps.Dylibs, stdlib)
|
deps.Dylibs = append(deps.Dylibs, stdlib)
|
||||||
|
} else if ctx.Host() && !ctx.TargetPrimary() {
|
||||||
|
// Otherwise use the static in-tree stdlib for host secondary arch
|
||||||
|
deps.Rlibs = append(deps.Rlibs, stdlib+".static")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,7 +50,7 @@ func init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
type toolchainArm struct {
|
type toolchainArm struct {
|
||||||
toolchain64Bit
|
toolchain32Bit
|
||||||
toolchainRustFlags string
|
toolchainRustFlags string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -281,7 +281,7 @@ func (library *libraryDecorator) BuildOnlyShared() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewRustLibrary(hod android.HostOrDeviceSupported) (*Module, *libraryDecorator) {
|
func NewRustLibrary(hod android.HostOrDeviceSupported) (*Module, *libraryDecorator) {
|
||||||
module := newModule(hod, android.MultilibFirst)
|
module := newModule(hod, android.MultilibBoth)
|
||||||
|
|
||||||
library := &libraryDecorator{
|
library := &libraryDecorator{
|
||||||
MutatedProperties: LibraryMutatedProperties{
|
MutatedProperties: LibraryMutatedProperties{
|
||||||
|
|
|
@ -240,7 +240,7 @@ func TestNoStdlibs(t *testing.T) {
|
||||||
rust_binary {
|
rust_binary {
|
||||||
name: "fizz-buzz",
|
name: "fizz-buzz",
|
||||||
srcs: ["foo.rs"],
|
srcs: ["foo.rs"],
|
||||||
no_stdlibs: true,
|
no_stdlibs: true,
|
||||||
}`)
|
}`)
|
||||||
module := ctx.ModuleForTests("fizz-buzz", "android_arm64_armv8-a").Module().(*Module)
|
module := ctx.ModuleForTests("fizz-buzz", "android_arm64_armv8-a").Module().(*Module)
|
||||||
|
|
||||||
|
@ -248,3 +248,16 @@ func TestNoStdlibs(t *testing.T) {
|
||||||
t.Errorf("no_stdlibs did not suppress dependency on libstd")
|
t.Errorf("no_stdlibs did not suppress dependency on libstd")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Test that libraries provide both 32-bit and 64-bit variants.
|
||||||
|
func TestMultilib(t *testing.T) {
|
||||||
|
ctx := testRust(t, `
|
||||||
|
rust_library_rlib {
|
||||||
|
name: "libfoo",
|
||||||
|
srcs: ["foo.rs"],
|
||||||
|
crate_name: "foo",
|
||||||
|
}`)
|
||||||
|
|
||||||
|
_ = ctx.ModuleForTests("libfoo", "android_arm64_armv8-a_rlib")
|
||||||
|
_ = ctx.ModuleForTests("libfoo", "android_arm_armv7-a-neon_rlib")
|
||||||
|
}
|
||||||
|
|
|
@ -46,24 +46,29 @@ func GatherRequiredDepsForTest() string {
|
||||||
crate_name: "std",
|
crate_name: "std",
|
||||||
srcs: ["foo.rs"],
|
srcs: ["foo.rs"],
|
||||||
no_stdlibs: true,
|
no_stdlibs: true,
|
||||||
|
host_supported: true,
|
||||||
}
|
}
|
||||||
rust_library_rlib {
|
rust_library_rlib {
|
||||||
name: "libstd.static",
|
name: "libstd.static",
|
||||||
crate_name: "std",
|
crate_name: "std",
|
||||||
srcs: ["foo.rs"],
|
srcs: ["foo.rs"],
|
||||||
no_stdlibs: true,
|
no_stdlibs: true,
|
||||||
|
host_supported: true,
|
||||||
}
|
}
|
||||||
rust_library_dylib {
|
rust_library_dylib {
|
||||||
name: "libtest",
|
name: "libtest",
|
||||||
crate_name: "test",
|
crate_name: "test",
|
||||||
srcs: ["foo.rs"],
|
srcs: ["foo.rs"],
|
||||||
no_stdlibs: true,
|
no_stdlibs: true,
|
||||||
|
host_supported: true,
|
||||||
|
|
||||||
}
|
}
|
||||||
rust_library_rlib {
|
rust_library_rlib {
|
||||||
name: "libtest.static",
|
name: "libtest.static",
|
||||||
crate_name: "test",
|
crate_name: "test",
|
||||||
srcs: ["foo.rs"],
|
srcs: ["foo.rs"],
|
||||||
no_stdlibs: true,
|
no_stdlibs: true,
|
||||||
|
host_supported: true,
|
||||||
}
|
}
|
||||||
|
|
||||||
` + cc.GatherRequiredDepsForTest(android.NoOsType)
|
` + cc.GatherRequiredDepsForTest(android.NoOsType)
|
||||||
|
|
Loading…
Reference in New Issue