diff --git a/rust/builder.go b/rust/builder.go index 162d1aab0..c855cfbd2 100644 --- a/rust/builder.go +++ b/rust/builder.go @@ -196,7 +196,7 @@ func rustEnvVars(ctx ModuleContext, deps PathDeps) []string { } if len(deps.SrcDeps) > 0 { - moduleGenDir := ctx.RustModule().compiler.CargoOutDir() + moduleGenDir := ctx.RustModule().compiler.cargoOutDir() // We must calculate an absolute path for OUT_DIR since Rust's include! macro (which normally consumes this) // assumes that paths are relative to the source file. var outDirPrefix string @@ -215,13 +215,13 @@ func rustEnvVars(ctx ModuleContext, deps PathDeps) []string { envVars = append(envVars, "ANDROID_RUST_VERSION="+config.GetRustVersion(ctx)) - if ctx.RustModule().compiler.CargoEnvCompat() { + if ctx.RustModule().compiler.cargoEnvCompat() { if bin, ok := ctx.RustModule().compiler.(*binaryDecorator); ok { envVars = append(envVars, "CARGO_BIN_NAME="+bin.getStem(ctx)) } envVars = append(envVars, "CARGO_CRATE_NAME="+ctx.RustModule().CrateName()) envVars = append(envVars, "CARGO_PKG_NAME="+ctx.RustModule().CrateName()) - pkgVersion := ctx.RustModule().compiler.CargoPkgVersion() + pkgVersion := ctx.RustModule().compiler.cargoPkgVersion() if pkgVersion != "" { envVars = append(envVars, "CARGO_PKG_VERSION="+pkgVersion) @@ -327,7 +327,7 @@ func transformSrctoCrate(ctx ModuleContext, main android.Path, deps PathDeps, fl orderOnly = append(orderOnly, deps.SharedLibs...) if len(deps.SrcDeps) > 0 { - moduleGenDir := ctx.RustModule().compiler.CargoOutDir() + moduleGenDir := ctx.RustModule().compiler.cargoOutDir() var outputs android.WritablePaths for _, genSrc := range deps.SrcDeps { diff --git a/rust/compiler.go b/rust/compiler.go index 3c9f6d4a4..9666ce296 100644 --- a/rust/compiler.go +++ b/rust/compiler.go @@ -47,13 +47,13 @@ type compiler interface { // Output directory in which source-generated code from dependencies is // copied. This is equivalent to Cargo's OUT_DIR variable. - CargoOutDir() android.OptionalPath + cargoOutDir() android.OptionalPath - // CargoPkgVersion returns the value of the Cargo_pkg_version property. - CargoPkgVersion() string + // cargoPkgVersion returns the value of the Cargo_pkg_version property. + cargoPkgVersion() string - // CargoEnvCompat returns whether Cargo environment variables should be used. - CargoEnvCompat() bool + // cargoEnvCompat returns whether Cargo environment variables should be used. + cargoEnvCompat() bool inData() bool install(ctx ModuleContext) @@ -242,7 +242,10 @@ type baseCompiler struct { // If a crate has a source-generated dependency, a copy of the source file // will be available in cargoOutDir (equivalent to Cargo OUT_DIR). - cargoOutDir android.ModuleOutPath + // This is stored internally because it may not be available during + // singleton-generation passes like rustdoc/rust_project.json, but should + // be stashed during initial generation. + cachedCargoOutDir android.ModuleOutPath } func (compiler *baseCompiler) Disabled() bool { @@ -393,18 +396,18 @@ func (compiler *baseCompiler) rustdoc(ctx ModuleContext, flags Flags, } func (compiler *baseCompiler) initialize(ctx ModuleContext) { - compiler.cargoOutDir = android.PathForModuleOut(ctx, genSubDir) + compiler.cachedCargoOutDir = android.PathForModuleOut(ctx, genSubDir) } -func (compiler *baseCompiler) CargoOutDir() android.OptionalPath { - return android.OptionalPathForPath(compiler.cargoOutDir) +func (compiler *baseCompiler) cargoOutDir() android.OptionalPath { + return android.OptionalPathForPath(compiler.cachedCargoOutDir) } -func (compiler *baseCompiler) CargoEnvCompat() bool { +func (compiler *baseCompiler) cargoEnvCompat() bool { return Bool(compiler.Properties.Cargo_env_compat) } -func (compiler *baseCompiler) CargoPkgVersion() string { +func (compiler *baseCompiler) cargoPkgVersion() string { return String(compiler.Properties.Cargo_pkg_version) } diff --git a/rust/project_json.go b/rust/project_json.go index 40aa7c736..9a9c600a7 100644 --- a/rust/project_json.go +++ b/rust/project_json.go @@ -241,8 +241,8 @@ func (singleton *projectGeneratorSingleton) addCrate(ctx android.SingletonContex ProcMacro: procMacro, } - if comp.CargoOutDir().Valid() { - crate.Env["OUT_DIR"] = comp.CargoOutDir().String() + if comp.cargoOutDir().Valid() { + crate.Env["OUT_DIR"] = comp.cargoOutDir().String() } for _, feature := range comp.Properties.Features {