From 31c574242b3673ca14e7c09bcdab4a518c117603 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. --- 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 + tests/cc/testutil/toolchains/BUILD | 2 +- 6 files changed, 65 insertions(+), 2 deletions(-) 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/cc/private/rules_impl/objc_library.bzl b/cc/private/rules_impl/objc_library.bzl index 84c649dab..3f06c8cc1 100644 --- a/cc/private/rules_impl/objc_library.bzl +++ b/cc/private/rules_impl/objc_library.bzl @@ -99,10 +99,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 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..4254034df --- /dev/null +++ b/tests/cc/common/cc_objc_library_configured_target_tests.bzl @@ -0,0 +1,36 @@ +"""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", + 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")) + +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..299785fc1 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 = "", From 7e6e66b01c477b7eecb53ec4f4f45188e052b1ce Mon Sep 17 00:00:00 2001 From: Keith Smiley Date: Thu, 23 Apr 2026 17:31:02 -0700 Subject: [PATCH 2/2] Fix archive in runfiles --- cc/private/rules_impl/objc_library.bzl | 5 ++--- tests/cc/common/cc_objc_library_configured_target_tests.bzl | 3 +++ tests/cc/testutil/toolchains/BUILD | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/cc/private/rules_impl/objc_library.bzl b/cc/private/rules_impl/objc_library.bzl index 3f06c8cc1..b2d2cf1cb 100644 --- a/cc/private/rules_impl/objc_library.bzl +++ b/cc/private/rules_impl/objc_library.bzl @@ -118,13 +118,12 @@ def _objc_library_impl(ctx): for dep in ctx.attr.implementation_deps: runfiles_list.append(dep[DefaultInfo].default_runfiles) - runfiles = ctx.runfiles(files = files).merge_all(runfiles_list) + runfiles = ctx.runfiles().merge_all(runfiles_list) return [ DefaultInfo( files = depset(files), - default_runfiles = runfiles, - data_runfiles = runfiles, + runfiles = runfiles, ), CcInfo( compilation_context = compilation_context, 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 4254034df..a00f74ae2 100644 --- a/tests/cc/common/cc_objc_library_configured_target_tests.bzl +++ b/tests/cc/common/cc_objc_library_configured_target_tests.bzl @@ -11,6 +11,7 @@ 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"], @@ -26,6 +27,8 @@ 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( diff --git a/tests/cc/testutil/toolchains/BUILD b/tests/cc/testutil/toolchains/BUILD index 299785fc1..9b2eb1d44 100644 --- a/tests/cc/testutil/toolchains/BUILD +++ b/tests/cc/testutil/toolchains/BUILD @@ -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",