Reverts non-xcode-available darwin crosstool generation.

RELNOTES: None.
PiperOrigin-RevId: 157529642
diff --git a/tools/cpp/cc_configure.bzl b/tools/cpp/cc_configure.bzl
index e4427cd..f6618be 100644
--- a/tools/cpp/cc_configure.bzl
+++ b/tools/cpp/cc_configure.bzl
@@ -120,7 +120,7 @@
   return stripped_stdout
 
 
-def _get_tool_paths(repository_ctx, cc):
+def _get_tool_paths(repository_ctx, darwin, cc):
   """Compute the path to the various tools. Doesn't %-escape the result!"""
   return {k: _which(repository_ctx, k, "/usr/bin/" + k)
           for k in [
@@ -134,7 +134,8 @@
               "strip",
           ]} + {
               "gcc": cc,
-              "ar": _which(repository_ctx, "ar", "/usr/bin/ar")
+              "ar": "/usr/bin/libtool"
+                    if darwin else _which(repository_ctx, "ar", "/usr/bin/ar")
           }
 
 
@@ -234,7 +235,7 @@
   return result.return_code == 0
 
 
-def _crosstool_content(repository_ctx, cc, cpu_value):
+def _crosstool_content(repository_ctx, cc, cpu_value, darwin):
   """Return the content for the CROSSTOOL file, in a dictionary."""
   supports_gold_linker = _is_gold_supported(repository_ctx, cc)
   return {
@@ -250,7 +251,7 @@
       "supports_interface_shared_objects": False,
       "supports_normalizing_ar": False,
       "supports_start_end_lib": supports_gold_linker,
-      "target_libc": _escape_string(_get_env_var(repository_ctx, "BAZEL_TARGET_LIBC", "local", False)),
+      "target_libc": "macosx" if darwin else _escape_string(_get_env_var(repository_ctx, "BAZEL_TARGET_LIBC", "local", False)),
       "target_cpu": _escape_string(_get_env_var(repository_ctx, "BAZEL_TARGET_CPU", cpu_value, False)),
       "target_system_name": _escape_string(_get_env_var(repository_ctx, "BAZEL_TARGET_SYSTEM", "local", False)),
       "cxx_flag": [
@@ -266,17 +267,22 @@
           repository_ctx, cc, "-Wl,-no-as-needed"
       ) + _add_option_if_supported(
           repository_ctx, cc, "-Wl,-z,relro,-z,now"
-      ) + (["-B" + str(repository_ctx.path(cc).dirname),
-            # Always have -B/usr/bin, see https://github.com/bazelbuild/bazel/issues/760.
-            "-B/usr/bin",
-            # Gold linker only? Can we enable this by default?
-            # "-Wl,--warn-execstack",
-            # "-Wl,--detect-odr-violations"
-           ] + _add_option_if_supported(
-               # Have gcc return the exit code from ld.
-               repository_ctx, cc, "-pass-exit-codes")
+      ) + ([
+          "-undefined",
+          "dynamic_lookup",
+          "-headerpad_max_install_names",
+          ] if darwin else [
+              "-B" + str(repository_ctx.path(cc).dirname),
+              # Always have -B/usr/bin, see https://github.com/bazelbuild/bazel/issues/760.
+              "-B/usr/bin",
+              # Gold linker only? Can we enable this by default?
+              # "-Wl,--warn-execstack",
+              # "-Wl,--detect-odr-violations"
+          ] + _add_option_if_supported(
+              # Have gcc return the exit code from ld.
+              repository_ctx, cc, "-pass-exit-codes")
           ),
-      "ar_flag": [],
+      "ar_flag": ["-static", "-s", "-o"] if darwin else [],
       "cxx_builtin_include_directory": _get_escaped_cxx_inc_directories(repository_ctx, cc),
       "objcopy_embed_flag": ["-I", "binary"],
       "unfiltered_cxx_flag":
@@ -299,7 +305,7 @@
           # All warnings are enabled. Maybe enable -Werror as well?
           "-Wall",
           # Enable a few more warnings that aren't part of -Wall.
-      ] + ([
+      ] + (["-Wthread-safety", "-Wself-assign"] if darwin else [
           "-B" + _escape_string(str(repository_ctx.path(cc).dirname)),
           # Always have -B/usr/bin, see https://github.com/bazelbuild/bazel/issues/760.
           "-B/usr/bin",
@@ -360,7 +366,7 @@
       '   tool_path { name: "strip" path: "%susr/bin/strip" }'% escaped_msys_root )
 
 
-def _opt_content():
+def _opt_content(darwin):
   """Return the content of the opt specific section of the CROSSTOOL file."""
   return {
       "compiler_flag": [
@@ -386,7 +392,7 @@
           "-ffunction-sections",
           "-fdata-sections"
       ],
-      "linker_flag": ["-Wl,--gc-sections"]
+      "linker_flag": [] if darwin else ["-Wl,--gc-sections"]
   }
 
 
@@ -669,7 +675,23 @@
     return ""
 
 
-def _coverage_feature():
+def _coverage_feature(darwin):
+  if darwin:
+    compile_flags = """flag_group {
+        flag: '-fprofile-instr-generate'
+        flag: '-fcoverage-mapping'
+      }"""
+    link_flags = """flag_group {
+        flag: '-fprofile-instr-generate'
+      }"""
+  else:
+    compile_flags = """flag_group {
+        flag: '-fprofile-arcs'
+        flag: '-ftest-coverage'
+      }"""
+    link_flags = """flag_group {
+        flag: '-lgcov'
+      }"""
   return """
     feature {
       name: 'coverage'
@@ -681,51 +703,37 @@
         action: 'c++-header-parsing'
         action: 'c++-header-preprocessing'
         action: 'c++-module-compile'
-        flag_group {
-          flag: '-fprofile-arcs'
-          flag: '-ftest-coverage'
-        }
+        """ + compile_flags + """
+
+
+
       }
       flag_set {
         action: 'c++-link-interface-dynamic-library'
         action: 'c++-link-dynamic-library'
         action: 'c++-link-executable'
-        flag_group {
-          flag: '-lgcov'
-        }
+        """ + link_flags + """
       }
     }
   """
 
-
-def _get_escaped_darwin_cxx_inc_directories(repository_ctx, cc):
-  """Compute the list of default C++ include directories on darwin.
-
-  Uses the xcode-locator tool to add all xcode developer directories to the
-  list of builtin include paths.
-
-  This should only be invoked on a darwin OS, as xcode-locator cannot be built
-  otherwise.
+def _get_escaped_xcode_cxx_inc_directories(repository_ctx, cc, xcode_toolchains):
+  """Compute the list of default C++ include paths on Xcode-enabled darwin.
 
   Args:
     repository_ctx: The repository context.
     cc: The default C++ compiler on the local system.
+    xcode_toolchains: A list containing the xcode toolchains available
   Returns:
-    A 2-tuple containing:
     include_paths: A list of builtin include paths.
-    err: An error string describing the error that occurred when attempting
-        to build and run xcode-locator, or None if the run was successful.
   """
 
-  (toolchains, xcodeloc_err) = run_xcode_locator(repository_ctx,
-                                                 Label("@bazel_tools//tools/osx:xcode_locator.m"))
-
   # TODO(cparsons): Falling back to the default C++ compiler builtin include
   # paths shouldn't be unnecessary once all actions are using xcrun.
   include_dirs = _get_escaped_cxx_inc_directories(repository_ctx, cc)
-  for toolchain in toolchains:
+  for toolchain in xcode_toolchains:
     include_dirs.append(_escape_string(toolchain.developer_dir))
-  return (include_dirs, xcodeloc_err)
+  return include_dirs
 
 
 def _impl(repository_ctx):
@@ -801,12 +809,17 @@
     })
   else:
     darwin = cpu_value == "darwin"
+    xcode_toolchains = []
+    if darwin:
+      (xcode_toolchains, xcodeloc_err) = run_xcode_locator(
+          repository_ctx,
+          Label("@bazel_tools//tools/osx:xcode_locator.m"))
     cc = _find_cc(repository_ctx)
     _tpl(repository_ctx, "osx_cc_wrapper.sh" if darwin else "linux_cc_wrapper.sh", {
         "%{cc}": _escape_string(str(cc)),
         "%{env}": _escape_string(_get_env(repository_ctx))
     }, "cc_wrapper.sh")
-    if darwin:
+    if xcode_toolchains:
       repository_ctx.symlink(
           Label("@bazel_tools//tools/objc:xcrunwrapper.sh"), "xcrunwrapper.sh")
       repository_ctx.symlink(
@@ -826,7 +839,7 @@
       repository_ctx.symlink(
           Label("@bazel_tools//tools/osx/crosstool:osx_archs.bzl"),
           "osx_archs.bzl")
-      (escaped_include_paths, xcodeloc_err) = _get_escaped_darwin_cxx_inc_directories(repository_ctx, cc)
+      escaped_include_paths = _get_escaped_xcode_cxx_inc_directories(repository_ctx, cc, xcode_toolchains)
       escaped_cxx_include_directories = []
       for path in escaped_include_paths:
         escaped_cxx_include_directories.append(("cxx_builtin_include_directory: \"%s\"" % path))
@@ -837,17 +850,21 @@
           Label("@bazel_tools//tools/osx/crosstool:CROSSTOOL.tpl"),
           {"%{cxx_builtin_include_directory}": "\n".join(escaped_cxx_include_directories)})
     else:
-      tool_paths = _get_tool_paths(repository_ctx, str(cc))
-      crosstool_content = _crosstool_content(repository_ctx, cc, cpu_value)
-      opt_content = _opt_content()
+      tool_paths = _get_tool_paths(repository_ctx, darwin,
+                                   "cc_wrapper.sh" if darwin else str(cc))
+      crosstool_content = _crosstool_content(repository_ctx, cc, cpu_value, darwin)
+      opt_content = _opt_content(darwin)
       dbg_content = _dbg_content()
       _tpl(repository_ctx, "BUILD", {
-          "%{name}": _escape_string(cpu_value),
-          "%{supports_param_files}": "1",
-          "%{cc_compiler_deps}": ":empty",
-          "%{compiler}": _escape_string(
-              _get_env_var(repository_ctx, "BAZEL_COMPILER", "compiler", False)),
+          "%{name}": cpu_value,
+          "%{supports_param_files}": "0" if darwin else "1",
+          "%{cc_compiler_deps}": ":cc_wrapper" if darwin else ":empty",
+          "%{compiler}": _get_env_var(repository_ctx, "BAZEL_COMPILER", "compiler", False),
       })
+      _tpl(repository_ctx,
+           "osx_cc_wrapper.sh" if darwin else "linux_cc_wrapper.sh",
+           {"%{cc}": str(cc), "%{env}": _get_env(repository_ctx)},
+           "cc_wrapper.sh")
       _tpl(repository_ctx, "CROSSTOOL", {
           "%{cpu}": _escape_string(cpu_value),
           "%{default_toolchain_name}": _escape_string(
@@ -862,7 +879,7 @@
           "%{opt_content}": _build_crosstool(opt_content, "    "),
           "%{dbg_content}": _build_crosstool(dbg_content, "    "),
           "%{cxx_builtin_include_directory}": "",
-          "%{coverage}": _coverage_feature(),
+          "%{coverage}": _coverage_feature(darwin),
           "%{msvc_env_tmp}": "",
           "%{msvc_env_path}": "",
           "%{msvc_env_include}": "",
diff --git a/tools/osx/xcode_configure.bzl b/tools/osx/xcode_configure.bzl
index 7326e60..6a8524a 100644
--- a/tools/osx/xcode_configure.bzl
+++ b/tools/osx/xcode_configure.bzl
@@ -107,7 +107,7 @@
     A 2-tuple containing:
     output: A list representing installed xcode toolchain information. Each
         element of the list is a struct containing information for one installed
-        toolchain. This is instead None if there was an error building or
+        toolchain. This is an empty list if there was an error building or
         running xcode-locator.
     err: An error string describing the error that occurred when attempting
         to build and run xcode-locator, or None if the run was successful.
@@ -124,7 +124,7 @@
             code=xcrun_result.return_code,
             err=xcrun_result.stderr,
             out=xcrun_result.stdout)
-    return (None, error_msg.replace("\n", " "))
+    return ([], error_msg.replace("\n", " "))
 
   xcode_locator_result = repository_ctx.execute(["./xcode-locator-bin", "-v"], 30)
   if (xcode_locator_result.return_code != 0):
@@ -134,7 +134,7 @@
             code=xcode_locator_result.return_code,
             err=xcode_locator_result.stderr,
             out=xcode_locator_result.stdout)
-    return (None, error_msg.replace("\n", " "))
+    return ([], error_msg.replace("\n", " "))
   xcode_toolchains = []
   # xcode_dump is comprised of newlines with different installed xcode versions,
   # each line of the form <version>:<comma_separated_aliases>:<developer_dir>.