Merge "Finish cc.Customizer"
diff --git a/android/variable.go b/android/variable.go
index b0639ae..d2dc5b9 100644
--- a/android/variable.go
+++ b/android/variable.go
@@ -58,6 +58,10 @@
 		Schedboost struct {
 			Cflags []string
 		}
+
+		Binder32bit struct {
+			Cflags []string
+		}
 	} `android:"arch_variant"`
 }
 
@@ -96,6 +100,7 @@
 	HostStaticBinaries         *bool `json:",omitempty"`
 	Cpusets                    *bool `json:",omitempty"`
 	Schedboost                 *bool `json:",omitempty"`
+	Binder32bit                *bool `json:",omitempty"`
 
 	SanitizeHost   *[]string `json:",omitempty"`
 	SanitizeDevice *[]string `json:",omitempty"`
diff --git a/cc/arm64_device.go b/cc/arm64_device.go
index 583da44..1dc0ecd 100644
--- a/cc/arm64_device.go
+++ b/cc/arm64_device.go
@@ -94,8 +94,6 @@
 	pctx.SourcePathVariable("arm64GccRoot",
 		"prebuilts/gcc/${HostPrebuiltTag}/aarch64/aarch64-linux-android-${arm64GccVersion}")
 
-	pctx.StaticVariable("arm64GccTriple", "aarch64-linux-android")
-
 	pctx.StaticVariable("arm64Cflags", strings.Join(arm64Cflags, " "))
 	pctx.StaticVariable("arm64Ldflags", strings.Join(arm64Ldflags, " "))
 	pctx.StaticVariable("arm64Cppflags", strings.Join(arm64Cppflags, " "))
@@ -139,7 +137,7 @@
 }
 
 func (t *toolchainArm64) GccTriple() string {
-	return "${arm64GccTriple}"
+	return "aarch64-linux-android"
 }
 
 func (t *toolchainArm64) GccVersion() string {
@@ -167,7 +165,7 @@
 }
 
 func (t *toolchainArm64) ClangTriple() string {
-	return "${arm64GccTriple}"
+	return t.GccTriple()
 }
 
 func (t *toolchainArm64) ClangCflags() string {
diff --git a/cc/arm_device.go b/cc/arm_device.go
index ddda33c..a6c1911 100644
--- a/cc/arm_device.go
+++ b/cc/arm_device.go
@@ -161,8 +161,6 @@
 	pctx.SourcePathVariable("armGccRoot",
 		"prebuilts/gcc/${HostPrebuiltTag}/arm/arm-linux-androideabi-${armGccVersion}")
 
-	pctx.StaticVariable("armGccTriple", "arm-linux-androideabi")
-
 	pctx.StaticVariable("armToolchainCflags", strings.Join(armToolchainCflags, " "))
 	pctx.StaticVariable("armCflags", strings.Join(armCflags, " "))
 	pctx.StaticVariable("armLdflags", strings.Join(armLdflags, " "))
@@ -269,7 +267,7 @@
 }
 
 func (t *toolchainArm) GccTriple() string {
-	return "${armGccTriple}"
+	return "arm-linux-androideabi"
 }
 
 func (t *toolchainArm) GccVersion() string {
@@ -308,7 +306,7 @@
 }
 
 func (t *toolchainArm) ClangTriple() string {
-	return "${armGccTriple}"
+	return t.GccTriple()
 }
 
 func (t *toolchainArm) ToolchainClangCflags() string {
diff --git a/cc/builder.go b/cc/builder.go
index 0787847..5988140 100644
--- a/cc/builder.go
+++ b/cc/builder.go
@@ -50,14 +50,14 @@
 
 	ld = pctx.StaticRule("ld",
 		blueprint.RuleParams{
-			Command: "$ldCmd ${ldDirFlags} ${crtBegin} @${out}.rsp " +
+			Command: "$ldCmd ${crtBegin} @${out}.rsp " +
 				"${libFlags} ${crtEnd} -o ${out} ${ldFlags}",
 			CommandDeps:    []string{"$ldCmd"},
 			Description:    "ld $out",
 			Rspfile:        "${out}.rsp",
 			RspfileContent: "${in}",
 		},
-		"ldCmd", "ldDirFlags", "crtBegin", "libFlags", "crtEnd", "ldFlags")
+		"ldCmd", "crtBegin", "libFlags", "crtEnd", "ldFlags")
 
 	partialLd = pctx.StaticRule("partialLd",
 		blueprint.RuleParams{
@@ -350,7 +350,6 @@
 		ldCmd = gccCmd(flags.toolchain, "g++")
 	}
 
-	var ldDirs []string
 	var libFlagsList []string
 
 	if len(flags.libFlags) > 0 {
@@ -378,7 +377,7 @@
 	}
 
 	for _, lib := range sharedLibs {
-		dir, file := filepath.Split(lib.String())
+		file := filepath.Base(lib.String())
 		if !strings.HasPrefix(file, "lib") {
 			panic("shared library " + lib.String() + " does not start with lib")
 		}
@@ -386,7 +385,6 @@
 			panic("shared library " + lib.String() + " does not end with " + flags.toolchain.ShlibSuffix())
 		}
 		libFlagsList = append(libFlagsList, lib.String())
-		ldDirs = append(ldDirs, dir)
 	}
 
 	deps = append(deps, sharedLibs...)
