Merge "Build extractor for Go language."
diff --git a/Android.bp b/Android.bp
index 1792214..eddff31 100644
--- a/Android.bp
+++ b/Android.bp
@@ -253,3 +253,253 @@
         },
     },
 }
+
+// Go extractor
+bootstrap_go_package {
+    name: "go-extractors-golang",
+    pkgPath: "kythe.io/kythe/go/extractors/golang",
+    srcs: [
+        "kythe/go/extractors/golang/golang.go",
+        "kythe/go/extractors/golang/packages.go",
+    ],
+    deps: [
+        "creachadair-stringset",
+        "go-extractors-govname",
+        "go-platform-analysis",
+        "go-platform-kindex",
+        "go-platform-vfs",
+        "go-util-ptypes",
+        "go-proto-analysis_go_proto",
+        "go-proto-go_go_proto",
+        "go-proto-storage_go_proto",
+    ],
+}
+
+bootstrap_go_package {
+    name: "go-extractors-govname",
+    pkgPath: "kythe.io/kythe/go/extractors/govname",
+    srcs: [
+        "kythe/go/extractors/govname/govname.go",
+        "kythe/go/extractors/govname/types.go",
+    ],
+    deps: [
+        "golang-x-tools-go-vcs",
+        "go-util-vnameutil",
+        "go-proto-storage_go_proto",
+    ],
+}
+
+bootstrap_go_package {
+    name: "go-platform-analysis",
+    pkgPath: "kythe.io/kythe/go/platform/analysis",
+    srcs: ["kythe/go/platform/analysis/analysis.go"],
+    deps: [
+        "go-proto-analysis_go_proto",
+        "go-proto-storage_go_proto",
+    ],
+}
+
+bootstrap_go_package {
+    name: "go-platform-delimited",
+    pkgPath: "kythe.io/kythe/go/platform/delimited",
+    srcs: ["kythe/go/platform/delimited/delimited.go"],
+    deps: [
+        "golang-protobuf-proto",
+    ],
+}
+
+bootstrap_go_package {
+    name: "go-platform-kcd",
+    pkgPath: "kythe.io/kythe/go/platform/kcd",
+    srcs: ["kythe/go/platform/kcd/kcd.go"],
+}
+
+bootstrap_go_package {
+    name: "go-platform-kcd-kythe",
+    pkgPath: "kythe.io/kythe/go/platform/kcd/kythe",
+    srcs: ["kythe/go/platform/kcd/kythe/units.go"],
+    deps: [
+        "golang-protobuf-jsonpb",
+        "golang-protobuf-proto",
+        "go-platform-kcd",
+        "go-util-ptypes",
+        "go-proto-analysis_go_proto",
+        "go-proto-buildinfo_go_proto",
+        "go-proto-storage_go_proto",
+    ],
+}
+
+bootstrap_go_package {
+    name: "go-platform-kindex",
+    pkgPath: "kythe.io/kythe/go/platform/kindex",
+    srcs: ["kythe/go/platform/kindex/kindex.go"],
+    deps: [
+        "golang-protobuf-proto",
+        "go-platform-analysis",
+        "go-platform-delimited",
+        "go-platform-vfs",
+        "go-util-ptypes",
+        "go-proto-analysis_go_proto",
+        "go-proto-storage_go_proto",
+    ],
+}
+
+bootstrap_go_package {
+    name: "go-platform-kzip",
+    pkgPath: "kythe.io/kythe/go/platform/kzip",
+    srcs: ["kythe/go/platform/kzip/kzip.go"],
+    deps: [
+        "creachadair-stringset",
+        "golang-protobuf-jsonpb",
+        "golang-protobuf-proto",
+        "golang-x-sync-errgroup",
+        "go-platform-kcd-kythe",
+        "go-proto-analysis_go_proto",
+        "go-proto-buildinfo_go_proto",
+        "go-proto-cxx_go_proto",
+        "go-proto-filecontext_go_proto",
+        "go-proto-go_go_proto",
+        "go-proto-java_go_proto",
+    ],
+}
+
+bootstrap_go_package {
+    name: "go-platform-vfs",
+    pkgPath: "kythe.io/kythe/go/platform/vfs",
+    srcs: ["kythe/go/platform/vfs/vfs.go"],
+}
+
+bootstrap_go_package {
+    name: "go-proto-analysis_go_proto",
+    pkgPath: "kythe.io/kythe/proto/analysis_go_proto",
+    srcs: ["kythe/proto/analysis_go_proto/analysis.pb.go"],
+    deps: [
+        "golang-protobuf-proto",
+        "golang-protobuf-ptypes-any",
+        "go-proto-storage_go_proto",
+    ],
+}
+
+bootstrap_go_package {
+    name: "go-proto-cxx_go_proto",
+    pkgPath: "kythe.io/kythe/proto/cxx_go_proto",
+    srcs: ["kythe/proto/cxx_go_proto/cxx.pb.go"],
+    deps: [
+        "golang-protobuf-proto",
+    ],
+}
+
+bootstrap_go_package {
+    name: "go-proto-filecontext_go_proto",
+    pkgPath: "kythe.io/kythe/proto/filecontext_go_proto",
+    srcs: ["kythe/proto/filecontext_go_proto/filecontext.pb.go"],
+    deps: [
+        "golang-protobuf-proto",
+    ],
+}
+
+bootstrap_go_package {
+    name: "go-proto-buildinfo_go_proto",
+    pkgPath: "kythe.io/kythe/proto/buildinfo_go_proto",
+    srcs: ["kythe/proto/buildinfo_go_proto/buildinfo.pb.go"],
+    deps: [
+        "golang-protobuf-proto",
+    ],
+}
+
+bootstrap_go_package {
+    name: "go-proto-go_go_proto",
+    pkgPath: "kythe.io/kythe/proto/go_go_proto",
+    srcs: ["kythe/proto/go_go_proto/go.pb.go"],
+    deps: ["golang-protobuf-proto"],
+}
+
+bootstrap_go_package {
+    name: "go-proto-java_go_proto",
+    pkgPath: "kythe.io/kythe/proto/java_go_proto",
+    srcs: ["kythe/proto/java_go_proto/java.pb.go"],
+    deps: [
+        "go-proto-storage_go_proto",
+        "golang-protobuf-proto",
+    ],
+}
+
+bootstrap_go_package {
+    name: "go-proto-storage_go_proto",
+    pkgPath: "kythe.io/kythe/proto/storage_go_proto",
+    srcs: ["kythe/proto/storage_go_proto/storage.pb.go"],
+    deps: [
+        "golang-protobuf-proto",
+    ],
+}
+
+bootstrap_go_package {
+    name: "go-util-build",
+    pkgPath: "kythe.io/kythe/go/util/build",
+    srcs: ["kythe/go/util/build/build.go"],
+    deps: [
+        "golang-protobuf-proto",
+        "golang-protobuf-ptypes",
+        "golang-protobuf-ptypes-any",
+    ],
+}
+
+bootstrap_go_package {
+    name: "go-util-flagutil",
+    pkgPath: "kythe.io/kythe/go/util/flagutil",
+    srcs: ["kythe/go/util/flagutil/flagutil.go"],
+    deps: [
+        "creachadair-stringset",
+        "go-util-build",
+    ],
+}
+
+bootstrap_go_package {
+    name: "go-util-ptypes",
+    pkgPath: "kythe.io/kythe/go/util/ptypes",
+    srcs: ["kythe/go/util/ptypes/ptypes.go"],
+    deps: [
+        "golang-protobuf-proto",
+        "golang-protobuf-ptypes",
+        "golang-protobuf-ptypes-any",
+    ],
+}
+
+bootstrap_go_package {
+    name: "go-util-vnameutil",
+    pkgPath: "kythe.io/kythe/go/util/vnameutil",
+    srcs: [
+        "kythe/go/util/vnameutil/order.go",
+        "kythe/go/util/vnameutil/rewrite.go",
+    ],
+    deps: [
+        "go-proto-storage_go_proto",
+        "golang-protobuf-jsonpb",
+    ],
+}
+
+blueprint_go_binary {
+    name: "go_extractor",
+    srcs: ["kythe/go/extractors/cmd/gotool/gotool.go"],
+    deps: [
+        "go-extractors-golang",
+        "go-platform-analysis",
+        "go-platform-delimited",
+        "go-platform-kcd",
+        "go-platform-kcd-kythe",
+        "go-platform-kzip",
+        "go-platform-vfs",
+        "go-proto-analysis_go_proto",
+        "go-proto-buildinfo_go_proto",
+        "go-proto-cxx_go_proto",
+        "go-proto-filecontext_go_proto",
+        "go-proto-java_go_proto",
+        "go-util-flagutil",
+        "go-util-vnameutil",
+        "go-util-build",
+        "golang-x-sync-errgroup",
+        "golang-x-tools-go-vcs",
+    ],
+    // TODO(asmundak): is there a way to set linker flags
+    // (e.g., -ldflags="-s -w" -trimpath
+}