Add --host_swiftcopt This allows you to pass arguments to swiftc host targets. Closes #6921. PiperOrigin-RevId: 228162636
diff --git a/src/main/java/com/google/devtools/build/lib/rules/apple/swift/SwiftCommandLineOptions.java b/src/main/java/com/google/devtools/build/lib/rules/apple/swift/SwiftCommandLineOptions.java index 8c4e28d..bf81f91 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/apple/swift/SwiftCommandLineOptions.java +++ b/src/main/java/com/google/devtools/build/lib/rules/apple/swift/SwiftCommandLineOptions.java
@@ -31,4 +31,20 @@ help = "Additional options to pass to Swift compilation." ) public List<String> copts; + + @Option( + name = "host_swiftcopt", + allowMultiple = true, + defaultValue = "", + documentationCategory = OptionDocumentationCategory.OUTPUT_PARAMETERS, + effectTags = {OptionEffectTag.ACTION_COMMAND_LINES, OptionEffectTag.AFFECTS_OUTPUTS}, + help = "Additional options to pass to swiftc for host tools.") + public List<String> hostSwiftcoptList; + + @Override + public FragmentOptions getHost() { + SwiftCommandLineOptions host = (SwiftCommandLineOptions) super.getHost(); + host.copts = this.hostSwiftcoptList; + return host; + } }
diff --git a/src/test/java/com/google/devtools/build/lib/rules/apple/SwiftConfigurationTest.java b/src/test/java/com/google/devtools/build/lib/rules/apple/SwiftConfigurationTest.java index 0a5f807..c0d31e0 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/apple/SwiftConfigurationTest.java +++ b/src/test/java/com/google/devtools/build/lib/rules/apple/SwiftConfigurationTest.java
@@ -58,4 +58,37 @@ assertThat(copts).containsAllOf("foo", "bar"); } + + @Test + public void testHostSwiftcopt() throws Exception { + scratch.file("examples/rule/BUILD"); + scratch.file( + "examples/rule/apple_rules.bzl", + "def swift_binary_impl(ctx):", + " copts = ctx.fragments.swift.copts()", + " return struct(", + " copts=copts,", + " )", + "swift_binary = rule(", + " implementation = swift_binary_impl,", + " fragments = ['swift']", + ")"); + + scratch.file( + "examples/swift_skylark/BUILD", + "load('//examples/rule:apple_rules.bzl', 'swift_binary')", + "swift_binary(", + " name='my_target',", + ")"); + + useConfiguration("--swiftcopt=foo", "--host_swiftcopt=bar", "--host_swiftcopt=baz"); + ConfiguredTarget target = + getConfiguredTarget("//examples/swift_skylark:my_target", getHostConfiguration()); + + @SuppressWarnings("unchecked") + List<String> copts = (List<String>) target.get("copts"); + + assertThat(copts).doesNotContain("foo"); + assertThat(copts).containsAllOf("bar", "baz"); + } }