internal: update native deps and linkstamp API updates to Bazel rolling APIs (#1697)

This basically upstreams part of Google-internal patches for building
native dep DSOs.

The APIs it uses are only available on Bazel rolling, but the code paths
that activate them aren't enabled in rules_python.
diff --git a/python/private/common/py_executable.bzl b/python/private/common/py_executable.bzl
index a24bad6..a0720c1 100644
--- a/python/private/common/py_executable.bzl
+++ b/python/private/common/py_executable.bzl
@@ -200,6 +200,13 @@
         providers = modern_providers,
     )
 
+def _get_build_info(ctx, cc_toolchain):
+    build_info_files = py_internal.cc_toolchain_build_info_files(cc_toolchain)
+    if cc_helper.is_stamping_enabled(ctx):
+        return build_info_files.non_redacted_build_info_files.to_list()
+    else:
+        return build_info_files.redacted_build_info_files.to_list()
+
 def _validate_executable(ctx):
     if ctx.attr.python_version != "PY3":
         fail("It is not allowed to use Python 2")
@@ -509,6 +516,7 @@
             is_test = is_test,
             requested_features = cc_feature_config.requested_features,
             feature_configuration = cc_feature_config.feature_configuration,
+            cc_toolchain = cc_details.cc_toolchain,
         )
         ctx.actions.symlink(
             output = dso,
@@ -517,19 +525,22 @@
         )
     else:
         linked_lib = dso
-    _cc_common.link(
+
+    # The regular cc_common.link API can't be used because several
+    # args are private-use only; see # private comments
+    py_internal.link(
         name = ctx.label.name,
         actions = ctx.actions,
         linking_contexts = [cc_info.linking_context],
         output_type = "dynamic_library",
-        never_link = True,
-        native_deps = True,
+        never_link = True,  # private
+        native_deps = True,  # private
         feature_configuration = cc_feature_config.feature_configuration,
         cc_toolchain = cc_details.cc_toolchain,
-        test_only_target = is_test,
+        test_only_target = is_test,  # private
         stamp = 1 if is_stamping_enabled(ctx, semantics) else 0,
-        main_output = linked_lib,
-        use_shareable_artifact_factory = True,
+        main_output = linked_lib,  # private
+        use_shareable_artifact_factory = True,  # private
         # NOTE: Only flags not captured by cc_info.linking_context need to
         # be manually passed
         user_link_flags = semantics.get_native_deps_user_link_flags(ctx),
@@ -545,8 +556,9 @@
         cc_info,
         is_test,
         feature_configuration,
-        requested_features):
-    linkstamps = cc_info.linking_context.linkstamps()
+        requested_features,
+        cc_toolchain):
+    linkstamps = py_internal.linking_context_linkstamps(cc_info.linking_context)
 
     partially_disabled_thin_lto = (
         _cc_common.is_enabled(
@@ -570,8 +582,11 @@
             for input in cc_info.linking_context.linker_inputs.to_list()
             for flag in input.user_link_flags
         ],
-        linkstamps = [linkstamp.file() for linkstamp in linkstamps.to_list()],
-        build_info_artifacts = _cc_common.get_build_info(ctx) if linkstamps else [],
+        linkstamps = [
+            py_internal.linkstamp_file(linkstamp)
+            for linkstamp in linkstamps.to_list()
+        ],
+        build_info_artifacts = _get_build_info(ctx, cc_toolchain) if linkstamps else [],
         features = requested_features,
         is_test_target_partially_disabled_thin_lto = is_test and partially_disabled_thin_lto,
     )