diff --git a/Tulsi.tulsiproj/project.tulsiconf b/Tulsi.tulsiproj/project.tulsiconf
index b30a980..7b96d5b 100644
--- a/Tulsi.tulsiproj/project.tulsiconf
+++ b/Tulsi.tulsiproj/project.tulsiconf
@@ -3,14 +3,17 @@
     "optionSet" : {
       "GenerateRunfiles" : {
         "p" : "YES"
+      },
+      "TreeArtifactOutputs" : {
+        "p" : "NO"
       }
     }
   },
-  "projectName" : "Tulsi",
   "packages" : [
     "",
     "src/TulsiGeneratorIntegrationTests",
     "src/TulsiGeneratorTests"
   ],
+  "projectName" : "Tulsi",
   "workspaceRoot" : ".."
 }
diff --git a/src/TulsiEndToEndTests/ButtonsEndToEndTest.swift b/src/TulsiEndToEndTests/ButtonsEndToEndTest.swift
index 59be9e2..b4cf3f4 100644
--- a/src/TulsiEndToEndTests/ButtonsEndToEndTest.swift
+++ b/src/TulsiEndToEndTests/ButtonsEndToEndTest.swift
@@ -37,6 +37,19 @@
     testXcodeProject(xcodeProjectURL, scheme: "ButtonsTests")
   }
 
