Rollback of commit deeeb31f8ba0f196fbc9ca2a177d59d57ea50b32.

*** Reason for rollback ***

Breaks builds with current blaze

*** Original change description ***

Add a way to select non-default Xcode toolchain

* Adds a flag --xcode_toolchain which sets TOOLCHAINS env variable for xcrun.
* Updates swift_library to work with this flag when selecting Swift runtime location.
* By default the flag has a null value and is not set in env.

--
MOS_MIGRATED_REVID=135053864
diff --git a/src/main/java/com/google/devtools/build/lib/rules/apple/AppleCommandLineOptions.java b/src/main/java/com/google/devtools/build/lib/rules/apple/AppleCommandLineOptions.java
index 3d71ca5..5d2830a 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/apple/AppleCommandLineOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/apple/AppleCommandLineOptions.java
@@ -227,17 +227,6 @@
     }
   }
 
-  @Option(
-    name = "xcode_toolchain",
-    defaultValue = "null",
-    category = "flags",
-    help = "The identifier of an Xcode toolchain to use for builds. Currently only the toolchains "
-           + "that ship with Xcode are supported. For example, in addition to the default toolchain"
-           + " Xcode 8 has 'com.apple.dt.toolchain.Swift_2_3' which can be used for building legacy"
-           + " Swift code."
-  )
-  public String xcodeToolchain;
-
   @Option(name = "apple_bitcode",
       converter = AppleBitcodeMode.Converter.class,
       // TODO(blaze-team): Default to embedded_markers when fully implemented.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/apple/AppleConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/apple/AppleConfiguration.java
index e0d2427..59a6fc1 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/apple/AppleConfiguration.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/apple/AppleConfiguration.java
@@ -84,7 +84,6 @@
   private final ImmutableList<String> tvosCpus;
   private final AppleBitcodeMode bitcodeMode;
   private final Label xcodeConfigLabel;
-  @Nullable private final String xcodeToolchain;
   @Nullable private final Label defaultProvisioningProfileLabel;
   private final boolean disableNativeSwiftRules;
 
@@ -128,7 +127,6 @@
     this.xcodeConfigLabel =
         Preconditions.checkNotNull(appleOptions.xcodeVersionConfig, "xcodeConfigLabel");
     this.defaultProvisioningProfileLabel = appleOptions.defaultProvisioningProfile;
-    this.xcodeToolchain = appleOptions.xcodeToolchain;
     this.disableNativeSwiftRules = appleOptions.disableNativeSwiftRules;
   }
 
@@ -521,17 +519,6 @@
     return Joiner.on('-').join(components);
   }
 
-  /** Returns the identifier for an Xcode toolchain to use with tools. */
-  @SkylarkCallable(
-    name = "xcode_toolchain",
-    doc = "Identifier for the custom Xcode toolchain to use in build or None if not specified",
-    allowReturnNones = true,
-    structField = true
-  )
-  public String getXcodeToolchain() {
-    return xcodeToolchain;
-  }
-
   /**
    * Whether the native Swift support should be disabled. Used to deprecate said functionality.
    */
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java
index 8136e83..fa16aaf 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java
@@ -1445,22 +1445,9 @@
     }
 
     if (objcProvider.is(USES_SWIFT)) {
-      // Check if there's a swift library path already. If that's not the case - fall back to
-      // the default one. This is for backwards compatibility with Swift native rules.
-      // TODO(b/30281236): Remove when native Swift is deprecated.
-      boolean swiftLibDirSet = false;
-      for (String arg : objcProvider.get(ObjcProvider.LINKOPT)) {
-        if (arg.startsWith("-L") && arg.contains("usr/lib/swift")) {
-          swiftLibDirSet = true;
-          break;
-        }
-      }
-
-      if (!swiftLibDirSet) {
-        commandLine
-            .add("-L")
-            .add(AppleToolchain.swiftLibDir(appleConfiguration.getSingleArchPlatform()));
-      }
+      commandLine
+          .add("-L")
+          .add(AppleToolchain.swiftLibDir(appleConfiguration.getSingleArchPlatform()));
     }
 
     for (String linkopt : attributes.linkopts()) {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ReleaseBundlingSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ReleaseBundlingSupport.java
index 4cf8e62..009b3fd 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ReleaseBundlingSupport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ReleaseBundlingSupport.java
@@ -1058,21 +1058,13 @@
       return;
     }
 
