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,