Skip to content

Commit 580e10c

Browse files
authored
Add always_include_developer_search_paths to mixed_language_library (#1539)
This allows Swift code in the library to depend on XCTest. If this was passed in `kwargs`, it gets passed along to the internal `objc_library` targets: ``` ~/Development/rules_swift master $ bazel build //examples/apple/mixed_language:MixedAnswer ERROR: /Users/jschear/Development/rules_swift/examples/apple/mixed_language/BUILD:5:23: //examples/apple/mixed_language:MixedAnswer_headers: no such attribute 'always_include_developer_search_paths' in 'objc_library' rule ERROR: /Users/jschear/Development/rules_swift/examples/apple/mixed_language/BUILD:5:23: //examples/apple/mixed_language:MixedAnswer_clang: no such attribute 'always_include_developer_search_paths' in 'objc_library' rule ``` We _could_ alternatively `.pop` it off of `kwargs` before passing to `objc_library`, but tracking which attributes belong to `swift_library` vs. `obj_library` and which are shared can get a bit complex.
1 parent 947fdac commit 580e10c

File tree

2 files changed

+13
-5
lines changed

2 files changed

+13
-5
lines changed

doc/rules.md

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1066,11 +1066,12 @@ swift_library(
10661066
## mixed_language_library
10671067

10681068
<pre>
1069-
mixed_language_library(*, <a href="#mixed_language_library-name">name</a>, <a href="#mixed_language_library-alwayslink">alwayslink</a>, <a href="#mixed_language_library-clang_copts">clang_copts</a>, <a href="#mixed_language_library-clang_defines">clang_defines</a>, <a href="#mixed_language_library-clang_srcs">clang_srcs</a>, <a href="#mixed_language_library-data">data</a>,
1070-
<a href="#mixed_language_library-enable_modules">enable_modules</a>, <a href="#mixed_language_library-hdrs">hdrs</a>, <a href="#mixed_language_library-includes">includes</a>, <a href="#mixed_language_library-linkopts">linkopts</a>, <a href="#mixed_language_library-module_map">module_map</a>, <a href="#mixed_language_library-module_name">module_name</a>,
1071-
<a href="#mixed_language_library-non_arc_srcs">non_arc_srcs</a>, <a href="#mixed_language_library-package_name">package_name</a>, <a href="#mixed_language_library-private_deps">private_deps</a>, <a href="#mixed_language_library-sdk_dylibs">sdk_dylibs</a>, <a href="#mixed_language_library-sdk_frameworks">sdk_frameworks</a>,
1072-
<a href="#mixed_language_library-swift_copts">swift_copts</a>, <a href="#mixed_language_library-swift_defines">swift_defines</a>, <a href="#mixed_language_library-swift_plugins">swift_plugins</a>, <a href="#mixed_language_library-swift_srcs">swift_srcs</a>, <a href="#mixed_language_library-swiftc_inputs">swiftc_inputs</a>,
1073-
<a href="#mixed_language_library-textual_hdrs">textual_hdrs</a>, <a href="#mixed_language_library-umbrella_header">umbrella_header</a>, <a href="#mixed_language_library-weak_sdk_frameworks">weak_sdk_frameworks</a>, <a href="#mixed_language_library-deps">deps</a>, <a href="#mixed_language_library-kwargs">**kwargs</a>)
1069+
mixed_language_library(*, <a href="#mixed_language_library-name">name</a>, <a href="#mixed_language_library-always_include_developer_search_paths">always_include_developer_search_paths</a>, <a href="#mixed_language_library-alwayslink">alwayslink</a>, <a href="#mixed_language_library-clang_copts">clang_copts</a>,
1070+
<a href="#mixed_language_library-clang_defines">clang_defines</a>, <a href="#mixed_language_library-clang_srcs">clang_srcs</a>, <a href="#mixed_language_library-data">data</a>, <a href="#mixed_language_library-enable_modules">enable_modules</a>, <a href="#mixed_language_library-hdrs">hdrs</a>, <a href="#mixed_language_library-includes">includes</a>, <a href="#mixed_language_library-linkopts">linkopts</a>,
1071+
<a href="#mixed_language_library-module_map">module_map</a>, <a href="#mixed_language_library-module_name">module_name</a>, <a href="#mixed_language_library-non_arc_srcs">non_arc_srcs</a>, <a href="#mixed_language_library-package_name">package_name</a>, <a href="#mixed_language_library-private_deps">private_deps</a>, <a href="#mixed_language_library-sdk_dylibs">sdk_dylibs</a>,
1072+
<a href="#mixed_language_library-sdk_frameworks">sdk_frameworks</a>, <a href="#mixed_language_library-swift_copts">swift_copts</a>, <a href="#mixed_language_library-swift_defines">swift_defines</a>, <a href="#mixed_language_library-swift_plugins">swift_plugins</a>, <a href="#mixed_language_library-swift_srcs">swift_srcs</a>,
1073+
<a href="#mixed_language_library-swiftc_inputs">swiftc_inputs</a>, <a href="#mixed_language_library-textual_hdrs">textual_hdrs</a>, <a href="#mixed_language_library-umbrella_header">umbrella_header</a>, <a href="#mixed_language_library-weak_sdk_frameworks">weak_sdk_frameworks</a>, <a href="#mixed_language_library-deps">deps</a>,
1074+
<a href="#mixed_language_library-kwargs">**kwargs</a>)
10741075
</pre>
10751076

10761077
Creates a mixed language library from a Clang and Swift library target pair.
@@ -1085,6 +1086,7 @@ Once that is the case, this macro will be deprecated.
10851086
| Name | Description | Default Value |
10861087
| :------------- | :------------- | :------------- |
10871088
| <a id="mixed_language_library-name"></a>name | The name of the target. | none |
1089+
| <a id="mixed_language_library-always_include_developer_search_paths"></a>always_include_developer_search_paths | If `True`, the developer framework search paths will be added to the swift compilation command. This enables a Swift module to access `XCTest` without having to mark the target as `testonly = True`. | `False` |
10881090
| <a id="mixed_language_library-alwayslink"></a>alwayslink | If true, any binary that depends (directly or indirectly) on this library will link in all the object files for the files listed in `clang_srcs` and `swift_srcs`, even if some contain no symbols referenced by the binary. This is useful if your code isn't explicitly called by code in the binary; for example, if you rely on runtime checks for protocol conformances added in extensions in the library but do not directly reference any other symbols in the object file that adds that conformance. | `False` |
10891091
| <a id="mixed_language_library-clang_copts"></a>clang_copts | The compiler flags for the clang library. These will only be used for the clang library. If you want them to affect the swift library as well, you need to pass them with `-Xcc` in `swift_copts`. | `[]` |
10901092
| <a id="mixed_language_library-clang_defines"></a>clang_defines | Extra clang `-D` flags to pass to the compiler. They should be in the form `KEY=VALUE` or simply `KEY` and are passed not only to the compiler for this target (as `clang_copts` are) but also to all dependers of this target. Subject to "Make variable" substitution and Bourne shell tokenization. | `[]` |

mixed_language/mixed_language_library.bzl

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ load("//swift:swift_library.bzl", "swift_library")
3535
def mixed_language_library(
3636
*,
3737
name,
38+
always_include_developer_search_paths = False,
3839
alwayslink = False,
3940
clang_copts = [],
4041
clang_defines = [],
@@ -69,6 +70,10 @@ def mixed_language_library(
6970
7071
Args:
7172
name: The name of the target.
73+
always_include_developer_search_paths: If `True`, the developer
74+
framework search paths will be added to the swift compilation
75+
command. This enables a Swift module to access `XCTest` without
76+
having to mark the target as `testonly = True`.
7277
alwayslink: If true, any binary that depends (directly or indirectly) on
7378
this library will link in all the object files for the files listed
7479
in `clang_srcs` and `swift_srcs`, even if some contain no symbols
@@ -308,6 +313,7 @@ a mixed language Swift library, use a clang only library rule like \
308313
name = swift_library_name,
309314
srcs = swift_srcs,
310315
alwayslink = alwayslink,
316+
always_include_developer_search_paths = always_include_developer_search_paths,
311317
aspect_hints = aspect_hints,
312318
copts = ["-import-underlying-module"] + swift_copts,
313319
defines = swift_defines,

0 commit comments

Comments
 (0)