diff options
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.java | 45 |
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; |