diff --git a/cmd/soong_build/main.go b/cmd/soong_build/main.go
new file mode 100644
index 0000000..c1999fe
--- /dev/null
+++ b/cmd/soong_build/main.go
@@ -0,0 +1,68 @@
+// Copyright 2015 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"
+	"fmt"
+	"os"
+	"path/filepath"
+
+	"blueprint"
+	"blueprint/bootstrap"
+
+	"android/soong/cc"
+	"android/soong/common"
+	"android/soong/config"
+)
+
+func main() {
+	flag.Parse()
+
+	// The top-level Blueprints file is passed as the first argument.
+	srcDir := filepath.Dir(flag.Arg(0))
+
+	ctx := blueprint.NewContext()
+
+	// Module types
+	ctx.RegisterModuleType("cc_library_static", cc.NewCCLibraryStatic)
+	ctx.RegisterModuleType("cc_library_shared", cc.NewCCLibraryShared)
+	ctx.RegisterModuleType("cc_library", cc.NewCCLibrary)
+	ctx.RegisterModuleType("cc_object", cc.NewCCObject)
+	ctx.RegisterModuleType("cc_binary", cc.NewCCBinary)
+
+	ctx.RegisterModuleType("toolchain_library", cc.NewToolchainLibrary)
+
+	ctx.RegisterModuleType("cc_library_host_static", cc.NewCCLibraryHostStatic)
+	ctx.RegisterModuleType("cc_library_host_shared", cc.NewCCLibraryHostShared)
+	ctx.RegisterModuleType("cc_binary_host", cc.NewCCBinaryHost)
+
+	// Mutators
+	ctx.RegisterEarlyMutator("arch", common.ArchMutator)
+	ctx.RegisterEarlyMutator("link", cc.LinkageMutator)
+
+	// Singletons
+
+	configuration, err := config.New(srcDir)
+	if err != nil {
+		fmt.Fprintf(os.Stderr, "%s", err)
+		os.Exit(1)
+	}
+
+	// Temporary hack
+	//ctx.SetIgnoreUnknownModuleTypes(true)
+
+	bootstrap.Main(ctx, configuration, config.ConfigFileName)
+}
diff --git a/cmd/soong_glob/soong_glob.go b/cmd/soong_glob/soong_glob.go
new file mode 100644
index 0000000..227d7b0
--- /dev/null
+++ b/cmd/soong_glob/soong_glob.go
@@ -0,0 +1,56 @@
+// Copyright 2015 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.
+
+// soong_glob is the command line tool that checks if the list of files matching a glob has
+// changed, and only updates the output file list if it has changed.  It is used to optimize
+// out build.ninja regenerations when non-matching files are added.  See
+// android/soong/common/glob.go for a longer description.
+package main
+
+import (
+	"flag"
+	"fmt"
+	"os"
+
+	"android/soong/glob"
+)
+
+var (
+	out = flag.String("o", "", "file to write list of files that match glob")
+)
+
+func usage() {
+	fmt.Fprintf(os.Stderr, "usage: soong_glob -o out glob\n")
+	flag.PrintDefaults()
+	os.Exit(2)
+}
+
+func main() {
+	flag.Parse()
+
+	if *out == "" {
+		fmt.Fprintln(os.Stderr, "error: -o is required\n")
+		usage()
+	}
+
+	if flag.NArg() != 1 {
+		usage()
+	}
+
+	_, err := glob.GlobWithDepFile(flag.Arg(0), *out, *out+".d")
+	if err != nil {
+		fmt.Fprintf(os.Stderr, "error: %s\n", err.Error())
+		os.Exit(1)
+	}
+}
