Automated rollback of commit 2aeaeba66857c561dd6d63c79a213f1cabc3650d.

*** Reason for rollback ***

Breaks C++ on gcc 4.8.4 (specifically, TensorFlow: https://github.com/bazelbuild/bazel/issues/4474)

Fixes #4474

*** Original change description ***

When linking mostly-static Linux binaries, link libstdc++.a explicitly.

This allows libstdc++ to be statically linked, which is normally only
possible when invoking GCC as `g++` with the `-static-libstdc++` flag.

Fixes https://github.com/bazelbuild/bazel/issues/2840

See https://github.com/envoyproxy/envoy/issues/415 for additional
background and context.

cc @htuch (for Envoy) and @calpeyser @hlopko (who I talked to earlier about this)...

***

RELNOTES: None.
PiperOrigin-RevId: 182519445
diff --git a/src/test/shell/bazel/BUILD b/src/test/shell/bazel/BUILD
index d39cf7d..222628a 100644
--- a/src/test/shell/bazel/BUILD
+++ b/src/test/shell/bazel/BUILD
@@ -368,13 +368,6 @@
 )
 
 sh_test(
-    name = "cc_static_binary_test",
-    size = "medium",
-    srcs = ["cc_static_binary_test.sh"],
-    data = [":test-deps"],
-)
-
-sh_test(
     name = "bazel_sandboxing_test",
     size = "large",
     srcs = ["bazel_sandboxing_test.sh"],
diff --git a/src/test/shell/bazel/cc_static_binary_test.sh b/src/test/shell/bazel/cc_static_binary_test.sh
deleted file mode 100755
index c120ecb..0000000
--- a/src/test/shell/bazel/cc_static_binary_test.sh
+++ /dev/null
@@ -1,89 +0,0 @@
-#!/bin/bash
-#
-# Copyright 2017 The Bazel 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.
-#
-# Tests for Bazel's static linking of C++ binaries.
-
-CURRENT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
-source "${CURRENT_DIR}/../integration_test_setup.sh" \
-  || { echo "integration_test_setup.sh not found!" >&2; exit 1; }
-
-if ! is_linux; then
-  echo "Tests for cc_binary static linking currently only run in Linux (this platform is ${PLATFORM})" >&2
-  exit 0
-fi
-
-function set_up() {
-  mkdir -p cpp/static
-  cat > cpp/static/main.cc <<EOF
-#include <iostream>
-int main() {
-  std::cout << "hello world!\n";
-  return 0;
-}
-EOF
-}
-
-function test_linux_somewhat_static_cc_binary() {
-  cat > cpp/static/BUILD <<EOF
-cc_binary(
-  name = "somewhat-static",
-  srcs = ["main.cc"],
-  linkstatic = 1,
-)
-EOF
-  assert_build //cpp/static:somewhat-static
-}
-
-function test_linux_mostly_static_cc_binary() {
-  cat > cpp/static/BUILD <<EOF
-cc_binary(
-  name = "mostly-static",
-  srcs = ["main.cc"],
-  linkstatic = 1,
-  linkopts = [
-    "-static-libstdc++",
-    "-static-libgcc",
-  ],
-)
-EOF
-  assert_build //cpp/static:mostly-static
-  LDD_STDOUT=$(ldd bazel-bin/cpp/static/mostly-static)
-  if [[ "${LDD_STDOUT}" =~ "libstdc++" ]]; then
-    log_fatal "A mostly-static binary shouldn't dynamically link libstdc++"
-  fi
-}
-
-function test_linux_fully_static_cc_binary() {
-  cat > cpp/static/BUILD <<EOF
-cc_binary(
-  name = "fully-static",
-  srcs = ["main.cc"],
-  linkstatic = 1,
-  linkopts = [
-    "-static",
-    "-static-libstdc++",
-    "-static-libgcc",
-  ],
-)
-EOF
-  assert_build //cpp/static:fully-static
-  LDD_STDOUT=$(ldd bazel-bin/cpp/static/fully-static || true)
-  if [[ ! "${LDD_STDOUT}" =~ "not a dynamic executable" ]]; then
-    log_fatal "Expected a fully-static binary"
-  fi
-}
-
-run_suite "static cc_binary"
diff --git a/src/test/shell/testenv.sh b/src/test/shell/testenv.sh
index e0bca65..e095d4d 100755
--- a/src/test/shell/testenv.sh
+++ b/src/test/shell/testenv.sh
@@ -30,10 +30,6 @@
   [[ "${PLATFORM}" =~ darwin ]]
 }
 
