rust: Fix absolute path OUT_DIR bug

The OUT_DIR for rustc is incorrectly calculated when Soong's OUT_DIR
is set to an absolute path through OUT_DIR_COMMON_BASE. This breaks
compilation when rustc is unable to find files that have beein included
through the include! macro.

Bug: 172952634
Test: OUT_DIR_COMMON_BASE=/some/abs/path m
Change-Id: Id447630a7774c1dec655f65dd227c144a159e1b1
This commit is contained in:
Ivan Lozano 2020-11-11 10:59:52 -05:00
parent 68ecbaf614
commit 1776a2ac6f
1 changed files with 13 additions and 1 deletions

View File

@ -15,6 +15,7 @@
package rust
import (
"path/filepath"
"strings"
"github.com/google/blueprint"
@ -235,7 +236,18 @@ func transformSrctoCrate(ctx ModuleContext, main android.Path, deps PathDeps, fl
},
})
implicits = append(implicits, outputs.Paths()...)
envVars = append(envVars, "OUT_DIR=$$PWD/"+moduleGenDir.String())
// 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
if !filepath.IsAbs(moduleGenDir.String()) {
// If OUT_DIR is not absolute, we use $$PWD to generate an absolute path (os.Getwd() returns '/')
outDirPrefix = "$$PWD/"
} else {
// If OUT_DIR is absolute, then moduleGenDir will be an absolute path, so we don't need to set this to anything.
outDirPrefix = ""
}
envVars = append(envVars, "OUT_DIR="+filepath.Join(outDirPrefix, moduleGenDir.String()))
}
if flags.Clippy {