diff options
Diffstat (limited to 'rust/compiler.go')
| -rw-r--r-- | rust/compiler.go | 30 |
1 files changed, 28 insertions, 2 deletions
diff --git a/rust/compiler.go b/rust/compiler.go index 3f028350a..88e3fb2c7 100644 --- a/rust/compiler.go +++ b/rust/compiler.go @@ -18,9 +18,10 @@ import ( "fmt" "path/filepath" + "github.com/google/blueprint/proptools" + "android/soong/android" "android/soong/rust/config" - "github.com/google/blueprint/proptools" ) func getEdition(compiler *baseCompiler) string { @@ -31,6 +32,10 @@ func getDenyWarnings(compiler *baseCompiler) bool { return BoolDefault(compiler.Properties.Deny_warnings, config.DefaultDenyWarnings) } +func (compiler *baseCompiler) setNoStdlibs() { + compiler.Properties.No_stdlibs = proptools.BoolPtr(true) +} + func NewBaseCompiler(dir, dir64 string) *baseCompiler { return &baseCompiler{ Properties: BaseCompilerProperties{}, @@ -64,7 +69,7 @@ type BaseCompilerProperties struct { // list of C static library dependencies Static_libs []string `android:"arch_variant"` - // crate name (defaults to module name); if library, this must be the expected extern crate name + // crate name, required for libraries. This must be the expected extern crate name used in source Crate_name string `android:"arch_variant"` // list of features to enable for this crate @@ -81,6 +86,9 @@ type BaseCompilerProperties struct { // install to a subdirectory of the default install path for the module Relative_install_path *string `android:"arch_variant"` + + // whether to suppress inclusion of standard crates - defaults to false + No_stdlibs *bool } type baseCompiler struct { @@ -160,6 +168,23 @@ func (compiler *baseCompiler) compilerDeps(ctx DepsContext, deps Deps) Deps { deps.StaticLibs = append(deps.StaticLibs, compiler.Properties.Static_libs...) deps.SharedLibs = append(deps.SharedLibs, compiler.Properties.Shared_libs...) + if !Bool(compiler.Properties.No_stdlibs) { + for _, stdlib := range config.Stdlibs { + // If we're building for host, use the compiler's stdlibs + if ctx.Host() { + stdlib = stdlib + "_" + ctx.toolchain().RustTriple() + } + + // This check is technically insufficient - on the host, where + // static linking is the default, if one of our static + // dependencies uses a dynamic library, we need to dynamically + // link the stdlib as well. + if (len(deps.Dylibs) > 0) || (!ctx.Host()) { + // Dynamically linked stdlib + deps.Dylibs = append(deps.Dylibs, stdlib) + } + } + } return deps } @@ -207,6 +232,7 @@ func (compiler *baseCompiler) getStemWithoutSuffix(ctx BaseModuleContext) string return stem } + func (compiler *baseCompiler) relativeInstallPath() string { return String(compiler.Properties.Relative_install_path) } |