Move xcode-locator into src/tools packages, defining it as a target under @bazel_tools. Currently the tool still remains in embedded_binaries, but we will migrate away from that: Eventually it can simply live just under @bazel_tools.

--
MOS_MIGRATED_REVID=123436822
diff --git a/scripts/bootstrap/compile.sh b/scripts/bootstrap/compile.sh
index 3862bde..6faa330 100755
--- a/scripts/bootstrap/compile.sh
+++ b/scripts/bootstrap/compile.sh
@@ -256,7 +256,7 @@
 cp src/main/tools/build_interface_so ${ARCHIVE_DIR}/_embedded_binaries/build_interface_so
 cp src/main/tools/jdk.BUILD ${ARCHIVE_DIR}/_embedded_binaries/jdk.BUILD
 cp $OUTPUT_DIR/libblaze.jar ${ARCHIVE_DIR}
-cp src/main/tools/xcode_locator_stub.sh ${ARCHIVE_DIR}/_embedded_binaries/xcode-locator
+cp src/tools/xcode/xcodelocator/xcode_locator_stub.sh ${ARCHIVE_DIR}/_embedded_binaries/xcode-locator
 
 # bazel build using bootstrap version
 function bootstrap_build() {
diff --git a/src/BUILD b/src/BUILD
index 6604f6f..443eba1 100644
--- a/src/BUILD
+++ b/src/BUILD
@@ -26,9 +26,9 @@
         ":libunix",
         "//src/main/tools:build-runfiles",
         "//src/main/tools:process-wrapper",
-        "//src/main/tools:xcode-locator",
         "//src/main/tools:namespace-sandbox",
         "//src/main/tools:build_interface_so",
+        "//src/tools/xcode/xcodelocator:xcode-locator",
     ] + embedded_tools,
     outs = ["install_base_key" + suffix],
     cmd = select({
@@ -105,6 +105,7 @@
         "//src/tools/xcode/momcwrapper:momcwrapper",
         "//src/tools/xcode/swiftstdlibtoolwrapper:swiftstdlibtoolwrapper",
         "//src/tools/xcode/environment:environment_plist",
+        "//src/tools/xcode/xcodelocator:xcode-locator",
         "//src/tools/xcode/xcrunwrapper:xcrunwrapper",
         "//src/objc_tools/bundlemerge:bundlemerge_deploy.jar",
         "//src/objc_tools/plmerge:plmerge_deploy.jar",
@@ -180,10 +181,10 @@
         ":libunix",
         "//src/main/tools:build-runfiles",
         "//src/main/tools:process-wrapper",
-        "//src/main/tools:xcode-locator",
         "//src/main/tools:jdk-support",
         "//src/main/tools:namespace-sandbox",
         "//src/main/tools:build_interface_so",
+        "//src/tools/xcode/xcodelocator:xcode-locator",
         ":java-version",
     ],
     outs = ["package" + suffix + ".zip"],
@@ -302,6 +303,7 @@
         "//src/tools/xcode/realpath:srcs",
         "//src/tools/xcode/stdredirect:srcs",
         "//src/tools/xcode/swiftstdlibtoolwrapper:srcs",
+        "//src/tools/xcode/xcodelocator:srcs",
         "//src/tools/xcode/xcrunwrapper:srcs",
         "//src/tools/xcode-common:srcs",
     ],
diff --git a/src/create_embedded_tools.sh b/src/create_embedded_tools.sh
index bba803a..cb0295e 100755
--- a/src/create_embedded_tools.sh
+++ b/src/create_embedded_tools.sh
@@ -43,6 +43,7 @@
     *src/objc_tools/*) OUTPUT_PATH=tools/objc/precomp_${i##*/} ;;
     *xcode*StdRedirect.dylib) OUTPUT_PATH=tools/objc/StdRedirect.dylib ;;
     *xcode*realpath) OUTPUT_PATH=tools/objc/realpath ;;
+    *xcode*xcode-locator) OUTPUT_PATH=tools/objc/xcode-locator ;;
     *src/tools/xcode/*) OUTPUT_PATH=tools/objc/${i##*/}.sh ;;
     *) OUTPUT_PATH=$(echo $i | sed 's_^.*bazel-out/[^/]*/bin/__') ;;
   esac
diff --git a/src/main/tools/BUILD b/src/main/tools/BUILD
index 6f2832c..de5ec21 100644
--- a/src/main/tools/BUILD
+++ b/src/main/tools/BUILD
@@ -51,28 +51,6 @@
     }),
 )
 
