diff options
Diffstat (limited to 'rust/compiler.go')
| -rw-r--r-- | rust/compiler.go | 34 |
1 files changed, 25 insertions, 9 deletions
diff --git a/rust/compiler.go b/rust/compiler.go index 41b73719a..bc034d7cc 100644 --- a/rust/compiler.go +++ b/rust/compiler.go @@ -76,7 +76,7 @@ type BaseCompilerProperties struct { // errors). The default value is "default". Lints *string - // flags to pass to rustc + // flags to pass to rustc. To enable configuration options or features, use the "cfgs" or "features" properties. Flags []string `android:"path,arch_variant"` // flags to pass to the linker @@ -125,6 +125,9 @@ type BaseCompilerProperties struct { // list of features to enable for this crate Features []string `android:"arch_variant"` + // list of configuration options to enable for this crate. To enable features, use the "features" property. + Cfgs []string `android:"arch_variant"` + // specific rust edition that should be used if the default version is not desired Edition *string `android:"arch_variant"` @@ -210,9 +213,17 @@ func (compiler *baseCompiler) compilerProps() []interface{} { return []interface{}{&compiler.Properties} } -func (compiler *baseCompiler) featuresToFlags(features []string) []string { +func (compiler *baseCompiler) cfgsToFlags() []string { + flags := []string{} + for _, cfg := range compiler.Properties.Cfgs { + flags = append(flags, "--cfg '"+cfg+"'") + } + return flags +} + +func (compiler *baseCompiler) featuresToFlags() []string { flags := []string{} - for _, feature := range features { + for _, feature := range compiler.Properties.Features { flags = append(flags, "--cfg 'feature=\""+feature+"\"'") } return flags @@ -226,7 +237,8 @@ func (compiler *baseCompiler) compilerFlags(ctx ModuleContext, flags Flags) Flag } flags.RustFlags = append(flags.RustFlags, lintFlags) flags.RustFlags = append(flags.RustFlags, compiler.Properties.Flags...) - flags.RustFlags = append(flags.RustFlags, compiler.featuresToFlags(compiler.Properties.Features)...) + flags.RustFlags = append(flags.RustFlags, compiler.cfgsToFlags()...) + flags.RustFlags = append(flags.RustFlags, compiler.featuresToFlags()...) flags.RustFlags = append(flags.RustFlags, "--edition="+compiler.edition()) flags.LinkFlags = append(flags.LinkFlags, compiler.Properties.Ld_flags...) flags.GlobalRustFlags = append(flags.GlobalRustFlags, config.GlobalRustFlags...) @@ -272,6 +284,10 @@ func (compiler *baseCompiler) isDependencyRoot() bool { return false } +func (compiler *baseCompiler) strippedOutputFilePath() android.OptionalPath { + return compiler.strippedOutputFile +} + func (compiler *baseCompiler) compilerDeps(ctx DepsContext, deps Deps) Deps { deps.Rlibs = append(deps.Rlibs, compiler.Properties.Rlibs...) deps.Dylibs = append(deps.Dylibs, compiler.Properties.Dylibs...) @@ -287,7 +303,6 @@ func (compiler *baseCompiler) compilerDeps(ctx DepsContext, deps Deps) Deps { if ctx.Target().Os == android.BuildOs { stdlib = stdlib + "_" + ctx.toolchain().RustTriple() } - deps.Stdlibs = append(deps.Stdlibs, stdlib) } } @@ -328,6 +343,10 @@ func (compiler *baseCompiler) installDir(ctx ModuleContext) android.InstallPath if !ctx.Host() && ctx.Config().HasMultilibConflict(ctx.Arch().ArchType) { dir = filepath.Join(dir, ctx.Arch().ArchType.String()) } + + if compiler.location == InstallInData && ctx.RustModule().UseVndk() { + dir = filepath.Join(dir, "vendor") + } return android.PathForModuleInstall(ctx, dir, compiler.subDir, compiler.relativeInstallPath(), compiler.relative) } @@ -337,10 +356,7 @@ func (compiler *baseCompiler) nativeCoverage() bool { } func (compiler *baseCompiler) install(ctx ModuleContext) { - path := ctx.RustModule().outputFile - if compiler.strippedOutputFile.Valid() { - path = compiler.strippedOutputFile - } + path := ctx.RustModule().OutputFile() compiler.path = ctx.InstallFile(compiler.installDir(ctx), path.Path().Base(), path.Path()) } |