Expose type of library_to_link in CROSSTOOL

This cl relieves us from hard-coding -l and -l: flags in Bazel. To be able to
express the behavior in CROSSTOOL, we need to know what type of library are we
dealing with.

--
PiperOrigin-RevId: 145271426
MOS_MIGRATED_REVID=145271426
diff --git a/tools/cpp/CROSSTOOL.tpl b/tools/cpp/CROSSTOOL.tpl
index c73cb42..75c9f88 100644
--- a/tools/cpp/CROSSTOOL.tpl
+++ b/tools/cpp/CROSSTOOL.tpl
@@ -477,14 +477,71 @@
       flag_group {
         iterate_over: 'libraries_to_link'
         flag_group {
-          expand_if_true: 'libraries_to_link.is_whole_archive'
-          iterate_over: 'libraries_to_link.names'
-          flag: '/WHOLEARCHIVE:%{libraries_to_link.names}'
+          expand_if_all_available: 'libraries_to_link.object_file_group_presence'
+          iterate_over: 'libraries_to_link.object_files'
+          flag_group {
+            expand_if_all_available: 'libraries_to_link.no_whole_archive_presence'
+            flag: '%{libraries_to_link.object_files}'
+          }
+          flag_group {
+            expand_if_all_available: 'libraries_to_link.whole_archive_presence'
+            flag: '/WHOLEARCHIVE:%{libraries_to_link.object_files}'
+          }
         }
         flag_group {
-          expand_if_false: 'libraries_to_link.is_whole_archive'
-          iterate_over: 'libraries_to_link.names'
-          flag: '%{libraries_to_link.names}'
+          expand_if_all_available: 'libraries_to_link.object_file_presence'
+          flag_group {
+            expand_if_all_available: 'libraries_to_link.no_whole_archive_presence'
+            flag: '%{libraries_to_link.name}'
+          }
+          flag_group {
+            expand_if_all_available: 'libraries_to_link.whole_archive_presence'
+            flag: '/WHOLEARCHIVE:%{libraries_to_link.name}'
+          }
+        }
+        flag_group {
+          expand_if_all_available: 'libraries_to_link.interface_library_presence'
+          flag_group {
+            expand_if_all_available: 'libraries_to_link.no_whole_archive_presence'
+            flag: '%{libraries_to_link.name}'
+          }
+          flag_group {
+            expand_if_all_available: 'libraries_to_link.whole_archive_presence'
+            flag: '/WHOLEARCHIVE:%{libraries_to_link.name}'
+          }
+        }
+        flag_group {
+          expand_if_all_available: 'libraries_to_link.static_library_presence'
+          flag_group {
+            expand_if_all_available: 'libraries_to_link.no_whole_archive_presence'
+            flag: '%{libraries_to_link.name}'
+          }
+          flag_group {
+            expand_if_all_available: 'libraries_to_link.whole_archive_presence'
+            flag: '/WHOLEARCHIVE:%{libraries_to_link.name}'
+          }
+        }
+        flag_group {
+          expand_if_all_available: 'libraries_to_link.dynamic_library_presence'
+          flag_group {
+            expand_if_all_available: 'libraries_to_link.no_whole_archive_presence'
+            flag: '%{libraries_to_link.name}'
+          }
+          flag_group {
+            expand_if_all_available: 'libraries_to_link.whole_archive_presence'
+            flag: '/WHOLEARCHIVE:%{libraries_to_link.name}'
+          }
+        }
+        flag_group {
+          expand_if_all_available: 'libraries_to_link.versioned_dynamic_library_presence'
+          flag_group {
+            expand_if_all_available: 'libraries_to_link.no_whole_archive_presence'
+            flag: '%{libraries_to_link.name}'
+          }
+          flag_group {
+            expand_if_all_available: 'libraries_to_link.whole_archive_presence'
+            flag: '/WHOLEARCHIVE:%{libraries_to_link.name}'
+          }
         }
       }
     }