-DARWIN_XCODE_LOCATOR_COMPILE_COMMAND = """
-  /usr/bin/xcrun clang -fobjc-arc -framework CoreServices \
-      -framework Foundation -o $@ $<
-"""
-
-genrule(
-    name = "xcode-locator-genrule",
-    srcs = select({
-        "//src:darwin": ["xcode_locator.m"],
-        "//src:darwin_x86_64": ["xcode_locator.m"],
-        "//conditions:default": ["xcode_locator_stub.sh"],
-    }),
-    outs = ["xcode-locator"],
-    cmd = select({
-        "//src:darwin": DARWIN_XCODE_LOCATOR_COMPILE_COMMAND,
-        "//src:darwin_x86_64": DARWIN_XCODE_LOCATOR_COMPILE_COMMAND,
-        "//conditions:default": "cp $< $@",
-    }),
-    local = 1,
-    output_to_bindir = 1,
-)
-
 filegroup(
     name = "jdk-support",
     srcs = [
diff --git a/src/test/shell/bazel/bazel_objc_test.sh b/src/test/shell/bazel/bazel_objc_test.sh
index 410d95e..5a80672 100755
--- a/src/test/shell/bazel/bazel_objc_test.sh
+++ b/src/test/shell/bazel/bazel_objc_test.sh
@@ -161,4 +161,22 @@
   expect_log "SDK \"iphonesimulator2.34\" cannot be located."
 }
 
+function test_xcodelocator_embedded_tool() {
+  rm -rf ios
+  mkdir -p ios
+
+  cat >ios/BUILD <<EOF
+genrule(
+    name = "invoke_tool",
+    srcs = ["@bazel_tools//tools/objc:xcode-locator"],
+    outs = ["tool_output"],
+    cmd = "\$< > \$@",
+    tags = ["requires-darwin"],
+)
+EOF
+
+  bazel build --verbose_failures //ios:invoke_tool >$TEST_log 2>&1 \
+      || fail "should be able to resolve xcode-locator"
+}
+
 run_suite "objc/ios test suite"
diff --git a/src/tools/xcode/xcodelocator/BUILD b/src/tools/xcode/xcodelocator/BUILD
new file mode 100644
index 0000000..48eb694
--- /dev/null
+++ b/src/tools/xcode/xcodelocator/BUILD
@@ -0,0 +1,28 @@
+package(default_visibility = ["//src:__subpackages__"])
+
+filegroup(
+    name = "srcs",
+    srcs = glob(["**"]),
+)
+
+DARWIN_XCODE_LOCATOR_COMPILE_COMMAND = """
+  /usr/bin/xcrun clang -fobjc-arc -framework CoreServices \
+      -framework Foundation -o $@ $<
+"""
+
+genrule(
+    name = "xcode-locator-genrule",
+    srcs = select({
+        "//src:darwin": ["xcode_locator.m"],
+        "//src:darwin_x86_64": ["xcode_locator.m"],
+        "//conditions:default": ["xcode_locator_stub.sh"],
+    }),
+    outs = ["xcode-locator"],
+    cmd = select({
+        "//src:darwin": DARWIN_XCODE_LOCATOR_COMPILE_COMMAND,
+        "//src:darwin_x86_64": DARWIN_XCODE_LOCATOR_COMPILE_COMMAND,
+        "//conditions:default": "cp $< $@",
+    }),
+    local = 1,
+    output_to_bindir = 1,
+)
diff --git a/src/main/tools/xcode_locator.m b/src/tools/xcode/xcodelocator/xcode_locator.m
similarity index 92%
rename from src/main/tools/xcode_locator.m
rename to src/tools/xcode/xcodelocator/xcode_locator.m
index 5b7a12e..09ebc00 100644
--- a/src/main/tools/xcode_locator.m
+++ b/src/tools/xcode/xcodelocator/xcode_locator.m
@@ -91,17 +91,17 @@
 
 int main(int argc, const char * argv[]) {
   @autoreleasepool {
-    NSString *version = nil;
+    NSString *versionArg = nil;
     if (argc == 1) {
-      version = @"";
+      versionArg = @"";
     } else if (argc == 2) {
-      version = [NSString stringWithUTF8String:argv[1]];
+      versionArg = [NSString stringWithUTF8String:argv[1]];
       NSCharacterSet *versSet = [NSCharacterSet characterSetWithCharactersInString:@"0123456789."];
-      if ([version rangeOfCharacterFromSet:versSet.invertedSet].length != 0) {
-        version = nil;
+      if ([versionArg rangeOfCharacterFromSet:versSet.invertedSet].length != 0) {
+        versionArg = nil;
       }
     }
-    if (version == nil) {
+    if (versionArg == nil) {
       printf("xcode_locator <version_number>\n"
              "Given a version number, or partial version number in x.y.z format, will attempt "
              "to return the path to the appropriate developer directory.\nOmitting a version "
@@ -137,7 +137,7 @@
       AddEntryToDictionary(entry, dict);
     }
 
-    XcodeVersionEntry *entry = [dict objectForKey:version];
+    XcodeVersionEntry *entry = [dict objectForKey:versionArg];
     if (entry) {
       printf("%s\n", entry.url.fileSystemRepresentation);
       return 0;
@@ -150,6 +150,6 @@
       printf("\t\"%s\": \"%s\",\n", version.UTF8String, entry.url.fileSystemRepresentation);
     }
     printf("}\n");
-    return (version == nil ? 0 : 1);
+    return ([@"" isEqualToString:versionArg] ? 0 : 1);
   }
 }
diff --git a/src/main/tools/xcode_locator_stub.sh b/src/tools/xcode/xcodelocator/xcode_locator_stub.sh
similarity index 100%
rename from src/main/tools/xcode_locator_stub.sh
rename to src/tools/xcode/xcodelocator/xcode_locator_stub.sh