Move CC link constants to enum-struct in cc_helper in builtins.

PiperOrigin-RevId: 493283267
Change-Id: I9960c07dd9098d46ddbda969f8b6c5339a182fc2
diff --git a/src/main/starlark/builtins_bzl/common/cc/cc_binary.bzl b/src/main/starlark/builtins_bzl/common/cc/cc_binary.bzl
index 50c847c..d3f3f00 100644
--- a/src/main/starlark/builtins_bzl/common/cc/cc_binary.bzl
+++ b/src/main/starlark/builtins_bzl/common/cc/cc_binary.bzl
@@ -16,7 +16,7 @@
 
 load(":common/cc/semantics.bzl", "semantics")
 load(":common/cc/experimental_cc_shared_library.bzl", "CcSharedLibraryInfo", "GraphNodeInfo", "build_exports_map_from_only_dynamic_deps", "build_link_once_static_libs_map", "merge_cc_shared_library_infos", "throw_linked_but_not_exported_errors")
-load(":common/cc/cc_helper.bzl", "cc_helper")
+load(":common/cc/cc_helper.bzl", "cc_helper", "linker_mode")
 
 CcInfo = _builtins.toplevel.CcInfo
 ProtoInfo = _builtins.toplevel.ProtoInfo
@@ -28,9 +28,6 @@
 _EXECUTABLE = "executable"
 _DYNAMIC_LIBRARY = "dynamic_library"
 
-_LINKING_DYNAMIC = "dynamic_linking_mode"
-_LINKING_STATIC = "static_linking_mode"
-
 _IOS_SIMULATOR_TARGET_CPUS = ["ios_x86_64", "ios_i386", "ios_sim_arm64"]
 _IOS_DEVICE_TARGET_CPUS = ["ios_armv6", "ios_arm64", "ios_armv7", "ios_armv7s", "ios_arm64e"]
 _WATCHOS_SIMULATOR_TARGET_CPUS = ["watchos_i386", "watchos_x86_64", "watchos_arm64"]
@@ -225,8 +222,8 @@
     builder_artifacts = []
     builder_transitive_artifacts = []
 
-    builder = ctx.runfiles(transitive_files = _add(ctx, linking_mode != _LINKING_DYNAMIC), collect_default = True)
-    coverage_runtime_objects_builder = ctx.runfiles(transitive_files = _add(ctx, linking_mode != _LINKING_DYNAMIC))
+    builder = ctx.runfiles(transitive_files = _add(ctx, linking_mode != linker_mode.LINKING_DYNAMIC), collect_default = True)
+    coverage_runtime_objects_builder = ctx.runfiles(transitive_files = _add(ctx, linking_mode != linker_mode.LINKING_DYNAMIC))
 
     runtime_objects_for_coverage.extend(coverage_runtime_objects_builder.files.to_list())
     dynamic_libraries_for_runtime = _get_dynamic_libraries_for_runtime(True, libraries)
@@ -247,7 +244,7 @@
         builder = builder.merge(dynamic_dep[DefaultInfo].default_runfiles)
 
     builder = builder.merge_all(runfiles_is_static + runfiles_is_not_static)
-    if linking_mode == _LINKING_DYNAMIC:
+    if linking_mode == linker_mode.LINKING_DYNAMIC:
         dynamic_runtime_lib = cc_toolchain.dynamic_runtime_lib(feature_configuration = feature_configuration)
         dynamic_runtime_lib_list = dynamic_runtime_lib.to_list()
         builder_transitive_artifacts.extend(dynamic_runtime_lib_list)
@@ -262,7 +259,7 @@
         _default_runfiles_function(ctx, runtime)
         for runtime in semantics.get_cc_runtimes(ctx, _is_link_shared(ctx))
     ] + [
-        ctx.runfiles(transitive_files = _runfiles_function(ctx, runtime, linking_mode != _LINKING_DYNAMIC))
+        ctx.runfiles(transitive_files = _runfiles_function(ctx, runtime, linking_mode != linker_mode.LINKING_DYNAMIC))
         for runtime in semantics.get_cc_runtimes(ctx, _is_link_shared(ctx))
     ])
 
@@ -326,7 +323,7 @@
             if lto_backend_artifact.dwo_file() != None:
                 dwo_files.append(lto_backend_artifact.dwo_file())
 
-    if linking_mode != _LINKING_DYNAMIC:
+    if linking_mode != linker_mode.LINKING_DYNAMIC:
         if use_pic:
             transitive_dwo_files = cc_debug_context.pic_files
         else:
@@ -497,7 +494,7 @@
     if len(ctx.attr.dynamic_deps) > 0:
         cc_linking_context, rule_impl_debug_files = _filter_libraries_that_are_linked_dynamically(ctx, cc_linking_context, cpp_config)
     link_deps_statically = True
