aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java
diff options
context:
space:
mode:
authorGravatar Dmitry Shevchenko <dmishe@google.com>2017-01-11 16:38:23 +0000
committerGravatar Marcel Hlopko <hlopko@google.com>2017-01-12 09:09:28 +0000
commitfca2d6ac839dd64c508510b708aea2b049bcc1a2 (patch)
tree60807a74a787fd5bd5d18b2ca36c83170c7a3d7c /src/main/java
parentdb7a9ea7f6b2af3c4c1f43ad4aa50cd4eca02921 (diff)
Add SwiftConfiguration
* This new configuration allows for passthrough of Swift-specific options into Skylark for further consumption by swift_library. It also keeps things nicely isolated until we get a way to create configurations in Skylark directly. -- PiperOrigin-RevId: 144210267 MOS_MIGRATED_REVID=144210267
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/com/google/devtools/build/docgen/BUILD1
-rw-r--r--src/main/java/com/google/devtools/build/docgen/SkylarkDocumentationCollector.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/BUILD2
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/apple/swift/BUILD24
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/apple/swift/SwiftCommandLineOptions.java40
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/apple/swift/SwiftConfiguration.java85
7 files changed, 157 insertions, 1 deletions
diff --git a/src/main/java/com/google/devtools/build/docgen/BUILD b/src/main/java/com/google/devtools/build/docgen/BUILD
index 5041eb5c78..bf634329e4 100644
--- a/src/main/java/com/google/devtools/build/docgen/BUILD
+++ b/src/main/java/com/google/devtools/build/docgen/BUILD
@@ -17,6 +17,7 @@ java_library(
"//src/main/java/com/google/devtools/build/lib:skylarkinterface",
"//src/main/java/com/google/devtools/build/lib/actions",
"//src/main/java/com/google/devtools/build/lib/rules/apple",
+ "//src/main/java/com/google/devtools/build/lib/rules/apple/swift",
"//src/main/java/com/google/devtools/build/lib/rules/cpp",
"//src/main/java/com/google/devtools/build/lib/rules/objc",
"//src/main/java/com/google/devtools/common/options",
diff --git a/src/main/java/com/google/devtools/build/docgen/SkylarkDocumentationCollector.java b/src/main/java/com/google/devtools/build/docgen/SkylarkDocumentationCollector.java
index 7bff0c2a9f..a6f9bb67e6 100644
--- a/src/main/java/com/google/devtools/build/docgen/SkylarkDocumentationCollector.java
+++ b/src/main/java/com/google/devtools/build/docgen/SkylarkDocumentationCollector.java
@@ -25,6 +25,7 @@ import com.google.devtools.build.lib.rules.SkylarkModules;
import com.google.devtools.build.lib.rules.SkylarkRuleContext;
import com.google.devtools.build.lib.rules.android.AndroidSkylarkApiProvider;
import com.google.devtools.build.lib.rules.apple.AppleConfiguration;
+import com.google.devtools.build.lib.rules.apple.swift.SwiftConfiguration;
import com.google.devtools.build.lib.rules.cpp.CppConfiguration;
import com.google.devtools.build.lib.rules.java.JavaConfiguration;
import com.google.devtools.build.lib.rules.java.JavaRuleOutputJarsProvider;
@@ -39,7 +40,6 @@ import com.google.devtools.build.lib.syntax.BazelLibrary;
import com.google.devtools.build.lib.syntax.FuncallExpression;
import com.google.devtools.build.lib.syntax.MethodLibrary;
import com.google.devtools.build.lib.syntax.Runtime;
-
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Deque;
@@ -199,6 +199,7 @@ final class SkylarkDocumentationCollector {
collectBuiltinModule(modules, ObjcConfiguration.class);
collectBuiltinModule(modules, CppConfiguration.class);
collectBuiltinModule(modules, JavaConfiguration.class);
+ collectBuiltinModule(modules, SwiftConfiguration.class);
collectBuiltinModule(modules, Jvm.class);
collectBuiltinModule(modules, JavaSkylarkApiProvider.class);
collectBuiltinModule(modules, JavaRuleOutputJarsProvider.OutputJar.class);
diff --git a/src/main/java/com/google/devtools/build/lib/BUILD b/src/main/java/com/google/devtools/build/lib/BUILD
index 016313d93c..967ce84b79 100644
--- a/src/main/java/com/google/devtools/build/lib/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/BUILD
@@ -28,6 +28,7 @@ filegroup(
"//src/main/java/com/google/devtools/build/lib/remote:srcs",
"//src/main/java/com/google/devtools/build/lib/rules/apple:srcs",
"//src/main/java/com/google/devtools/build/lib/rules/apple/cpp:srcs",
+ "//src/main/java/com/google/devtools/build/lib/rules/apple/swift:srcs",
"//src/main/java/com/google/devtools/build/lib/rules/cpp:srcs",
"//src/main/java/com/google/devtools/build/lib/rules/cpp/proto:srcs",
"//src/main/java/com/google/devtools/build/lib/rules/genquery:srcs",
@@ -573,6 +574,7 @@ java_library(
"//src/main/java/com/google/devtools/build/lib/query2:query-output",
"//src/main/java/com/google/devtools/build/lib/rules/apple",
"//src/main/java/com/google/devtools/build/lib/rules/apple/cpp",
+ "//src/main/java/com/google/devtools/build/lib/rules/apple/swift",
"//src/main/java/com/google/devtools/build/lib/rules/cpp",
"//src/main/java/com/google/devtools/build/lib/rules/cpp/proto:CcProtoLibrary",
"//src/main/java/com/google/devtools/build/lib/rules/genquery",
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java
index ef1428d2ac..d89953d1bf 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java
@@ -99,6 +99,8 @@ import com.google.devtools.build.lib.rules.apple.AppleToolchain;
import com.google.devtools.build.lib.rules.apple.XcodeConfigRule;
import com.google.devtools.build.lib.rules.apple.XcodeVersionRule;
import com.google.devtools.build.lib.rules.apple.cpp.AppleCcToolchainRule;
+import com.google.devtools.build.lib.rules.apple.swift.SwiftCommandLineOptions;
+import com.google.devtools.build.lib.rules.apple.swift.SwiftConfiguration;
import com.google.devtools.build.lib.rules.cpp.CcIncLibraryRule;
import com.google.devtools.build.lib.rules.cpp.CcToolchainRule;
import com.google.devtools.build.lib.rules.cpp.CcToolchainSuiteRule;
@@ -601,6 +603,7 @@ public class BazelRuleClassProvider {
builder.addConfig(ObjcCommandLineOptions.class, new ObjcConfigurationLoader());
builder.addConfig(AppleCommandLineOptions.class, new AppleConfiguration.Loader());
+ builder.addConfig(SwiftCommandLineOptions.class, new SwiftConfiguration.Loader());
// j2objc shouldn't be here!
builder.addConfig(J2ObjcCommandLineOptions.class, new J2ObjcConfiguration.Loader());
diff --git a/src/main/java/com/google/devtools/build/lib/rules/apple/swift/BUILD b/src/main/java/com/google/devtools/build/lib/rules/apple/swift/BUILD
new file mode 100644
index 0000000000..d8aaf10fc2
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/rules/apple/swift/BUILD
@@ -0,0 +1,24 @@
+# Description:
+# Support for building swift for Apple platform
+
+package(
+ default_visibility = ["//src:__subpackages__"],
+)
+
+java_library(
+ name = "swift",
+ srcs = glob(["*.java"]),
+ deps = [
+ "//src/main/java/com/google/devtools/build/lib:build-base",
+ "//src/main/java/com/google/devtools/build/lib:concurrent",
+ "//src/main/java/com/google/devtools/build/lib:skylarkinterface",
+ "//src/main/java/com/google/devtools/common/options",
+ "//third_party:guava",
+ ],
+)
+
+filegroup(
+ name = "srcs",
+ testonly = 0, # All srcs should be not test only, overwrite package default.
+ srcs = glob(["**"]),
+)
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
new file mode 100644
index 0000000000..95a3f52c6d
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/rules/apple/swift/SwiftCommandLineOptions.java
@@ -0,0 +1,40 @@
+// Copyright 2017 The Bazel Authors. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.google.devtools.build.lib.rules.apple.swift;
+
+import com.google.devtools.build.lib.analysis.config.FragmentOptions;
+import com.google.devtools.common.options.Option;
+import java.util.List;
+
+/** Command-line options for building with Swift tools. */
+public class SwiftCommandLineOptions extends FragmentOptions {
+
+ @Option(
+ name = "swiftcopt",
+ allowMultiple = true,
+ defaultValue = "",
+ category = "flags",
+ help = "Additional options to pass to Swift compilation."
+ )
+ public List<String> copts;
+
+ @Option(
+ name = "swift_whole_module_optimization",
+ defaultValue = "false",
+ category = "flags",
+ help = "Whether to enable Whole Module Optimization"
+ )
+ public boolean enableWholeModuleOptimization;
+}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/apple/swift/SwiftConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/apple/swift/SwiftConfiguration.java
new file mode 100644
index 0000000000..f10c0e4632
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/rules/apple/swift/SwiftConfiguration.java
@@ -0,0 +1,85 @@
+// Copyright 2017 The Bazel Authors. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.google.devtools.build.lib.rules.apple.swift;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
+import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
+import com.google.devtools.build.lib.analysis.config.BuildOptions;
+import com.google.devtools.build.lib.analysis.config.ConfigurationEnvironment;
+import com.google.devtools.build.lib.analysis.config.ConfigurationFragmentFactory;
+import com.google.devtools.build.lib.analysis.config.FragmentOptions;
+import com.google.devtools.build.lib.analysis.config.InvalidConfigurationException;
+import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+
+/**
+ * A configuration containing flags required for Swift tools. This is used primarily by swift_*
+ * family of rules written in Skylark.
+ */
+@SkylarkModule(
+ name = "swift",
+ doc = "A configuration fragment for Swift tools.",
+ category = SkylarkModuleCategory.CONFIGURATION_FRAGMENT
+)
+@Immutable
+public class SwiftConfiguration extends BuildConfiguration.Fragment {
+
+ private final boolean enableWholeModuleOptimization;
+ private final ImmutableList<String> copts;
+
+ public SwiftConfiguration(SwiftCommandLineOptions options) {
+ enableWholeModuleOptimization = options.enableWholeModuleOptimization;
+ copts = ImmutableList.copyOf(options.copts);
+ }
+
+ /** Returns whether to enable Whole Module Optimization. */
+ @SkylarkCallable(
+ name = "enable_whole_module_optimization",
+ doc = "Whether to enable Whole Module Optimization."
+ )
+ public boolean enableWholeModuleOptimization() {
+ return enableWholeModuleOptimization;
+ }
+
+ /** Returns a list of options to use for compiling Swift. */
+ @SkylarkCallable(name = "copts", doc = "Returns a list of options to use for compiling Swift.")
+ public ImmutableList<String> getCopts() {
+ return copts;
+ }
+
+ /** Loads {@link SwiftConfiguration} from build options. */
+ public static class Loader implements ConfigurationFragmentFactory {
+ @Override
+ public SwiftConfiguration create(ConfigurationEnvironment env, BuildOptions buildOptions)
+ throws InvalidConfigurationException, InterruptedException {
+ SwiftCommandLineOptions options = buildOptions.get(SwiftCommandLineOptions.class);
+
+ return new SwiftConfiguration(options);
+ }
+
+ @Override
+ public Class<? extends BuildConfiguration.Fragment> creates() {
+ return SwiftConfiguration.class;
+ }
+
+ @Override
+ public ImmutableSet<Class<? extends FragmentOptions>> requiredOptions() {
+ return ImmutableSet.<Class<? extends FragmentOptions>>of(SwiftCommandLineOptions.class);
+ }
+ }
+}