Skip to content

Commit a6e6e77

Browse files
authored
Fix rules_swift 2 compatibility issues (#903)
1 parent e526f2e commit a6e6e77

File tree

2 files changed

+54
-14
lines changed

2 files changed

+54
-14
lines changed

rules/framework.bzl

Lines changed: 40 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -561,7 +561,7 @@ def _create_swiftmodule(attrs):
561561
**kwargs
562562
)
563563

564-
def _copy_swiftmodule(ctx, framework_files):
564+
def _copy_swiftmodule(ctx, framework_files, virtualize_frameworks):
565565
inputs = framework_files.inputs
566566
outputs = framework_files.outputs
567567

@@ -578,18 +578,39 @@ def _copy_swiftmodule(ctx, framework_files):
578578
# original swift module/doc, so that swift can find it.
579579
swift_module = _create_swiftmodule(inputs)
580580

581+
# Setup the `clang` attr of the Swift module for non-vfs case this is required to have it locate the modulemap
582+
# and headers correctly.
583+
clang = None
584+
if not virtualize_frameworks:
585+
module_map = outputs.modulemaps[0] if outputs.modulemaps else None
586+
clang = swift_common.create_clang_module(
587+
module_map = module_map,
588+
compilation_context = cc_common.create_compilation_context(
589+
headers = depset(_compact(
590+
outputs.headers +
591+
outputs.private_headers +
592+
[module_map],
593+
)),
594+
),
595+
)
596+
581597
return [
582598
# only add the swift module, the objc modulemap is already listed as a header,
583599
# and it will be discovered via the framework search path
584-
swift_common.create_module(name = swiftmodule_name, swift = swift_module),
600+
swift_common.create_module(
601+
name = swiftmodule_name,
602+
clang = clang,
603+
swift = swift_module,
604+
),
585605
]
586606

587-
def _get_merged_swift_info(ctx, framework_files, transitive_deps):
607+
def _get_merged_swift_info(ctx, swift_module_context, framework_files, transitive_deps, virtualize_frameworks):
588608
swift_info_fields = {
589609
"swift_infos": [dep[SwiftInfo] for dep in transitive_deps if SwiftInfo in dep],
610+
"modules": [swift_module_context],
590611
}
591612
if framework_files.outputs.swiftmodule:
592-
swift_info_fields["modules"] = _copy_swiftmodule(ctx, framework_files)
613+
swift_info_fields["modules"] += _copy_swiftmodule(ctx, framework_files, virtualize_frameworks)
593614
return swift_common.create_swift_info(**swift_info_fields)
594615

595616
def _merge_root_infoplists(ctx):
@@ -1051,11 +1072,13 @@ def _apple_framework_packaging_impl(ctx):
10511072
# If not virtualizing the framework - then it runs a "clean"
10521073
_get_symlinked_framework_clean_action(ctx, framework_files, compilation_context_fields)
10531074

1075+
compilation_context = cc_common.create_compilation_context(
1076+
**compilation_context_fields
1077+
)
1078+
10541079
# Construct the `CcInfo` provider, the linking context here used instead of ObjcProvider in Bazel 7+.
10551080
cc_info_provider = CcInfo(
1056-
compilation_context = cc_common.create_compilation_context(
1057-
**compilation_context_fields
1058-
),
1081+
compilation_context = compilation_context,
10591082
linking_context = cc_common.create_linking_context(
10601083
linker_inputs = _get_cc_info_linker_inputs(deps = deps) if is_bazel_7 else depset([]),
10611084
),
@@ -1084,7 +1107,16 @@ def _apple_framework_packaging_impl(ctx):
10841107
else:
10851108
bundle_outs = _bundle_static_framework(ctx, is_extension_safe = is_extension_safe, current_apple_platform = current_apple_platform, outputs = outputs)
10861109
avoid_deps_info = AvoidDepsInfo(libraries = depset(avoid_deps).to_list(), link_dynamic = False)
1087-
swift_info = _get_merged_swift_info(ctx, framework_files, transitive_deps)
1110+
1111+
# rules_swift 2.x no longers takes compilation_context from CcInfo, need to pass it in via SwiftInfo
1112+
swift_module_context = swift_common.create_module(
1113+
name = ctx.attr.name,
1114+
clang = swift_common.create_clang_module(
1115+
compilation_context = compilation_context,
1116+
module_map = None,
1117+
),
1118+
)
1119+
swift_info = _get_merged_swift_info(ctx, swift_module_context, framework_files, transitive_deps, virtualize_frameworks)
10881120

10891121
# Build out the default info provider
10901122
out_files = _compact([outputs.binary, outputs.swiftmodule, outputs.infoplist])

rules/hmap.bzl

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -72,20 +72,28 @@ def _make_headermap_impl(ctx):
7272
namespace = ctx.attr.namespace,
7373
hdrs_lists = hdrs_lists,
7474
)
75-
75+
compilation_context = cc_common.create_compilation_context(
76+
headers = depset([headermap]),
77+
)
7678
cc_info_provider = CcInfo(
77-
compilation_context = cc_common.create_compilation_context(
78-
headers = depset([headermap]),
79-
),
79+
compilation_context = compilation_context,
80+
)
81+
swift_info_provider = swift_common.create_swift_info(
82+
modules = [swift_common.create_module(
83+
name = ctx.attr.name,
84+
clang = swift_common.create_clang_module(
85+
compilation_context = compilation_context,
86+
module_map = None,
87+
),
88+
)],
8089
)
81-
8290
providers = [
8391
DefaultInfo(
8492
files = depset([headermap]),
8593
),
8694
apple_common.new_objc_provider(),
8795
cc_info_provider,
88-
swift_common.create_swift_info(),
96+
swift_info_provider,
8997
]
9098

9199
hdrs_lists = [l for l in hdrs_lists if l]

0 commit comments

Comments
 (0)