@@ -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):
860868def _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
889905def _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 = """
12741292name: {name}
12751293
12761294ios:
12771295 output_target: {ios_output_target}
12781296 module_name: {ios_module_name}
1297+ language: {ios_language}
12791298
12801299android:
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+
16381674def _extract_cpp_generated_srcs (outputs , module_name , single_file_codegen ):
16391675 """Extract C++ generated source files (.cpp) from outputs.
16401676
0 commit comments