diff --git a/MODULE.bazel b/MODULE.bazel index b547d7e2..0fb3924a 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 f0daa0a3..04c610b5 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 91acc88d..0c268c83 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 00000000..0891672e --- /dev/null +++ b/tests/cc/common/cc_objc_library_configured_target_tests.bzl @@ -0,0 +1,37 @@ +"""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"], + 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): + 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 00000000..082b3465 --- /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 00000000..d55bc773 --- /dev/null +++ b/tests/cc/common/header.h @@ -0,0 +1 @@ +// Empty header for testing.