aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/cpp
diff options
context:
space:
mode:
authorGravatar plf <plf@google.com>2018-04-16 03:12:51 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-04-16 03:14:36 -0700
commitfa135cf600a957cbcef0ca45f97d5a9009d40859 (patch)
treed64e9ee36356bc68369d61a14cddf7b57c9b910f /src/main/java/com/google/devtools/build/lib/rules/cpp
parent0c17f0c79d3c1fdcfb9312b5b06486a45a75c002 (diff)
C++: Wrap CcLinkParamsInfo with CcLinkingInfo.
CcLinkingInfo will eventually wrap all C++ linking providers. CcLinkParamsInfo is no longer a provider and will be renamed in a later CL. RELNOTES:none PiperOrigin-RevId: 193011702
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/cpp')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParams.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParamsInfo.java24
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingHelper.java10
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingInfo.java85
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcSkylarkApiProvider.java8
5 files changed, 107 insertions, 25 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParams.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParams.java
index df9613d460..3941926f45 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParams.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParams.java
@@ -243,7 +243,10 @@ public final class CcLinkParams {
* the method does not do anything.
*/
public Builder addTransitiveTarget(TransitiveInfoCollection target) {
- return addTransitiveProvider(target.get(CcLinkParamsInfo.PROVIDER));
+ CcLinkingInfo ccLinkingInfo = target.get(CcLinkingInfo.PROVIDER);
+ CcLinkParamsInfo ccLinkParamsInfo =
+ ccLinkingInfo == null ? null : ccLinkingInfo.getCcLinkParamsInfo();
+ return addTransitiveProvider(ccLinkParamsInfo);
}
/**
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParamsInfo.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParamsInfo.java
index 32afe7963a..7597d0ab8c 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParamsInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParamsInfo.java
@@ -17,34 +17,23 @@ package com.google.devtools.build.lib.rules.cpp;
import com.google.common.base.Function;
import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
-import com.google.devtools.build.lib.packages.NativeInfo;
-import com.google.devtools.build.lib.packages.NativeProvider;
import com.google.devtools.build.lib.rules.cpp.CcLinkParams.Builder;
import com.google.devtools.build.lib.rules.cpp.CcLinkParamsStore.CcLinkParamsStoreImpl;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
-import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
-import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
/** A target that provides C linker parameters. */
@Immutable
@AutoCodec
-@SkylarkModule(
- name = "cc_link_params_info",
- title = "cc_link_params_info",
- documented = false,
- category = SkylarkModuleCategory.PROVIDER,
- doc = "Link params provider"
-)
-public final class CcLinkParamsInfo extends NativeInfo {
- public static final NativeProvider<CcLinkParamsInfo> PROVIDER =
- new NativeProvider<CcLinkParamsInfo>(CcLinkParamsInfo.class, "link_params") {};
+public final class CcLinkParamsInfo {
public static final Function<TransitiveInfoCollection, CcLinkParamsStore> TO_LINK_PARAMS =
input -> {
// ... then try Skylark.
- CcLinkParamsInfo provider = input.get(PROVIDER);
- if (provider != null) {
- return provider.getCcLinkParamsStore();
+ CcLinkingInfo provider = input.get(CcLinkingInfo.PROVIDER);
+ CcLinkParamsInfo ccLinkParamsInfo =
+ provider == null ? null : provider.getCcLinkParamsInfo();
+ if (ccLinkParamsInfo != null) {
+ return ccLinkParamsInfo.getCcLinkParamsStore();
}
return null;
};
@@ -53,7 +42,6 @@ public final class CcLinkParamsInfo extends NativeInfo {
@AutoCodec.Instantiator
public CcLinkParamsInfo(CcLinkParamsStore store) {
- super(PROVIDER);
this.store = new CcLinkParamsStoreImpl(store);
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingHelper.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingHelper.java
index 3b85d35add..6a9bab624d 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingHelper.java
@@ -107,9 +107,9 @@ public final class CcLinkingHelper {
return providers;
}
- @SkylarkCallable(name = "cc_link_params_info", documented = false)
- public CcLinkParamsInfo getCcLinkParamsInfo() {
- return (CcLinkParamsInfo) providers.getProvider(CcLinkParamsInfo.PROVIDER.getKey());
+ @SkylarkCallable(name = "cc_linking_info", documented = false)
+ public CcLinkingInfo getCcLinkParamsInfo() {
+ return (CcLinkingInfo) providers.getProvider(CcLinkingInfo.PROVIDER.getKey());
}
public Map<String, NestedSet<Artifact>> getOutputGroups() {
@@ -551,9 +551,11 @@ public final class CcLinkingHelper {
new CcSpecificLinkParamsProvider(
createCcLinkParamsStore(ccLinkingOutputs, ccCompilationContextInfo, forcePic)));
} else {
- providers.put(
+ CcLinkingInfo.Builder ccLinkingInfoBuilder = CcLinkingInfo.Builder.create();
+ ccLinkingInfoBuilder.setCcLinkParamsInfo(
new CcLinkParamsInfo(
createCcLinkParamsStore(ccLinkingOutputs, ccCompilationContextInfo, forcePic)));
+ providers.put(ccLinkingInfoBuilder.build());
}
return new LinkingInfo(
providers.build(), outputGroups, ccLinkingOutputs, originalLinkingOutputs);
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingInfo.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingInfo.java
new file mode 100644
index 0000000000..2b25eae46d
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingInfo.java
@@ -0,0 +1,85 @@
+// Copyright 2014 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.cpp;
+
+import com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableList;
+import com.google.devtools.build.lib.analysis.AnalysisUtils;
+import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
+import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
+import com.google.devtools.build.lib.packages.NativeInfo;
+import com.google.devtools.build.lib.packages.NativeProvider;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+
+/** Wrapper for every C++ linking provider. */
+@Immutable
+@AutoCodec
+@SkylarkModule(
+ name = "cc_linking_info",
+ documented = false,
+ category = SkylarkModuleCategory.PROVIDER,
+ doc = "Wrapper for every C++ linking provider"
+)
+public final class CcLinkingInfo extends NativeInfo {
+ public static final NativeProvider<CcLinkingInfo> PROVIDER =
+ new NativeProvider<CcLinkingInfo>(CcLinkingInfo.class, "CcLinkingInfo") {};
+
+ private final CcLinkParamsInfo ccLinkParamsInfo;
+
+ @AutoCodec.Instantiator
+ @VisibleForSerialization
+ CcLinkingInfo(CcLinkParamsInfo ccLinkParamsInfo) {
+ super(PROVIDER);
+ this.ccLinkParamsInfo = ccLinkParamsInfo;
+ }
+
+ public CcLinkParamsInfo getCcLinkParamsInfo() {
+ return ccLinkParamsInfo;
+ }
+
+ /** A Builder for {@link CcLinkingInfo}. */
+ public static class Builder {
+ CcLinkParamsInfo ccLinkParamsInfo;
+
+ public static CcLinkingInfo.Builder create() {
+ return new CcLinkingInfo.Builder();
+ }
+
+ public Builder setCcLinkParamsInfo(CcLinkParamsInfo ccLinkParamsInfo) {
+ Preconditions.checkState(this.ccLinkParamsInfo == null);
+ this.ccLinkParamsInfo = ccLinkParamsInfo;
+ return this;
+ }
+
+ public CcLinkingInfo build() {
+ return new CcLinkingInfo(ccLinkParamsInfo);
+ }
+ }
+
+ public static ImmutableList<CcLinkParamsInfo> getCcLinkParamsInfos(
+ Iterable<? extends TransitiveInfoCollection> deps) {
+ ImmutableList.Builder<CcLinkParamsInfo> ccLinkParamsInfosBuilder = ImmutableList.builder();
+ for (CcLinkingInfo ccLinkingInfo : AnalysisUtils.getProviders(deps, CcLinkingInfo.PROVIDER)) {
+ CcLinkParamsInfo ccLinkParamsInfo = ccLinkingInfo.getCcLinkParamsInfo();
+ if (ccLinkParamsInfo != null) {
+ ccLinkParamsInfosBuilder.add(ccLinkParamsInfo);
+ }
+ }
+ return ccLinkParamsInfosBuilder.build();
+ }
+}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcSkylarkApiProvider.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcSkylarkApiProvider.java
index 26ece69f1c..3d4fc9bcc5 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcSkylarkApiProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcSkylarkApiProvider.java
@@ -65,7 +65,9 @@ public final class CcSkylarkApiProvider extends SkylarkApiProvider {
+ "(possibly empty but never <code>None</code>)")
public NestedSet<Artifact> getLibraries() {
NestedSetBuilder<Artifact> libs = NestedSetBuilder.linkOrder();
- CcLinkParamsInfo ccLinkParams = getInfo().get(CcLinkParamsInfo.PROVIDER);
+ CcLinkingInfo ccLinkingInfo = getInfo().get(CcLinkingInfo.PROVIDER);
+ CcLinkParamsInfo ccLinkParams =
+ ccLinkingInfo == null ? null : ccLinkingInfo.getCcLinkParamsInfo();
if (ccLinkParams == null) {
return libs.build();
}
@@ -84,7 +86,9 @@ public final class CcSkylarkApiProvider extends SkylarkApiProvider {
+ "<code>MOSTLY STATIC</code> mode (<code>linkstatic=1</code>) "
+ "(possibly empty but never <code>None</code>)")
public ImmutableList<String> getLinkopts() {
- CcLinkParamsInfo ccLinkParams = getInfo().get(CcLinkParamsInfo.PROVIDER);
+ CcLinkingInfo ccLinkingInfo = getInfo().get(CcLinkingInfo.PROVIDER);
+ CcLinkParamsInfo ccLinkParams =
+ ccLinkingInfo == null ? null : ccLinkingInfo.getCcLinkParamsInfo();
if (ccLinkParams == null) {
return ImmutableList.of();
}