@@ -403,12 +401,11 @@
 		Inputs:    objFiles,
 		Implicits: deps,
 		Args: map[string]string{
-			"ldCmd":      ldCmd,
-			"ldDirFlags": ldDirsToFlags(ldDirs),
-			"crtBegin":   crtBegin.String(),
-			"libFlags":   strings.Join(libFlagsList, " "),
-			"ldFlags":    flags.ldFlags,
-			"crtEnd":     crtEnd.String(),
+			"ldCmd":    ldCmd,
+			"crtBegin": crtBegin.String(),
+			"libFlags": strings.Join(libFlagsList, " "),
+			"ldFlags":  flags.ldFlags,
+			"crtEnd":   crtEnd.String(),
 		},
 	})
 }
diff --git a/cc/mips64_device.go b/cc/mips64_device.go
index a1ec3a2..51b605c 100644
--- a/cc/mips64_device.go
+++ b/cc/mips64_device.go
@@ -95,15 +95,12 @@
 	pctx.SourcePathVariable("mips64GccRoot",
 		"prebuilts/gcc/${HostPrebuiltTag}/mips/mips64el-linux-android-${mips64GccVersion}")
 
-	pctx.StaticVariable("mips64GccTriple", "mips64el-linux-android")
-
 	pctx.StaticVariable("mips64Cflags", strings.Join(mips64Cflags, " "))
 	pctx.StaticVariable("mips64Ldflags", strings.Join(mips64Ldflags, " "))
 	pctx.StaticVariable("mips64Cppflags", strings.Join(mips64Cppflags, " "))
 	pctx.StaticVariable("mips64IncludeFlags", bionicHeaders("mips64", "mips"))
 
 	// Clang cflags
-	pctx.StaticVariable("mips64ClangTriple", "mips64el-linux-android")
 	pctx.StaticVariable("mips64ClangCflags", strings.Join(clangFilterUnknownCflags(mips64Cflags), " "))
 	pctx.StaticVariable("mips64ClangLdflags", strings.Join(clangFilterUnknownCflags(mips64Ldflags), " "))
 	pctx.StaticVariable("mips64ClangCppflags", strings.Join(clangFilterUnknownCflags(mips64Cppflags), " "))
