Support clang host wrapper.

This change adds support for the clang host wrapper.
The implementation is verified via comparing to the old
clang host wrapper in the golden tests.

BUG=chromium:773875
TEST=unit test

Change-Id: I48284736014ab4b66bfd7e31e88ffd23956007bb
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/third_party/toolchain-utils/+/1708750
Tested-by: Tobias Bosch <tbosch@google.com>
Reviewed-by: George Burgess <gbiv@chromium.org>
diff --git a/compiler_wrapper/compiler_wrapper.go b/compiler_wrapper/compiler_wrapper.go
index 5545dc6..b2172c6 100644
--- a/compiler_wrapper/compiler_wrapper.go
+++ b/compiler_wrapper/compiler_wrapper.go
@@ -108,7 +108,10 @@
 }
 
 func prepareClangCommand(builder *commandBuilder) (sysroot string, err error) {
-	sysroot = processSysrootFlag(builder)
+	sysroot = ""
+	if !builder.cfg.isHostWrapper {
+		sysroot = processSysrootFlag(builder)
+	}
 	builder.addPreUserArgs(builder.cfg.clangFlags...)
 	calcCommonPreUserArgs(builder)
 	if err := processClangFlags(builder); err != nil {
@@ -138,27 +141,32 @@
 
 func calcCommonPreUserArgs(builder *commandBuilder) {
 	builder.addPreUserArgs(builder.cfg.commonFlags...)
-	processPieFlags(builder)
-	processStackProtectorFlags(builder)
-	processThumbCodeFlags(builder)
-	processX86Flags(builder)
+	if !builder.cfg.isHostWrapper {
+		processPieFlags(builder)
+		processStackProtectorFlags(builder)
+		processThumbCodeFlags(builder)
+		processX86Flags(builder)
+	}
 	processSanitizerFlags(builder)
 }
 
 func processGomaCCacheFlags(sysroot string, allowCCache bool, builder *commandBuilder) {
-	gomaccUsed := processGomaCccFlags(builder)
+	gomaccUsed := false
+	if !builder.cfg.isHostWrapper {
+		gomaccUsed = processGomaCccFlags(builder)
+	}
 	if !gomaccUsed && allowCCache {
 		processCCacheFlag(sysroot, builder)
 	}
 }
 
-func getAbsWrapperDir(env env, wrapperCmd *command) (string, error) {
+func getAbsWrapperPath(env env, wrapperCmd *command) (string, error) {
 	wrapperPath := getAbsCmdPath(env, wrapperCmd)
 	evaledCmdPath, err := filepath.EvalSymlinks(wrapperPath)
 	if err != nil {
 		return "", wrapErrorwithSourceLocf(err, "failed to evaluate symlinks for %s", wrapperPath)
 	}
-	return filepath.Dir(evaledCmdPath), nil
+	return evaledCmdPath, nil
 }
 
 func printCompilerError(writer io.Writer, compilerErr error) {