From 842ce489e3cde38498556db2336d055e864b3791 Mon Sep 17 00:00:00 2001 From: Keith Smiley Date: Thu, 12 Mar 2026 13:09:26 -0700 Subject: [PATCH 1/2] Fix data on objc_library Previously this was just ignored, now it is correctly propagated. --- MODULE.bazel | 14 ++++++++ cc/private/rules_impl/objc_library.bzl | 24 ++++++++++++- tests/cc/common/BUILD | 3 ++ ...c_objc_library_configured_target_tests.bzl | 36 +++++++++++++++++++ tests/cc/common/data_file.txt | 1 + tests/cc/common/header.h | 1 + 6 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 tests/cc/common/cc_objc_library_configured_target_tests.bzl create mode 100644 tests/cc/common/data_file.txt create mode 100644 tests/cc/common/header.h diff --git a/MODULE.bazel b/MODULE.bazel index b547d7e2c..0fb3924a7 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -9,6 +9,20 @@ bazel_dep(name = "bazel_skylib", version = "1.7.1") bazel_dep(name = "platforms", version = "0.0.10") bazel_dep(name = "protobuf", version = "27.0", repo_name = "com_google_protobuf") +bazel_dep(name = "apple_support", version = "2.3.0", dev_dependency = True) + +apple_cc_configure = use_extension( + "@apple_support//crosstool:setup.bzl", + "apple_cc_configure_extension", + dev_dependency = True, +) +use_repo(apple_cc_configure, "local_config_apple_cc_toolchains") + +register_toolchains( + "@local_config_apple_cc_toolchains//:all", + dev_dependency = True, +) + cc_configure = use_extension("//cc:extensions.bzl", "cc_configure_extension") use_repo(cc_configure, "local_config_cc", "local_config_cc_toolchains") diff --git a/cc/private/rules_impl/objc_library.bzl b/cc/private/rules_impl/objc_library.bzl index f0daa0a38..04c610b52 100644 --- a/cc/private/rules_impl/objc_library.bzl +++ b/cc/private/rules_impl/objc_library.bzl @@ -98,10 +98,32 @@ 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(files = files).merge_all(runfiles_list) + return [ DefaultInfo( files = depset(files), - data_runfiles = ctx.runfiles(files = files), + default_runfiles = runfiles, + data_runfiles = runfiles, ), CcInfo( compilation_context = compilation_context, diff --git a/tests/cc/common/BUILD b/tests/cc/common/BUILD index 91acc88d6..0c268c830 100644 --- a/tests/cc/common/BUILD +++ b/tests/cc/common/BUILD @@ -1,3 +1,6 @@ load(":cc_binary_configured_target_tests.bzl", "cc_binary_configured_target_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_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..5b8b2385c --- /dev/null +++ b/tests/cc/common/cc_objc_library_configured_target_tests.bzl @@ -0,0 +1,36 @@ +"""Tests for objc_library.""" + +load("@bazel_features//private:util.bzl", _bazel_version_ge = "ge") +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", "cc_test_suite") + +_use_rules_cc_impls = _bazel_version_ge("9.0.0-pre.20250911") + +def _test_data_in_runfiles(name, **kwargs): + util.helper_target( + objc_library, + name = name + "_lib_with_data", + hdrs = ["header.h"], + data = ["data_file.txt"], + ) + 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")) + +def cc_objc_library_configured_target_tests(name): + cc_test_suite( + name = name, + tests = [ + _test_data_in_runfiles, + ] if _use_rules_cc_impls 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. From ea4f7ae2c5b6e100abc6060f45ea68864dcdae6e Mon Sep 17 00:00:00 2001 From: Keith Smiley Date: Thu, 12 Mar 2026 13:15:19 -0700 Subject: [PATCH 2/2] macos only --- tests/cc/common/cc_objc_library_configured_target_tests.bzl | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/cc/common/cc_objc_library_configured_target_tests.bzl b/tests/cc/common/cc_objc_library_configured_target_tests.bzl index 5b8b2385c..0891672e3 100644 --- a/tests/cc/common/cc_objc_library_configured_target_tests.bzl +++ b/tests/cc/common/cc_objc_library_configured_target_tests.bzl @@ -14,6 +14,7 @@ def _test_data_in_runfiles(name, **kwargs): name = name + "_lib_with_data", hdrs = ["header.h"], data = ["data_file.txt"], + target_compatible_with = ["@platforms//os:macos"], ) cc_analysis_test( name = name,