diff --git a/android/androidmk.go b/android/androidmk.go
index dabefcc..6197f59 100644
--- a/android/androidmk.go
+++ b/android/androidmk.go
@@ -61,8 +61,6 @@
 		return
 	}
 
-	ctx.SetNinjaBuildDir(pctx, filepath.Join(config.buildDir, ".."))
-
 	var androidMkModulesList []Module
 
 	ctx.VisitAllModules(func(module blueprint.Module) {
diff --git a/android/defs.go b/android/defs.go
index a7ba219..ec8dcf9 100644
--- a/android/defs.go
+++ b/android/defs.go
@@ -47,7 +47,7 @@
 	// A copy rule.
 	Cp = pctx.AndroidStaticRule("Cp",
 		blueprint.RuleParams{
-			Command:     "cp $cpPreserveSymlinks $cpFlags $in $out",
+			Command:     "rm -f $out && cp $cpPreserveSymlinks $cpFlags $in $out",
 			Description: "cp $out",
 		},
 		"cpFlags")
diff --git a/bootstrap.bash b/bootstrap.bash
index e48f480..dbc6eb2 100755
--- a/bootstrap.bash
+++ b/bootstrap.bash
@@ -17,25 +17,21 @@
 fi
 export SRCDIR="."
 export BOOTSTRAP="${SRCDIR}/bootstrap.bash"
+export BLUEPRINTDIR="${SRCDIR}/build/blueprint"
 
 export TOPNAME="Android.bp"
-export BOOTSTRAP_MANIFEST="${SRCDIR}/build/soong/build.ninja.in"
 export RUN_TESTS="-t"
 
 case $(uname) in
     Linux)
-	export GOOS="linux"
 	export PREBUILTOS="linux-x86"
 	;;
     Darwin)
-	export GOOS="darwin"
 	export PREBUILTOS="darwin-x86"
 	;;
     *) echo "unknown OS:" $(uname) && exit 1;;
 esac
