Skip to content

Commit d021b59

Browse files
author
Luca Di Grazia
committed
Expose cc_toolchain.static_runtime_lib and cc_toolchain.dynamic_runtime_lib to Starlark
This is required since existing cc_toolchain.all_files doesn't usually contain C++ runtime library. Progress towards bazelbuild/bazel#6516 RELNOTES: `cc_toolchain.static_runtime_lib` and `cc_toolchain.dynamic_runtime_lib` are now exposed to Starlark. PiperOrigin-RevId: 242863875
1 parent db5951f commit d021b59

File tree

7 files changed

+256
-355
lines changed

7 files changed

+256
-355
lines changed

dataset/GitHub_Java/bazelbuild.bazel/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -345,6 +345,7 @@ public static ConfiguredTarget init(CppSemantics semantics, RuleContext ruleCont
345345
.addCcCompilationContexts(CppHelper.getCompilationContextsFromDeps(deps))
346346
.addCcCompilationContexts(
347347
ImmutableList.of(CcCompilationHelper.getStlCcCompilationContext(ruleContext)))
348+
.addQuoteIncludeDirs(semantics.getQuoteIncludes(ruleContext))
348349
.setHeadersCheckingMode(semantics.determineHeadersCheckingMode(ruleContext))
349350
.setCodeCoverageEnabled(CcCompilationHelper.isCodeCoverageEnabled(ruleContext))
350351
.setFake(fake);

dataset/GitHub_Java/bazelbuild.bazel/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,7 @@ public static void init(
168168
.collect(ImmutableList.toImmutableList()))
169169
.addCcCompilationContexts(
170170
ImmutableList.of(CcCompilationHelper.getStlCcCompilationContext(ruleContext)))
171+
.addQuoteIncludeDirs(semantics.getQuoteIncludes(ruleContext))
171172
.setHeadersCheckingMode(semantics.determineHeadersCheckingMode(ruleContext));
172173

173174
CcLinkingHelper linkingHelper =

dataset/GitHub_Java/bazelbuild.bazel/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingHelper.java

Lines changed: 6 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -454,18 +454,6 @@ private CcLinkingOutputs createCcLinkActions(CcCompilationOutputs ccOutputs)
454454
ccLinkingOutputsBuilder, libraryToLinkBuilder, usePic, libraryIdentifier, ccOutputs);
455455
}
456456

