aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/objc
diff options
context:
space:
mode:
authorGravatar Florian Weikert <fwe@google.com>2016-04-14 12:44:24 +0000
committerGravatar Dmitry Lomov <dslomov@google.com>2016-04-14 17:09:26 +0000
commitf277974f2e452645c390c726b3e0b2f833cc3c0f (patch)
tree3a0eee79dca997c563c072e34048138562e883b6 /src/main/java/com/google/devtools/build/lib/rules/objc
parent3af08f1e1baff449e8eea786bd215f7b7b5da2c5 (diff)
-- MOS_MIGRATED_REVID=119843072
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/objc')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ExperimentalObjcLibrary.java83
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ExperimentalObjcLibraryRule.java53
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCppSemantics.java76
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcRuleClasses.java69
4 files changed, 2 insertions, 279 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ExperimentalObjcLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ExperimentalObjcLibrary.java
deleted file mode 100644
index 4b214acd76..0000000000
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ExperimentalObjcLibrary.java
+++ /dev/null
@@ -1,83 +0,0 @@
-// Copyright 2016 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.objc;
-
-import com.google.common.collect.Sets;
-import com.google.devtools.build.lib.actions.Artifact;
-import com.google.devtools.build.lib.analysis.ConfiguredTarget;
-import com.google.devtools.build.lib.analysis.RuleConfiguredTarget.Mode;
-import com.google.devtools.build.lib.analysis.RuleContext;
-import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
-import com.google.devtools.build.lib.rules.RuleConfiguredTargetFactory;
-import com.google.devtools.build.lib.rules.cpp.CcLibraryHelper;
-import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.FeatureConfiguration;
-import com.google.devtools.build.lib.rules.cpp.CcToolchainProvider;
-import com.google.devtools.build.lib.rules.objc.ObjcCommon.CompilationAttributes;
-
-import java.util.Collection;
-
-/**
- * Implementation for experimental_objc_library.
- */
-public class ExperimentalObjcLibrary implements RuleConfiguredTargetFactory {
-
- @Override
- public ConfiguredTarget create(RuleContext ruleContext) throws InterruptedException {
-
- CompilationArtifacts compilationArtifacts =
- CompilationSupport.compilationArtifacts(ruleContext);
- CompilationAttributes compilationAttributes = new CompilationAttributes(ruleContext);
-
- ObjcCommon common = common(ruleContext, compilationAttributes, compilationArtifacts);
-
- CcToolchainProvider toolchain =
- ruleContext
- .getPrerequisite(":cc_toolchain", Mode.TARGET)
- .getProvider(CcToolchainProvider.class);
- FeatureConfiguration featureConfiguration = toolchain.getFeatures().getFeatureConfiguration();
-
- Collection<Artifact> sources = Sets.newHashSet(compilationArtifacts.getSrcs());
- Collection<Artifact> privateHdrs = Sets.newHashSet(compilationArtifacts.getPrivateHdrs());
- Collection<Artifact> publicHdrs = Sets.newHashSet(compilationAttributes.hdrs());
-
- CcLibraryHelper helper =
- new CcLibraryHelper(ruleContext, ObjcCppSemantics.INSTANCE, featureConfiguration)
- .addSources(sources)
- .addSources(privateHdrs)
- .enableCompileProviders()
- .addPublicHeaders(publicHdrs)
- .addDeps(ruleContext.getPrerequisites("deps", Mode.TARGET));
-
- CcLibraryHelper.Info info = helper.build();
-
- NestedSetBuilder<Artifact> filesToBuild =
- NestedSetBuilder.<Artifact>stableOrder().addAll(common.getCompiledArchive().asSet());
-
- return ObjcRuleClasses.ruleConfiguredTarget(ruleContext, filesToBuild.build())
- .addProviders(info.getProviders())
- .build();
- }
-
- private ObjcCommon common(
- RuleContext ruleContext,
- CompilationAttributes compilationAttributes,
- CompilationArtifacts compilationArtifacts) {
- return new ObjcCommon.Builder(ruleContext)
- .setCompilationAttributes(compilationAttributes)
- .setCompilationArtifacts(compilationArtifacts)
- .addDepObjcProviders(ruleContext.getPrerequisites("deps", Mode.TARGET, ObjcProvider.class))
- .build();
- }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ExperimentalObjcLibraryRule.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ExperimentalObjcLibraryRule.java
deleted file mode 100644
index 77c70f65de..0000000000
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ExperimentalObjcLibraryRule.java
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright 2016 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.objc;
-
-import com.google.devtools.build.lib.analysis.BaseRuleClasses;
-import com.google.devtools.build.lib.analysis.RuleDefinition;
-import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
-import com.google.devtools.build.lib.packages.RuleClass;
-import com.google.devtools.build.lib.packages.RuleClass.Builder;
-import com.google.devtools.build.lib.packages.RuleClass.PackageNameConstraint;
-import com.google.devtools.build.lib.rules.apple.AppleConfiguration;
-import com.google.devtools.build.lib.rules.cpp.CppConfiguration;
-
-/**
- * Rule definition for experimental_objc_library.
- */
-public class ExperimentalObjcLibraryRule implements RuleDefinition {
- @Override
- public RuleClass build(Builder builder, RuleDefinitionEnvironment env) {
- return builder
- .requiresConfigurationFragments(
- ObjcConfiguration.class, AppleConfiguration.class, CppConfiguration.class)
- // experimental_objc_library should only occur in bazel test code. We use the /objc
- // directory for tests.
- .setValidityPredicate(new PackageNameConstraint(1, "objc"))
- .build();
- }
-
- @Override
- public Metadata getMetadata() {
- return RuleDefinition.Metadata.builder()
- .name("experimental_objc_library")
- .factoryClass(ExperimentalObjcLibrary.class)
- .ancestors(
- BaseRuleClasses.BaseRule.class,
- ObjcRuleClasses.LinkingRule.class,
- ObjcRuleClasses.AlwaysLinkRule.class,
- ObjcRuleClasses.CrosstoolRule.class)
- .build();
- }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCppSemantics.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCppSemantics.java
deleted file mode 100644
index 30afe9dcc4..0000000000
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCppSemantics.java
+++ /dev/null
@@ -1,76 +0,0 @@
-// Copyright 2016 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.objc;
-
-import com.google.devtools.build.lib.actions.Artifact;
-import com.google.devtools.build.lib.actions.Root;
-import com.google.devtools.build.lib.analysis.RuleContext;
-import com.google.devtools.build.lib.rules.cpp.CppCompilationContext.Builder;
-import com.google.devtools.build.lib.rules.cpp.CppCompileActionBuilder;
-import com.google.devtools.build.lib.rules.cpp.CppCompileActionContext;
-import com.google.devtools.build.lib.rules.cpp.CppConfiguration;
-import com.google.devtools.build.lib.rules.cpp.CppConfiguration.HeadersCheckingMode;
-import com.google.devtools.build.lib.rules.cpp.CppHelper;
-import com.google.devtools.build.lib.rules.cpp.CppSemantics;
-import com.google.devtools.build.lib.vfs.PathFragment;
-
-/**
- * CppSemantics for objc builds.
- */
-public class ObjcCppSemantics implements CppSemantics {
-
- // We make CppSemantics a singleton object for efficiency and consistency, since we expect
- // any instance to be identical.
- public static final CppSemantics INSTANCE = new ObjcCppSemantics();
-
- @Override
- public PathFragment getEffectiveSourcePath(Artifact source) {
- return source.getRootRelativePath();
- }
-
- @Override
- public void finalizeCompileActionBuilder(
- RuleContext ruleContext, CppCompileActionBuilder actionBuilder) {
- actionBuilder.setCppConfiguration(ruleContext.getFragment(CppConfiguration.class));
- actionBuilder.setActionContext(CppCompileActionContext.class);
- // Because Bazel does not support include scanning, we need the entire crosstool filegroup,
- // including header files, as opposed to just the "compile" filegroup.
- actionBuilder.addTransitiveMandatoryInputs(CppHelper.getToolchain(ruleContext).getCrosstool());
- actionBuilder.setShouldScanIncludes(false);
- }
-
-
- @Override
- public void setupCompilationContext(RuleContext ruleContext, Builder contextBuilder) {
- // For objc builds, no extra setup is required.
- }
-
- @Override
- public HeadersCheckingMode determineHeadersCheckingMode(RuleContext ruleContext) {
- // Currently, objc builds do not enforce strict deps. To begin enforcing strict deps in objc,
- // switch this flag to STRICT.
- return HeadersCheckingMode.WARN;
- }
-
- @Override
- public boolean needsIncludeScanning(RuleContext ruleContext) {
- return false;
- }
-
- @Override
- public Root getGreppedIncludesDirectory(RuleContext ruleContext) {
- return null;
- }
-}
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 634c535156..ef9e07911a 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
@@ -53,7 +53,6 @@ import com.google.devtools.build.lib.rules.apple.AppleConfiguration;
import com.google.devtools.build.lib.rules.apple.AppleToolchain;
import com.google.devtools.build.lib.rules.apple.AppleToolchain.RequiresXcodeConfigRule;
import com.google.devtools.build.lib.rules.apple.Platform;
-import com.google.devtools.build.lib.rules.cpp.CppConfiguration;
import com.google.devtools.build.lib.syntax.Type;
import com.google.devtools.build.lib.util.FileType;
import com.google.devtools.build.lib.util.FileTypeSet;
@@ -126,50 +125,12 @@ 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.
- *
- * <p> Since this is the loading-phase default for the :cc_toolchain attribute of rules
- * using the crosstool, it must contain in its transitive closure the computer value
- * of that attribute under the default configuration.
- */
- public static final String CROSSTOOL_LABEL = "//tools/defaults:crosstool";
-
- /**
- * Late-bound attribute giving the CcToolchain for CROSSTOOL_LABEL.
- *
- * TODO(cpeyser): Use AppleCcToolchain instead of CcToolchain once released.
- */
- public static final LateBoundLabel<BuildConfiguration> APPLE_TOOLCHAIN =
- new LateBoundLabel<BuildConfiguration>(CROSSTOOL_LABEL, CppConfiguration.class) {
- @Override
- public Label getDefault(
- Rule rule, AttributeMap attributes, BuildConfiguration configuration) {
- return configuration.getFragment(CppConfiguration.class).getCcToolchainRuleLabel();
- }
- };
-
- /**
- * A null value for the lipo context colletor. Objc builds do not use a lipo context collector.
- */
- // TODO(b/28084560): Allow :lipo_context_collector not to be set instead of having a null
- // instance.
- public static final LateBoundLabel<BuildConfiguration> NULL_LIPO_CONTEXT_COLLECTOR =
- new LateBoundLabel<BuildConfiguration>() {
- @Override
- public Label getDefault(
- Rule rule, AttributeMap attributes, BuildConfiguration configuration) {
- return null;
- }
- };
-
-
- /**
* Creates a new spawn action builder with apple environment variables set that are typically
* needed by the apple toolchain. This should be used to start to build spawn actions that, in
* order to run, require both a darwin architecture and a collection of environment variables
@@ -549,31 +510,6 @@ public class ObjcRuleClasses {
}
/**
- * Common attributes for {@code objc_*} rules that depend on a crosstool.
- */
- public static class CrosstoolRule implements RuleDefinition {
-
- @Override
- public RuleClass build(Builder builder, RuleDefinitionEnvironment env) {
- return builder
- .add(attr(":cc_toolchain", LABEL).value(APPLE_TOOLCHAIN))
- .add(
- attr(":lipo_context_collector", LABEL)
- .value(NULL_LIPO_CONTEXT_COLLECTOR)
- .skipPrereqValidatorCheck())
- .build();
- }
-
- @Override
- public Metadata getMetadata() {
- return RuleDefinition.Metadata.builder()
- .name("$objc_crosstool_rule")
- .type(RuleClassType.ABSTRACT)
- .build();
- }
- }
-
- /**
* Common attributes for {@code objc_*} rules that can be input to compilation (i.e. can be
* dependencies of other compiling rules).
*/
@@ -656,8 +592,7 @@ public class ObjcRuleClasses {
"cc_library",
"cc_inc_library",
"ios_framework",
- "swift_library",
- "experimental_objc_library");
+ "swift_library");
@Override
public RuleClass build(Builder builder, RuleDefinitionEnvironment env) {