Move implicit fdio to rule instead of macro.

https://fxrev.dev/783963 is causing failures in the fortune-teller
roller since checking `"str" in deps` breaks if deps is a select.

Here's a failing roll CL: https://fxrev.dev/787724

Change-Id: I555ac228cd6e33f2d04d66df6ae271b4064b06e2
Reviewed-on: https://fuchsia-review.googlesource.com/c/sdk-integration/+/787782
Reviewed-by: Shai Barack <shayba@google.com>
Commit-Queue: Darren Chan <chandarren@google.com>
diff --git a/bazel_rules_fuchsia/fuchsia/private/fuchsia_cc.bzl b/bazel_rules_fuchsia/fuchsia/private/fuchsia_cc.bzl
index 7ecb62c..59e597e 100644
--- a/bazel_rules_fuchsia/fuchsia/private/fuchsia_cc.bzl
+++ b/bazel_rules_fuchsia/fuchsia/private/fuchsia_cc.bzl
@@ -54,13 +54,19 @@
     for data in ctx.attr.data:
         resources.extend(data[FuchsiaPackageResourcesInfo].resources)
 
-    for dep in ctx.attr.deps:
-        for file in dep.files.to_list():
-            if is_lib(file):
-                resources.append(make_resource_struct(src = file, dest = "lib/" + file.basename))
-    for file in get_runfiles(ctx.attr.native_target):
-        if is_lib(file):
-            resources.append(make_resource_struct(src = file, dest = "lib/" + file.basename))
+    # Collect files the native target, deps, and implicit libs.
+    dep_files = [file for dep in ctx.attr.deps + [
+        implicit
+        for implicit in ctx.attr.implicit_deps
+        if implicit not in ctx.attr.deps
+    ] for file in dep.files.to_list()] + get_runfiles(ctx.attr.native_target)
+
+    # Add libraries from above files as resources.
+    resources += [
+        make_resource_struct(src = file, dest = "lib/" + file.basename)
+        for file in dep_files
+        if is_lib(file)
+    ]
 
     # Forward CC providers along with metadata for packaging.
     return forward_providers(
@@ -107,6 +113,12 @@
             """,
             providers = [[CcInfo, DefaultInfo]],
         ),
+        "implicit_deps": attr.label_list(
+            doc = """Implicit resources/libraries to include within the resulting package.""",
+            default = [
+                "@fuchsia_sdk//pkg/fdio",
+            ],
+        ),
         "data": attr.label_list(
             doc = "Packaged files needed by this target at runtime.",
             providers = [FuchsiaPackageResourcesInfo],
@@ -142,20 +154,12 @@
     if exact_cc_binary_deps == None:
         fail(_invalid_deps_message % ("binary", cc_binary))
 
-    _deps = exact_cc_binary_deps
-    _implicit_deps = [
-        "%s//pkg/fdio" % sdk_root_label,
-    ]
-    for implicit_dep in _implicit_deps:
-        if implicit_dep not in _deps:
-            _deps.append(implicit_dep)
-
     _fuchsia_cc_binary(
         name = name,
         bin_name = bin_name if bin_name != None else name,
         native_target = cc_binary,
         clang_debug_symbols = "%s//:debug_symbols" % clang_root_label,
-        deps = _deps,
+        deps = exact_cc_binary_deps,
         data = [
             "%s//pkg/sysroot:dist" % sdk_root_label,
             "%s//:dist" % clang_root_label,