+  /// Verifies that all of the _idx_ targets in the project build.
+  func testIndexingTargetsBuild() throws {
+    let xcodeProjectURL = generateXcodeProject(tulsiProject: buttonsProjectPath,
+                                               config: "Buttons")
+    XCTAssert(fileManager.fileExists(atPath: xcodeProjectURL.path), "Xcode project was not generated.")
+    let targets = targetsOfXcodeProject(xcodeProjectURL)
+    let indexTargets = targets.filter{ $0.hasPrefix("_idx_") }
+    XCTAssertEqual(indexTargets.count, 8)
+    for target in indexTargets {
+      buildXcodeTarget(xcodeProjectURL, target: target)
+    }
+  }
+
   func testInvalidConfig() throws {
     let xcodeProjectURL = generateXcodeProject(tulsiProject: buttonsProjectPath,
                                                config: "InvalidConfig")
diff --git a/src/TulsiEndToEndTests/Resources/Buttons.tulsiproj/Configs/Buttons.tulsigen b/src/TulsiEndToEndTests/Resources/Buttons.tulsiproj/Configs/Buttons.tulsigen
index 73e51a2..c579948 100644
--- a/src/TulsiEndToEndTests/Resources/Buttons.tulsiproj/Configs/Buttons.tulsigen
+++ b/src/TulsiEndToEndTests/Resources/Buttons.tulsiproj/Configs/Buttons.tulsigen
@@ -1,26 +1,30 @@
 {
-  "sourceFilters" : [
+  "additionalFilePaths" : [
+    "src/TulsiEndToEndTests/Resources/Buttons/BUILD"
   ],
   "buildTargets" : [
-    "\/\/third_party\/tulsi\/src\/TulsiEndToEndTests\/Resources\/Buttons:ButtonsTests",
-    "\/\/third_party\/tulsi\/src\/TulsiEndToEndTests\/Resources\/Buttons:ButtonsLogicTests",
-    "\/\/third_party\/tulsi\/src\/TulsiEndToEndTests\/Resources\/Buttons:ButtonsUITests"
+    "//srcTulsiEndToEndTests/Resources/Buttons:Buttons",
+    "//srcTulsiEndToEndTests/Resources/Buttons:ButtonsLib",
+    "//srcTulsiEndToEndTests/Resources/Buttons:ButtonsLogicTests",
+    "//srcTulsiEndToEndTests/Resources/Buttons:ButtonsTests",
+    "//srcTulsiEndToEndTests/Resources/Buttons:ButtonsUITests",
+    "//srcTulsiEndToEndTests/Resources/Buttons:CppLib",
+    "//srcTulsiEndToEndTests/Resources/Buttons:ObjCLib"
   ],
-  "projectName" : "Buttons",
   "optionSet" : {
     "BazelBuildOptionsDebug" : {
       "p" : "$(inherited) --define=RULES_SWIFT_BUILD_DUMMY_WORKER=1"
     },
-    "BazelBuildStartupOptionsRelease" : {
-      "p" : "$(inherited)"
-    },
-    "LaunchActionPreActionScript" : {
-      "p" : "$(inherited)"
-    },
     "BazelBuildOptionsRelease" : {
       "p" : "$(inherited)"
     },
-    "EnvironmentVariables" : {
+    "BazelBuildStartupOptionsDebug" : {
+      "p" : "$(inherited)"
+    },
+    "BazelBuildStartupOptionsRelease" : {
+      "p" : "$(inherited)"
+    },
+    "BuildActionPostActionScript" : {
       "p" : "$(inherited)"
     },
     "BuildActionPreActionScript" : {
@@ -29,23 +33,26 @@
     "CommandlineArguments" : {
       "p" : "$(inherited)"
     },
-    "TestActionPreActionScript" : {
+    "EnvironmentVariables" : {
+      "p" : "$(inherited)"
+    },
+    "LaunchActionPostActionScript" : {
+      "p" : "$(inherited)"
+    },
+    "LaunchActionPreActionScript" : {
       "p" : "$(inherited)"
     },
     "TestActionPostActionScript" : {
       "p" : "$(inherited)"
     },
-    "BuildActionPostActionScript" : {
-      "p" : "$(inherited)"
-    },
-    "BazelBuildStartupOptionsDebug" : {
-      "p" : "$(inherited)"
-    },
-    "LaunchActionPostActionScript" : {
+    "TestActionPreActionScript" : {
       "p" : "$(inherited)"
     }
   },
-  "additionalFilePaths" : [
-    "third_party\/tulsi\/src\/TulsiEndToEndTests\/Resources\/Buttons\/BUILD"
+  "projectName" : "Buttons",
+  "sourceFilters" : [
+    "src/TulsiEndToEndTests/Resources/Buttons",
+    "src/TulsiEndToEndTests/Resources/Buttons/Buttons",
+    "src/TulsiEndToEndTests/Resources/Buttons/Buttons/Base.lproj"
   ]
 }
diff --git a/src/TulsiEndToEndTests/Resources/Buttons/BUILD b/src/TulsiEndToEndTests/Resources/Buttons/BUILD
index 3a786f6..d250337 100644
--- a/src/TulsiEndToEndTests/Resources/Buttons/BUILD
+++ b/src/TulsiEndToEndTests/Resources/Buttons/BUILD
@@ -29,6 +29,28 @@
 
 licenses(["notice"])
 
+# Platform agnostic
+
+objc_library(
+    name = "ObjCLib",
+    srcs = [
+        "ObjCFoo.m",
+    ],
+    hdrs = [
+        "ObjCFoo.h",
+    ],
+)
+
+cc_library(
+    name = "CppLib",
+    srcs = [
+        "CppFoo.cc",
+    ],
+    hdrs = [
+        "CppFoo.h",
+    ],
+)
+
 # iOS
 
 ## Code
@@ -81,6 +103,8 @@
     deps = [
         ":ButtonsLib",
         ":ButtonsResources",
+        ":CppLib",
+        ":ObjCLib",
     ],
 )
 
@@ -164,6 +188,8 @@
     minimum_os_version = "3.0",
     deps = [
         ":ButtonsWatchExtensionLib",
+        ":CppLib",
+        ":ObjCLib",
     ],
 )
 
@@ -220,6 +246,8 @@
     deps = [
         ":ButtonsTVLib",
         ":ButtonsTVResources",
+        ":CppLib",
+        ":ObjCLib",
     ],
 )
 
@@ -278,6 +306,8 @@
     deps = [
         ":ButtonsMacLib",
         ":ButtonsMacResources",
+        ":CppLib",
+        ":ObjCLib",
     ],
 )
 
diff --git a/src/TulsiEndToEndTests/Resources/Buttons/CppFoo.cc b/src/TulsiEndToEndTests/Resources/Buttons/CppFoo.cc
new file mode 100644
index 0000000..88d50ba
--- /dev/null
+++ b/src/TulsiEndToEndTests/Resources/Buttons/CppFoo.cc
@@ -0,0 +1,17 @@
+// Copyright 2019 The Tulsi Authors. 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.
+
+#include "third_party/tulsi/src/TulsiEndToEndTests/Resources/Buttons/CppFoo.h"
+
+CppFoo::CppFoo() {}
diff --git a/src/TulsiEndToEndTests/Resources/Buttons/CppFoo.h b/src/TulsiEndToEndTests/Resources/Buttons/CppFoo.h
new file mode 100644
index 0000000..ce46a18
--- /dev/null
+++ b/src/TulsiEndToEndTests/Resources/Buttons/CppFoo.h
@@ -0,0 +1,22 @@
+// Copyright 2019 The Tulsi Authors. 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.
+
+#ifndef THIRD_PARTY_TULSI_SRC_TULSIENDTOENDTESTS_RESOURCES_BUTTONS_CPPFOO_H_
+#define THIRD_PARTY_TULSI_SRC_TULSIENDTOENDTESTS_RESOURCES_BUTTONS_CPPFOO_H_
+
+class CppFoo {
+  CppFoo();
+};
+
+#endif  // THIRD_PARTY_TULSI_SRC_TULSIENDTOENDTESTS_RESOURCES_BUTTONS_CPPFOO_H_
diff --git a/src/TulsiEndToEndTests/Resources/Buttons/ObjCFoo.h b/src/TulsiEndToEndTests/Resources/Buttons/ObjCFoo.h
new file mode 100644
index 0000000..b72fa8f
--- /dev/null
+++ b/src/TulsiEndToEndTests/Resources/Buttons/ObjCFoo.h
@@ -0,0 +1,18 @@
+// Copyright 2019 The Tulsi Authors. 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.
+
+#import <Foundation/Foundation.h>
+
+@interface ObjCFoo : NSObject
+@end
diff --git a/src/TulsiEndToEndTests/Resources/Buttons/ObjCFoo.m b/src/TulsiEndToEndTests/Resources/Buttons/ObjCFoo.m
new file mode 100644
index 0000000..68d2188
--- /dev/null
+++ b/src/TulsiEndToEndTests/Resources/Buttons/ObjCFoo.m
@@ -0,0 +1,23 @@
+// Copyright 2019 The Tulsi Authors. 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.
+
+#import "third_party/tulsi/src/TulsiEndToEndTests/Resources/Buttons/ObjCFoo.h"
+
+@implementation ObjCFoo
+
+- (NSString *)description {
+  return @"What a useless class!";
+}
+
+@end
diff --git a/src/TulsiEndToEndTests/TulsiEndToEndTest.swift b/src/TulsiEndToEndTests/TulsiEndToEndTest.swift
index 6b129ce..2efa943 100644
--- a/src/TulsiEndToEndTests/TulsiEndToEndTest.swift
+++ b/src/TulsiEndToEndTests/TulsiEndToEndTest.swift
@@ -175,6 +175,92 @@
     return xcodeProjectURL
   }
 
+  /// Returns the "json" style dictionary of a project.
+  ///
+  /// - Parameters:
+  ///   - xcodeProjectURL: URL of project.
+  /// - Returns
+  ///   - Dictionary of string to json style objects.
+  fileprivate func xcodeProjectDictionary(_ xcodeProjectURL: URL) -> [String: Any]? {
+    let completionInfo = ProcessRunner.launchProcessSync("/usr/bin/xcodebuild",
+                                                         arguments: ["-list",
+                                                                     "-json",
+                                                                     "-project",
+                                                                     xcodeProjectURL.path])
+    guard let stdoutput = String(data: completionInfo.stdout, encoding: .utf8),
+         !stdoutput.isEmpty else {
+      if let error = String(data: completionInfo.stderr, encoding: .utf8), !error.isEmpty {
+        XCTFail(error)
+      } else {
+        XCTFail("Xcode project tests did not return success.")
+      }
+      return nil
+    }
+    guard let jsonDeserialized = try? JSONSerialization.jsonObject(with: completionInfo.stdout, options: []) else {
+      XCTFail("Unable to decode from json: \(stdoutput)")
+      return nil
+    }
+    guard let jsonResponse = jsonDeserialized as? [String: Any] else {
+      XCTFail("Unable to decode from json as [String: Any]: \(stdoutput)")
+      return nil
+    }
+    guard let project = jsonResponse["project"] as? [String: Any] else {
+      XCTFail("Unable to extract project from \(jsonResponse)")
+      return nil
+    }
+    return project
+  }
+
+  /// Returns targets of a project.
+  ///
+  /// - Parameters:
+  ///   - xcodeProjectURL: URL of project.
+  /// - Returns
+  ///   - Array of target names.
+  func targetsOfXcodeProject(_ xcodeProjectURL: URL) -> [String] {
+    guard let project = xcodeProjectDictionary(xcodeProjectURL) else {
+      XCTFail("Unable to extract project for \(xcodeProjectURL)")
+      return []
+    }
+    guard let targets = project["targets"] as? [String] else {
+      XCTFail("Unable to extract targets from \(project)")
+      return []
+    }
+    return targets
+  }
+
+
+  /// Builds an Xcode Target
+  ///
+  /// - Parameters:
+  ///   - xcodeProjectURL: URL of project.
+  ///   - target: target name
+  func buildXcodeTarget(_ xcodeProjectURL: URL, target: String) {
+    let destination = "platform=iOS Simulator,name=\(TulsiEndToEndTest.simulatorName),OS=\(TulsiEndToEndTest.targetVersion)"
+    let completionInfo = ProcessRunner.launchProcessSync("/usr/bin/xcodebuild",
+                                                         arguments: ["build",
+                                                                     "-project",
+                                                                     xcodeProjectURL.path,
+                                                                     "-target",
+                                                                     target,
+                                                                     "-destination",
+                                                                     destination,
+                                                                     "SYMROOT=xcodeBuild"])
+
+    if let stdoutput = String(data: completionInfo.stdout, encoding: .utf8),
+        !stdoutput.isEmpty,
+        let result = stdoutput.split(separator: "\n").last {
+      if (String(result) != "** BUILD SUCCEEDED **") {
+        print(stdoutput)
+        XCTFail("\(completionInfo.commandlineString) did not return build success. Exit code: \(completionInfo.terminationStatus)")
+      }
+    } else if let error = String(data: completionInfo.stderr, encoding: .utf8), !error.isEmpty {
+      XCTFail(error)
+    } else {
+      XCTFail("Xcode project build did not return success \(xcodeProjectURL):\(target).")
+    }
+  }
+
   // Runs Xcode tests on the given Xcode project and scheme. This verifies that
   // the test passes and that rsync behavior is used to copy files.
   func testXcodeProject(_ xcodeProjectURL: URL, scheme: String) {
@@ -189,7 +275,8 @@
                                                                      destination])
 
     if let stdoutput = String(data: completionInfo.stdout, encoding: .utf8),
-      let result = stdoutput.split(separator: "\n").last {
+        !stdoutput.isEmpty,
+        let result = stdoutput.split(separator: "\n").last {
       XCTAssert(stdoutput.contains("Rsyncing"), "Failed to find 'Rsyncing' in:\n\(stdoutput)")
       if (String(result) != "** TEST SUCCEEDED **") {
         print(stdoutput)
@@ -198,7 +285,7 @@
     } else if let error = String(data: completionInfo.stderr, encoding: .utf8), !error.isEmpty {
       XCTFail(error)
     } else {
-      XCTFail("Xcode project tests did not return  success.")
+      XCTFail("Xcode project tests did not return success \(xcodeProjectURL):\(scheme).")
     }
   }
 
