diff --git a/cc/private/rules_impl/objc_library.bzl b/cc/private/rules_impl/objc_library.bzl index 84c649dab..b2d2cf1cb 100644 --- a/cc/private/rules_impl/objc_library.bzl +++ b/cc/private/rules_impl/objc_library.bzl @@ -99,10 +99,31 @@ def _objc_library_impl(ctx): metadata_files = gcno_files + pic_gcno_files, ) + runfiles_list = [] + for data_dep in ctx.attr.data: + if data_dep[DefaultInfo].data_runfiles.files: + runfiles_list.append(data_dep[DefaultInfo].data_runfiles) + else: + # This branch ensures interop with custom Starlark rules following + # https://bazel.build/extending/rules#runfiles_features_to_avoid + runfiles_list.append(ctx.runfiles(transitive_files = data_dep[DefaultInfo].files)) + runfiles_list.append(data_dep[DefaultInfo].default_runfiles) + + for src in ctx.attr.srcs: + runfiles_list.append(src[DefaultInfo].default_runfiles) + + for dep in ctx.attr.deps: + runfiles_list.append(dep[DefaultInfo].default_runfiles) + + for dep in ctx.attr.implementation_deps: + runfiles_list.append(dep[DefaultInfo].default_runfiles) + + runfiles = ctx.runfiles().merge_all(runfiles_list) + return [ DefaultInfo( files = depset(files), - data_runfiles = ctx.runfiles(files = files), + runfiles = runfiles, ), CcInfo( compilation_context = compilation_context, diff --git a/tests/cc/common/BUILD b/tests/cc/common/BUILD index 7141680a9..d627865cf 100644 --- a/tests/cc/common/BUILD +++ b/tests/cc/common/BUILD @@ -1,6 +1,9 @@ load(":cc_binary_configured_target_tests.bzl", "cc_binary_configured_target_tests") load(":cc_common_test.bzl", "cc_common_tests") +load(":cc_objc_library_configured_target_tests.bzl", "cc_objc_library_configured_target_tests") cc_binary_configured_target_tests(name = "cc_binary_configured_target_tests") cc_common_tests(name = "cc_common_tests") + +cc_objc_library_configured_target_tests(name = "cc_objc_library_configured_target_tests") diff --git a/tests/cc/common/cc_objc_library_configured_target_tests.bzl b/tests/cc/common/cc_objc_library_configured_target_tests.bzl new file mode 100644 index 000000000..a00f74ae2 --- /dev/null +++ b/tests/cc/common/cc_objc_library_configured_target_tests.bzl @@ -0,0 +1,39 @@ +"""Tests for objc_library.""" + +load("@bazel_features//:features.bzl", "bazel_features") +load("@rules_testing//lib:analysis_test.bzl", "test_suite") +load("@rules_testing//lib:truth.bzl", "matching") +load("@rules_testing//lib:util.bzl", "util") +load("//cc:objc_library.bzl", "objc_library") +load("//tests/cc/testutil:cc_analysis_test.bzl", "cc_analysis_test") + +def _test_data_in_runfiles(name, **kwargs): + util.helper_target( + objc_library, + name = name + "_lib_with_data", + srcs = ["source.m"], + hdrs = ["header.h"], + data = ["data_file.txt"], + target_compatible_with = ["@platforms//os:macos"], + ) + cc_analysis_test( + name = name, + impl = _test_data_in_runfiles_impl, + target = name + "_lib_with_data", + **kwargs + ) + +def _test_data_in_runfiles_impl(env, target): + target = env.expect.that_target(target) + target.runfiles().contains_predicate(matching.str_endswith("/data_file.txt")) + target.data_runfiles().contains_predicate(matching.str_endswith("/data_file.txt")) + target.runfiles().not_contains_predicate(matching.str_endswith(".a")) + target.data_runfiles().not_contains_predicate(matching.str_endswith(".a")) + +def cc_objc_library_configured_target_tests(name): + test_suite( + name = name, + tests = [ + _test_data_in_runfiles, + ] if bazel_features.cc.cc_common_is_in_rules_cc else [], + ) diff --git a/tests/cc/common/data_file.txt b/tests/cc/common/data_file.txt new file mode 100644 index 000000000..082b3465b --- /dev/null +++ b/tests/cc/common/data_file.txt @@ -0,0 +1 @@ +test data diff --git a/tests/cc/common/header.h b/tests/cc/common/header.h new file mode 100644 index 000000000..d55bc773b --- /dev/null +++ b/tests/cc/common/header.h @@ -0,0 +1 @@ +// Empty header for testing. diff --git a/tests/cc/testutil/toolchains/BUILD b/tests/cc/testutil/toolchains/BUILD index 1d5965de7..9b2eb1d44 100644 --- a/tests/cc/testutil/toolchains/BUILD +++ b/tests/cc/testutil/toolchains/BUILD @@ -286,7 +286,7 @@ cc_toolchain_config( name = "k8-compiler_config", abi_libc_version = "local", abi_version = "local", - action_configs = [], + action_configs = ["objc-compile"], artifact_name_patterns = {}, builtin_sysroot = "/usr/grte/v1", cc_target_os = "", @@ -313,7 +313,7 @@ cc_toolchain_config( name = "macos-compiler_config", abi_libc_version = "local", abi_version = "local", - action_configs = [], + action_configs = ["objc-compile"], artifact_name_patterns = {}, builtin_sysroot = "/usr/grte/v1", cc_target_os = "macos",