-    AppleConfiguration appleConfiguration = ruleContext.getFragment(AppleConfiguration.class);
-
-    CustomCommandLine.Builder commandLine = CustomCommandLine.builder();
-    if (appleConfiguration.getXcodeToolchain() != null) {
-      commandLine.add("--toolchain").add(appleConfiguration.getXcodeToolchain());
-    }
-
-    commandLine
-        .add("--output_zip_path")
-        .addPath(intermediateArtifacts.swiftFrameworksFileZip().getExecPath())
-        .add("--bundle_path")
-        .add("Frameworks")
-        .add("--platform")
-        .add(platform.getLowerCaseNameInPlist())
-        .addExecPath("--scan-executable", combinedArchBinary);
+    CustomCommandLine.Builder commandLine =
+        CustomCommandLine.builder()
+            .addPath(intermediateArtifacts.swiftFrameworksFileZip().getExecPath())
+            .add("Frameworks")
+            .add("--platform")
+            .add(platform.getLowerCaseNameInPlist())
+            .addExecPath("--scan-executable", combinedArchBinary);
 
     ruleContext.registerAction(
         ObjcRuleClasses.spawnAppleEnvActionBuilder(ruleContext, platform)
@@ -1090,21 +1082,13 @@
       return;
     }
 
-    AppleConfiguration configuration = ruleContext.getFragment(AppleConfiguration.class);
-
-    CustomCommandLine.Builder commandLine = CustomCommandLine.builder();
-    if (configuration.getXcodeToolchain() != null) {
-      commandLine.add("--toolchain").add(configuration.getXcodeToolchain());
-    }
-
-    commandLine
-        .add("--output_zip_path")
-        .addPath(intermediateArtifacts.swiftSupportZip().getExecPath())
-        .add("--bundle_path")
-        .add("SwiftSupport/" + platform.getLowerCaseNameInPlist())
-        .add("--platform")
-        .add(platform.getLowerCaseNameInPlist())
-        .addExecPath("--scan-executable", combinedArchBinary);
+    CustomCommandLine.Builder commandLine =
+        CustomCommandLine.builder()
+            .addPath(intermediateArtifacts.swiftSupportZip().getExecPath())
+            .add("SwiftSupport/" + platform.getLowerCaseNameInPlist())
+            .add("--platform")
+            .add(platform.getLowerCaseNameInPlist())
+            .addExecPath("--scan-executable", combinedArchBinary);
 
     ruleContext.registerAction(
         ObjcRuleClasses.spawnAppleEnvActionBuilder(ruleContext, platform)
diff --git a/src/tools/xcode/swiftstdlibtoolwrapper/swiftstdlibtoolwrapper.sh b/src/tools/xcode/swiftstdlibtoolwrapper/swiftstdlibtoolwrapper.sh
index d4f2f4f..7197cdc 100755
--- a/src/tools/xcode/swiftstdlibtoolwrapper/swiftstdlibtoolwrapper.sh
+++ b/src/tools/xcode/swiftstdlibtoolwrapper/swiftstdlibtoolwrapper.sh
@@ -17,9 +17,7 @@
 # swiftstdlibtoolwrapper runs swift-stdlib-tool and zips up the output.
 # This script only runs on darwin and you must have Xcode installed.
 #
-# --output_zip_path - the path to place the output zip file.
-# --bundle_path - the path inside of the archive to where libs will be copied.
-# --toolchain - toolchain identifier to use with xcrun.
+# $1 OUTZIP - the path to place the output zip file.
 
 set -eu
 
@@ -27,50 +25,15 @@
 REALPATH="${MY_LOCATION}/realpath"
 WRAPPER="${MY_LOCATION}/xcrunwrapper.sh"
 
-TOOL_ARGS=()
-while [[ $# -gt 0 ]]; do
-  ARG="$1"
-  shift
-  case "${ARG}" in
-    --output_zip_path)
-      ARG="$1"
-      shift
-      OUTZIP=$("${REALPATH}" "${ARG}")
-      ;;
-    --bundle_path)
-      ARG="$1"
-      shift
-      PATH_INSIDE_ZIP="$ARG"
-      ;;
-    --toolchain)
-      ARG="$1"
-      shift
-      TOOLCHAIN=${ARG}
-      ;;
-    # Remaining args are swift-stdlib-tool args
-    *)
-     TOOL_ARGS+=("$ARG")
-     ;;
-    esac
-done
-
-
+OUTZIP=$("${REALPATH}" "$1")
+PATH_INSIDE_ZIP="$2"
+shift 2
 TEMPDIR=$(mktemp -d "${TMPDIR:-/tmp}/swiftstdlibtoolZippingOutput.XXXXXX")
 trap "rm -rf \"$TEMPDIR\"" EXIT
 
 FULLPATH="$TEMPDIR/$PATH_INSIDE_ZIP"
 