-function is_linux() {
-  [[ "${PLATFORM}" =~ linux ]]
-}
-
 function _log_base() {
   prefix=$1
   shift
diff --git a/tools/cpp/CROSSTOOL.tpl b/tools/cpp/CROSSTOOL.tpl
index 2f224e6..67283ad 100644
--- a/tools/cpp/CROSSTOOL.tpl
+++ b/tools/cpp/CROSSTOOL.tpl
@@ -129,7 +129,6 @@
 %{opt_content}
   }
   linking_mode_flags { mode: DYNAMIC }
-%{link_content}
 
 %{coverage}
 
diff --git a/tools/cpp/unix_cc_configure.bzl b/tools/cpp/unix_cc_configure.bzl
index 1df03d2..82cfaa2 100644
--- a/tools/cpp/unix_cc_configure.bzl
+++ b/tools/cpp/unix_cc_configure.bzl
@@ -65,29 +65,6 @@
   return "\n".join(lines)
 
 
-def _build_link_content():
-  # `-static-libstdc++` is only supported when invoking GCC as `g++`, and
-  # `-lstdc++` forces dynamic linking of libstdc++. To get desired
-  # mostly-static behavior, invoke the link by explicitly naming a static
-  # library archive.
-  #
-  # https://github.com/bazelbuild/bazel/issues/2840
-  return """
-  linking_mode_flags {
-    mode: DYNAMIC
-    linker_flag: "-lstdc++"
-  }
-  linking_mode_flags {
-    mode: FULLY_STATIC
-    linker_flag: "-lstdc++"
-  }
-  linking_mode_flags {
-    mode: MOSTLY_STATIC
-    linker_flag: "-l:libstdc++.a"
-  }
-  """
-
-
 def _build_tool_path(d):
   """Build the list of %-escaped tool_path for the CROSSTOOL file."""
   lines = []
@@ -242,6 +219,7 @@
           "-std=c++0x",
       ] + _escaped_cplus_include_paths(repository_ctx),
       "linker_flag": [
+          "-lstdc++",
           "-lm",  # Some systems expect -lm in addition to -lstdc++
           # Anticipated future default.
       ] + (
@@ -450,7 +428,6 @@
                     _build_tool_path(tool_paths),
       "%{opt_content}": _build_crosstool(opt_content, "    "),
       "%{dbg_content}": _build_crosstool(dbg_content, "    "),
-      "%{link_content}": _build_link_content(),
       "%{cxx_builtin_include_directory}": "",
       "%{coverage}": _coverage_feature(darwin),
       "%{msvc_env_tmp}": "",
diff --git a/tools/cpp/windows_cc_configure.bzl b/tools/cpp/windows_cc_configure.bzl
index 23b150c..7381c11 100644
--- a/tools/cpp/windows_cc_configure.bzl
+++ b/tools/cpp/windows_cc_configure.bzl
@@ -315,7 +315,6 @@
         "%{msys_x64_mingw_content}": _get_escaped_windows_msys_crosstool_content(repository_ctx, use_mingw = True),
         "%{opt_content}": "",
         "%{dbg_content}": "",
-        "%{link_content}": "",
         "%{cxx_builtin_include_directory}": "",
         "%{coverage}": "",
     })