aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModel.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/cpp/CppModel.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppModel.java69
1 files changed, 35 insertions, 34 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModel.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModel.java
index f5aaae3d40..d1eadd4e1e 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModel.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModel.java
@@ -30,7 +30,7 @@ import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.
import com.google.devtools.build.lib.rules.cpp.CcCompilationOutputs.Builder;
import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.ExpansionException;
import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.FeatureConfiguration;
-import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.Variables.StringSequence;
+import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.Variables.StringSequenceBuilder;
import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.Variables.VariablesExtension;
import com.google.devtools.build.lib.rules.cpp.CppCompileAction.DotdFile;
import com.google.devtools.build.lib.rules.cpp.Link.LinkStaticness;
@@ -341,23 +341,22 @@ public final class CppModel {
return builder;
}
- /**
- * Get the safe path strings for a list of paths to use in the build variables.
- */
- private Collection<String> getSafePathStrings(Collection<PathFragment> paths) {
+ /** Get the safe path strings for a list of paths to use in the build variables. */
+ private ImmutableList<String> getSafePathStrings(Collection<PathFragment> paths) {
ImmutableSet.Builder<String> result = ImmutableSet.builder();
for (PathFragment path : paths) {
result.add(path.getSafePathString());
}
- return result.build();
+ return result.build().asList();
}
/**
* Select .pcm inputs to pass on the command line depending on whether we are in pic or non-pic
* mode.
*/
- private Collection<String> getHeaderModulePaths(CppCompileActionBuilder builder, boolean usePic) {
- Collection<String> result = new LinkedHashSet<>();
+ private ImmutableList<String> getHeaderModulePaths(
+ CppCompileActionBuilder builder, boolean usePic) {
+ ImmutableSet.Builder<String> result = ImmutableSet.builder();
Iterable<Artifact> artifacts =
featureConfiguration.isEnabled(CppRuleClasses.HEADER_MODULE_INCLUDES_DEPENDENCIES)
? builder.getContext().getTopLevelModules(usePic)
@@ -365,7 +364,7 @@ public final class CppModel {
for (Artifact artifact : artifacts) {
result.add(artifact.getExecPathString());
}
- return result;
+ return result.build().asList();
}
private void setupCompileBuildVariables(
@@ -387,8 +386,8 @@ public final class CppModel {
Artifact outputFile = builder.getOutputFile();
String realOutputFilePath;
- buildVariables.addVariable("source_file", sourceFile.getExecPathString());
- buildVariables.addVariable("output_file", outputFile.getExecPathString());
+ buildVariables.addStringVariable("source_file", sourceFile.getExecPathString());
+ buildVariables.addStringVariable("output_file", outputFile.getExecPathString());
if (builder.getTempOutputFile() != null) {
realOutputFilePath = builder.getTempOutputFile().getPathString();
@@ -397,44 +396,46 @@ public final class CppModel {
}
if (FileType.contains(outputFile, CppFileTypes.ASSEMBLER, CppFileTypes.PIC_ASSEMBLER)) {
- buildVariables.addVariable("output_assembly_file", realOutputFilePath);
+ buildVariables.addStringVariable("output_assembly_file", realOutputFilePath);
} else if (FileType.contains(outputFile, CppFileTypes.PREPROCESSED_C,
CppFileTypes.PREPROCESSED_CPP, CppFileTypes.PIC_PREPROCESSED_C,
CppFileTypes.PIC_PREPROCESSED_CPP)) {
- buildVariables.addVariable("output_preprocess_file", realOutputFilePath);
+ buildVariables.addStringVariable("output_preprocess_file", realOutputFilePath);
} else {
- buildVariables.addVariable("output_object_file", realOutputFilePath);
+ buildVariables.addStringVariable("output_object_file", realOutputFilePath);
}
DotdFile dotdFile = CppFileTypes.mustProduceDotdFile(sourceFile.getPath().toString())
? Preconditions.checkNotNull(builder.getDotdFile()) : null;
// Set dependency_file to enable <object>.d file generation.
if (dotdFile != null) {
- buildVariables.addVariable("dependency_file", dotdFile.getSafeExecPath().getPathString());
+ buildVariables.addStringVariable(
+ "dependency_file", dotdFile.getSafeExecPath().getPathString());
}
if (featureConfiguration.isEnabled(CppRuleClasses.MODULE_MAPS) && cppModuleMap != null) {
// If the feature is enabled and cppModuleMap is null, we are about to fail during analysis
// in any case, but don't crash.
- buildVariables.addVariable("module_name", cppModuleMap.getName());
- buildVariables.addVariable("module_map_file",
- cppModuleMap.getArtifact().getExecPathString());
- StringSequence.Builder sequence = new StringSequence.Builder();
+ buildVariables.addStringVariable("module_name", cppModuleMap.getName());
+ buildVariables.addStringVariable(
+ "module_map_file", cppModuleMap.getArtifact().getExecPathString());
+ StringSequenceBuilder sequence = new StringSequenceBuilder();
for (Artifact artifact : builderContext.getDirectModuleMaps()) {
sequence.addValue(artifact.getExecPathString());
}
- buildVariables.addSequence("dependent_module_map_files", sequence.build());
+ buildVariables.addCustomBuiltVariable("dependent_module_map_files", sequence);
}
if (featureConfiguration.isEnabled(CppRuleClasses.USE_HEADER_MODULES)) {
- buildVariables.addSequenceVariable("module_files", getHeaderModulePaths(builder, usePic));
+ buildVariables.addStringSequenceVariable(
+ "module_files", getHeaderModulePaths(builder, usePic));
}
if (featureConfiguration.isEnabled(CppRuleClasses.INCLUDE_PATHS)) {
- buildVariables.addSequenceVariable("include_paths",
- getSafePathStrings(builderContext.getIncludeDirs()));
- buildVariables.addSequenceVariable("quote_include_paths",
- getSafePathStrings(builderContext.getQuoteIncludeDirs()));
- buildVariables.addSequenceVariable("system_include_paths",
- getSafePathStrings(builderContext.getSystemIncludeDirs()));
+ buildVariables.addStringSequenceVariable(
+ "include_paths", getSafePathStrings(builderContext.getIncludeDirs()));
+ buildVariables.addStringSequenceVariable(
+ "quote_include_paths", getSafePathStrings(builderContext.getQuoteIncludeDirs()));
+ buildVariables.addStringSequenceVariable(
+ "system_include_paths", getSafePathStrings(builderContext.getSystemIncludeDirs()));
}
if (featureConfiguration.isEnabled(CppRuleClasses.PREPROCESSOR_DEFINES)) {
@@ -451,14 +452,14 @@ public final class CppModel {
defines = builderContext.getDefines();
}
- buildVariables.addSequenceVariable("preprocessor_defines", defines);
+ buildVariables.addStringSequenceVariable("preprocessor_defines", defines);
}
if (usePic) {
if (!featureConfiguration.isEnabled(CppRuleClasses.PIC)) {
ruleContext.ruleError("PIC compilation is requested but the toolchain does not support it");
}
- buildVariables.addVariable("pic", "");
+ buildVariables.addStringVariable("pic", "");
}
if (ccRelativeName != null) {
@@ -466,16 +467,16 @@ public final class CppModel {
ruleContext, ccRelativeName, autoFdoImportPath, usePic, featureConfiguration);
}
if (gcnoFile != null) {
- buildVariables.addVariable("gcov_gcno_file", gcnoFile.getExecPathString());
+ buildVariables.addStringVariable("gcov_gcno_file", gcnoFile.getExecPathString());
}
if (dwoFile != null) {
- buildVariables.addVariable("per_object_debug_info_file", dwoFile.getExecPathString());
+ buildVariables.addStringVariable("per_object_debug_info_file", dwoFile.getExecPathString());
}
- buildVariables.addAllVariables(CppHelper.getToolchain(ruleContext).getBuildVariables());
-
- buildVariables.addAllVariables(sourceSpecificBuildVariables);
+ buildVariables.addAllStringVariables(CppHelper.getToolchain(ruleContext).getBuildVariables());
+
+ buildVariables.addAllStringVariables(sourceSpecificBuildVariables);
for (VariablesExtension extension : variablesExtensions) {
extension.addVariables(buildVariables);