-export GOROOT="${SRCDIR}/prebuilts/go/$PREBUILTOS/"
-export GOARCH="amd64"
-export GOCHAR="6"
+export GOROOT="${SRCDIR}/prebuilts/go/$PREBUILTOS"
 
 if [[ $# -eq 0 ]]; then
     mkdir -p $BUILDDIR
diff --git a/build.ninja.in b/build.ninja.in
deleted file mode 100644
index 27f1db0..0000000
--- a/build.ninja.in
+++ /dev/null
@@ -1,626 +0,0 @@
-# ******************************************************************************
-# ***            This file is generated and should not be edited             ***
-# ******************************************************************************
-#
-# This file contains variables, rules, and pools with name prefixes indicating
-# they were generated by the following Go packages:
-#
-#     bootstrap [from Go package github.com/google/blueprint/bootstrap]
-#
-ninja_required_version = 1.7.0
-
-g.bootstrap.buildDir = @@BuildDir@@
-
-g.bootstrap.BinDir = ${g.bootstrap.buildDir}/.bootstrap/bin
-
-g.bootstrap.bootstrapCmd = @@Bootstrap@@
-
-g.bootstrap.compileCmd = @@GoCompile@@
-
-g.bootstrap.goRoot = @@GoRoot@@
-
-g.bootstrap.goTestMainCmd = ${g.bootstrap.buildDir}/.bootstrap/bin/gotestmain
-
-g.bootstrap.goTestRunnerCmd = ${g.bootstrap.buildDir}/.bootstrap/bin/gotestrunner
-
-g.bootstrap.linkCmd = @@GoLink@@
-
-g.bootstrap.srcDir = @@SrcDir@@
-
-builddir = ${g.bootstrap.buildDir}/.minibootstrap
-
-rule g.bootstrap.bootstrap
-    command = BUILDDIR=${g.bootstrap.buildDir} ${g.bootstrap.bootstrapCmd} -i ${in}
-    description = bootstrap ${in}
-    generator = true
-
-rule g.bootstrap.build.ninja
-    command = ${builder} ${extra} -b ${g.bootstrap.buildDir} -d ${out}.d -o ${out} ${in}
-    depfile = ${out}.d
-    description = ${builder} ${out}
-    restat = true
-
-rule g.bootstrap.compile
-    command = GOROOT='${g.bootstrap.goRoot}' ${g.bootstrap.compileCmd} -o ${out} -p ${pkgPath} -complete ${incFlags} -pack ${in}
-    description = compile ${out}
-
-rule g.bootstrap.cp
-    command = cp ${in} ${out}
-    description = cp ${out}
-
-rule g.bootstrap.gotestmain
-    command = ${g.bootstrap.goTestMainCmd} -o ${out} -pkg ${pkg} ${in}
-    description = gotestmain ${out}
-
-rule g.bootstrap.link
-    command = GOROOT='${g.bootstrap.goRoot}' ${g.bootstrap.linkCmd} -o ${out} ${libDirFlags} ${in}
-    description = link ${out}
-
-rule g.bootstrap.test
-    command = ${g.bootstrap.goTestRunnerCmd} -p ${pkgSrcDir} -f ${out} -- ${in} -test.short
-    description = test ${pkg}
-
-# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
-# Module:  blueprint
-# Variant:
-# Type:    bootstrap_go_package
-# Factory: github.com/google/blueprint/bootstrap.newGoPackageModuleFactory.func1
-# Defined: build/blueprint/Blueprints:1:1
-
-build $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint/test/github.com/google/blueprint.a $
-        : g.bootstrap.compile ${g.bootstrap.srcDir}/build/blueprint/context.go $
-        ${g.bootstrap.srcDir}/build/blueprint/glob.go $
-        ${g.bootstrap.srcDir}/build/blueprint/live_tracker.go $
-        ${g.bootstrap.srcDir}/build/blueprint/mangle.go $
-        ${g.bootstrap.srcDir}/build/blueprint/module_ctx.go $
-        ${g.bootstrap.srcDir}/build/blueprint/ninja_defs.go $
-        ${g.bootstrap.srcDir}/build/blueprint/ninja_strings.go $
-        ${g.bootstrap.srcDir}/build/blueprint/ninja_writer.go $
-        ${g.bootstrap.srcDir}/build/blueprint/package_ctx.go $
-        ${g.bootstrap.srcDir}/build/blueprint/scope.go $
-        ${g.bootstrap.srcDir}/build/blueprint/singleton_ctx.go $
-        ${g.bootstrap.srcDir}/build/blueprint/unpack.go $
-        ${g.bootstrap.srcDir}/build/blueprint/context_test.go $
-        ${g.bootstrap.srcDir}/build/blueprint/ninja_strings_test.go $
-        ${g.bootstrap.srcDir}/build/blueprint/ninja_writer_test.go $
-        ${g.bootstrap.srcDir}/build/blueprint/splice_modules_test.go $
-        ${g.bootstrap.srcDir}/build/blueprint/unpack_test.go $
-        ${g.bootstrap.srcDir}/build/blueprint/visit_test.go | $
-        ${g.bootstrap.compileCmd} $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint-parser/pkg/github.com/google/blueprint/parser.a $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint-deptools/pkg/github.com/google/blueprint/deptools.a $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint-pathtools/pkg/github.com/google/blueprint/pathtools.a $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint-proptools/pkg/github.com/google/blueprint/proptools.a
-    incFlags = -I ${g.bootstrap.buildDir}/.bootstrap/blueprint-parser/pkg -I ${g.bootstrap.buildDir}/.bootstrap/blueprint-deptools/pkg -I ${g.bootstrap.buildDir}/.bootstrap/blueprint-pathtools/pkg -I ${g.bootstrap.buildDir}/.bootstrap/blueprint-proptools/pkg
-    pkgPath = github.com/google/blueprint
-default $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint/test/github.com/google/blueprint.a
-
-build ${g.bootstrap.buildDir}/.bootstrap/blueprint/test/test.go: $
-        g.bootstrap.gotestmain $
-        ${g.bootstrap.srcDir}/build/blueprint/context_test.go $
-        ${g.bootstrap.srcDir}/build/blueprint/ninja_strings_test.go $
-        ${g.bootstrap.srcDir}/build/blueprint/ninja_writer_test.go $
-        ${g.bootstrap.srcDir}/build/blueprint/splice_modules_test.go $
-        ${g.bootstrap.srcDir}/build/blueprint/unpack_test.go $
-        ${g.bootstrap.srcDir}/build/blueprint/visit_test.go | $
-        ${g.bootstrap.goTestMainCmd}
-    pkg = github.com/google/blueprint
-default ${g.bootstrap.buildDir}/.bootstrap/blueprint/test/test.go
-
-build ${g.bootstrap.buildDir}/.bootstrap/blueprint/test/test.a: $
-        g.bootstrap.compile $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint/test/test.go | $
-        ${g.bootstrap.compileCmd} $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint/test/github.com/google/blueprint.a
-    incFlags = -I ${g.bootstrap.buildDir}/.bootstrap/blueprint/test
-    pkgPath = main
-default ${g.bootstrap.buildDir}/.bootstrap/blueprint/test/test.a
-
-build ${g.bootstrap.buildDir}/.bootstrap/blueprint/test/test: g.bootstrap.link $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint/test/test.a | $
-        ${g.bootstrap.linkCmd}
-    libDirFlags = -L ${g.bootstrap.buildDir}/.bootstrap/blueprint/test -L ${g.bootstrap.buildDir}/.bootstrap/blueprint-parser/pkg -L ${g.bootstrap.buildDir}/.bootstrap/blueprint-deptools/pkg -L ${g.bootstrap.buildDir}/.bootstrap/blueprint-pathtools/pkg -L ${g.bootstrap.buildDir}/.bootstrap/blueprint-proptools/pkg
-default ${g.bootstrap.buildDir}/.bootstrap/blueprint/test/test
-
-build ${g.bootstrap.buildDir}/.bootstrap/blueprint/test/test.passed: $
-        g.bootstrap.test $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint/test/test | $
-        ${g.bootstrap.goTestRunnerCmd} || $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint-parser/test/test.passed $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint-pathtools/test/test.passed $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint-proptools/test/test.passed
-    pkg = github.com/google/blueprint
-    pkgSrcDir = ${g.bootstrap.srcDir}/build/blueprint
-default ${g.bootstrap.buildDir}/.bootstrap/blueprint/test/test.passed
-
-build $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint/pkg/github.com/google/blueprint.a $
-        : g.bootstrap.compile ${g.bootstrap.srcDir}/build/blueprint/context.go $
-        ${g.bootstrap.srcDir}/build/blueprint/glob.go $
-        ${g.bootstrap.srcDir}/build/blueprint/live_tracker.go $
-        ${g.bootstrap.srcDir}/build/blueprint/mangle.go $
-        ${g.bootstrap.srcDir}/build/blueprint/module_ctx.go $
-        ${g.bootstrap.srcDir}/build/blueprint/ninja_defs.go $
-        ${g.bootstrap.srcDir}/build/blueprint/ninja_strings.go $
-        ${g.bootstrap.srcDir}/build/blueprint/ninja_writer.go $
-        ${g.bootstrap.srcDir}/build/blueprint/package_ctx.go $
-        ${g.bootstrap.srcDir}/build/blueprint/scope.go $
-        ${g.bootstrap.srcDir}/build/blueprint/singleton_ctx.go $
-        ${g.bootstrap.srcDir}/build/blueprint/unpack.go | $
-        ${g.bootstrap.compileCmd} $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint-parser/pkg/github.com/google/blueprint/parser.a $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint-deptools/pkg/github.com/google/blueprint/deptools.a $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint-pathtools/pkg/github.com/google/blueprint/pathtools.a $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint-proptools/pkg/github.com/google/blueprint/proptools.a
-    incFlags = -I ${g.bootstrap.buildDir}/.bootstrap/blueprint-parser/pkg -I ${g.bootstrap.buildDir}/.bootstrap/blueprint-deptools/pkg -I ${g.bootstrap.buildDir}/.bootstrap/blueprint-pathtools/pkg -I ${g.bootstrap.buildDir}/.bootstrap/blueprint-proptools/pkg
-    pkgPath = github.com/google/blueprint
-default $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint/pkg/github.com/google/blueprint.a
-
-# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
-# Module:  blueprint-bootstrap
-# Variant:
-# Type:    bootstrap_go_package
-# Factory: github.com/google/blueprint/bootstrap.newGoPackageModuleFactory.func1
-# Defined: build/blueprint/Blueprints:89:1
-
-build $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint-bootstrap/pkg/github.com/google/blueprint/bootstrap.a $
-        : g.bootstrap.compile $
-        ${g.bootstrap.srcDir}/build/blueprint/bootstrap/bootstrap.go $
-        ${g.bootstrap.srcDir}/build/blueprint/bootstrap/cleanup.go $
-        ${g.bootstrap.srcDir}/build/blueprint/bootstrap/command.go $
-        ${g.bootstrap.srcDir}/build/blueprint/bootstrap/config.go $
-        ${g.bootstrap.srcDir}/build/blueprint/bootstrap/doc.go $
-        ${g.bootstrap.srcDir}/build/blueprint/bootstrap/glob.go $
-        ${g.bootstrap.srcDir}/build/blueprint/bootstrap/writedocs.go | $
-        ${g.bootstrap.compileCmd} $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint-parser/pkg/github.com/google/blueprint/parser.a $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint-deptools/pkg/github.com/google/blueprint/deptools.a $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint-pathtools/pkg/github.com/google/blueprint/pathtools.a $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint-proptools/pkg/github.com/google/blueprint/proptools.a $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint/pkg/github.com/google/blueprint.a $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint-bootstrap-bpdoc/pkg/github.com/google/blueprint/bootstrap/bpdoc.a
-    incFlags = -I ${g.bootstrap.buildDir}/.bootstrap/blueprint-parser/pkg -I ${g.bootstrap.buildDir}/.bootstrap/blueprint-deptools/pkg -I ${g.bootstrap.buildDir}/.bootstrap/blueprint-pathtools/pkg -I ${g.bootstrap.buildDir}/.bootstrap/blueprint-proptools/pkg -I ${g.bootstrap.buildDir}/.bootstrap/blueprint/pkg -I ${g.bootstrap.buildDir}/.bootstrap/blueprint-bootstrap-bpdoc/pkg
-    pkgPath = github.com/google/blueprint/bootstrap
-default $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint-bootstrap/pkg/github.com/google/blueprint/bootstrap.a
-
-# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
-# Module:  blueprint-bootstrap-bpdoc
-# Variant:
-# Type:    bootstrap_go_package
-# Factory: github.com/google/blueprint/bootstrap.newGoPackageModuleFactory.func1
-# Defined: build/blueprint/Blueprints:109:1
-
-build $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint-bootstrap-bpdoc/pkg/github.com/google/blueprint/bootstrap/bpdoc.a $
-        : g.bootstrap.compile $
-        ${g.bootstrap.srcDir}/build/blueprint/bootstrap/bpdoc/bpdoc.go | $
-        ${g.bootstrap.compileCmd} $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint-parser/pkg/github.com/google/blueprint/parser.a $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint-deptools/pkg/github.com/google/blueprint/deptools.a $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint-pathtools/pkg/github.com/google/blueprint/pathtools.a $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint-proptools/pkg/github.com/google/blueprint/proptools.a $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint/pkg/github.com/google/blueprint.a
-    incFlags = -I ${g.bootstrap.buildDir}/.bootstrap/blueprint-parser/pkg -I ${g.bootstrap.buildDir}/.bootstrap/blueprint-deptools/pkg -I ${g.bootstrap.buildDir}/.bootstrap/blueprint-pathtools/pkg -I ${g.bootstrap.buildDir}/.bootstrap/blueprint-proptools/pkg -I ${g.bootstrap.buildDir}/.bootstrap/blueprint/pkg
-    pkgPath = github.com/google/blueprint/bootstrap/bpdoc
-default $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint-bootstrap-bpdoc/pkg/github.com/google/blueprint/bootstrap/bpdoc.a
-
-# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
-# Module:  blueprint-deptools
-# Variant:
-# Type:    bootstrap_go_package
-# Factory: github.com/google/blueprint/bootstrap.newGoPackageModuleFactory.func1
-# Defined: build/blueprint/Blueprints:49:1
-
-build $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint-deptools/pkg/github.com/google/blueprint/deptools.a $
-        : g.bootstrap.compile $
-        ${g.bootstrap.srcDir}/build/blueprint/deptools/depfile.go | $
-        ${g.bootstrap.compileCmd}
-    pkgPath = github.com/google/blueprint/deptools
-default $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint-deptools/pkg/github.com/google/blueprint/deptools.a
-
-# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
-# Module:  blueprint-parser
-# Variant:
-# Type:    bootstrap_go_package
-# Factory: github.com/google/blueprint/bootstrap.newGoPackageModuleFactory.func1
-# Defined: build/blueprint/Blueprints:33:1
-
-build $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint-parser/test/github.com/google/blueprint/parser.a $
-        : g.bootstrap.compile $
-        ${g.bootstrap.srcDir}/build/blueprint/parser/ast.go $
-        ${g.bootstrap.srcDir}/build/blueprint/parser/modify.go $
-        ${g.bootstrap.srcDir}/build/blueprint/parser/parser.go $
-        ${g.bootstrap.srcDir}/build/blueprint/parser/printer.go $
-        ${g.bootstrap.srcDir}/build/blueprint/parser/sort.go $
-        ${g.bootstrap.srcDir}/build/blueprint/parser/parser_test.go $
-        ${g.bootstrap.srcDir}/build/blueprint/parser/printer_test.go | $
-        ${g.bootstrap.compileCmd}
-    pkgPath = github.com/google/blueprint/parser
-default $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint-parser/test/github.com/google/blueprint/parser.a
-
-build ${g.bootstrap.buildDir}/.bootstrap/blueprint-parser/test/test.go: $
-        g.bootstrap.gotestmain $
-        ${g.bootstrap.srcDir}/build/blueprint/parser/parser_test.go $
-        ${g.bootstrap.srcDir}/build/blueprint/parser/printer_test.go | $
-        ${g.bootstrap.goTestMainCmd}
-    pkg = github.com/google/blueprint/parser
-default ${g.bootstrap.buildDir}/.bootstrap/blueprint-parser/test/test.go
-
-build ${g.bootstrap.buildDir}/.bootstrap/blueprint-parser/test/test.a: $
-        g.bootstrap.compile $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint-parser/test/test.go | $
-        ${g.bootstrap.compileCmd} $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint-parser/test/github.com/google/blueprint/parser.a
-    incFlags = -I ${g.bootstrap.buildDir}/.bootstrap/blueprint-parser/test
-    pkgPath = main
-default ${g.bootstrap.buildDir}/.bootstrap/blueprint-parser/test/test.a
-
-build ${g.bootstrap.buildDir}/.bootstrap/blueprint-parser/test/test: $
-        g.bootstrap.link $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint-parser/test/test.a | $
-        ${g.bootstrap.linkCmd}
-    libDirFlags = -L ${g.bootstrap.buildDir}/.bootstrap/blueprint-parser/test
-default ${g.bootstrap.buildDir}/.bootstrap/blueprint-parser/test/test
-
-build ${g.bootstrap.buildDir}/.bootstrap/blueprint-parser/test/test.passed: $
-        g.bootstrap.test $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint-parser/test/test | $
-        ${g.bootstrap.goTestRunnerCmd}
-    pkg = github.com/google/blueprint/parser
-    pkgSrcDir = ${g.bootstrap.srcDir}/build/blueprint/parser
-default ${g.bootstrap.buildDir}/.bootstrap/blueprint-parser/test/test.passed
-
-build $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint-parser/pkg/github.com/google/blueprint/parser.a $
-        : g.bootstrap.compile $
-        ${g.bootstrap.srcDir}/build/blueprint/parser/ast.go $
-        ${g.bootstrap.srcDir}/build/blueprint/parser/modify.go $
-        ${g.bootstrap.srcDir}/build/blueprint/parser/parser.go $
-        ${g.bootstrap.srcDir}/build/blueprint/parser/printer.go $
-        ${g.bootstrap.srcDir}/build/blueprint/parser/sort.go | $
-        ${g.bootstrap.compileCmd}
-    pkgPath = github.com/google/blueprint/parser
-default $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint-parser/pkg/github.com/google/blueprint/parser.a
-
-# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
-# Module:  blueprint-pathtools
-# Variant:
-# Type:    bootstrap_go_package
-# Factory: github.com/google/blueprint/bootstrap.newGoPackageModuleFactory.func1
-# Defined: build/blueprint/Blueprints:55:1
-
-build $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint-pathtools/test/github.com/google/blueprint/pathtools.a $
-        : g.bootstrap.compile $
-        ${g.bootstrap.srcDir}/build/blueprint/pathtools/lists.go $
-        ${g.bootstrap.srcDir}/build/blueprint/pathtools/fs.go $
-        ${g.bootstrap.srcDir}/build/blueprint/pathtools/glob.go $
-        ${g.bootstrap.srcDir}/build/blueprint/pathtools/glob_test.go | $
-        ${g.bootstrap.compileCmd} $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint-deptools/pkg/github.com/google/blueprint/deptools.a
-    incFlags = -I ${g.bootstrap.buildDir}/.bootstrap/blueprint-deptools/pkg
-    pkgPath = github.com/google/blueprint/pathtools
-default $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint-pathtools/test/github.com/google/blueprint/pathtools.a
-
-build ${g.bootstrap.buildDir}/.bootstrap/blueprint-pathtools/test/test.go: $
-        g.bootstrap.gotestmain $
-        ${g.bootstrap.srcDir}/build/blueprint/pathtools/glob_test.go | $
-        ${g.bootstrap.goTestMainCmd}
-    pkg = github.com/google/blueprint/pathtools
-default ${g.bootstrap.buildDir}/.bootstrap/blueprint-pathtools/test/test.go
-
-build ${g.bootstrap.buildDir}/.bootstrap/blueprint-pathtools/test/test.a: $
-        g.bootstrap.compile $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint-pathtools/test/test.go | $
-        ${g.bootstrap.compileCmd} $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint-pathtools/test/github.com/google/blueprint/pathtools.a
-    incFlags = -I ${g.bootstrap.buildDir}/.bootstrap/blueprint-pathtools/test
-    pkgPath = main
-default ${g.bootstrap.buildDir}/.bootstrap/blueprint-pathtools/test/test.a
-
-build ${g.bootstrap.buildDir}/.bootstrap/blueprint-pathtools/test/test: $
-        g.bootstrap.link $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint-pathtools/test/test.a | $
-        ${g.bootstrap.linkCmd}
-    libDirFlags = -L ${g.bootstrap.buildDir}/.bootstrap/blueprint-pathtools/test -L ${g.bootstrap.buildDir}/.bootstrap/blueprint-deptools/pkg
-default ${g.bootstrap.buildDir}/.bootstrap/blueprint-pathtools/test/test
-
-build ${g.bootstrap.buildDir}/.bootstrap/blueprint-pathtools/test/test.passed: $
-        g.bootstrap.test $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint-pathtools/test/test | $
-        ${g.bootstrap.goTestRunnerCmd}
-    pkg = github.com/google/blueprint/pathtools
-    pkgSrcDir = ${g.bootstrap.srcDir}/build/blueprint/pathtools
-default $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint-pathtools/test/test.passed
-
-build $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint-pathtools/pkg/github.com/google/blueprint/pathtools.a $
-        : g.bootstrap.compile $
-        ${g.bootstrap.srcDir}/build/blueprint/pathtools/lists.go $
-        ${g.bootstrap.srcDir}/build/blueprint/pathtools/fs.go $
-        ${g.bootstrap.srcDir}/build/blueprint/pathtools/glob.go | $
-        ${g.bootstrap.compileCmd} $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint-deptools/pkg/github.com/google/blueprint/deptools.a
-    incFlags = -I ${g.bootstrap.buildDir}/.bootstrap/blueprint-deptools/pkg
-    pkgPath = github.com/google/blueprint/pathtools
-default $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint-pathtools/pkg/github.com/google/blueprint/pathtools.a
-
-# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
-# Module:  blueprint-proptools
-# Variant:
-# Type:    bootstrap_go_package
-# Factory: github.com/google/blueprint/bootstrap.newGoPackageModuleFactory.func1
-# Defined: build/blueprint/Blueprints:71:1
-
-build $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint-proptools/test/github.com/google/blueprint/proptools.a $
-        : g.bootstrap.compile $
-        ${g.bootstrap.srcDir}/build/blueprint/proptools/clone.go $
-        ${g.bootstrap.srcDir}/build/blueprint/proptools/escape.go $
-        ${g.bootstrap.srcDir}/build/blueprint/proptools/extend.go $
-        ${g.bootstrap.srcDir}/build/blueprint/proptools/proptools.go $
-        ${g.bootstrap.srcDir}/build/blueprint/proptools/typeequal.go $
-        ${g.bootstrap.srcDir}/build/blueprint/proptools/clone_test.go $
-        ${g.bootstrap.srcDir}/build/blueprint/proptools/escape_test.go $
-        ${g.bootstrap.srcDir}/build/blueprint/proptools/extend_test.go $
-        ${g.bootstrap.srcDir}/build/blueprint/proptools/typeequal_test.go | $
-        ${g.bootstrap.compileCmd}
-    pkgPath = github.com/google/blueprint/proptools
-default $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint-proptools/test/github.com/google/blueprint/proptools.a
-
-build ${g.bootstrap.buildDir}/.bootstrap/blueprint-proptools/test/test.go: $
-        g.bootstrap.gotestmain $
-        ${g.bootstrap.srcDir}/build/blueprint/proptools/clone_test.go $
-        ${g.bootstrap.srcDir}/build/blueprint/proptools/escape_test.go $
-        ${g.bootstrap.srcDir}/build/blueprint/proptools/extend_test.go $
-        ${g.bootstrap.srcDir}/build/blueprint/proptools/typeequal_test.go | $
-        ${g.bootstrap.goTestMainCmd}
-    pkg = github.com/google/blueprint/proptools
-default ${g.bootstrap.buildDir}/.bootstrap/blueprint-proptools/test/test.go
-
-build ${g.bootstrap.buildDir}/.bootstrap/blueprint-proptools/test/test.a: $
-        g.bootstrap.compile $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint-proptools/test/test.go | $
-        ${g.bootstrap.compileCmd} $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint-proptools/test/github.com/google/blueprint/proptools.a
-    incFlags = -I ${g.bootstrap.buildDir}/.bootstrap/blueprint-proptools/test
-    pkgPath = main
-default ${g.bootstrap.buildDir}/.bootstrap/blueprint-proptools/test/test.a
-
-build ${g.bootstrap.buildDir}/.bootstrap/blueprint-proptools/test/test: $
-        g.bootstrap.link $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint-proptools/test/test.a | $
-        ${g.bootstrap.linkCmd}
-    libDirFlags = -L ${g.bootstrap.buildDir}/.bootstrap/blueprint-proptools/test
-default ${g.bootstrap.buildDir}/.bootstrap/blueprint-proptools/test/test
-
-build ${g.bootstrap.buildDir}/.bootstrap/blueprint-proptools/test/test.passed: $
-        g.bootstrap.test $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint-proptools/test/test | $
-        ${g.bootstrap.goTestRunnerCmd}
-    pkg = github.com/google/blueprint/proptools
-    pkgSrcDir = ${g.bootstrap.srcDir}/build/blueprint/proptools
-default $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint-proptools/test/test.passed
-
-build $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint-proptools/pkg/github.com/google/blueprint/proptools.a $
-        : g.bootstrap.compile $
-        ${g.bootstrap.srcDir}/build/blueprint/proptools/clone.go $
-        ${g.bootstrap.srcDir}/build/blueprint/proptools/escape.go $
-        ${g.bootstrap.srcDir}/build/blueprint/proptools/extend.go $
-        ${g.bootstrap.srcDir}/build/blueprint/proptools/proptools.go $
-        ${g.bootstrap.srcDir}/build/blueprint/proptools/typeequal.go | $
-        ${g.bootstrap.compileCmd}
-    pkgPath = github.com/google/blueprint/proptools
-default $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint-proptools/pkg/github.com/google/blueprint/proptools.a
-
-# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
-# Module:  bpglob
-# Variant:
-# Type:    bootstrap_core_go_binary
-# Factory: github.com/google/blueprint/bootstrap.newGoBinaryModuleFactory.func1
-# Defined: build/blueprint/Blueprints:131:1
-
-build ${g.bootstrap.buildDir}/.bootstrap/bpglob/obj/bpglob.a: $
-        g.bootstrap.compile $
-        ${g.bootstrap.srcDir}/build/blueprint/bootstrap/bpglob/bpglob.go | $
-        ${g.bootstrap.compileCmd} $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint-deptools/pkg/github.com/google/blueprint/deptools.a $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint-pathtools/pkg/github.com/google/blueprint/pathtools.a
-    incFlags = -I ${g.bootstrap.buildDir}/.bootstrap/blueprint-deptools/pkg -I ${g.bootstrap.buildDir}/.bootstrap/blueprint-pathtools/pkg
-    pkgPath = bpglob
-default ${g.bootstrap.buildDir}/.bootstrap/bpglob/obj/bpglob.a
-
-build ${g.bootstrap.buildDir}/.bootstrap/bpglob/obj/a.out: g.bootstrap.link $
-        ${g.bootstrap.buildDir}/.bootstrap/bpglob/obj/bpglob.a | $
-        ${g.bootstrap.linkCmd}
-    libDirFlags = -L ${g.bootstrap.buildDir}/.bootstrap/blueprint-deptools/pkg -L ${g.bootstrap.buildDir}/.bootstrap/blueprint-pathtools/pkg
-default ${g.bootstrap.buildDir}/.bootstrap/bpglob/obj/a.out
-
-build ${g.bootstrap.BinDir}/bpglob: g.bootstrap.cp $
-        ${g.bootstrap.buildDir}/.bootstrap/bpglob/obj/a.out || $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint-pathtools/test/test.passed
-default ${g.bootstrap.BinDir}/bpglob
-
-# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
-# Module:  gotestmain
-# Variant:
-# Type:    bootstrap_core_go_binary
-# Factory: github.com/google/blueprint/bootstrap.newGoBinaryModuleFactory.func1
-# Defined: build/blueprint/Blueprints:149:1
-
-build ${g.bootstrap.buildDir}/.bootstrap/gotestmain/obj/gotestmain.a: $
-        g.bootstrap.compile $
-        ${g.bootstrap.srcDir}/build/blueprint/gotestmain/gotestmain.go | $
-        ${g.bootstrap.compileCmd}
-    pkgPath = gotestmain
-default ${g.bootstrap.buildDir}/.bootstrap/gotestmain/obj/gotestmain.a
-
-build ${g.bootstrap.buildDir}/.bootstrap/gotestmain/obj/a.out: $
-        g.bootstrap.link $
-        ${g.bootstrap.buildDir}/.bootstrap/gotestmain/obj/gotestmain.a | $
-        ${g.bootstrap.linkCmd}
-default ${g.bootstrap.buildDir}/.bootstrap/gotestmain/obj/a.out
-
-build ${g.bootstrap.BinDir}/gotestmain: g.bootstrap.cp $
-        ${g.bootstrap.buildDir}/.bootstrap/gotestmain/obj/a.out
-default ${g.bootstrap.BinDir}/gotestmain
-
-# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
-# Module:  gotestmain-tests
-# Variant:
-# Type:    bootstrap_go_package
-# Factory: github.com/google/blueprint/bootstrap.newGoPackageModuleFactory.func1
-# Defined: build/blueprint/Blueprints:156:1
-
-build $
-        ${g.bootstrap.buildDir}/.bootstrap/gotestmain-tests/test/github.com/google/blueprint/gotestmain.a $
-        : g.bootstrap.compile $
-        ${g.bootstrap.srcDir}/build/blueprint/gotestmain/dummy.go $
-        ${g.bootstrap.srcDir}/build/blueprint/gotestmain/testmain_test.go | $
-        ${g.bootstrap.compileCmd}
-    pkgPath = github.com/google/blueprint/gotestmain
-default $
-        ${g.bootstrap.buildDir}/.bootstrap/gotestmain-tests/test/github.com/google/blueprint/gotestmain.a
-
-build ${g.bootstrap.buildDir}/.bootstrap/gotestmain-tests/test/test.go: $
-        g.bootstrap.gotestmain $
-        ${g.bootstrap.srcDir}/build/blueprint/gotestmain/testmain_test.go | $
-        ${g.bootstrap.goTestMainCmd}
-    pkg = github.com/google/blueprint/gotestmain
-default ${g.bootstrap.buildDir}/.bootstrap/gotestmain-tests/test/test.go
-
-build ${g.bootstrap.buildDir}/.bootstrap/gotestmain-tests/test/test.a: $
-        g.bootstrap.compile $
-        ${g.bootstrap.buildDir}/.bootstrap/gotestmain-tests/test/test.go | $
-        ${g.bootstrap.compileCmd} $
-        ${g.bootstrap.buildDir}/.bootstrap/gotestmain-tests/test/github.com/google/blueprint/gotestmain.a
-    incFlags = -I ${g.bootstrap.buildDir}/.bootstrap/gotestmain-tests/test
-    pkgPath = main
-default ${g.bootstrap.buildDir}/.bootstrap/gotestmain-tests/test/test.a
-
-build ${g.bootstrap.buildDir}/.bootstrap/gotestmain-tests/test/test: $
-        g.bootstrap.link $
-        ${g.bootstrap.buildDir}/.bootstrap/gotestmain-tests/test/test.a | $
-        ${g.bootstrap.linkCmd}
-    libDirFlags = -L ${g.bootstrap.buildDir}/.bootstrap/gotestmain-tests/test
-default ${g.bootstrap.buildDir}/.bootstrap/gotestmain-tests/test/test
-
-build ${g.bootstrap.buildDir}/.bootstrap/gotestmain-tests/test/test.passed: $
-        g.bootstrap.test $
-        ${g.bootstrap.buildDir}/.bootstrap/gotestmain-tests/test/test | $
-        ${g.bootstrap.goTestRunnerCmd}
-    pkg = github.com/google/blueprint/gotestmain
-    pkgSrcDir = ${g.bootstrap.srcDir}/build/blueprint/gotestmain
-default ${g.bootstrap.buildDir}/.bootstrap/gotestmain-tests/test/test.passed
-
-build $
-        ${g.bootstrap.buildDir}/.bootstrap/gotestmain-tests/pkg/github.com/google/blueprint/gotestmain.a $
-        : g.bootstrap.compile $
-        ${g.bootstrap.srcDir}/build/blueprint/gotestmain/dummy.go | $
-        ${g.bootstrap.compileCmd}
-    pkgPath = github.com/google/blueprint/gotestmain
-default $
-        ${g.bootstrap.buildDir}/.bootstrap/gotestmain-tests/pkg/github.com/google/blueprint/gotestmain.a
-
-# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
-# Module:  gotestrunner
-# Variant:
-# Type:    bootstrap_core_go_binary
-# Factory: github.com/google/blueprint/bootstrap.newGoBinaryModuleFactory.func1
-# Defined: build/blueprint/Blueprints:167:1
-
-build ${g.bootstrap.buildDir}/.bootstrap/gotestrunner/obj/gotestrunner.a: $
-        g.bootstrap.compile $
-        ${g.bootstrap.srcDir}/build/blueprint/gotestrunner/gotestrunner.go | $
-        ${g.bootstrap.compileCmd}
-    pkgPath = gotestrunner
-default ${g.bootstrap.buildDir}/.bootstrap/gotestrunner/obj/gotestrunner.a
-
-build ${g.bootstrap.buildDir}/.bootstrap/gotestrunner/obj/a.out: $
-        g.bootstrap.link $
-        ${g.bootstrap.buildDir}/.bootstrap/gotestrunner/obj/gotestrunner.a | $
-        ${g.bootstrap.linkCmd}
-default ${g.bootstrap.buildDir}/.bootstrap/gotestrunner/obj/a.out
-
-build ${g.bootstrap.BinDir}/gotestrunner: g.bootstrap.cp $
-        ${g.bootstrap.buildDir}/.bootstrap/gotestrunner/obj/a.out
-default ${g.bootstrap.BinDir}/gotestrunner
-
-# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
-# Module:  minibp
-# Variant:
-# Type:    bootstrap_core_go_binary
-# Factory: github.com/google/blueprint/bootstrap.newGoBinaryModuleFactory.func1
-# Defined: build/blueprint/Blueprints:121:1
-
-build ${g.bootstrap.buildDir}/.bootstrap/minibp/obj/minibp.a: $
-        g.bootstrap.compile $
-        ${g.bootstrap.srcDir}/build/blueprint/bootstrap/minibp/main.go | $
-        ${g.bootstrap.compileCmd} $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint-parser/pkg/github.com/google/blueprint/parser.a $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint-deptools/pkg/github.com/google/blueprint/deptools.a $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint-pathtools/pkg/github.com/google/blueprint/pathtools.a $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint-proptools/pkg/github.com/google/blueprint/proptools.a $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint/pkg/github.com/google/blueprint.a $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint-bootstrap-bpdoc/pkg/github.com/google/blueprint/bootstrap/bpdoc.a $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint-bootstrap/pkg/github.com/google/blueprint/bootstrap.a $
-        ${g.bootstrap.buildDir}/.bootstrap/gotestmain-tests/pkg/github.com/google/blueprint/gotestmain.a
-    incFlags = -I ${g.bootstrap.buildDir}/.bootstrap/blueprint-parser/pkg -I ${g.bootstrap.buildDir}/.bootstrap/blueprint-deptools/pkg -I ${g.bootstrap.buildDir}/.bootstrap/blueprint-pathtools/pkg -I ${g.bootstrap.buildDir}/.bootstrap/blueprint-proptools/pkg -I ${g.bootstrap.buildDir}/.bootstrap/blueprint/pkg -I ${g.bootstrap.buildDir}/.bootstrap/blueprint-bootstrap-bpdoc/pkg -I ${g.bootstrap.buildDir}/.bootstrap/blueprint-bootstrap/pkg -I ${g.bootstrap.buildDir}/.bootstrap/gotestmain-tests/pkg
-    pkgPath = minibp
-default ${g.bootstrap.buildDir}/.bootstrap/minibp/obj/minibp.a
-
-build ${g.bootstrap.buildDir}/.bootstrap/minibp/obj/a.out: g.bootstrap.link $
-        ${g.bootstrap.buildDir}/.bootstrap/minibp/obj/minibp.a | $
-        ${g.bootstrap.linkCmd}
-    libDirFlags = -L ${g.bootstrap.buildDir}/.bootstrap/blueprint-parser/pkg -L ${g.bootstrap.buildDir}/.bootstrap/blueprint-deptools/pkg -L ${g.bootstrap.buildDir}/.bootstrap/blueprint-pathtools/pkg -L ${g.bootstrap.buildDir}/.bootstrap/blueprint-proptools/pkg -L ${g.bootstrap.buildDir}/.bootstrap/blueprint/pkg -L ${g.bootstrap.buildDir}/.bootstrap/blueprint-bootstrap-bpdoc/pkg -L ${g.bootstrap.buildDir}/.bootstrap/blueprint-bootstrap/pkg -L ${g.bootstrap.buildDir}/.bootstrap/gotestmain-tests/pkg
-default ${g.bootstrap.buildDir}/.bootstrap/minibp/obj/a.out
-
-build ${g.bootstrap.BinDir}/minibp: g.bootstrap.cp $
-        ${g.bootstrap.buildDir}/.bootstrap/minibp/obj/a.out || $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint-parser/test/test.passed $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint-pathtools/test/test.passed $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint-proptools/test/test.passed $
-        ${g.bootstrap.buildDir}/.bootstrap/blueprint/test/test.passed $
-        ${g.bootstrap.buildDir}/.bootstrap/gotestmain-tests/test/test.passed
-default ${g.bootstrap.BinDir}/minibp
-
-# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
-# Singleton: bootstrap
-# Factory:   github.com/google/blueprint/bootstrap.newSingletonFactory.func1
-
-build ${g.bootstrap.buildDir}/.bootstrap/build.ninja: g.bootstrap.build.ninja $
-        ${g.bootstrap.srcDir}/Android.bp | ${builder}
-    builder = ${g.bootstrap.BinDir}/minibp
-    extra = --build-primary -t
-default ${g.bootstrap.buildDir}/.bootstrap/build.ninja
-
-build ${g.bootstrap.buildDir}/.minibootstrap/build.ninja.in: $
-        g.bootstrap.build.ninja ${g.bootstrap.srcDir}/Android.bp | ${builder}
-    builder = ${g.bootstrap.BinDir}/minibp
-    extra = $ -t
-default ${g.bootstrap.buildDir}/.minibootstrap/build.ninja.in
-
-build ${g.bootstrap.buildDir}/.minibootstrap/build.ninja: $
-        g.bootstrap.bootstrap $
-        ${g.bootstrap.buildDir}/.minibootstrap/build.ninja.in | $
-        ${g.bootstrap.bootstrapCmd}
-default ${g.bootstrap.buildDir}/.minibootstrap/build.ninja
-
diff --git a/build_test.bash b/build_test.bash
index ab841cb..065d7f6 100755
--- a/build_test.bash
+++ b/build_test.bash
@@ -28,7 +28,7 @@
 export TRACE_BEGIN_SOONG=$(date +%s%N)
 
 export TOP=$(cd $(dirname ${BASH_SOURCE[0]})/../..; PWD= /bin/pwd)
-source "${TOP}/build/soong/cmd/microfactory/microfactory.bash"
+source "${TOP}/build/soong/scripts/microfactory.bash"
 
 case $(uname) in
   Linux)
@@ -36,5 +36,5 @@
     ;;
 esac
 
-build_go multiproduct_kati android/soong/cmd/multiproduct_kati
+soong_build_go multiproduct_kati android/soong/cmd/multiproduct_kati
 exec "$(getoutdir)/multiproduct_kati" "$@"
diff --git a/cc/androidmk.go b/cc/androidmk.go
index a92a95c..940e7c7 100644
--- a/cc/androidmk.go
+++ b/cc/androidmk.go
@@ -23,6 +23,10 @@
 	"android/soong/android"
 )
 
