aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2017-03-16 19:33:27 +0000
committerGravatar Yun Peng <pcloudy@google.com>2017-03-17 12:26:16 +0000
commit8c33d5d83792d3984cc75a208476dcc2de38666c (patch)
tree3a7aa21b599f70d12a8980c4422855896f369cff /src/main/java/com/google
parent7ac6d59bcd8ea489ddb4218b495e131346419302 (diff)
Sink automatic SDK frameworks into legacy compilation support.
-- PiperOrigin-RevId: 150353881 MOS_MIGRATED_REVID=150353881
Diffstat (limited to 'src/main/java/com/google')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/CompilationAttributes.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/CrosstoolCompilationSupport.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/LegacyCompilationSupport.java18
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcRuleClasses.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/XcodeProvider.java12
5 files changed, 32 insertions, 7 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationAttributes.java b/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationAttributes.java
index 4120af16fb..6862165bb1 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationAttributes.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationAttributes.java
@@ -230,8 +230,6 @@ final class CompilationAttributes {
private static void addSdkAttributesFromRuleContext(Builder builder, RuleContext ruleContext) {
if (ruleContext.attributes().has("sdk_frameworks", Type.STRING_LIST)) {
NestedSetBuilder<SdkFramework> frameworks = NestedSetBuilder.stableOrder();
- // TODO(bazel-team): Move the inclusion of the default frameworks to CompilationSupport.
- frameworks.addAll(ObjcRuleClasses.AUTOMATIC_SDK_FRAMEWORKS);
for (String explicit : ruleContext.attributes().get("sdk_frameworks", Type.STRING_LIST)) {
frameworks.add(new SdkFramework(explicit));
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/CrosstoolCompilationSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/CrosstoolCompilationSupport.java
index f87e24e8d8..32808abcce 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/CrosstoolCompilationSupport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/CrosstoolCompilationSupport.java
@@ -388,6 +388,8 @@ public class CrosstoolCompilationSupport extends CompilationSupport {
} else {
activatedCrosstoolSelectables.add(GCC_COVERAGE_MAP_FORMAT);
}
+ activatedCrosstoolSelectables.addAll(ruleContext.getFeatures());
+
return configuration
.getFragment(CppConfiguration.class)
.getFeatures()
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/LegacyCompilationSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/LegacyCompilationSupport.java
index befa6b20e7..ccd5bea165 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/LegacyCompilationSupport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/LegacyCompilationSupport.java
@@ -35,6 +35,7 @@ import static com.google.devtools.build.lib.rules.objc.ObjcRuleClasses.NON_ARC_S
import static com.google.devtools.build.lib.rules.objc.ObjcRuleClasses.PRECOMPILED_SRCS_TYPE;
import static com.google.devtools.build.lib.rules.objc.ObjcRuleClasses.SRCS_TYPE;
+import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Joiner;
import com.google.common.base.Optional;
import com.google.common.base.Predicates;
@@ -69,7 +70,9 @@ import com.google.devtools.build.lib.rules.cpp.FdoSupportProvider;
import com.google.devtools.build.lib.util.Preconditions;
import com.google.devtools.build.lib.vfs.FileSystemUtils;
import com.google.devtools.build.lib.vfs.PathFragment;
+import java.util.LinkedHashSet;
import java.util.List;
+import java.util.Set;
import javax.annotation.Nullable;
/**
@@ -81,6 +84,13 @@ import javax.annotation.Nullable;
public class LegacyCompilationSupport extends CompilationSupport {
/**
+ * Frameworks implicitly linked to iOS, watchOS, and tvOS binaries when using legacy compilation.
+ */
+ @VisibleForTesting
+ static final Iterable<SdkFramework> AUTOMATIC_SDK_FRAMEWORKS =
+ ImmutableList.of(new SdkFramework("Foundation"), new SdkFramework("UIKit"));
+
+ /**
* A mapper that maps input ObjC source {@link Artifact.TreeFileArtifact}s to output object file
* {@link Artifact.TreeFileArtifact}s.
*/
@@ -633,6 +643,14 @@ public class LegacyCompilationSupport extends CompilationSupport {
}
}
+ @Override
+ protected Set<String> frameworkNames(ObjcProvider objcProvider) {
+ Set<String> names = new LinkedHashSet<>();
+ Iterables.addAll(names, SdkFramework.names(AUTOMATIC_SDK_FRAMEWORKS));
+ names.addAll(super.frameworkNames(objcProvider));
+ return names;
+ }
+
private CommandLine linkCommandLine(
ExtraLinkArgs extraLinkArgs,
ObjcProvider objcProvider,
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcRuleClasses.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcRuleClasses.java
index 887535b8ef..527bb319df 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcRuleClasses.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcRuleClasses.java
@@ -23,7 +23,6 @@ import static com.google.devtools.build.lib.syntax.Type.BOOLEAN;
import static com.google.devtools.build.lib.syntax.Type.STRING;
import static com.google.devtools.build.lib.syntax.Type.STRING_LIST;
-import com.google.common.annotations.VisibleForTesting;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
@@ -139,10 +138,6 @@ public class ObjcRuleClasses {
return !ASSEMBLY_SOURCES.matches(sourceArtifact.getFilename());
}
- @VisibleForTesting
- static final Iterable<SdkFramework> AUTOMATIC_SDK_FRAMEWORKS = ImmutableList.of(
- new SdkFramework("Foundation"), new SdkFramework("UIKit"));
-
/**
* Label of a filegroup that contains all crosstool and grte files for all configurations,
* as specified on the command-line.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/XcodeProvider.java b/src/main/java/com/google/devtools/build/lib/rules/objc/XcodeProvider.java
index 5dbd6962a2..45366a60ba 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/XcodeProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/XcodeProvider.java
@@ -14,6 +14,7 @@
package com.google.devtools.build.lib.rules.objc;
+import static com.google.devtools.build.lib.rules.objc.LegacyCompilationSupport.AUTOMATIC_SDK_FRAMEWORKS;
import static com.google.devtools.build.lib.rules.objc.ObjcProvider.BUNDLE_IMPORT_DIR;
import static com.google.devtools.build.lib.rules.objc.ObjcProvider.CC_LIBRARY;
import static com.google.devtools.build.lib.rules.objc.ObjcProvider.DEFINE;
@@ -29,6 +30,7 @@ import static com.google.devtools.build.lib.rules.objc.ObjcProvider.WEAK_SDK_FRA
import static com.google.devtools.build.lib.rules.objc.ObjcProvider.XCASSETS_DIR;
import static com.google.devtools.build.lib.rules.objc.ObjcProvider.XCDATAMODEL;
import static com.google.devtools.build.lib.rules.objc.XcodeProductType.LIBRARY_STATIC;
+import static com.google.devtools.build.lib.rules.objc.XcodeProductType.WATCH_OS1_APPLICATION;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Function;
@@ -36,6 +38,7 @@ import com.google.common.base.Joiner;
import com.google.common.base.Optional;
import com.google.common.base.Splitter;
import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import com.google.devtools.build.lib.actions.Artifact;
@@ -626,6 +629,14 @@ public final class XcodeProvider implements TransitiveInfoProvider {
.addTransitive(strictlyPropagatedHeaderSearchPaths)
.build();
+ // Automatic SDK frameworks are no longer propagated through ObjcProvider; they are now added
+ // during the link action. To preserve the existing Xcode project generation, we need to add
+ // them to the Xcode target below, unless it is a watchOS 1 application.
+ Set<SdkFramework> automaticSdkFrameworks =
+ (productType != WATCH_OS1_APPLICATION)
+ ? ImmutableSet.copyOf(AUTOMATIC_SDK_FRAMEWORKS)
+ : ImmutableSet.<SdkFramework>of();
+
// TODO(bazel-team): Add provisioning profile information when Xcodegen supports it.
TargetControl.Builder targetControl =
TargetControl.newBuilder()
@@ -650,6 +661,7 @@ public final class XcodeProvider implements TransitiveInfoProvider {
"-weak_framework", SdkFramework.names(objcProvider.get(WEAK_SDK_FRAMEWORK))))
.addAllBuildSetting(xcodeprojBuildSettings)
.addAllBuildSetting(AppleToolchain.defaultWarningsForXcode())
+ .addAllSdkFramework(SdkFramework.names(automaticSdkFrameworks))
.addAllSdkFramework(SdkFramework.names(objcProvider.get(SDK_FRAMEWORK)))
.addAllFramework(PathFragment.safePathStrings(objcProvider.get(STATIC_FRAMEWORK_DIR)))
.addAllFrameworkSearchPathOnly(