-XCRUN_ARGS=()
-
-if [ -n "${TOOLCHAIN:-}" ]; then
-  XCRUN_ARGS+=(--toolchain "$TOOLCHAIN")
-fi
-
-XCRUN_ARGS+=(swift-stdlib-tool --copy --verbose )
-XCRUN_ARGS+=(--destination "$FULLPATH")
-XCRUN_ARGS+=( "${TOOL_ARGS[@]}" )
-
-$WRAPPER "${XCRUN_ARGS[@]}"
+$WRAPPER swift-stdlib-tool --copy --verbose --destination "$FULLPATH" "$@"
 
 # Need to push/pop tempdir so it isn't the current working directory
 # when we remove it via the EXIT trap.
diff --git a/tools/build_defs/apple/swift.bzl b/tools/build_defs/apple/swift.bzl
index 3cc22fe..9b49668 100644
--- a/tools/build_defs/apple/swift.bzl
+++ b/tools/build_defs/apple/swift.bzl
@@ -78,39 +78,6 @@
   """Returns a module name for the given rule context."""
   return ctx.label.package.lstrip("//").replace("/", "_") + "_" + ctx.label.name
 
-def _swift_lib_dir(ctx):
-  """Returns the location of swift runtime directory to link against."""
-  # TODO(dmishe): Expose this template from native code.
-  developer_dir = "__BAZEL_XCODE_DEVELOPER_DIR__"
-  platform_str = ctx.fragments.apple.single_arch_platform.name_in_plist.lower()
-
-  toolchain_name = "XcodeDefault"
-  if hasattr(ctx.fragments.apple, "xcode_toolchain"):
-    toolchain = ctx.fragments.apple.xcode_toolchain
-
-    # We cannot use non Xcode-packaged toolchains, and the only one non-default
-    # toolchain known to exist (as of Xcode 8.1) is this one.
-    # TODO(b/29338444): Write an integration test when Xcode 8 is available.
-    if toolchain == "com.apple.dt.toolchain.Swift_2_3":
-      toolchain_name = "Swift_2.3"
-
-  return "{0}/Toolchains/{1}.xctoolchain/usr/lib/swift/{2}".format(
-      developer_dir, toolchain_name, platform_str)
-
-def _swift_linkopts(ctx):
-  """Returns additional linker arguments for the given rule context."""
-  return set(["-L" + _swift_lib_dir(ctx)])
-
-def _swift_xcrun_args(ctx):
-  """Returns additional arguments that should be passed to xcrun."""
-  # TODO(dmishe): Remove this check when xcode_toolchain is available by default
-  args = []
-  if hasattr(ctx.fragments.apple, "xcode_toolchain"):
-    if ctx.fragments.apple.xcode_toolchain:
-      args += ["--toolchain", ctx.fragments.apple.xcode_toolchain]
-
-  return args
-
 def _swift_library_impl(ctx):
   """Implementation for swift_library Skylark rule."""
   # TODO(b/29772303): Assert xcode version.
@@ -235,7 +202,7 @@
       # https://llvm.org/bugs/show_bug.cgi?id=19501
       + ["-fmodule-map-file=%s" % x.path for x in objc_module_maps])
 
-  args = _swift_xcrun_args(ctx) + [
+  args = [
       "swiftc",
       "-emit-object",
       "-emit-module-path",
@@ -286,8 +253,7 @@
       library=set([output_lib] + dep_libs),
       header=set([output_header]),
       providers=objc_providers,
-      linkopt=_swift_linkopts(ctx),
-      uses_swift=True,)
+      uses_swift=True)
 
   return struct(
       swift=struct(