diff options
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationHelper.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationHelper.java | 174 |
1 files changed, 92 insertions, 82 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationHelper.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationHelper.java index 102b42427c..a097a81790 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationHelper.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationHelper.java @@ -128,13 +128,14 @@ public final class CcCompilationHelper { /** Function for extracting module maps from CppCompilationDependencies. */ private static final Function<TransitiveInfoCollection, CppModuleMap> CPP_DEPS_TO_MODULES = dep -> { - CcCompilationInfo ccCompilationInfo = dep.get(CcCompilationInfo.PROVIDER); - return ccCompilationInfo == null ? null : ccCompilationInfo.getCppModuleMap(); + CcCompilationContextInfo ccCompilationContextInfo = + dep.get(CcCompilationContextInfo.PROVIDER); + return ccCompilationContextInfo == null ? null : ccCompilationContextInfo.getCppModuleMap(); }; /** * Contains the providers as well as the {@code CcCompilationOutputs} and the {@code - * CcCompilationInfo}. + * CcCompilationContextInfo}. */ @SkylarkModule( name = "compilation_info", @@ -142,23 +143,24 @@ public final class CcCompilationHelper { category = SkylarkModuleCategory.BUILTIN, doc = "Helper class containing CC compilation providers." ) - // TODO(plf): Rename so that it's not confused with CcCompilationInfo and also consider merging + // TODO(plf): Rename so that it's not confused with CcCompilationContextInfo and also consider + // merging // this class with {@code CcCompilationOutputs}. public static final class CompilationInfo { private final TransitiveInfoProviderMap providers; private final Map<String, NestedSet<Artifact>> outputGroups; private final CcCompilationOutputs compilationOutputs; - private final CcCompilationInfo ccCompilationInfo; + private final CcCompilationContextInfo ccCompilationContextInfo; private CompilationInfo( TransitiveInfoProviderMap providers, Map<String, NestedSet<Artifact>> outputGroups, CcCompilationOutputs compilationOutputs, - CcCompilationInfo ccCompilationInfo) { + CcCompilationContextInfo ccCompilationContextInfo) { this.providers = providers; this.outputGroups = outputGroups; this.compilationOutputs = compilationOutputs; - this.ccCompilationInfo = ccCompilationInfo; + this.ccCompilationContextInfo = ccCompilationContextInfo; } public TransitiveInfoProviderMap getProviders() { @@ -175,8 +177,8 @@ public final class CcCompilationHelper { } @SkylarkCallable(name = "cc_compilation_info", documented = false) - public CcCompilationInfo getCcCompilationInfo() { - return ccCompilationInfo; + public CcCompilationContextInfo getCcCompilationContextInfo() { + return ccCompilationContextInfo; } } @@ -201,7 +203,7 @@ public final class CcCompilationHelper { private CoptsFilter coptsFilter = CoptsFilter.alwaysPasses(); private final Set<String> defines = new LinkedHashSet<>(); private final List<TransitiveInfoCollection> deps = new ArrayList<>(); - private final List<CcCompilationInfo> depCcCompilationInfos = new ArrayList<>(); + private final List<CcCompilationContextInfo> depCcCompilationContextInfos = new ArrayList<>(); private final List<PathFragment> looseIncludeDirs = new ArrayList<>(); private final List<PathFragment> systemIncludeDirs = new ArrayList<>(); private final List<PathFragment> includeDirs = new ArrayList<>(); @@ -227,7 +229,7 @@ public final class CcCompilationHelper { private boolean generatePicAction; // TODO(plf): Pull out of class. - private CcCompilationInfo ccCompilationInfo; + private CcCompilationContextInfo ccCompilationContextInfo; /** * Creates a CcCompilationHelper. @@ -542,8 +544,9 @@ public final class CcCompilationHelper { return this; } - public CcCompilationHelper addDepCcCompilationInfo(CcCompilationInfo ccCompilationInfo) { - this.depCcCompilationInfos.add(Preconditions.checkNotNull(ccCompilationInfo)); + public CcCompilationHelper addDepCcCompilationContextInfo( + CcCompilationContextInfo ccCompilationContextInfo) { + this.depCcCompilationContextInfos.add(Preconditions.checkNotNull(ccCompilationContextInfo)); return this; } @@ -693,11 +696,11 @@ public final class CcCompilationHelper { } } - ccCompilationInfo = initializeCcCompilationInfo(); + ccCompilationContextInfo = initializeCcCompilationContextInfo(); boolean compileHeaderModules = featureConfiguration.isEnabled(CppRuleClasses.HEADER_MODULES); Preconditions.checkState( - !compileHeaderModules || ccCompilationInfo.getCppModuleMap() != null, + !compileHeaderModules || ccCompilationContextInfo.getCppModuleMap() != null, "All cc rules must support module maps."); // Create compile actions (both PIC and no-PIC). @@ -728,7 +731,7 @@ public final class CcCompilationHelper { new CppDebugFileProvider( dwoArtifacts.getDwoArtifacts(), dwoArtifacts.getPicDwoArtifacts()), collectTransitiveLipoInfo(ccOutputs)); - providers.put(ccCompilationInfo); + providers.put(ccCompilationContextInfo); Map<String, NestedSet<Artifact>> outputGroups = new TreeMap<>(); outputGroups.put(OutputGroupInfo.TEMP_FILES, getTemps(ccOutputs)); @@ -741,10 +744,11 @@ public final class CcCompilationHelper { ccOutputs.getFilesToCompile(isLipoCollector, processHeadersInDependencies, usePic)); outputGroups.put( OutputGroupInfo.COMPILATION_PREREQUISITES, - CcCommon.collectCompilationPrerequisites(ruleContext, ccCompilationInfo)); + CcCommon.collectCompilationPrerequisites(ruleContext, ccCompilationContextInfo)); } - return new CompilationInfo(providers.build(), outputGroups, ccOutputs, ccCompilationInfo); + return new CompilationInfo( + providers.build(), outputGroups, ccOutputs, ccCompilationContextInfo); } @Immutable @@ -882,12 +886,13 @@ public final class CcCompilationHelper { } /** - * Create {@code CcCompilationInfo} for cc compile action from generated inputs. + * Create {@code CcCompilationContextInfo} for cc compile action from generated inputs. * - * <p>TODO(plf): Try to pull out CcCompilationInfo building out of this class. + * <p>TODO(plf): Try to pull out CcCompilationContextInfo building out of this class. */ - public CcCompilationInfo initializeCcCompilationInfo() { - CcCompilationInfo.Builder ccCompilationInfoBuilder = new CcCompilationInfo.Builder(ruleContext); + public CcCompilationContextInfo initializeCcCompilationContextInfo() { + CcCompilationContextInfo.Builder ccCompilationContextInfoBuilder = + new CcCompilationContextInfo.Builder(ruleContext); // Setup the include path; local include directories come before those inherited from deps or // from the toolchain; in case of aliasing (same include file found on different entries), @@ -899,61 +904,63 @@ public final class CcCompilationHelper { // we might pick up stale generated files. PathFragment repositoryPath = ruleContext.getLabel().getPackageIdentifier().getRepository().getPathUnderExecRoot(); - ccCompilationInfoBuilder.addQuoteIncludeDir(repositoryPath); - ccCompilationInfoBuilder.addQuoteIncludeDir( + ccCompilationContextInfoBuilder.addQuoteIncludeDir(repositoryPath); + ccCompilationContextInfoBuilder.addQuoteIncludeDir( ruleContext.getConfiguration().getGenfilesFragment().getRelative(repositoryPath)); for (PathFragment systemIncludeDir : systemIncludeDirs) { - ccCompilationInfoBuilder.addSystemIncludeDir(systemIncludeDir); + ccCompilationContextInfoBuilder.addSystemIncludeDir(systemIncludeDir); } for (PathFragment includeDir : includeDirs) { - ccCompilationInfoBuilder.addIncludeDir(includeDir); + ccCompilationContextInfoBuilder.addIncludeDir(includeDir); } PublicHeaders publicHeaders = computePublicHeaders(); if (publicHeaders.getVirtualIncludePath() != null) { - ccCompilationInfoBuilder.addIncludeDir(publicHeaders.getVirtualIncludePath()); + ccCompilationContextInfoBuilder.addIncludeDir(publicHeaders.getVirtualIncludePath()); } if (useDeps) { - ccCompilationInfoBuilder.mergeDependentCcCompilationInfos( - AnalysisUtils.getProviders(deps, CcCompilationInfo.PROVIDER)); - ccCompilationInfoBuilder.mergeDependentCcCompilationInfos(depCcCompilationInfos); + ccCompilationContextInfoBuilder.mergeDependentCcCompilationContextInfos( + AnalysisUtils.getProviders(deps, CcCompilationContextInfo.PROVIDER)); + ccCompilationContextInfoBuilder.mergeDependentCcCompilationContextInfos( + depCcCompilationContextInfos); } - CppHelper.mergeToolchainDependentCcCompilationInfo( - ruleContext, ccToolchain, ccCompilationInfoBuilder); + CppHelper.mergeToolchainDependentCcCompilationContextInfo( + ruleContext, ccToolchain, ccCompilationContextInfoBuilder); // But defines come after those inherited from deps. - ccCompilationInfoBuilder.addDefines(defines); + ccCompilationContextInfoBuilder.addDefines(defines); // There are no ordering constraints for declared include dirs/srcs, or the pregrepped headers. - ccCompilationInfoBuilder.addDeclaredIncludeSrcs(publicHeaders.getHeaders()); - ccCompilationInfoBuilder.addDeclaredIncludeSrcs(publicTextualHeaders); - ccCompilationInfoBuilder.addDeclaredIncludeSrcs(privateHeaders); - ccCompilationInfoBuilder.addDeclaredIncludeSrcs(additionalInputs); - ccCompilationInfoBuilder.addNonCodeInputs(additionalInputs); - ccCompilationInfoBuilder.addModularHdrs(publicHeaders.getHeaders()); - ccCompilationInfoBuilder.addModularHdrs(privateHeaders); - ccCompilationInfoBuilder.addTextualHdrs(publicTextualHeaders); - ccCompilationInfoBuilder.addPregreppedHeaders( + ccCompilationContextInfoBuilder.addDeclaredIncludeSrcs(publicHeaders.getHeaders()); + ccCompilationContextInfoBuilder.addDeclaredIncludeSrcs(publicTextualHeaders); + ccCompilationContextInfoBuilder.addDeclaredIncludeSrcs(privateHeaders); + ccCompilationContextInfoBuilder.addDeclaredIncludeSrcs(additionalInputs); + ccCompilationContextInfoBuilder.addNonCodeInputs(additionalInputs); + ccCompilationContextInfoBuilder.addModularHdrs(publicHeaders.getHeaders()); + ccCompilationContextInfoBuilder.addModularHdrs(privateHeaders); + ccCompilationContextInfoBuilder.addTextualHdrs(publicTextualHeaders); + ccCompilationContextInfoBuilder.addPregreppedHeaders( CppHelper.createExtractInclusions(ruleContext, semantics, publicHeaders.getHeaders())); - ccCompilationInfoBuilder.addPregreppedHeaders( + ccCompilationContextInfoBuilder.addPregreppedHeaders( CppHelper.createExtractInclusions(ruleContext, semantics, publicTextualHeaders)); - ccCompilationInfoBuilder.addPregreppedHeaders( + ccCompilationContextInfoBuilder.addPregreppedHeaders( CppHelper.createExtractInclusions(ruleContext, semantics, privateHeaders)); // Add this package's dir to declaredIncludeDirs, & this rule's headers to declaredIncludeSrcs // Note: no include dir for STRICT mode. if (headersCheckingMode == HeadersCheckingMode.WARN) { - ccCompilationInfoBuilder.addDeclaredIncludeWarnDir( + ccCompilationContextInfoBuilder.addDeclaredIncludeWarnDir( ruleContext.getLabel().getPackageFragment()); for (PathFragment looseIncludeDir : looseIncludeDirs) { - ccCompilationInfoBuilder.addDeclaredIncludeWarnDir(looseIncludeDir); + ccCompilationContextInfoBuilder.addDeclaredIncludeWarnDir(looseIncludeDir); } } else if (headersCheckingMode == HeadersCheckingMode.LOOSE) { - ccCompilationInfoBuilder.addDeclaredIncludeDir(ruleContext.getLabel().getPackageFragment()); + ccCompilationContextInfoBuilder.addDeclaredIncludeDir( + ruleContext.getLabel().getPackageFragment()); for (PathFragment looseIncludeDir : looseIncludeDirs) { - ccCompilationInfoBuilder.addDeclaredIncludeDir(looseIncludeDir); + ccCompilationContextInfoBuilder.addDeclaredIncludeDir(looseIncludeDir); } } @@ -962,9 +969,9 @@ public final class CcCompilationHelper { cppModuleMap = CppHelper.createDefaultCppModuleMap(ruleContext, /*suffix=*/ ""); } - ccCompilationInfoBuilder.setPropagateCppModuleMapAsActionInput( + ccCompilationContextInfoBuilder.setPropagateCppModuleMapAsActionInput( propagateModuleMapToCompileAction); - ccCompilationInfoBuilder.setCppModuleMap(cppModuleMap); + ccCompilationContextInfoBuilder.setCppModuleMap(cppModuleMap); // There are different modes for module compilation: // 1. We create the module map and compile the module so that libraries depending on us can // use the resulting module artifacts in their compilation (compiled is true). @@ -986,10 +993,12 @@ public final class CcCompilationHelper { createModuleMapAction(cppModuleMap, publicHeaders, dependentModuleMaps, compiled)); } if (getGeneratesPicHeaderModule()) { - ccCompilationInfoBuilder.setPicHeaderModule(getPicHeaderModule(cppModuleMap.getArtifact())); + ccCompilationContextInfoBuilder.setPicHeaderModule( + getPicHeaderModule(cppModuleMap.getArtifact())); } if (getGeneratesNoPicHeaderModule()) { - ccCompilationInfoBuilder.setHeaderModule(getHeaderModule(cppModuleMap.getArtifact())); + ccCompilationContextInfoBuilder.setHeaderModule( + getHeaderModule(cppModuleMap.getArtifact())); } if (!compiled && featureConfiguration.isEnabled(CppRuleClasses.PARSE_HEADERS) @@ -1003,13 +1012,13 @@ public final class CcCompilationHelper { ruleContext.registerAction( createModuleMapAction( verificationMap, publicHeaders, dependentModuleMaps, /*compiledModule=*/ true)); - ccCompilationInfoBuilder.setVerificationModuleMap(verificationMap); + ccCompilationContextInfoBuilder.setVerificationModuleMap(verificationMap); } } - ccCompilationInfoBuilder.setPurpose(purpose); + ccCompilationContextInfoBuilder.setPurpose(purpose); - semantics.setupCcCompilationInfo(ruleContext, ccCompilationInfoBuilder); - return ccCompilationInfoBuilder.build(); + semantics.setupCcCompilationContextInfo(ruleContext, ccCompilationContextInfoBuilder); + return ccCompilationContextInfoBuilder.build(); } /** @@ -1039,9 +1048,9 @@ public final class CcCompilationHelper { } /** - * Sets the purpose for the {@code CcCompilationInfo}. + * Sets the purpose for the {@code CcCompilationContextInfo}. * - * @see CcCompilationInfo.Builder#setPurpose + * @see CcCompilationContextInfo.Builder#setPurpose * @param purpose must be a string which is suitable for use as a filename. A single rule may have * many middlemen with distinct purposes. */ @@ -1088,15 +1097,15 @@ public final class CcCompilationHelper { List<CppModuleMap> result = deps.stream().map(CPP_DEPS_TO_MODULES).collect(toCollection(ArrayList::new)); if (ruleContext.getRule().getAttributeDefinition(":stl") != null) { - CcCompilationInfo stl = - ruleContext.getPrerequisite(":stl", Mode.TARGET, CcCompilationInfo.PROVIDER); + CcCompilationContextInfo stl = + ruleContext.getPrerequisite(":stl", Mode.TARGET, CcCompilationContextInfo.PROVIDER); if (stl != null) { result.add(stl.getCppModuleMap()); } } if (ccToolchain != null) { - result.add(ccToolchain.getCcCompilationInfo().getCppModuleMap()); + result.add(ccToolchain.getCcCompilationContextInfo().getCppModuleMap()); } for (CppModuleMap additionalCppModuleMap : additionalCppModuleMaps) { result.add(additionalCppModuleMap); @@ -1227,14 +1236,14 @@ public final class CcCompilationHelper { */ private CcCompilationOutputs createCcCompileActions() throws RuleErrorException { CcCompilationOutputs.Builder result = new CcCompilationOutputs.Builder(); - Preconditions.checkNotNull(ccCompilationInfo); + Preconditions.checkNotNull(ccCompilationContextInfo); AnalysisEnvironment env = ruleContext.getAnalysisEnvironment(); if (shouldProvideHeaderModules()) { Label moduleMapLabel = - Label.parseAbsoluteUnchecked(ccCompilationInfo.getCppModuleMap().getName()); + Label.parseAbsoluteUnchecked(ccCompilationContextInfo.getCppModuleMap().getName()); Collection<Artifact> modules = - createModuleAction(result, ccCompilationInfo.getCppModuleMap()); + createModuleAction(result, ccCompilationContextInfo.getCppModuleMap()); if (featureConfiguration.isEnabled(CppRuleClasses.HEADER_MODULE_CODEGEN)) { for (Artifact module : modules) { // TODO(djasper): Investigate whether we need to use a label separate from that of the @@ -1242,9 +1251,9 @@ public final class CcCompilationHelper { createModuleCodegenAction(result, moduleMapLabel, module); } } - } else if (ccCompilationInfo.getVerificationModuleMap() != null) { + } else if (ccCompilationContextInfo.getVerificationModuleMap() != null) { Collection<Artifact> modules = - createModuleAction(result, ccCompilationInfo.getVerificationModuleMap()); + createModuleAction(result, ccCompilationContextInfo.getVerificationModuleMap()); for (Artifact module : modules) { result.addHeaderTokenFile(module); } @@ -1304,7 +1313,7 @@ public final class CcCompilationHelper { source.getType() == CppSource.Type.CLIF_INPUT_PROTO ? ArtifactCategory.CLIF_OUTPUT_PROTO : ArtifactCategory.OBJECT_FILE, - ccCompilationInfo.getCppModuleMap(), + ccCompilationContextInfo.getCppModuleMap(), /* addObject= */ true, isCodeCoverageEnabled(), // The source action does not generate dwo when it has bitcode @@ -1383,7 +1392,7 @@ public final class CcCompilationHelper { usePic, /* ccRelativeName= */ null, /* autoFdoImportPath= */ null, - ccCompilationInfo.getCppModuleMap(), + ccCompilationContextInfo.getCppModuleMap(), /* gcnoFile= */ null, /* dwoFile= */ null, /* ltoIndexingFile= */ null, @@ -1476,7 +1485,7 @@ public final class CcCompilationHelper { gcnoFile, dwoFile, ltoIndexingFile, - ccCompilationInfo, + ccCompilationContextInfo, ImmutableList.of(), userCompileFlags.build(), cppModuleMap, @@ -1502,13 +1511,13 @@ public final class CcCompilationHelper { /** * Creates a basic cpp compile action builder for source file. Configures options, crosstool - * inputs, output and dotd file names, {@code CcCompilationInfo} and copts. + * inputs, output and dotd file names, {@code CcCompilationContextInfo} and copts. */ private CppCompileActionBuilder createCompileActionBuilder(Artifact source) { CppCompileActionBuilder builder = new CppCompileActionBuilder(ruleContext, ccToolchain, configuration); builder.setSourceFile(source); - builder.setCcCompilationInfo(ccCompilationInfo); + builder.setCcCompilationContextInfo(ccCompilationContextInfo); builder.setCoptsFilter(coptsFilter); return builder; } @@ -1563,7 +1572,7 @@ public final class CcCompilationHelper { /* usePic= */ pic, ccRelativeName, module.getExecPath(), - ccCompilationInfo.getCppModuleMap(), + ccCompilationContextInfo.getCppModuleMap(), gcnoFile, dwoFile, /* ltoIndexingFile= */ null, @@ -1614,7 +1623,7 @@ public final class CcCompilationHelper { generatePicAction, /* ccRelativeName= */ null, /* autoFdoImportPath= */ null, - ccCompilationInfo.getCppModuleMap(), + ccCompilationContextInfo.getCppModuleMap(), /* gcnoFile= */ null, /* dwoFile= */ null, /* ltoIndexingFile= */ null, @@ -1675,13 +1684,14 @@ public final class CcCompilationHelper { ImmutableList.Builder<Artifact> directOutputs = new ImmutableList.Builder<>(); PathFragment ccRelativeName = sourceArtifact.getRootRelativePath(); if (CppHelper.isLipoOptimization(cppConfiguration, ccToolchain)) { - // TODO(bazel-team): we shouldn't be needing this, merging ccCompilationInfo with the binary + // TODO(bazel-team): we shouldn't be needing this, merging ccCompilationContextInfo with the + // binary // is a superset of necessary information. LipoContextProvider lipoProvider = Preconditions.checkNotNull(CppHelper.getLipoContextProvider(ruleContext), outputName); - builder.setCcCompilationInfo( - CcCompilationInfo.mergeForLipo( - lipoProvider.getLipoCcCompilationInfo(), ccCompilationInfo)); + builder.setCcCompilationContextInfo( + CcCompilationContextInfo.mergeForLipo( + lipoProvider.getLipoCcCompilationContextInfo(), ccCompilationContextInfo)); } Preconditions.checkState(generatePicAction || generateNoPicAction); if (fake) { @@ -1730,7 +1740,7 @@ public final class CcCompilationHelper { /* usePic= */ true, ccRelativeName, sourceArtifact.getExecPath(), - ccCompilationInfo.getCppModuleMap(), + ccCompilationContextInfo.getCppModuleMap(), gcnoFile, dwoFile, ltoIndexingFile, @@ -1905,7 +1915,7 @@ public final class CcCompilationHelper { usePic, ccRelativeName, execPath, - ccCompilationInfo.getCppModuleMap(), + ccCompilationContextInfo.getCppModuleMap(), /* gcnoFile= */ null, /* dwoFile= */ null, /* ltoIndexingFile= */ null, @@ -1944,7 +1954,7 @@ public final class CcCompilationHelper { // implementation (with caching results of this method) to avoid O(N^2) slowdown. if (ruleContext.getRule().isAttrDefined("deps", BuildType.LABEL_LIST)) { for (TransitiveInfoCollection dep : ruleContext.getPrerequisites("deps", Mode.TARGET)) { - if (dep.get(CcCompilationInfo.PROVIDER) != null + if (dep.get(CcCompilationContextInfo.PROVIDER) != null && InstrumentedFilesCollector.shouldIncludeLocalSources(configuration, dep)) { return true; } @@ -2013,7 +2023,7 @@ public final class CcCompilationHelper { usePic, ccRelativeName, source.getExecPath(), - ccCompilationInfo.getCppModuleMap(), + ccCompilationContextInfo.getCppModuleMap(), /* gcnoFile= */ null, /* dwoFile= */ null, /* ltoIndexingFile= */ null, @@ -2035,7 +2045,7 @@ public final class CcCompilationHelper { usePic, ccRelativeName, source.getExecPath(), - ccCompilationInfo.getCppModuleMap(), + ccCompilationContextInfo.getCppModuleMap(), /* gcnoFile= */ null, /* dwoFile= */ null, /* ltoIndexingFile= */ null, |