Use SRCDIR as a working directory

The existing behavior of using the build directory as the working
directory is useful if you want to move/copy the output directory around
and SRCDIR still refers the the source. But, it's more useful to have
the source directory be the working directory. Tools like cpp(__FILE__)
and other debug prints embed relative paths from the working directory.
We also have tools that expect the working directory to be $TOP.

Change-Id: Ia0f1d3c6b7df72d61cf5628efa2baa98bd19775b
diff --git a/cc/arm64_device.go b/cc/arm64_device.go
index 887e1a4..b818ce4 100644
--- a/cc/arm64_device.go
+++ b/cc/arm64_device.go
@@ -61,7 +61,7 @@
 	pctx.StaticVariable("arm64GccVersion", "4.9")
 
 	pctx.StaticVariable("arm64GccRoot",
-		"${SrcDir}/prebuilts/gcc/${HostPrebuiltTag}/aarch64/aarch64-linux-android-${arm64GccVersion}")
+		"prebuilts/gcc/${HostPrebuiltTag}/aarch64/aarch64-linux-android-${arm64GccVersion}")
 
 	pctx.StaticVariable("arm64GccTriple", "aarch64-linux-android")
 
diff --git a/cc/arm_device.go b/cc/arm_device.go
index 58553b2..15f0913 100644
--- a/cc/arm_device.go
+++ b/cc/arm_device.go
@@ -135,7 +135,7 @@
 	pctx.StaticVariable("armGccVersion", "4.9")
 
 	pctx.StaticVariable("armGccRoot",
-		"${SrcDir}/prebuilts/gcc/${HostPrebuiltTag}/arm/arm-linux-androideabi-${armGccVersion}")
+		"prebuilts/gcc/${HostPrebuiltTag}/arm/arm-linux-androideabi-${armGccVersion}")
 
 	pctx.StaticVariable("armGccTriple", "arm-linux-androideabi")
 
diff --git a/cc/builder.go b/cc/builder.go
index d6d1a02..9c9bddd 100644
--- a/cc/builder.go
+++ b/cc/builder.go
@@ -140,12 +140,14 @@
 
 	for i, srcFile := range srcFiles {
 		var objFile string
-		if strings.HasPrefix(srcFile, srcRoot) {
-			objFile = strings.TrimPrefix(srcFile, srcRoot)
-			objFile = filepath.Join(objDir, objFile)
-		} else if strings.HasPrefix(srcFile, intermediatesRoot) {
+		if strings.HasPrefix(srcFile, intermediatesRoot) {
 			objFile = strings.TrimPrefix(srcFile, intermediatesRoot)
 			objFile = filepath.Join(objDir, "gen", objFile)
+		} else if strings.HasPrefix(srcFile, srcRoot) {
+			srcFile, _ = filepath.Rel(srcRoot, srcFile)
+			objFile = filepath.Join(objDir, srcFile)
+		} else if srcRoot == "." && srcFile[0] != '/' {
+			objFile = filepath.Join(objDir, srcFile)
 		} else {
 			ctx.ModuleErrorf("source file %q is not in source directory %q", srcFile, srcRoot)
 			continue
diff --git a/cc/cc.go b/cc/cc.go
index 398a065..34a1a56 100644
--- a/cc/cc.go
+++ b/cc/cc.go
@@ -64,8 +64,8 @@
 	HostPrebuiltTag = pctx.VariableConfigMethod("HostPrebuiltTag", common.Config.PrebuiltOS)
 	SrcDir          = pctx.VariableConfigMethod("SrcDir", common.Config.SrcDir)
 
-	LibcRoot = pctx.StaticVariable("LibcRoot", "${SrcDir}/bionic/libc")
-	LibmRoot = pctx.StaticVariable("LibmRoot", "${SrcDir}/bionic/libm")
+	LibcRoot = pctx.StaticVariable("LibcRoot", "bionic/libc")
+	LibmRoot = pctx.StaticVariable("LibmRoot", "bionic/libm")
 )
 
 // Flags used by lots of devices.  Putting them in package static variables will save bytes in