aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/cpp/CompileCommandLine.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/cpp/CompileCommandLine.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CompileCommandLine.java45
1 files changed, 38 insertions, 7 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CompileCommandLine.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CompileCommandLine.java
index 73bf3e85bb..3215cbb36e 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CompileCommandLine.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CompileCommandLine.java
@@ -20,8 +20,10 @@ import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.FeatureConfiguration;
import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.Variables;
import com.google.devtools.build.lib.rules.cpp.CppCompileAction.DotdFile;
+import com.google.devtools.build.lib.util.FileType;
import com.google.devtools.build.lib.util.Pair;
import com.google.devtools.build.lib.util.Preconditions;
+import com.google.devtools.build.lib.vfs.PathFragment;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@@ -31,6 +33,7 @@ import javax.annotation.Nullable;
public final class CompileCommandLine {
private final Artifact sourceFile;
+ private final Artifact outputFile;
private final Predicate<String> coptsFilter;
private final FeatureConfiguration featureConfiguration;
private final CcToolchainFeatures.Variables variables;
@@ -40,6 +43,7 @@ public final class CompileCommandLine {
private CompileCommandLine(
Artifact sourceFile,
+ Artifact outputFile,
Predicate<String> coptsFilter,
FeatureConfiguration featureConfiguration,
CppConfiguration cppConfiguration,
@@ -47,6 +51,7 @@ public final class CompileCommandLine {
String actionName,
DotdFile dotdFile) {
this.sourceFile = Preconditions.checkNotNull(sourceFile);
+ this.outputFile = Preconditions.checkNotNull(outputFile);
this.coptsFilter = coptsFilter;
this.featureConfiguration = Preconditions.checkNotNull(featureConfiguration);
this.cppConfiguration = Preconditions.checkNotNull(cppConfiguration);
@@ -66,12 +71,8 @@ public final class CompileCommandLine {
return featureConfiguration.getEnvironmentVariables(actionName, variables);
}
- /**
- * @param overwrittenVariables: Variables that will overwrite original build variables. When null,
- * unmodified original variables are used.
- */
- protected List<String> getArguments(
- @Nullable CcToolchainFeatures.Variables overwrittenVariables) {
+ protected List<String> getArgv(
+ PathFragment outputFile, CcToolchainFeatures.Variables overwrittenVariables) {
List<String> commandLine = new ArrayList<>();
// first: The command name.
@@ -86,6 +87,17 @@ public final class CompileCommandLine {
// second: The compiler options.
commandLine.addAll(getCompilerOptions(overwrittenVariables));
+
+ if (!featureConfiguration.isEnabled("compile_action_flags_in_flag_set")) {
+ // third: The file to compile!
+ commandLine.add("-c");
+ commandLine.add(sourceFile.getExecPathString());
+
+ // finally: The output file. (Prefixed with -o).
+ commandLine.add("-o");
+ commandLine.add(outputFile.getPathString());
+ }
+
return commandLine;
}
@@ -104,6 +116,19 @@ public final class CompileCommandLine {
addFilteredOptions(
options, featureConfiguration.getPerFeatureExpansions(actionName, updatedVariables));
+ if (!featureConfiguration.isEnabled("compile_action_flags_in_flag_set")) {
+ if (FileType.contains(outputFile, CppFileTypes.ASSEMBLER, CppFileTypes.PIC_ASSEMBLER)) {
+ options.add("-S");
+ } else if (FileType.contains(
+ outputFile,
+ CppFileTypes.PREPROCESSED_C,
+ CppFileTypes.PREPROCESSED_CPP,
+ CppFileTypes.PIC_PREPROCESSED_C,
+ CppFileTypes.PIC_PREPROCESSED_CPP)) {
+ options.add("-E");
+ }
+ }
+
return options;
}
@@ -149,16 +174,19 @@ public final class CompileCommandLine {
public static Builder builder(
Artifact sourceFile,
+ Artifact outputFile,
Predicate<String> coptsFilter,
String actionName,
CppConfiguration cppConfiguration,
DotdFile dotdFile) {
- return new Builder(sourceFile, coptsFilter, actionName, cppConfiguration, dotdFile);
+ return new Builder(
+ sourceFile, outputFile, coptsFilter, actionName, cppConfiguration, dotdFile);
}
/** A builder for a {@link CompileCommandLine}. */
public static final class Builder {
private final Artifact sourceFile;
+ private final Artifact outputFile;
private Predicate<String> coptsFilter;
private FeatureConfiguration featureConfiguration;
private CcToolchainFeatures.Variables variables = Variables.EMPTY;
@@ -169,6 +197,7 @@ public final class CompileCommandLine {
public CompileCommandLine build() {
return new CompileCommandLine(
Preconditions.checkNotNull(sourceFile),
+ Preconditions.checkNotNull(outputFile),
Preconditions.checkNotNull(coptsFilter),
Preconditions.checkNotNull(featureConfiguration),
Preconditions.checkNotNull(cppConfiguration),
@@ -179,11 +208,13 @@ public final class CompileCommandLine {
private Builder(
Artifact sourceFile,
+ Artifact outputFile,
Predicate<String> coptsFilter,
String actionName,
CppConfiguration cppConfiguration,
DotdFile dotdFile) {
this.sourceFile = sourceFile;
+ this.outputFile = outputFile;
this.coptsFilter = coptsFilter;
this.actionName = actionName;
this.cppConfiguration = cppConfiguration;