+var (
+	vendorSuffix = ".vendor"
+)
+
 type AndroidMkContext interface {
 	Target() android.Target
 	subAndroidMk(*android.AndroidMkData, interface{})
@@ -81,8 +85,10 @@
 	}
 	c.subAndroidMk(&ret, c.installer)
 
-	if c.vndk() {
-		ret.SubName += ".vendor"
+	if c.vndk() && Bool(c.Properties.Vendor_available) {
+		// .vendor suffix is added only when we will have two variants: core and vendor.
+		// The suffix is not added for vendor-only module.
+		ret.SubName += vendorSuffix
 	}
 
 	return ret, nil
diff --git a/cc/cc.go b/cc/cc.go
index 3824a3b..0f754a6 100644
--- a/cc/cc.go
+++ b/cc/cc.go
@@ -720,9 +720,6 @@
 
 	deps := c.deps(ctx)
 
-	c.Properties.AndroidMkSharedLibs = append(c.Properties.AndroidMkSharedLibs, deps.SharedLibs...)
-	c.Properties.AndroidMkSharedLibs = append(c.Properties.AndroidMkSharedLibs, deps.LateSharedLibs...)
-
 	variantNdkLibs := []string{}
 	variantLateNdkLibs := []string{}
 	if ctx.Os() == android.Android {
@@ -1101,6 +1098,26 @@
 			}
 			*depPtr = append(*depPtr, dep.Path())
 		}
