diff options
author | Florian Weikert <fwe@google.com> | 2016-04-14 12:44:24 +0000 |
---|---|---|
committer | Dmitry Lomov <dslomov@google.com> | 2016-04-14 17:09:26 +0000 |
commit | f277974f2e452645c390c726b3e0b2f833cc3c0f (patch) | |
tree | 3a0eee79dca997c563c072e34048138562e883b6 /src/main/java/com/google/devtools/build/lib/rules/objc | |
parent | 3af08f1e1baff449e8eea786bd215f7b7b5da2c5 (diff) |
Rollback of commit bbf59ed1be85354457ad1d8123cc1973aa3ba298.
--
MOS_MIGRATED_REVID=119843072
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/objc')
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) { |