457-
if (shouldCreateStaticLibraries
458-
&& featureConfiguration.isEnabled(CppRuleClasses.DISABLE_WHOLE_ARCHIVE_FOR_STATIC_LIB)
459-
&& (staticLinkType == LinkTargetType.ALWAYS_LINK_STATIC_LIBRARY)) {
460-
ruleErrorConsumer.throwWithAttributeError(
461-
"alwayslink",
462-
"alwayslink should not be True for a target with the"
463-
+ " disable_whole_archive_for_static_lib feature enabled.");
464-
}
465-
466-
libraryToLinkBuilder.setDisableWholeArchive(
467-
featureConfiguration.isEnabled(CppRuleClasses.DISABLE_WHOLE_ARCHIVE_FOR_STATIC_LIB));
468-
469457
if (hasBuiltDynamicLibrary || shouldCreateStaticLibraries) {
470458
ccLinkingOutputsBuilder.setLibraryToLink(libraryToLinkBuilder.build());
471459
}
@@ -622,11 +610,12 @@ private CppLinkAction registerActionForStaticLibrary(
622610
throws RuleErrorException, InterruptedException {
623611
Artifact linkedArtifact = getLinkedArtifact(linkTargetTypeUsedForNaming);
624612
CppLinkAction action =
625-
newLinkActionBuilder(linkedArtifact, linkTargetTypeUsedForNaming)
613+
newLinkActionBuilder(linkedArtifact)
626614
.addObjectFiles(ccOutputs.getObjectFiles(usePic))
627615
.addNonCodeInputs(nonCodeLinkerInputs)
628616
.addLtoCompilationContext(ccOutputs.getLtoCompilationContext())
629617
.setUsePicForLtoBackendActions(usePic)
618+
.setLinkType(linkTargetTypeUsedForNaming)
630619
.setLinkingMode(LinkingMode.STATIC)
631620
.addActionInputs(linkActionInputs)
632621
.setLibraryIdentifier(libraryIdentifier)
@@ -678,13 +667,14 @@ private boolean createDynamicLinkAction(
678667
}
679668

680669
CppLinkActionBuilder dynamicLinkActionBuilder =
681-
newLinkActionBuilder(linkerOutput, dynamicLinkType)
670+
newLinkActionBuilder(linkerOutput)
682671
.setWholeArchive(wholeArchive)
683672
.setNativeDeps(nativeDeps)
684673
.setAdditionalLinkstampDefines(additionalLinkstampDefines.build())
685674
.setInterfaceOutput(soInterface)
686675
.addNonCodeInputs(ccOutputs.getHeaderTokenFiles())
687676
.addLtoCompilationContext(ccOutputs.getLtoCompilationContext())
677+
.setLinkType(dynamicLinkType)
688678
.setLinkingMode(linkingMode)
689679
.setFake(fake)
690680
.addActionInputs(linkActionInputs)
@@ -821,8 +811,7 @@ private boolean createDynamicLinkAction(
821811
return hasBuiltDynamicLibrary;
822812
}
823813

824-
private CppLinkActionBuilder newLinkActionBuilder(
825-
Artifact outputArtifact, LinkTargetType linkType) {
814+
private CppLinkActionBuilder newLinkActionBuilder(Artifact outputArtifact) {
826815
return new CppLinkActionBuilder(
827816
ruleErrorConsumer,
828817
actionConstructionContext,
@@ -836,12 +825,7 @@ private CppLinkActionBuilder newLinkActionBuilder(
836825
.setGrepIncludes(grepIncludes)
837826
.setIsStampingEnabled(isStampingEnabled)
838827
.setTestOrTestOnlyTarget(isTestOrTestOnlyTarget)
839-
.setLinkType(linkType)
840-
.setLinkerFiles(
841-
(cppConfiguration.useSpecificToolFiles()
842-
&& linkType.linkerOrArchiver() == LinkerOrArchiver.ARCHIVER)
843-
? ccToolchain.getArFiles()
844-
: ccToolchain.getLinkerFiles())
828+
.setLinkerFiles(ccToolchain.getLinkerFiles())
845829
.setLinkArtifactFactory(linkArtifactFactory)
846830
.setUseTestOnlyFlags(useTestOnlyFlags);
847831
}

dataset/GitHub_Java/bazelbuild.bazel/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProvider.java

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -86,8 +86,7 @@ public final class CcToolchainProvider extends ToolchainInfo
8686
/* targetSysroot= */ null,
8787
/* fdoContext= */ null,
8888
/* isHostConfiguration= */ false,
89-
/* licensesProvider= */ null,
90-
/* toolPaths= */ ImmutableMap.of());
89+
/* licensesProvider= */ null);
9190

9291
@Nullable private final CppConfiguration cppConfiguration;
9392
private final CppToolchainInfo toolchainInfo;
@@ -123,7 +122,6 @@ public final class CcToolchainProvider extends ToolchainInfo
123122
@Nullable private final PathFragment sysroot;
124123
private final PathFragment targetSysroot;
125124
private final boolean isHostConfiguration;
126-
private final ImmutableMap<String, PathFragment> toolPaths;
127125
/**
128126
* WARNING: We don't like {@link FdoContext}. Its {@link FdoContext#fdoProfilePath} is pure path
129127
* and that is horrible as it breaks many Bazel assumptions! Don't do bad stuff with it, don't
@@ -170,8 +168,7 @@ public CcToolchainProvider(
170168
@Nullable PathFragment targetSysroot,
171169
FdoContext fdoContext,
172170
boolean isHostConfiguration,
173-
LicensesProvider licensesProvider,
174-
ImmutableMap<String, PathFragment> toolPaths) {
171+
LicensesProvider licensesProvider) {
175172
super(values, Location.BUILTIN);
176173
this.cppConfiguration = cppConfiguration;
177174
this.toolchainInfo = toolchainInfo;
@@ -213,7 +210,6 @@ public CcToolchainProvider(
213210
this.fdoContext = fdoContext == null ? FdoContext.getDisabledContext() : fdoContext;
214211
this.isHostConfiguration = isHostConfiguration;
215212
this.licensesProvider = licensesProvider;
216-
this.toolPaths = toolPaths;
217213
}
218214

219215
/**
@@ -349,16 +345,11 @@ public String getToolPathStringOrNull(Tool tool) {
349345
return toolPathFragment == null ? null : toolPathFragment.getPathString();
350346
}
351347

352-
/**
353-
* Returns the path fragment that is either absolute or relative to the execution root that can be
354-
* used to execute the given tool.
355-
*/
356348
@Nullable
357349
public PathFragment getToolPathFragmentOrNull(CppConfiguration.Tool tool) {
358-
return CcToolchainProviderHelper.getToolPathFragment(toolPaths, tool);
350+
return toolchainInfo.getToolPathFragment(tool);
359351
}
360352

361-
362353
@Override
363354
public ImmutableList<String> getBuiltInIncludeDirectoriesAsStrings() {
364355
return builtInIncludeDirectories
@@ -891,6 +882,11 @@ public boolean requireCtxInConfigureFeatures() {
891882
.requireCtxInConfigureFeatures();
892883
}
893884

885+
public boolean disableGenruleCcToolchainDependency() {
886+
return getCppConfigurationEvenThoughItCanBeDifferentThatWhatTargetHas()
887+
.disableGenruleCcToolchainDependency();
888+
}
889+
894890
@VisibleForTesting
895891
NestedSet<Artifact> getStaticRuntimeLibForTesting() {
896892
return staticRuntimeLinkInputs;

dataset/GitHub_Java/bazelbuild.bazel/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,12 @@
1515
package com.google.devtools.build.lib.rules.cpp;
1616

1717
import static com.google.devtools.build.lib.packages.BuildType.LABEL;
18-
import static com.google.devtools.build.lib.packages.BuildType.LABEL_LIST;
1918
import static com.google.devtools.build.lib.packages.BuildType.NODEP_LABEL;
2019
import static java.nio.charset.StandardCharsets.UTF_8;
2120

2221
import com.google.common.annotations.VisibleForTesting;
2322
import com.google.common.base.Function;
2423
import com.google.common.base.Preconditions;
25-
import com.google.common.collect.ImmutableCollection;
2624
import com.google.common.collect.ImmutableList;
2725
import com.google.common.collect.ImmutableMap;
2826
import com.google.common.collect.Iterables;
@@ -34,10 +32,8 @@
3432
import com.google.devtools.build.lib.actions.MiddlemanFactory;
3533
import com.google.devtools.build.lib.actions.ParamFileInfo;
3634
import com.google.devtools.build.lib.actions.ParameterFile;
37-
import com.google.devtools.build.lib.analysis.AliasProvider;
3835
import com.google.devtools.build.lib.analysis.AnalysisUtils;
3936
import com.google.devtools.build.lib.analysis.Expander;
40-
import com.google.devtools.build.lib.analysis.FileProvider;
4137
import com.google.devtools.build.lib.analysis.PlatformConfiguration;
4238
import com.google.devtools.build.lib.analysis.RuleConfiguredTargetBuilder;
4339
import com.google.devtools.build.lib.analysis.RuleContext;
@@ -169,18 +165,7 @@ static ImmutableList<String> getPackageCopts(RuleContext ruleContext) {
169165
public static List<String> expandLinkopts(
170166
RuleContext ruleContext, String attrName, Iterable<String> values) {
171167
List<String> result = new ArrayList<>();
172-
ImmutableMap.Builder<Label, ImmutableCollection<Artifact>> builder = ImmutableMap.builder();
173-
174-
if (ruleContext.attributes().has("additional_linker_inputs", LABEL_LIST)) {
175-
for (TransitiveInfoCollection current :
176-
ruleContext.getPrerequisites("additional_linker_inputs", Mode.TARGET)) {
177-
builder.put(
178-
AliasProvider.getDependencyLabel(current),
179-
ImmutableList.copyOf(current.getProvider(FileProvider.class).getFilesToBuild()));
180-
}
181-
}
182-
183-
Expander expander = ruleContext.getExpander(builder.build()).withDataExecLocations();
168+
Expander expander = ruleContext.getExpander().withDataExecLocations();
184169
for (String value : values) {
185170
expander.tokenizeAndExpandMakeVars(result, attrName, value);
186171
}

dataset/GitHub_Java/bazelbuild.bazel/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcToolchainProviderApi.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,16 +19,12 @@
1919
import com.google.devtools.build.lib.skylarkinterface.Param;
2020
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
2121
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
22-
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
2322
import com.google.devtools.build.lib.syntax.EvalException;
2423
import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
2524
import javax.annotation.Nullable;
2625

2726
/** Information about the C++ toolchain. */
28-
@SkylarkModule(
29-
name = "CcToolchainInfo",
30-
category = SkylarkModuleCategory.PROVIDER,
31-
doc = "Information about the C++ compiler being used.")
27+
@SkylarkModule(name = "CcToolchainInfo", doc = "Information about the C++ compiler being used.")
3228
public interface CcToolchainProviderApi<FeatureConfigurationT extends FeatureConfigurationApi>
3329
extends ToolchainInfoApi {
3430

0 commit comments

Comments
 (0)