+
+		// Export the shared libs to the make world. In doing so, .vendor suffix
+		// is added if the lib has both core and vendor variants and this module
+		// is building against vndk. This is because the vendor variant will be
+		// have .vendor suffix in its name in the make world. However, if the
+		// lib is a vendor-only lib or this lib is not building against vndk,
+		// then the suffix is not added.
+		switch tag {
+		case sharedDepTag, sharedExportDepTag, lateSharedDepTag:
+			libName := strings.TrimSuffix(name, llndkLibrarySuffix)
+			libName = strings.TrimPrefix(libName, "prebuilt_")
+			isLLndk := inList(libName, config.LLndkLibraries())
+			if c.vndk() && (Bool(cc.Properties.Vendor_available) || isLLndk) {
+				libName += vendorSuffix
+			}
+			// Note: the order of libs in this list is not important because
+			// they merely serve as dependencies in the make world and do not
+			// affect this lib itself.
+			c.Properties.AndroidMkSharedLibs = append(c.Properties.AndroidMkSharedLibs, libName)
+		}
 	})
 
 	// Dedup exported flags from dependencies
@@ -1172,6 +1189,7 @@
 		&TidyProperties{},
 		&CoverageProperties{},
 		&SAbiProperties{},
+		&VndkProperties{},
 	)
 
 	android.InitDefaultsModule(module)
diff --git a/cc/compiler.go b/cc/compiler.go
index cec527b..f162878 100644
--- a/cc/compiler.go
+++ b/cc/compiler.go
@@ -365,11 +365,15 @@
 			cStd = compiler.Properties.C_std
 		}
 