-    if linking_mode == _LINKING_DYNAMIC:
+    if linking_mode == linker_mode.LINKING_DYNAMIC:
         link_deps_statically = False
 
     cc_linking_outputs = cc_common.link(
@@ -546,11 +543,11 @@
         linkstatic_attr = ctx.attr.linkstatic
 
     if cpp_config.dynamic_mode() == "FULLY":
-        return _LINKING_DYNAMIC
+        return linker_mode.LINKING_DYNAMIC
     elif cpp_config.dynamic_mode() == "OFF" or linkstatic_attr:
-        return _LINKING_STATIC
+        return linker_mode.LINKING_STATIC
     else:
-        return _LINKING_DYNAMIC
+        return linker_mode.LINKING_DYNAMIC
 
 def _matches(extensions, target):
     for extension in extensions:
@@ -665,7 +662,7 @@
     additional_linker_inputs = ctx.files.additional_linker_inputs
 
     # Allows the dynamic library generated for code of test targets to be linked separately.
-    link_compile_output_separately = ctx.attr._is_test and linking_mode == _LINKING_DYNAMIC and cpp_config.dynamic_mode() == "DEFAULT" and ("dynamic_link_test_srcs" in ctx.features)
+    link_compile_output_separately = ctx.attr._is_test and linking_mode == linker_mode.LINKING_DYNAMIC and cpp_config.dynamic_mode() == "DEFAULT" and ("dynamic_link_test_srcs" in ctx.features)
 
     # When linking the object files directly into the resulting binary, we do not need
     # library-level link outputs; thus, we do not let CcCompilationHelper produce link outputs
@@ -693,7 +690,7 @@
             alwayslink = True,
         )
 
-    is_static_mode = linking_mode != _LINKING_DYNAMIC
+    is_static_mode = linking_mode != linker_mode.LINKING_DYNAMIC
     deps_cc_linking_context = _collect_linking_context(ctx, cpp_config)
     generated_def_file = None
     win_def_file = None
@@ -729,7 +726,7 @@
     linker_inputs_extra = depset()
     runtime_libraries_extra = depset()
     if extra_link_time_libraries != None:
-        linker_inputs_extra, runtime_libraries_extra = extra_link_time_libraries.build_libraries(ctx = ctx, static_mode = linking_mode != _LINKING_DYNAMIC, for_dynamic_library = _is_link_shared(ctx))
+        linker_inputs_extra, runtime_libraries_extra = extra_link_time_libraries.build_libraries(ctx = ctx, static_mode = linking_mode != linker_mode.LINKING_DYNAMIC, for_dynamic_library = _is_link_shared(ctx))
 
     cc_linking_outputs_binary, cc_launcher_info, rule_impl_debug_files = _create_transitive_linking_actions(
         ctx,
@@ -786,7 +783,7 @@
     explicit_dwp_file = dwp_file
     if not cc_helper.should_create_per_object_debug_info(feature_configuration, cpp_config):
         explicit_dwp_file = None
-    elif ctx.attr._is_test and linking_mode != _LINKING_DYNAMIC and cpp_config.build_test_dwp():
+    elif ctx.attr._is_test and linking_mode != linker_mode.LINKING_DYNAMIC and cpp_config.build_test_dwp():
         files_to_build_list.append(dwp_file)
 
     # If the binary is linked dynamically and COPY_DYNAMIC_LIBRARIES_TO_BINARY is enabled, collect
diff --git a/src/main/starlark/builtins_bzl/common/cc/cc_helper.bzl b/src/main/starlark/builtins_bzl/common/cc/cc_helper.bzl
index bf47e07..0e93a90 100644
--- a/src/main/starlark/builtins_bzl/common/cc/cc_helper.bzl
+++ b/src/main/starlark/builtins_bzl/common/cc/cc_helper.bzl
@@ -14,7 +14,7 @@
 
 """Utility functions for C++ rules."""
 
-load(":common/objc/semantics.bzl", "semantics")
+load(":common/objc/semantics.bzl", objc_semantics = "semantics")
 
 CcInfo = _builtins.toplevel.CcInfo
 cc_common = _builtins.toplevel.cc_common
@@ -44,6 +44,11 @@
     CLIF_OUTPUT_PROTO = "CLIF_OUTPUT_PROTO",
 )
 
+linker_mode = struct(
+    LINKING_DYNAMIC = "dynamic_linking_mode",
+    LINKING_STATIC = "static_linking_mode",
+)
+
 SYSROOT_FLAG = "--sysroot="
 
 def _build_linking_context_from_libraries(ctx, libraries):
@@ -169,7 +174,7 @@
 
     return library.dynamic_library
 
-_CPP_TOOLCHAIN_TYPE = "@" + semantics.get_repo() + "//tools/cpp:toolchain_type"
+_CPP_TOOLCHAIN_TYPE = "@" + objc_semantics.get_repo() + "//tools/cpp:toolchain_type"
 
 def _find_cpp_toolchain(ctx):
     """