@@ -133,7 +130,7 @@
 }
 
 func (t *toolchainMips64) GccTriple() string {
-	return "${mips64GccTriple}"
+	return "mips64el-linux-android"
 }
 
 func (t *toolchainMips64) GccVersion() string {
@@ -161,7 +158,7 @@
 }
 
 func (t *toolchainMips64) ClangTriple() string {
-	return "${mips64ClangTriple}"
+	return t.GccTriple()
 }
 
 func (t *toolchainMips64) ToolchainClangCflags() string {
diff --git a/cc/mips_device.go b/cc/mips_device.go
index 0b23d37..583a153 100644
--- a/cc/mips_device.go
+++ b/cc/mips_device.go
@@ -131,8 +131,6 @@
 	pctx.SourcePathVariable("mipsGccRoot",
 		"prebuilts/gcc/${HostPrebuiltTag}/mips/mips64el-linux-android-${mipsGccVersion}")
 
-	pctx.StaticVariable("mipsGccTriple", "mips64el-linux-android")
-
 	pctx.StaticVariable("mipsToolchainLdflags", strings.Join(mipsToolchainLdflags, " "))
 	pctx.StaticVariable("mipsCflags", strings.Join(mipsCflags, " "))
 	pctx.StaticVariable("mipsLdflags", strings.Join(mipsLdflags, " "))
@@ -140,7 +138,6 @@
 	pctx.StaticVariable("mipsIncludeFlags", bionicHeaders("mips", "mips"))
 
 	// Clang cflags
-	pctx.StaticVariable("mipsClangTriple", "mipsel-linux-android")
 	pctx.StaticVariable("mipsClangCflags", strings.Join(clangFilterUnknownCflags(mipsClangCflags), " "))
 	pctx.StaticVariable("mipsClangLdflags", strings.Join(clangFilterUnknownCflags(mipsLdflags), " "))
 	pctx.StaticVariable("mipsClangCppflags", strings.Join(clangFilterUnknownCflags(mipsCppflags), " "))
@@ -170,7 +167,7 @@
 }
 
 func (t *toolchainMips) GccTriple() string {
-	return "${mipsGccTriple}"
+	return "mips64el-linux-android"
 }
 
 func (t *toolchainMips) GccVersion() string {
@@ -202,7 +199,7 @@
 }
 
 func (t *toolchainMips) ClangTriple() string {
-	return "${mipsClangTriple}"
+	return "mipsel-linux-android"
 }
 
 func (t *toolchainMips) ToolchainClangLdflags() string {
diff --git a/cc/toolchain.go b/cc/toolchain.go
index 89485f8..0cb7c9c 100644
--- a/cc/toolchain.go
+++ b/cc/toolchain.go
@@ -146,8 +146,7 @@
 		"-isystem bionic/libc/arch-" + bionicArch + "/include",
 		"-isystem bionic/libc/include",
 		"-isystem bionic/libc/kernel/uapi",
-		"-isystem bionic/libc/kernel/android/uapi",
-		"-isystem bionic/libc/kernel/common",
 		"-isystem bionic/libc/kernel/uapi/asm-" + kernelArch,
+		"-isystem bionic/libc/kernel/android/uapi",
 	}, " ")
 }
diff --git a/cc/x86_64_device.go b/cc/x86_64_device.go
index 6923f5f..2747cf0 100644
--- a/cc/x86_64_device.go
+++ b/cc/x86_64_device.go
@@ -140,8 +140,6 @@
 	pctx.SourcePathVariable("x86_64GccRoot",
 		"prebuilts/gcc/${HostPrebuiltTag}/x86/x86_64-linux-android-${x86_64GccVersion}")
 
-	pctx.StaticVariable("x86_64GccTriple", "x86_64-linux-android")
-
 	pctx.StaticVariable("x86_64ToolchainCflags", "-m64")
 	pctx.StaticVariable("x86_64ToolchainLdflags", "-m64")
 
@@ -179,7 +177,7 @@
 }
 
 func (t *toolchainX86_64) GccTriple() string {
-	return "${x86_64GccTriple}"
+	return "x86_64-linux-android"
 }
 
 func (t *toolchainX86_64) GccVersion() string {
@@ -211,7 +209,7 @@
 }
 
 func (t *toolchainX86_64) ClangTriple() string {
-	return "${x86_64GccTriple}"
+	return t.GccTriple()
 }
 
 func (t *toolchainX86_64) ToolchainClangLdflags() string {
diff --git a/cc/x86_device.go b/cc/x86_device.go
index ba2f23a..550aca0 100644
--- a/cc/x86_device.go
+++ b/cc/x86_device.go
@@ -159,8 +159,6 @@
 	pctx.SourcePathVariable("x86GccRoot",
 		"prebuilts/gcc/${HostPrebuiltTag}/x86/x86_64-linux-android-${x86GccVersion}")
 
-	pctx.StaticVariable("x86GccTriple", "x86_64-linux-android")
-
 	pctx.StaticVariable("x86ToolchainCflags", "-m32")
 	pctx.StaticVariable("x86ToolchainLdflags", "-m32")
 
@@ -198,7 +196,7 @@
 }
 
 func (t *toolchainX86) GccTriple() string {
-	return "${x86GccTriple}"
+	return "x86_64-linux-android"
 }
 
 func (t *toolchainX86) GccVersion() string {
diff --git a/root.bp b/root.bp
index b3d1674..0a8c0c3 100644
--- a/root.bp
+++ b/root.bp
@@ -15,6 +15,7 @@
     "frameworks/native/libs/*",
     "hardware/*",
     "libcore",
+    "libnativehelper",
     "packages/apps/HTMLViewer",
     "prebuilts/ndk",
     "prebuilts/sdk",