Skip to content

Commit f95b650

Browse files
Jessica Yenbot-snapci
authored andcommitted
Internal Change
GitOrigin-RevId: b59ade3af10994c0bd0f9dbcb642b95f94a0a2af
1 parent b50470a commit f95b650

2 files changed

Lines changed: 75 additions & 14 deletions

File tree

bzl/valdi/valdi_compiled.bzl

Lines changed: 48 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,10 @@ ValdiModuleInfo = provider(
8282
"ios_release_generated_srcs": "A tree artifact containing all the generated objective-c/swift code",
8383
"ios_release_api_generated_hdrs": "Will contain the generated Objective-C API header file, only if single_file_codegen is enabled",
8484
"ios_release_api_generated_srcs": "A tree artifact containing all the generated objective-c/swift code (for the API-only module)",
85+
"ios_debug_generated_swift_srcs": "The generated Swift source file for single_file_codegen modules with Swift output",
86+
"ios_release_generated_swift_srcs": "The generated Swift source file for single_file_codegen modules with Swift output",
87+
"ios_debug_api_generated_swift_srcs": "The generated Swift API source file for single_file_codegen modules with Swift output",
88+
"ios_release_api_generated_swift_srcs": "The generated Swift API source file for single_file_codegen modules with Swift output",
8589
"ios_debug_nativesrc": "generated .c file containing all the generated C code",
8690
"ios_release_nativesrc": "generated .c file containing all the generated C code",
8791
"cpp_srcs": "generated .cpp files containing all the generated C++ code",
@@ -287,6 +291,10 @@ valdi_compiled = rule(
287291
doc = "Whether codegen should occur in a single file or one file per type",
288292
default = True,
289293
),
294+
"ios_language": attr.string_list(
295+
doc = "The languages for iOS output (e.g., ['objc'] or ['objc', 'swift'])",
296+
default = ["objc"],
297+
),
290298
"disable_code_coverage": attr.bool(
291299
doc = "Disable code-coverage reporting for this module",
292300
default = False,
@@ -613,8 +621,8 @@ def _get_files_output_paths(ctx, module_name, module_directory, localization_mod
613621
if ctx.attr.has_android_exports:
614622
outputs = _append_debug_and_maybe_release(outputs, android_output_target, _get_android_generated_src(module_name))
615623
if ctx.attr.has_ios_exports:
616-
outputs = _append_debug_and_maybe_release(outputs, ios_output_target, _get_ios_generated_src(ctx.attr.ios_module_name))
617-
outputs = _append_debug_and_maybe_release(outputs, ios_output_target, _get_ios_generated_api_src(ctx.attr.ios_module_name))
624+
outputs = _append_debug_and_maybe_release(outputs, ios_output_target, _get_ios_generated_src(ctx.attr.ios_module_name, ctx.attr.ios_language))
625+
outputs = _append_debug_and_maybe_release(outputs, ios_output_target, _get_ios_generated_api_src(ctx.attr.ios_module_name, ctx.attr.ios_language))
618626

619627
# C++ always outputs to release configuration
620628
# However, when code coverage is enabled (--output-target debug), C++ outputs are not generated
@@ -860,7 +868,7 @@ def _get_ios_generated_api_src_dir(ios_module_name):
860868
def _get_ios_generated_src_helper(output_target, ios_module_name, suffix, ext):
861869
return base_relative_dir("ios", output_target, paths.join(_IOS_GENERATED_SRC_DIR, ios_module_name + suffix, "{}.{}".format(ios_module_name + suffix, ext)))
862870

863-
def _get_ios_generated_src(ios_module_name):
871+
def _get_ios_generated_src(ios_module_name, ios_language = ["objc"]):
864872
debug_srcs = [
865873
_get_ios_generated_src_helper("debug", ios_module_name, "", "h"),
866874
_get_ios_generated_src_helper("debug", ios_module_name, "", "m"),
@@ -871,9 +879,13 @@ def _get_ios_generated_src(ios_module_name):
871879
_get_ios_generated_src_helper("release", ios_module_name, "", "m"),
872880
]
873881

882+
if "swift" in ios_language:
883+
debug_srcs.append(_get_ios_generated_src_helper("debug", ios_module_name, "", "swift"))
884+
release_srcs.append(_get_ios_generated_src_helper("release", ios_module_name, "", "swift"))
885+
874886
return [debug_srcs, release_srcs]
875887

876-
def _get_ios_generated_api_src(ios_module_name):
888+
def _get_ios_generated_api_src(ios_module_name, ios_language = ["objc"]):
877889
debug_srcs = [
878890
_get_ios_generated_src_helper("debug", ios_module_name, IOS_API_NAME_SUFFIX, "h"),
879891
_get_ios_generated_src_helper("debug", ios_module_name, IOS_API_NAME_SUFFIX, "m"),
@@ -884,6 +896,10 @@ def _get_ios_generated_api_src(ios_module_name):
884896
_get_ios_generated_src_helper("release", ios_module_name, IOS_API_NAME_SUFFIX, "m"),
885897
]
886898

899+
if "swift" in ios_language:
900+
debug_srcs.append(_get_ios_generated_src_helper("debug", ios_module_name, IOS_API_NAME_SUFFIX, "swift"))
901+
release_srcs.append(_get_ios_generated_src_helper("release", ios_module_name, IOS_API_NAME_SUFFIX, "swift"))
902+
887903
return [debug_srcs, release_srcs]
888904

889905
def _get_cpp_generated_src_dir():
@@ -1270,12 +1286,15 @@ def _generate_module_definition(ctx, name):
12701286
android_output_target = "debug" if code_coverage else attr.android_output_target
12711287
ios_output_target = "debug" if code_coverage else attr.ios_output_target
12721288

1289+
ios_language_str = ",".join(attr.ios_language)
1290+
12731291
module_def = """
12741292
name: {name}
12751293
12761294
ios:
12771295
output_target: {ios_output_target}
12781296
module_name: {ios_module_name}
1297+
language: {ios_language}
12791298
12801299
android:
12811300
output_target: {android_output_target}
@@ -1304,6 +1323,7 @@ compilation_mode: {compilation_mode}
13041323
name = name,
13051324
ios_output_target = ios_output_target,
13061325
ios_module_name = attr.ios_module_name,
1326+
ios_language = ios_language_str,
13071327
android_output_target = android_output_target,
13081328
android_export_strings = "true" if attr.android_export_strings else "false",
13091329
compilation_mode = attr.compilation_mode,
@@ -1399,13 +1419,17 @@ def _create_valdi_module_info(ctx, module_name, module_yaml, module_definition,
13991419
ios_debug_bundle_resources = depset(_extract_ios_resource_bundles(module_name, "debug", outputs)),
14001420
ios_release_bundle_resources = depset(_extract_ios_resource_bundles(module_name, "release", outputs)),
14011421
ios_debug_generated_hdrs = _extract_ios_generated_hdrs("debug", outputs, ios_module_name) if single_file_codegen and ctx.attr.has_ios_exports else None,
1402-
ios_debug_generated_srcs = _extract_ios_generated_srcs("debug", outputs, ios_module_name, single_file_codegen) if ctx.attr.has_ios_exports else None,
1422+
ios_debug_generated_srcs = _extract_ios_generated_srcs("debug", outputs, ios_module_name, single_file_codegen, ctx.attr.ios_language) if ctx.attr.has_ios_exports else None,
14031423
ios_release_generated_hdrs = _extract_ios_generated_hdrs("release", outputs, ios_module_name) if single_file_codegen and ctx.attr.has_ios_exports else None,
1404-
ios_release_generated_srcs = _extract_ios_generated_srcs("release", outputs, ios_module_name, single_file_codegen) if ctx.attr.has_ios_exports else None,
1424+
ios_release_generated_srcs = _extract_ios_generated_srcs("release", outputs, ios_module_name, single_file_codegen, ctx.attr.ios_language) if ctx.attr.has_ios_exports else None,
14051425
ios_debug_api_generated_hdrs = _extract_ios_api_generated_hdrs("debug", outputs, ios_module_name) if single_file_codegen and ctx.attr.has_ios_exports else None,
1406-
ios_debug_api_generated_srcs = _extract_ios_api_generated_srcs("debug", outputs, ios_module_name, single_file_codegen) if ctx.attr.has_ios_exports else None,
1426+
ios_debug_api_generated_srcs = _extract_ios_api_generated_srcs("debug", outputs, ios_module_name, single_file_codegen, ctx.attr.ios_language) if ctx.attr.has_ios_exports else None,
14071427
ios_release_api_generated_hdrs = _extract_ios_api_generated_hdrs("release", outputs, ios_module_name) if single_file_codegen and ctx.attr.has_ios_exports else None,
1408-
ios_release_api_generated_srcs = _extract_ios_api_generated_srcs("release", outputs, ios_module_name, single_file_codegen) if ctx.attr.has_ios_exports else None,
1428+
ios_release_api_generated_srcs = _extract_ios_api_generated_srcs("release", outputs, ios_module_name, single_file_codegen, ctx.attr.ios_language) if ctx.attr.has_ios_exports else None,
1429+
ios_debug_generated_swift_srcs = _extract_ios_generated_swift_srcs("debug", outputs, ios_module_name, ctx.attr.ios_language) if single_file_codegen and ctx.attr.has_ios_exports else None,
1430+
ios_release_generated_swift_srcs = _extract_ios_generated_swift_srcs("release", outputs, ios_module_name, ctx.attr.ios_language) if single_file_codegen and ctx.attr.has_ios_exports else None,
1431+
ios_debug_api_generated_swift_srcs = _extract_ios_api_generated_swift_srcs("debug", outputs, ios_module_name, ctx.attr.ios_language) if single_file_codegen and ctx.attr.has_ios_exports else None,
1432+
ios_release_api_generated_swift_srcs = _extract_ios_api_generated_swift_srcs("release", outputs, ios_module_name, ctx.attr.ios_language) if single_file_codegen and ctx.attr.has_ios_exports else None,
14091433
ios_debug_nativesrc = _extract_ios_native_srcs("debug", ios_module_name, module_name, outputs) if ctx.attr.has_ios_exports else None,
14101434
ios_release_nativesrc = _extract_ios_native_srcs("release", ios_module_name, module_name, outputs) if is_ios_release and ctx.attr.has_ios_exports else None,
14111435
ios_debug_sourcemaps = _extract_ios_debug_sourcemaps(module_name, outputs) if has_valdimodule and not code_coverage else None,
@@ -1606,9 +1630,9 @@ def _extract_ios_api_generated_hdrs(output_target, outputs, ios_module_name):
16061630

16071631
return _filter_ios_src(outputs, output_target, debug_src, release_src, ".h")
16081632

1609-
def _extract_ios_generated_srcs(output_target, outputs, ios_module_name, single_file_codegen):
1633+
def _extract_ios_generated_srcs(output_target, outputs, ios_module_name, single_file_codegen, ios_language = ["objc"]):
16101634
if single_file_codegen:
1611-
debug_src, release_src = _get_ios_generated_src(ios_module_name)
1635+
debug_src, release_src = _get_ios_generated_src(ios_module_name, ios_language)
16121636

16131637
return _filter_ios_src(outputs, output_target, debug_src, release_src, ".m")
16141638
else:
@@ -1621,9 +1645,15 @@ def _extract_ios_generated_srcs(output_target, outputs, ios_module_name, single_
16211645

16221646
return found[0] if found else None
16231647

1624-
def _extract_ios_api_generated_srcs(output_target, outputs, ios_module_name, single_file_codegen):
1648+
def _extract_ios_generated_swift_srcs(output_target, outputs, ios_module_name, ios_language = ["objc"]):
1649+
if "swift" not in ios_language:
1650+
return None
1651+
debug_src, release_src = _get_ios_generated_src(ios_module_name, ios_language)
1652+
return _filter_ios_src(outputs, output_target, debug_src, release_src, ".swift")
1653+
1654+
def _extract_ios_api_generated_srcs(output_target, outputs, ios_module_name, single_file_codegen, ios_language = ["objc"]):
16251655
if single_file_codegen:
1626-
debug_api_src, release_api_src = _get_ios_generated_api_src(ios_module_name)
1656+
debug_api_src, release_api_src = _get_ios_generated_api_src(ios_module_name, ios_language)
16271657

16281658
return _filter_ios_src(outputs, output_target, debug_api_src, release_api_src, ".m")
16291659
else:
@@ -1635,6 +1665,12 @@ def _extract_ios_api_generated_srcs(output_target, outputs, ios_module_name, sin
16351665
found = [f for f in outputs if f.is_directory and f.path.endswith(release_api_src_dir)]
16361666
return found[0] if found else None
16371667

1668+
def _extract_ios_api_generated_swift_srcs(output_target, outputs, ios_module_name, ios_language = ["objc"]):
1669+
if "swift" not in ios_language:
1670+
return None
1671+
debug_api_src, release_api_src = _get_ios_generated_api_src(ios_module_name, ios_language)
1672+
return _filter_ios_src(outputs, output_target, debug_api_src, release_api_src, ".swift")
1673+
16381674
def _extract_cpp_generated_srcs(outputs, module_name, single_file_codegen):
16391675
"""Extract C++ generated source files (.cpp) from outputs.
16401676

bzl/valdi/valdi_module.bzl

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,7 @@ def valdi_module(
200200
strings_dir = strings_dir,
201201
android_class_path = android_class_path,
202202
single_file_codegen = single_file_codegen,
203+
ios_language = ios_language if type(ios_language) == "list" else [ios_language],
203204
disable_code_coverage = disable_code_coverage,
204205
disable_dependency_verification = disable_dependency_verification,
205206
disable_hotreload = disable_hotreload,
@@ -561,9 +562,33 @@ def _setup_ios_target(name, module_deps, ios_deps, compiled_module_target, ios_m
561562
swift_srcs = []
562563

563564
if "swift" in ios_language:
565+
extract_valdi_module_native_output(
566+
name = "ios.debug.swift_srcs",
567+
compiled_module = compiled_module_target,
568+
output_name = "ios_debug_generated_swift_srcs",
569+
)
570+
571+
extract_valdi_module_native_output(
572+
name = "ios.release.swift_srcs",
573+
compiled_module = compiled_module_target,
574+
output_name = "ios_release_generated_swift_srcs",
575+
)
576+
577+
extract_valdi_module_native_output(
578+
name = "ios.debug.api.swift_srcs",
579+
compiled_module = compiled_module_target,
580+
output_name = "ios_debug_api_generated_swift_srcs",
581+
)
582+
583+
extract_valdi_module_native_output(
584+
name = "ios.release.api.swift_srcs",
585+
compiled_module = compiled_module_target,
586+
output_name = "ios_release_api_generated_swift_srcs",
587+
)
588+
564589
swift_srcs = source_set_select(
565-
debug = [":ios.debug.srcs"],
566-
release = [":ios.release.srcs"],
590+
debug = [":ios.debug.swift_srcs", ":ios.debug.api.swift_srcs"],
591+
release = [":ios.release.swift_srcs", ":ios.release.api.swift_srcs"],
567592
)
568593
else:
569594
swift_srcs = ["@valdi//bzl/valdi:empty.swift"]

0 commit comments

Comments
 (0)