-		cppStd := config.CppStdVersion
-		if compiler.Properties.Cpp_std == "experimental" {
+		cppStd := compiler.Properties.Cpp_std
+		switch compiler.Properties.Cpp_std {
+		case "":
+			cppStd = config.CppStdVersion
+		case "experimental":
 			cppStd = config.ExperimentalCppStdVersion
-		} else if compiler.Properties.Cpp_std != "" {
-			cppStd = compiler.Properties.Cpp_std
+		case "c++17", "gnu++17":
+			// Map c++17 and gnu++17 to their 1z equivalents, until 17 is finalized.
+			cppStd = strings.Replace(compiler.Properties.Cpp_std, "17", "1z", 1)
 		}
 
 		if !flags.Clang {
diff --git a/cc/sanitize.go b/cc/sanitize.go
index eccd255..1fcb32c 100644
--- a/cc/sanitize.go
+++ b/cc/sanitize.go
@@ -116,7 +116,8 @@
 type sanitize struct {
 	Properties SanitizeProperties
 
-	runtimeLibrary string
+	runtimeLibrary          string
+	androidMkRuntimeLibrary string
 }
 
 func (sanitize *sanitize) props() []interface{} {
@@ -285,9 +286,6 @@
 
 	if Bool(sanitize.Properties.Sanitize.All_undefined) {
 		sanitizers = append(sanitizers, "undefined")
-		if ctx.Device() {
-			ctx.ModuleErrorf("ubsan is not yet supported on the device")
-		}
 	} else {
 		if Bool(sanitize.Properties.Sanitize.Undefined) {
 			sanitizers = append(sanitizers,
@@ -422,12 +420,18 @@
 		runtimeLibrary = config.UndefinedBehaviorSanitizerRuntimeLibrary(ctx.toolchain())
 	}
 
-	// ASan runtime library must be the first in the link order.
 	if runtimeLibrary != "" {
+		// ASan runtime library must be the first in the link order.
 		flags.libFlags = append([]string{
 			"${config.ClangAsanLibDir}/" + runtimeLibrary + ctx.toolchain().ShlibSuffix(),
 		}, flags.libFlags...)
 		sanitize.runtimeLibrary = runtimeLibrary
+
+		// When linking against VNDK, use the vendor variant of the runtime lib
+		sanitize.androidMkRuntimeLibrary = sanitize.runtimeLibrary
+		if ctx.vndk() {
+			sanitize.androidMkRuntimeLibrary = sanitize.runtimeLibrary + vendorSuffix
+		}
 	}
 
 	blacklist := android.OptionalPathForModuleSrc(ctx, sanitize.Properties.Sanitize.Blacklist)
@@ -441,8 +445,8 @@
 
 func (sanitize *sanitize) AndroidMk(ctx AndroidMkContext, ret *android.AndroidMkData) {
 	ret.Extra = append(ret.Extra, func(w io.Writer, outputFile android.Path) error {
-		if sanitize.runtimeLibrary != "" {
-			fmt.Fprintln(w, "LOCAL_SHARED_LIBRARIES += "+sanitize.runtimeLibrary)
+		if sanitize.androidMkRuntimeLibrary != "" {
+			fmt.Fprintln(w, "LOCAL_SHARED_LIBRARIES += "+sanitize.androidMkRuntimeLibrary)
 		}
 
 		return nil
diff --git a/cmd/microfactory/Android.bp b/cmd/microfactory/Android.bp
deleted file mode 100644
index a457f43..0000000
--- a/cmd/microfactory/Android.bp
+++ /dev/null
@@ -1,23 +0,0 @@
-// Copyright 2017 Google Inc. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-blueprint_go_binary {
-    name: "microfactory",
-    srcs: [
-        "microfactory.go",
-    ],
-    testSrcs: [
-        "microfactory_test.go",
-    ],
-}
diff --git a/cmd/microfactory/microfactory.go b/cmd/microfactory/microfactory.go
deleted file mode 100644
index 0f621f2..0000000
--- a/cmd/microfactory/microfactory.go
+++ /dev/null
@@ -1,615 +0,0 @@
-// Copyright 2017 Google Inc. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-// Microfactory is a tool to incrementally compile a go program. It's similar
-// to `go install`, but doesn't require a GOPATH. A package->path mapping can
-// be specified as command line options:
-//
-//   -pkg-path android/soong=build/soong
-//   -pkg-path github.com/google/blueprint=build/blueprint
-//
-// The paths can be relative to the current working directory, or an absolute
-// path. Both packages and paths are compared with full directory names, so the
-// android/soong-test package wouldn't be mapped in the above case.
-//
-// Microfactory will ignore *_test.go files, and limits *_darwin.go and
-// *_linux.go files to MacOS and Linux respectively. It does not support build
-// tags or any other suffixes.
-//
-// Builds are incremental by package. All input files are hashed, and if the
-// hash of an input or dependency changes, the package is rebuilt.
-//
-// It also exposes the -trimpath option from go's compiler so that embedded
-// path names (such as in log.Llongfile) are relative paths instead of absolute
-// paths.
-//
-// If you don't have a previously built version of Microfactory, when used with
-// -s <microfactory_src_dir> -b <microfactory_bin_file>, Microfactory can
-// rebuild itself as necessary. Combined with a shell script like soong_ui.bash
-// that uses `go run` to run Microfactory for the first time, go programs can be
-// quickly bootstrapped entirely from source (and a standard go distribution).
-package main
-
-import (
-	"bytes"
-	"crypto/sha1"
-	"flag"
-	"fmt"
-	"go/ast"
-	"go/parser"
-	"go/token"
-	"io"
-	"io/ioutil"
-	"os"
-	"os/exec"
-	"path/filepath"
-	"runtime"
-	"sort"
-	"strconv"
-	"strings"
-	"sync"
-	"syscall"
-	"time"
-)
-
-var (
-	race    = false
-	verbose = false
-
-	goToolDir = filepath.Join(runtime.GOROOT(), "pkg", "tool", runtime.GOOS+"_"+runtime.GOARCH)
-	goVersion = findGoVersion()
-)
-
-func findGoVersion() string {
-	if version, err := ioutil.ReadFile(filepath.Join(runtime.GOROOT(), "VERSION")); err == nil {
-		return string(version)
-	}
-
-	cmd := exec.Command(filepath.Join(runtime.GOROOT(), "bin", "go"), "version")
-	if version, err := cmd.Output(); err == nil {
-		return string(version)
-	} else {
-		panic(fmt.Sprintf("Unable to discover go version: %v", err))
-	}
-}
-
-type GoPackage struct {
-	Name string
-
-	// Inputs
-	directDeps []*GoPackage // specified directly by the module
-	allDeps    []*GoPackage // direct dependencies and transitive dependencies
-	files      []string
-
-	// Outputs
-	pkgDir     string
-	output     string
-	hashResult []byte
-
-	// Status
-	mutex    sync.Mutex
-	compiled bool
-	failed   error
-	rebuilt  bool
-}
-
-// LinkedHashMap<string, GoPackage>
-type linkedDepSet struct {
-	packageSet  map[string](*GoPackage)
-	packageList []*GoPackage
-}
-
-func newDepSet() *linkedDepSet {
-	return &linkedDepSet{packageSet: make(map[string]*GoPackage)}
-}
-func (s *linkedDepSet) tryGetByName(name string) (*GoPackage, bool) {
-	pkg, contained := s.packageSet[name]
-	return pkg, contained
-}
-func (s *linkedDepSet) getByName(name string) *GoPackage {
-	pkg, _ := s.tryGetByName(name)
-	return pkg
-}
-func (s *linkedDepSet) add(name string, goPackage *GoPackage) {
-	s.packageSet[name] = goPackage
-	s.packageList = append(s.packageList, goPackage)
-}
-func (s *linkedDepSet) ignore(name string) {
-	s.packageSet[name] = nil
-}
-
-// FindDeps searches all applicable go files in `path`, parses all of them
-// for import dependencies that exist in pkgMap, then recursively does the
-// same for all of those dependencies.
-func (p *GoPackage) FindDeps(path string, pkgMap *pkgPathMapping) error {
-	defer un(trace("findDeps"))
-
-	depSet := newDepSet()
-	err := p.findDeps(path, pkgMap, depSet)
-	if err != nil {
-		return err
-	}
-	p.allDeps = depSet.packageList
-	return nil
-}
-
-// findDeps is the recursive version of FindDeps. allPackages is the map of
-// all locally defined packages so that the same dependency of two different
-// packages is only resolved once.
-func (p *GoPackage) findDeps(path string, pkgMap *pkgPathMapping, allPackages *linkedDepSet) error {
-	// If this ever becomes too slow, we can look at reading the files once instead of twice
-	// But that just complicates things today, and we're already really fast.
-	foundPkgs, err := parser.ParseDir(token.NewFileSet(), path, func(fi os.FileInfo) bool {
-		name := fi.Name()
-		if fi.IsDir() || strings.HasSuffix(name, "_test.go") || name[0] == '.' || name[0] == '_' {
-			return false
-		}
-		if runtime.GOOS != "darwin" && strings.HasSuffix(name, "_darwin.go") {
-			return false
-		}
-		if runtime.GOOS != "linux" && strings.HasSuffix(name, "_linux.go") {
-			return false
-		}
-		return true
-	}, parser.ImportsOnly)
-	if err != nil {
-		return fmt.Errorf("Error parsing directory %q: %v", path, err)
-	}
-
-	var foundPkg *ast.Package
-	// foundPkgs is a map[string]*ast.Package, but we only want one package
-	if len(foundPkgs) != 1 {
-		return fmt.Errorf("Expected one package in %q, got %d", path, len(foundPkgs))
-	}
-	// Extract the first (and only) entry from the map.
-	for _, pkg := range foundPkgs {
-		foundPkg = pkg
-	}
-
-	var deps []string
-	localDeps := make(map[string]bool)
-
-	for filename, astFile := range foundPkg.Files {
-		p.files = append(p.files, filename)
-
-		for _, importSpec := range astFile.Imports {
-			name, err := strconv.Unquote(importSpec.Path.Value)
-			if err != nil {
-				return fmt.Errorf("%s: invalid quoted string: <%s> %v", filename, importSpec.Path.Value, err)
-			}
-
-			if pkg, ok := allPackages.tryGetByName(name); ok {
-				if pkg != nil {
-					if _, ok := localDeps[name]; !ok {
-						deps = append(deps, name)
-						localDeps[name] = true
-					}
-				}
-				continue
-			}
-
-			var pkgPath string
-			if path, ok, err := pkgMap.Path(name); err != nil {
-				return err
-			} else if !ok {
-				// Probably in the stdlib, but if not, then the compiler will fail with a reasonable error message
-				// Mark it as such so that we don't try to decode its path again.
-				allPackages.ignore(name)
-				continue
-			} else {
-				pkgPath = path
-			}
-
-			pkg := &GoPackage{
-				Name: name,
-			}
-			deps = append(deps, name)
-			allPackages.add(name, pkg)
-			localDeps[name] = true
-
-			if err := pkg.findDeps(pkgPath, pkgMap, allPackages); err != nil {
-				return err
-			}
-		}
-	}
-
-	sort.Strings(p.files)
-
-	if verbose {
-		fmt.Fprintf(os.Stderr, "Package %q depends on %v\n", p.Name, deps)
-	}
-
-	sort.Strings(deps)
-	for _, dep := range deps {
-		p.directDeps = append(p.directDeps, allPackages.getByName(dep))
-	}
-
-	return nil
-}
-
-func (p *GoPackage) Compile(outDir, trimPath string) error {
-	p.mutex.Lock()
-	defer p.mutex.Unlock()
-	if p.compiled {
-		return p.failed
-	}
-	p.compiled = true
-
-	// Build all dependencies in parallel, then fail if any of them failed.
-	var wg sync.WaitGroup
-	for _, dep := range p.directDeps {
-		wg.Add(1)
-		go func(dep *GoPackage) {
-			defer wg.Done()
-			dep.Compile(outDir, trimPath)
-		}(dep)
-	}
-	wg.Wait()
-	for _, dep := range p.directDeps {
-		if dep.failed != nil {
-			p.failed = dep.failed
-			return p.failed
-		}
-	}
-
-	endTrace := trace("check compile %s", p.Name)
-
-	p.pkgDir = filepath.Join(outDir, p.Name)
-	p.output = filepath.Join(p.pkgDir, p.Name) + ".a"
-	shaFile := p.output + ".hash"
-
-	hash := sha1.New()
-	fmt.Fprintln(hash, runtime.GOOS, runtime.GOARCH, goVersion)
-
-	cmd := exec.Command(filepath.Join(goToolDir, "compile"),
-		"-o", p.output,
-		"-p", p.Name,
-		"-complete", "-pack", "-nolocalimports")
-	if race {
-		cmd.Args = append(cmd.Args, "-race")
-		fmt.Fprintln(hash, "-race")
-	}
-	if trimPath != "" {
-		cmd.Args = append(cmd.Args, "-trimpath", trimPath)
-		fmt.Fprintln(hash, trimPath)
-	}
-	for _, dep := range p.directDeps {
-		cmd.Args = append(cmd.Args, "-I", dep.pkgDir)
-		hash.Write(dep.hashResult)
-	}
-	for _, filename := range p.files {
-		cmd.Args = append(cmd.Args, filename)
-		fmt.Fprintln(hash, filename)
-
-		// Hash the contents of the input files
-		f, err := os.Open(filename)
-		if err != nil {
-			f.Close()
-			err = fmt.Errorf("%s: %v", filename, err)
-			p.failed = err
-			return err
-		}
-		_, err = io.Copy(hash, f)
-		if err != nil {
-			f.Close()
-			err = fmt.Errorf("%s: %v", filename, err)
-			p.failed = err
-			return err
-		}
-		f.Close()
-	}
-	p.hashResult = hash.Sum(nil)
-
-	var rebuild bool
-	if _, err := os.Stat(p.output); err != nil {
-		rebuild = true
-	}
-	if !rebuild {
-		if oldSha, err := ioutil.ReadFile(shaFile); err == nil {
-			rebuild = !bytes.Equal(oldSha, p.hashResult)
-		} else {
-			rebuild = true
-		}
-	}
-
-	endTrace()
-	if !rebuild {
-		return nil
-	}
-	defer un(trace("compile %s", p.Name))
-
-	err := os.RemoveAll(p.pkgDir)
-	if err != nil {
-		err = fmt.Errorf("%s: %v", p.Name, err)
-		p.failed = err
-		return err
-	}
-
-	err = os.MkdirAll(filepath.Dir(p.output), 0777)
-	if err != nil {
-		err = fmt.Errorf("%s: %v", p.Name, err)
-		p.failed = err
-		return err
-	}
-
-	cmd.Stdin = nil
-	cmd.Stdout = os.Stdout
-	cmd.Stderr = os.Stderr
-	if verbose {
-		fmt.Fprintln(os.Stderr, cmd.Args)
-	}
-	err = cmd.Run()
-	if err != nil {
-		err = fmt.Errorf("%s: %v", p.Name, err)
-		p.failed = err
-		return err
-	}
-
-	err = ioutil.WriteFile(shaFile, p.hashResult, 0666)
-	if err != nil {
-		err = fmt.Errorf("%s: %v", p.Name, err)
-		p.failed = err
-		return err
-	}
-
-	p.rebuilt = true
-
-	return nil
-}
-
-func (p *GoPackage) Link(out string) error {
-	if p.Name != "main" {
-		return fmt.Errorf("Can only link main package")
-	}
-	endTrace := trace("check link %s", p.Name)
-
-	shaFile := filepath.Join(filepath.Dir(out), "."+filepath.Base(out)+"_hash")
-
-	if !p.rebuilt {
-		if _, err := os.Stat(out); err != nil {
-			p.rebuilt = true
-		} else if oldSha, err := ioutil.ReadFile(shaFile); err != nil {
-			p.rebuilt = true
-		} else {
-			p.rebuilt = !bytes.Equal(oldSha, p.hashResult)
-		}
-	}
-	endTrace()
-	if !p.rebuilt {
-		return nil
-	}
-	defer un(trace("link %s", p.Name))
-
-	err := os.Remove(shaFile)
-	if err != nil && !os.IsNotExist(err) {
-		return err
-	}
-	err = os.Remove(out)
-	if err != nil && !os.IsNotExist(err) {
-		return err
-	}
-
-	cmd := exec.Command(filepath.Join(goToolDir, "link"), "-o", out)
-	if race {
-		cmd.Args = append(cmd.Args, "-race")
-	}
-	for _, dep := range p.allDeps {
-		cmd.Args = append(cmd.Args, "-L", dep.pkgDir)
-	}
-	cmd.Args = append(cmd.Args, p.output)
-	cmd.Stdin = nil
-	cmd.Stdout = os.Stdout
-	cmd.Stderr = os.Stderr
-	if verbose {
-		fmt.Fprintln(os.Stderr, cmd.Args)
-	}
-	err = cmd.Run()
-	if err != nil {
-		return fmt.Errorf("command %s failed with error %v", cmd.Args, err)
-	}
-
-	return ioutil.WriteFile(shaFile, p.hashResult, 0666)
-}
-
-// rebuildMicrofactory checks to see if microfactory itself needs to be rebuilt,
-// and if does, it will launch a new copy and return true. Otherwise it will return
-// false to continue executing.
-func rebuildMicrofactory(mybin, mysrc string, pkgMap *pkgPathMapping) bool {
-	intermediates := filepath.Join(filepath.Dir(mybin), "."+filepath.Base(mybin)+"_intermediates")
-
-	err := os.MkdirAll(intermediates, 0777)
-	if err != nil {
-		fmt.Fprintln(os.Stderr, "Failed to create intermediates directory: %v", err)
-		os.Exit(1)
-	}
-
-	pkg := &GoPackage{
-		Name: "main",
-	}
-
-	if err := pkg.FindDeps(mysrc, pkgMap); err != nil {
-		fmt.Fprintln(os.Stderr, err)
-		os.Exit(1)
-	}
-
-	if err := pkg.Compile(intermediates, mysrc); err != nil {
-		fmt.Fprintln(os.Stderr, err)
-		os.Exit(1)
-	}
-
-	if err := pkg.Link(mybin); err != nil {
-		fmt.Fprintln(os.Stderr, err)
-		os.Exit(1)
-	}
-
-	if !pkg.rebuilt {
-		return false
-	}
-
-	cmd := exec.Command(mybin, os.Args[1:]...)
-	cmd.Stdin = os.Stdin
-	cmd.Stdout = os.Stdout
-	cmd.Stderr = os.Stderr
-	if err := cmd.Run(); err == nil {
-		return true
-	} else if e, ok := err.(*exec.ExitError); ok {
-		os.Exit(e.ProcessState.Sys().(syscall.WaitStatus).ExitStatus())
-	}
-	os.Exit(1)
-	return true
-}
-
-var traceFile *os.File
-
-func trace(format string, a ...interface{}) func() {
-	if traceFile == nil {
-		return func() {}
-	}
-	s := strings.TrimSpace(fmt.Sprintf(format, a...))
-	fmt.Fprintf(traceFile, "%d B %s\n", time.Now().UnixNano()/1000, s)
-	return func() {
-		fmt.Fprintf(traceFile, "%d E %s\n", time.Now().UnixNano()/1000, s)
-	}
-}
-
-func un(f func()) {
-	f()
-}
-
-func main() {
-	var output, mysrc, mybin, trimPath string
-	var pkgMap pkgPathMapping
-
-	flags := flag.NewFlagSet("", flag.ExitOnError)
-	flags.BoolVar(&race, "race", false, "enable data race detection.")
-	flags.BoolVar(&verbose, "v", false, "Verbose")
-	flags.StringVar(&output, "o", "", "Output file")
-	flags.StringVar(&mysrc, "s", "", "Microfactory source directory (for rebuilding microfactory if necessary)")
-	flags.StringVar(&mybin, "b", "", "Microfactory binary location")
-	flags.StringVar(&trimPath, "trimpath", "", "remove prefix from recorded source file paths")
-	flags.Var(&pkgMap, "pkg-path", "Mapping of package prefixes to file paths")
-	err := flags.Parse(os.Args[1:])
-
-	if err == flag.ErrHelp || flags.NArg() != 1 || output == "" {
-		fmt.Fprintln(os.Stderr, "Usage:", os.Args[0], "-o out/binary <main-package>")
-		flags.PrintDefaults()
-		os.Exit(1)
-	}
-
-	tracePath := filepath.Join(filepath.Dir(output), "."+filepath.Base(output)+".trace")
-	traceFile, err = os.OpenFile(tracePath, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
-	if err != nil {
-		traceFile = nil
-	}
-	if executable, err := os.Executable(); err == nil {
-		defer un(trace("microfactory %s", executable))
-	} else {
-		defer un(trace("microfactory <unknown>"))
-	}
-
-	if mybin != "" && mysrc != "" {
-		if rebuildMicrofactory(mybin, mysrc, &pkgMap) {
-			return
-		}
-	}
-
-	mainPackage := &GoPackage{
-		Name: "main",
-	}
-
-	if path, ok, err := pkgMap.Path(flags.Arg(0)); err != nil {
-		fmt.Fprintln(os.Stderr, "Error finding main path:", err)
-		os.Exit(1)
-	} else if !ok {
-		fmt.Fprintln(os.Stderr, "Cannot find path for", flags.Arg(0))
-	} else {
-		if err := mainPackage.FindDeps(path, &pkgMap); err != nil {
-			fmt.Fprintln(os.Stderr, err)
-			os.Exit(1)
-		}
-	}
-
-	intermediates := filepath.Join(filepath.Dir(output), "."+filepath.Base(output)+"_intermediates")
-
-	err = os.MkdirAll(intermediates, 0777)
-	if err != nil {
-		fmt.Fprintln(os.Stderr, "Failed to create intermediates directory: %ve", err)
-		os.Exit(1)
-	}
-
-	err = mainPackage.Compile(intermediates, trimPath)
-	if err != nil {
-		fmt.Fprintln(os.Stderr, "Failed to compile:", err)
-		os.Exit(1)
-	}
-
-	err = mainPackage.Link(output)
-	if err != nil {
-		fmt.Fprintln(os.Stderr, "microfactory.go failed to link:", err)
-		os.Exit(1)
-	}
-}
-
-// pkgPathMapping can be used with flag.Var to parse -pkg-path arguments of
-// <package-prefix>=<path-prefix> mappings.
-type pkgPathMapping struct {
-	pkgs []string
-
-	paths map[string]string
-}
-
-func (pkgPathMapping) String() string {
-	return "<package-prefix>=<path-prefix>"
-}
-
-func (p *pkgPathMapping) Set(value string) error {
-	equalPos := strings.Index(value, "=")
-	if equalPos == -1 {
-		return fmt.Errorf("Argument must be in the form of: %q", p.String())
-	}
-
-	pkgPrefix := strings.TrimSuffix(value[:equalPos], "/")
-	pathPrefix := strings.TrimSuffix(value[equalPos+1:], "/")
-
-	if p.paths == nil {
-		p.paths = make(map[string]string)
-	}
-	if _, ok := p.paths[pkgPrefix]; ok {
-		return fmt.Errorf("Duplicate package prefix: %q", pkgPrefix)
-	}
-
-	p.pkgs = append(p.pkgs, pkgPrefix)
-	p.paths[pkgPrefix] = pathPrefix
-
-	return nil
-}
-
-// Path takes a package name, applies the path mappings and returns the resulting path.
-//
-// If the package isn't mapped, we'll return false to prevent compilation attempts.
-func (p *pkgPathMapping) Path(pkg string) (string, bool, error) {
-	if p.paths == nil {
-		return "", false, fmt.Errorf("No package mappings")
-	}
-
-	for _, pkgPrefix := range p.pkgs {
-		if pkg == pkgPrefix {
-			return p.paths[pkgPrefix], true, nil
-		} else if strings.HasPrefix(pkg, pkgPrefix+"/") {
-			return filepath.Join(p.paths[pkgPrefix], strings.TrimPrefix(pkg, pkgPrefix+"/")), true, nil
-		}
-	}
-
-	return "", false, nil
-}
diff --git a/cmd/microfactory/microfactory_test.go b/cmd/microfactory/microfactory_test.go
deleted file mode 100644
index 8c02bcf..0000000
--- a/cmd/microfactory/microfactory_test.go
+++ /dev/null
@@ -1,422 +0,0 @@
-// Copyright 2017 Google Inc. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package main
-
-import (
-	"flag"
-	"io/ioutil"
-	"os"
-	"path/filepath"
-	"reflect"
-	"runtime"
-	"testing"
-	"time"
-)
-
-func TestSimplePackagePathMap(t *testing.T) {
-	t.Parallel()
-
-	var pkgMap pkgPathMapping
-	flags := flag.NewFlagSet("", flag.ContinueOnError)
-	flags.Var(&pkgMap, "m", "")
-	err := flags.Parse([]string{
-		"-m", "android/soong=build/soong/",
-		"-m", "github.com/google/blueprint/=build/blueprint",
-	})
-	if err != nil {
-		t.Fatal(err)
-	}
-
-	compare := func(got, want interface{}) {
-		if !reflect.DeepEqual(got, want) {
-			t.Errorf("Unexpected values in .pkgs:\nwant: %v\n got: %v",
-				want, got)
-		}
-	}
-
-	wantPkgs := []string{"android/soong", "github.com/google/blueprint"}
-	compare(pkgMap.pkgs, wantPkgs)
-	compare(pkgMap.paths[wantPkgs[0]], "build/soong")
-	compare(pkgMap.paths[wantPkgs[1]], "build/blueprint")
-
-	got, ok, err := pkgMap.Path("android/soong/ui/test")
-	if err != nil {
-		t.Error("Unexpected error in pkgMap.Path(soong):", err)
-	} else if !ok {
-		t.Error("Expected a result from pkgMap.Path(soong)")
-	} else {
-		compare(got, "build/soong/ui/test")
-	}
-
-	got, ok, err = pkgMap.Path("github.com/google/blueprint")
-	if err != nil {
-		t.Error("Unexpected error in pkgMap.Path(blueprint):", err)
-	} else if !ok {
-		t.Error("Expected a result from pkgMap.Path(blueprint)")
-	} else {
-		compare(got, "build/blueprint")
-	}
-}
-
-func TestBadPackagePathMap(t *testing.T) {
-	t.Parallel()
-
-	var pkgMap pkgPathMapping
-	if _, _, err := pkgMap.Path("testing"); err == nil {
-		t.Error("Expected error if no maps are specified")
-	}
-	if err := pkgMap.Set(""); err == nil {
-		t.Error("Expected error with blank argument, but none returned")
-	}
-	if err := pkgMap.Set("a=a"); err != nil {
-		t.Error("Unexpected error: %v", err)
-	}
-	if err := pkgMap.Set("a=b"); err == nil {
-		t.Error("Expected error with duplicate package prefix, but none returned")
-	}
-	if _, ok, err := pkgMap.Path("testing"); err != nil {
-		t.Error("Unexpected error: %v", err)
-	} else if ok {
-		t.Error("Expected testing to be consider in the stdlib")
-	}
-}
-
-// TestSingleBuild ensures that just a basic build works.
-func TestSingleBuild(t *testing.T) {
-	t.Parallel()
-
-	setupDir(t, func(dir string, loadPkg loadPkgFunc) {
-		// The output binary
-		out := filepath.Join(dir, "out", "test")
-
-		pkg := loadPkg()
-
-		if err := pkg.Compile(filepath.Join(dir, "out"), ""); err != nil {
-			t.Fatalf("Got error when compiling:", err)
-		}
-
-		if err := pkg.Link(out); err != nil {
-			t.Fatal("Got error when linking:", err)
-		}
-
-		if _, err := os.Stat(out); err != nil {
-			t.Error("Cannot stat output:", err)
-		}
-	})
-}
-
-// testBuildAgain triggers two builds, running the modify function in between
-// each build. It verifies that the second build did or did not actually need
-// to rebuild anything based on the shouldRebuild argument.
-func testBuildAgain(t *testing.T,
-	shouldRecompile, shouldRelink bool,
-	modify func(dir string, loadPkg loadPkgFunc),
-	after func(pkg *GoPackage)) {
-
-	t.Parallel()
-
-	setupDir(t, func(dir string, loadPkg loadPkgFunc) {
-		// The output binary
-		out := filepath.Join(dir, "out", "test")
-
-		pkg := loadPkg()
-
-		if err := pkg.Compile(filepath.Join(dir, "out"), ""); err != nil {
-			t.Fatal("Got error when compiling:", err)
-		}
-
-		if err := pkg.Link(out); err != nil {
-			t.Fatal("Got error when linking:", err)
-		}
-
-		var firstTime time.Time
-		if stat, err := os.Stat(out); err == nil {
-			firstTime = stat.ModTime()
-		} else {
-			t.Fatal("Failed to stat output file:", err)
-		}
-
-		// mtime on HFS+ (the filesystem on darwin) are stored with 1
-		// second granularity, so the timestamp checks will fail unless
-		// we wait at least a second. Sleeping 1.1s to be safe.
-		if runtime.GOOS == "darwin" {
-			time.Sleep(1100 * time.Millisecond)
-		}
-
-		modify(dir, loadPkg)
-
-		pkg = loadPkg()
-
-		if err := pkg.Compile(filepath.Join(dir, "out"), ""); err != nil {
-			t.Fatal("Got error when compiling:", err)
-		}
-		if shouldRecompile {
-			if !pkg.rebuilt {
-				t.Fatal("Package should have recompiled, but was not recompiled.")
-			}
-		} else {
-			if pkg.rebuilt {
-				t.Fatal("Package should not have needed to be recompiled, but was recompiled.")
-			}
-		}
-
-		if err := pkg.Link(out); err != nil {
-			t.Fatal("Got error while linking:", err)
-		}
-		if shouldRelink {
-			if !pkg.rebuilt {
-				t.Error("Package should have relinked, but was not relinked.")
-			}
-		} else {
-			if pkg.rebuilt {
-				t.Error("Package should not have needed to be relinked, but was relinked.")
-			}
-		}
-
-		if stat, err := os.Stat(out); err == nil {
-			if shouldRelink {
-				if stat.ModTime() == firstTime {
-					t.Error("Output timestamp should be different, but both were", firstTime)
-				}
-			} else {
-				if stat.ModTime() != firstTime {
-					t.Error("Output timestamp should be the same.")
-					t.Error(" first:", firstTime)
-					t.Error("second:", stat.ModTime())
-				}
-			}
-		} else {
-			t.Fatal("Failed to stat output file:", err)
-		}
-
-		after(pkg)
-	})
-}
-
-// TestRebuildAfterNoChanges ensures that we don't rebuild if nothing
-// changes
-func TestRebuildAfterNoChanges(t *testing.T) {
-	testBuildAgain(t, false, false, func(dir string, loadPkg loadPkgFunc) {}, func(pkg *GoPackage) {})
-}
-
-// TestRebuildAfterTimestamp ensures that we don't rebuild because
-// timestamps of important files have changed. We should only rebuild if the
-// content hashes are different.
-func TestRebuildAfterTimestampChange(t *testing.T) {
-	testBuildAgain(t, false, false, func(dir string, loadPkg loadPkgFunc) {
-		// Ensure that we've spent some amount of time asleep
-		time.Sleep(100 * time.Millisecond)
-
-		newTime := time.Now().Local()
-		os.Chtimes(filepath.Join(dir, "test.fact"), newTime, newTime)
-		os.Chtimes(filepath.Join(dir, "main/main.go"), newTime, newTime)
-		os.Chtimes(filepath.Join(dir, "a/a.go"), newTime, newTime)
-		os.Chtimes(filepath.Join(dir, "a/b.go"), newTime, newTime)
-		os.Chtimes(filepath.Join(dir, "b/a.go"), newTime, newTime)
-	}, func(pkg *GoPackage) {})
-}
-
-// TestRebuildAfterGoChange ensures that we rebuild after a content change
-// to a package's go file.
-func TestRebuildAfterGoChange(t *testing.T) {
-	testBuildAgain(t, true, true, func(dir string, loadPkg loadPkgFunc) {
-		if err := ioutil.WriteFile(filepath.Join(dir, "a", "a.go"), []byte(go_a_a+"\n"), 0666); err != nil {
-			t.Fatal("Error writing a/a.go:", err)
-		}
-	}, func(pkg *GoPackage) {
-		if !pkg.directDeps[0].rebuilt {
-			t.Fatal("android/soong/a should have rebuilt")
-		}
-		if !pkg.directDeps[1].rebuilt {
-			t.Fatal("android/soong/b should have rebuilt")
-		}
-	})
-}
-
-// TestRebuildAfterMainChange ensures that we don't rebuild any dependencies
-// if only the main package's go files are touched.
-func TestRebuildAfterMainChange(t *testing.T) {
-	testBuildAgain(t, true, true, func(dir string, loadPkg loadPkgFunc) {
-		if err := ioutil.WriteFile(filepath.Join(dir, "main", "main.go"), []byte(go_main_main+"\n"), 0666); err != nil {
-			t.Fatal("Error writing main/main.go:", err)
-		}
-	}, func(pkg *GoPackage) {
-		if pkg.directDeps[0].rebuilt {
-			t.Fatal("android/soong/a should not have rebuilt")
-		}
-		if pkg.directDeps[1].rebuilt {
-			t.Fatal("android/soong/b should not have rebuilt")
-		}
-	})
-}
-
-// TestRebuildAfterRemoveOut ensures that we rebuild if the output file is
-// missing, even if everything else doesn't need rebuilding.
-func TestRebuildAfterRemoveOut(t *testing.T) {
-	testBuildAgain(t, false, true, func(dir string, loadPkg loadPkgFunc) {
-		if err := os.Remove(filepath.Join(dir, "out", "test")); err != nil {
-			t.Fatal("Failed to remove output:", err)
-		}
-	}, func(pkg *GoPackage) {})
-}
-
-// TestRebuildAfterPartialBuild ensures that even if the build was interrupted
-// between the recompile and relink stages, we'll still relink when we run again.
-func TestRebuildAfterPartialBuild(t *testing.T) {
-	testBuildAgain(t, false, true, func(dir string, loadPkg loadPkgFunc) {
-		if err := ioutil.WriteFile(filepath.Join(dir, "main", "main.go"), []byte(go_main_main+"\n"), 0666); err != nil {
-			t.Fatal("Error writing main/main.go:", err)
-		}
-
-		pkg := loadPkg()
-
-		if err := pkg.Compile(filepath.Join(dir, "out"), ""); err != nil {
-			t.Fatal("Got error when compiling:", err)
-		}
-		if !pkg.rebuilt {
-			t.Fatal("Package should have recompiled, but was not recompiled.")
-		}
-	}, func(pkg *GoPackage) {})
-}
-
-// BenchmarkInitialBuild computes how long a clean build takes (for tiny test
-// inputs).
-func BenchmarkInitialBuild(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		setupDir(b, func(dir string, loadPkg loadPkgFunc) {
-			pkg := loadPkg()
-			if err := pkg.Compile(filepath.Join(dir, "out"), ""); err != nil {
-				b.Fatal("Got error when compiling:", err)
-			}
-
-			if err := pkg.Link(filepath.Join(dir, "out", "test")); err != nil {
-				b.Fatal("Got error when linking:", err)
-			}
-		})
-	}
-}
-
-// BenchmarkMinIncrementalBuild computes how long an incremental build that
-// doesn't actually need to build anything takes.
-func BenchmarkMinIncrementalBuild(b *testing.B) {
-	setupDir(b, func(dir string, loadPkg loadPkgFunc) {
-		pkg := loadPkg()
-
-		if err := pkg.Compile(filepath.Join(dir, "out"), ""); err != nil {
-			b.Fatal("Got error when compiling:", err)
-		}
-
-		if err := pkg.Link(filepath.Join(dir, "out", "test")); err != nil {
-			b.Fatal("Got error when linking:", err)
-		}
-
-		b.ResetTimer()
-
-		for i := 0; i < b.N; i++ {
-			pkg := loadPkg()
-
-			if err := pkg.Compile(filepath.Join(dir, "out"), ""); err != nil {
-				b.Fatal("Got error when compiling:", err)
-			}
-
-			if err := pkg.Link(filepath.Join(dir, "out", "test")); err != nil {
-				b.Fatal("Got error when linking:", err)
-			}
-
-			if pkg.rebuilt {
-				b.Fatal("Should not have rebuilt anything")
-			}
-		}
-	})
-}
-
-///////////////////////////////////////////////////////
-// Templates used to create fake compilable packages //
-///////////////////////////////////////////////////////
-
-const go_main_main = `
-package main
-import (
-	"fmt"
-	"android/soong/a"
-	"android/soong/b"
-)
-func main() {
-	fmt.Println(a.Stdout, b.Stdout)
-}
-`
-
-const go_a_a = `
-package a
-import "os"
-var Stdout = os.Stdout
-`
-
-const go_a_b = `
-package a
-`
-
-const go_b_a = `
-package b
-import "android/soong/a"
-var Stdout = a.Stdout
-`
-
-type T interface {
-	Fatal(args ...interface{})
-	Fatalf(format string, args ...interface{})
-}
-
-type loadPkgFunc func() *GoPackage
-
-func setupDir(t T, test func(dir string, loadPkg loadPkgFunc)) {
-	dir, err := ioutil.TempDir("", "test")
-	if err != nil {
-		t.Fatalf("Error creating temporary directory: %#v", err)
-	}
-	defer os.RemoveAll(dir)
-
-	writeFile := func(name, contents string) {
-		if err := ioutil.WriteFile(filepath.Join(dir, name), []byte(contents), 0666); err != nil {
-			t.Fatalf("Error writing %q: %#v", name, err)
-		}
-	}
-	mkdir := func(name string) {
-		if err := os.Mkdir(filepath.Join(dir, name), 0777); err != nil {
-			t.Fatalf("Error creating %q directory: %#v", name, err)
-		}
-	}
-	mkdir("main")
-	mkdir("a")
-	mkdir("b")
-	writeFile("main/main.go", go_main_main)
-	writeFile("a/a.go", go_a_a)
-	writeFile("a/b.go", go_a_b)
-	writeFile("b/a.go", go_b_a)
-
-	loadPkg := func() *GoPackage {
-		pkg := &GoPackage{
-			Name: "main",
-		}
-		pkgMap := &pkgPathMapping{}
-		pkgMap.Set("android/soong=" + dir)
-		if err := pkg.FindDeps(filepath.Join(dir, "main"), pkgMap); err != nil {
-			t.Fatalf("Error finding deps: %v", err)
-		}
-		return pkg
-	}
-
-	test(dir, loadPkg)
-}
diff --git a/cmd/soong_env/Android.bp b/cmd/soong_env/Android.bp
index b0d827c..4cdc396 100644
--- a/cmd/soong_env/Android.bp
+++ b/cmd/soong_env/Android.bp
@@ -20,5 +20,6 @@
     srcs: [
         "soong_env.go",
     ],
+    default: true,
 }
 
diff --git a/cmd/microfactory/microfactory.bash b/scripts/microfactory.bash
similarity index 60%
rename from cmd/microfactory/microfactory.bash
rename to scripts/microfactory.bash
index aae6740..65ba55d 100644
--- a/cmd/microfactory/microfactory.bash
+++ b/scripts/microfactory.bash
@@ -54,39 +54,13 @@
 # Arguments:
 #  $1: name of the requested binary
 #  $2: package name
-function build_go
+function soong_build_go
 {
-    # Increment when microfactory changes enough that it cannot rebuild itself.
-    # For example, if we use a new command line argument that doesn't work on older versions.
-    local mf_version=2
-
-    local mf_src="${TOP}/build/soong/cmd/microfactory"
-
-    local out_dir=$(getoutdir)
-    local mf_bin="${out_dir}/microfactory_$(uname)"
-    local mf_version_file="${out_dir}/.microfactory_$(uname)_version"
-    local built_bin="${out_dir}/$1"
-    local from_src=1
-
-    if [ -f "${mf_bin}" ] && [ -f "${mf_version_file}" ]; then
-        if [ "${mf_version}" -eq "$(cat "${mf_version_file}")" ]; then
-            from_src=0
-        fi
-    fi
-
-    local mf_cmd
-    if [ $from_src -eq 1 ]; then
-        mf_cmd="${GOROOT}/bin/go run ${mf_src}/microfactory.go"
-    else
-        mf_cmd="${mf_bin}"
-    fi
-
-    rm -f "${out_dir}/.$1.trace"
-    ${mf_cmd} -s "${mf_src}" -b "${mf_bin}" \
-            -pkg-path "android/soong=${TOP}/build/soong" -trimpath "${TOP}/build/soong" \
-            -o "${built_bin}" $2
-
-    if [ $from_src -eq 1 ]; then
-        echo "${mf_version}" >"${mf_version_file}"
-    fi
+    BUILDDIR=$(getoutdir) \
+      SRCDIR=${TOP} \
+      BLUEPRINTDIR=${TOP}/build/blueprint \
+      EXTRA_ARGS="-pkg-path android/soong=${TOP}/build/soong" \
+      build_go $@
 }
+
+source ${TOP}/build/blueprint/microfactory/microfactory.bash
diff --git a/soong_ui.bash b/soong_ui.bash
index 34c44a4..a39aa9c 100755
--- a/soong_ui.bash
+++ b/soong_ui.bash
@@ -50,9 +50,9 @@
 # Save the current PWD for use in soong_ui
 export ORIGINAL_PWD=${PWD}
 export TOP=$(gettop)
-source ${TOP}/build/soong/cmd/microfactory/microfactory.bash
+source ${TOP}/build/soong/scripts/microfactory.bash
 
-build_go soong_ui android/soong/cmd/soong_ui
+soong_build_go soong_ui android/soong/cmd/soong_ui
 
 cd ${TOP}
 exec "$(getoutdir)/soong_ui" "$@"
diff --git a/ui/build/Android.bp b/ui/build/Android.bp
index 23a9872..548baee 100644
--- a/ui/build/Android.bp
+++ b/ui/build/Android.bp
@@ -27,7 +27,6 @@
         "context.go",
         "environment.go",
         "exec.go",
-        "java.go",
         "kati.go",
         "make.go",
         "ninja.go",
diff --git a/ui/build/build.go b/ui/build/build.go
index 1400c48..32f4ba5 100644
--- a/ui/build/build.go
+++ b/ui/build/build.go
@@ -114,9 +114,6 @@
 		return
 	}
 
-	// Start getting java version as early as possible
-	getJavaVersions(ctx, config)
-
 	// Make sure that no other Soong process is running with the same output directory
 	buildLock := BecomeSingletonOrFail(ctx, config)
 	defer buildLock.Unlock()
@@ -148,9 +145,6 @@
 		runSoong(ctx, config)
 	}
 
-	// Check the java versions we read earlier
-	checkJavaVersion(ctx, config)
-
 	if what&BuildKati != 0 {
 		// Run ckati
 		runKati(ctx, config)
diff --git a/ui/build/java.go b/ui/build/java.go
deleted file mode 100644
index 473af01..0000000
--- a/ui/build/java.go
+++ /dev/null
@@ -1,163 +0,0 @@
-// Copyright 2017 Google Inc. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package build
-
-import (
-	"regexp"
-	"runtime"
-	"strings"
-	"sync"
-)
-
-const incompatibleJavacStr = "google"
-
-var javaVersionInfo = struct {
-	once      sync.Once
-	startOnce sync.Once
-
-	java_version_output  string
-	javac_version_output string
-}{}
-
-func getJavaVersions(ctx Context, config Config) {
-	javaVersionInfo.startOnce.Do(func() {
-		go func() {
-			if ctx.Tracer != nil {
-				thread := ctx.Tracer.NewThread("java_version")
-				ctx.Tracer.Begin("get version", thread)
-				defer ctx.Tracer.End(thread)
-			}
-
-			getJavaVersionsImpl(ctx, config)
-		}()
-	})
-}
-
-func getJavaVersionsImpl(ctx Context, config Config) {
-	javaVersionInfo.once.Do(func() {
-		cmd := Command(ctx, config, "java", "java", "-version")
-		cmd.Environment.Unset("_JAVA_OPTIONS")
-		javaVersionInfo.java_version_output = string(cmd.CombinedOutputOrFatal())
-
-		cmd = Command(ctx, config, "javac", "javac", "-version")
-		cmd.Environment.Unset("_JAVA_OPTIONS")
-		javaVersionInfo.javac_version_output = string(cmd.CombinedOutputOrFatal())
-	})
-}
-
-func checkJavaVersion(ctx Context, config Config) {
-	ctx.BeginTrace("java_version_check")
-	defer ctx.EndTrace()
-
-	getJavaVersionsImpl(ctx, config)
-
-	var required_java_version string
-	var java_version_regexp *regexp.Regexp
-	var javac_version_regexp *regexp.Regexp
-
-	oj9_env, _ := config.Environment().Get("EXPERIMENTAL_USE_OPENJDK9")
-	experimental_use_openjdk9 := oj9_env != ""
-
-	if experimental_use_openjdk9 {
-		required_java_version = "9"
-		java_version_regexp = regexp.MustCompile(`^java .* "9.*"`)
-		javac_version_regexp = regexp.MustCompile(`^javac 9`)
-	} else {
-		required_java_version = "1.8"
-		java_version_regexp = regexp.MustCompile(`[ "]1\.8[\. "$]`)
-		javac_version_regexp = java_version_regexp
-	}
-
-	java_version := javaVersionInfo.java_version_output
-	javac_version := javaVersionInfo.javac_version_output
-
-	found := false
-	for _, l := range strings.Split(java_version, "\n") {
-		if java_version_regexp.MatchString(l) {
-			java_version = l
-			found = true
-			break
-		}
-	}
-	if !found {
-		ctx.Println("***************************************************************")
-		ctx.Println("You are attempting to build with the incorrect version of java.")
-		ctx.Println()
-		ctx.Println("Your version is:", java_version)
-		ctx.Println("The required version is:", required_java_version+".x")
-		ctx.Println()
-		ctx.Println("Please follow the machine setup instructions at:")
-		ctx.Println("    https://source.android.com/source/initializing.html")
-		ctx.Println("***************************************************************")
-		ctx.Fatalln("stop")
-	}
-
-	if runtime.GOOS == "linux" {
-		// Early access builds of OpenJDK 9 do not contain the string "openjdk" in the
-		// version name. TODO(tobiast): Reconsider once the OpenJDK 9 toolchain is stable.
-		// http://b/62123342
-		if !strings.Contains(java_version, "openjdk") && !experimental_use_openjdk9 {
-			ctx.Println("*******************************************************")
-			ctx.Println("You are attempting to build with an unsupported JDK.")
-			ctx.Println()
-			ctx.Println("Only an OpenJDK based JDK is supported.")
-			ctx.Println()
-			ctx.Println("Please follow the machine setup instructions at:")
-			ctx.Println("    https://source.android.com/source/initializing.html")
-			ctx.Println("*******************************************************")
-			ctx.Fatalln("stop")
-		}
-	} else { // darwin
-		if strings.Contains(java_version, "openjdk") {
-			ctx.Println("*******************************************************")
-			ctx.Println("You are attempting to build with an unsupported JDK.")
-			ctx.Println()
-			ctx.Println("You use OpenJDK, but only Sun/Oracle JDK is supported.")
-			ctx.Println()
-			ctx.Println("Please follow the machine setup instructions at:")
-			ctx.Println("    https://source.android.com/source/initializing.html")
-			ctx.Println("*******************************************************")
-			ctx.Fatalln("stop")
-		}
-	}
-
-	incompatible_javac := strings.Contains(javac_version, incompatibleJavacStr)
-
-	found = false
-	for _, l := range strings.Split(javac_version, "\n") {
-		if javac_version_regexp.MatchString(l) {
-			javac_version = l
-			found = true
-			break
-		}
-	}
-	if !found || incompatible_javac {
-		ctx.Println("****************************************************************")
-		ctx.Println("You are attempting to build with the incorrect version of javac.")
-		ctx.Println()
-		ctx.Println("Your version is:", javac_version)
-		if incompatible_javac {
-			ctx.Println("The '" + incompatibleJavacStr + "' version is not supported for Android platform builds.")
-			ctx.Println("Use a publically available JDK and make sure you have run envsetup.sh / lunch.")
-		} else {
-			ctx.Println("The required version is:", required_java_version)
-		}
-		ctx.Println()
-		ctx.Println("Please follow the machine setup instructions at:")
-		ctx.Println("    https://source.android.com/source/initializing.html")
-		ctx.Println("****************************************************************")
-		ctx.Fatalln("stop")
-	}
-}
diff --git a/ui/build/soong.go b/ui/build/soong.go
index ddfe666..d242805 100644
--- a/ui/build/soong.go
+++ b/ui/build/soong.go
@@ -24,6 +24,7 @@
 
 	cmd := Command(ctx, config, "soong bootstrap", "./bootstrap.bash")
 	cmd.Environment.Set("BUILDDIR", config.SoongOutDir())
+	cmd.Environment.Set("NINJA_BUILDDIR", config.OutDir())
 	cmd.Sandbox = soongSandbox
 	cmd.Stdout = ctx.Stdout()
 	cmd.Stderr = ctx.Stderr()
