diff --git a/android/makevars.go b/android/makevars.go
index d9c5c6d..149f2f8 100644
--- a/android/makevars.go
+++ b/android/makevars.go
@@ -44,6 +44,17 @@
 	// string.
 	StrictSorted(name, ninjaStr string)
 	CheckSorted(name, ninjaStr string)
+
+	// Evaluates a ninja string and returns the result. Used if more
+	// complicated modification needs to happen before giving it to Make.
+	Eval(ninjaStr string) (string, error)
+
+	// These are equivalent to Strict and Check, but do not attempt to
+	// evaluate the values before writing them to the Makefile. They can
+	// be used when all ninja variables have already been evaluated through
+	// Eval().
+	StrictRaw(name, value string)
+	CheckRaw(name, value string)
 }
 
 type MakeVarsProvider func(ctx MakeVarsContext)
@@ -146,7 +157,7 @@
 # $(3): Extra snippet to run if it does not match
 define soong-compare-var
 ifneq ($$($(1)),)
-  my_val_make := $(if $(2),$$(sort $$($(1))),$$($(1)))
+  my_val_make := $$(strip $(if $(2),$$(sort $$($(1))),$$($(1))))
   my_val_soong := $(if $(2),$$(sort $$(SOONG_$(1))),$$(SOONG_$(1)))
   ifneq ($$(my_val_make),$$(my_val_soong))
     $$(warning $(1) does not match between Make and Soong:)
@@ -214,11 +225,11 @@
 	return c.config
 }
 
-func (c *makeVarsContext) addVariable(name, ninjaStr string, strict, sort bool) {
-	value, err := c.ctx.Eval(c.pctx, ninjaStr)
-	if err != nil {
-		c.ctx.Errorf(err.Error())
-	}
+func (c *makeVarsContext) Eval(ninjaStr string) (string, error) {
+	return c.ctx.Eval(c.pctx, ninjaStr)
+}
+
+func (c *makeVarsContext) addVariableRaw(name, value string, strict, sort bool) {
 	c.vars = append(c.vars, makeVarsVariable{
 		name:   name,
 		value:  value,
@@ -227,12 +238,23 @@
 	})
 }
 
+func (c *makeVarsContext) addVariable(name, ninjaStr string, strict, sort bool) {
+	value, err := c.Eval(ninjaStr)
+	if err != nil {
+		c.ctx.Errorf(err.Error())
+	}
+	c.addVariableRaw(name, value, strict, sort)
+}
+
 func (c *makeVarsContext) Strict(name, ninjaStr string) {
 	c.addVariable(name, ninjaStr, true, false)
 }
 func (c *makeVarsContext) StrictSorted(name, ninjaStr string) {
 	c.addVariable(name, ninjaStr, true, true)
 }
+func (c *makeVarsContext) StrictRaw(name, value string) {
+	c.addVariableRaw(name, value, true, false)
+}
 
 func (c *makeVarsContext) Check(name, ninjaStr string) {
 	c.addVariable(name, ninjaStr, false, false)
@@ -240,3 +262,6 @@
 func (c *makeVarsContext) CheckSorted(name, ninjaStr string) {
 	c.addVariable(name, ninjaStr, false, true)
 }
+func (c *makeVarsContext) CheckRaw(name, value string) {
+	c.addVariableRaw(name, value, false, false)
+}
diff --git a/cc/makevars.go b/cc/makevars.go
index cdc8bcc..d33d7b7 100644
--- a/cc/makevars.go
+++ b/cc/makevars.go
@@ -98,6 +98,22 @@
 		toolchain.ToolchainLdflags(),
 		productExtraLdflags,
 	}, " "))
+	ctx.Strict(makePrefix+"SYSTEMCPP_CPPFLAGS", toolchain.SystemCppCppflags())
+	ctx.Strict(makePrefix+"SYSTEMCPP_LDFLAGS", toolchain.SystemCppLdflags())
+
+	includeFlags, err := ctx.Eval(toolchain.IncludeFlags())
+	if err != nil { panic(err) }
+	ctx.StrictRaw(makePrefix+"C_INCLUDES", strings.Replace(includeFlags, "-isystem ", "", -1))
+
+	if arch.ArchType == android.Arm {
+		flags, err := toolchain.InstructionSetFlags("arm")
+		if err != nil { panic(err) }
+		ctx.Strict(makePrefix+"arm_CFLAGS", flags)
+
+		flags, err = toolchain.InstructionSetFlags("thumb")
+		if err != nil { panic(err) }
+		ctx.Strict(makePrefix+"thumb_CFLAGS", flags)
+	}
 
 	if toolchain.ClangSupported() {
 		clangPrefix := secondPrefix + "CLANG_" + typePrefix
@@ -125,6 +141,14 @@
 			productExtraLdflags,
 			clangExtras,
 		}, " "))
+
+		if hod.Device() {
+			ctx.Strict(secondPrefix + "ADDRESS_SANITIZER_RUNTIME_LIBRARY", strings.TrimSuffix(toolchain.AddressSanitizerRuntimeLibrary(), ".so"))
+		}
+
+		// This is used by external/gentoo/...
+		ctx.Strict("CLANG_CONFIG_" + arch.ArchType.Name + "_" + typePrefix + "TRIPLE",
+			toolchain.ClangTriple())
 	}
 
 	ctx.Strict(makePrefix+"CC", gccCmd(toolchain, "gcc"))
@@ -146,7 +170,11 @@
 		ctx.Strict(makePrefix+"OBJCOPY", gccCmd(toolchain, "objcopy"))
 		ctx.Strict(makePrefix+"LD", gccCmd(toolchain, "ld"))
 		ctx.Strict(makePrefix+"STRIP", gccCmd(toolchain, "strip"))
+		ctx.Strict(makePrefix+"GCC_VERSION", toolchain.GccVersion())
+		ctx.Strict(makePrefix+"NDK_GCC_VERSION", toolchain.GccVersion())
 	}
 
 	ctx.Strict(makePrefix+"TOOLS_PREFIX", gccCmd(toolchain, ""))
+	ctx.Strict(makePrefix+"SHLIB_SUFFIX", toolchain.ShlibSuffix())
+	ctx.Strict(makePrefix+"EXECUTABLE_SUFFIX", toolchain.ExecutableSuffix())
 }
