aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Yun Peng <pcloudy@google.com>2016-06-08 14:37:29 +0000
committerGravatar Yun Peng <pcloudy@google.com>2016-06-08 15:58:13 +0000
commitfa878df99618bfc59a5ff733871e266e9e3f3fd1 (patch)
treebfc63fcfdaca58d42a1c75ea620a05f62bb96a00
parent6e3e48ee51e8174f89da853d3618baa87d7ae812 (diff)
Move -c and -o options into action_config
Also moved -S and -E options into the same action_config. Since whoever consume CppCompileInfo add -c and -o options by themselves, to keep compatible with this, the original code is still kept and used, until the corresponding flag sets are added into CROSSTOOL. -- MOS_MIGRATED_REVID=124350905
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java1
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java30
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppModel.java23
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppRuleClasses.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/FakeCppCompileAction.java8
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ExperimentalObjcLibrary.java1
6 files changed, 55 insertions, 15 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java
index a7b1c3f64b..a83f9b85ec 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java
@@ -83,6 +83,7 @@ public final class CcCommon {
* Features we request to enable unless a rule explicitly doesn't support them.
*/
private static final ImmutableSet<String> DEFAULT_FEATURES = ImmutableSet.of(
+ CppRuleClasses.COMPILE_ACTION_FLAGS_IN_FLAG_SET,
CppRuleClasses.RANDOM_SEED,
CppRuleClasses.MODULE_MAPS,
CppRuleClasses.MODULE_MAP_HOME_CWD,
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java
index 27c8d7099a..86ab21f09a 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java
@@ -1285,13 +1285,15 @@ public class CppCompileAction extends AbstractAction
// second: The compiler options.
commandLine.addAll(getCompilerOptions());
- // 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());
+ 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;
}
@@ -1354,12 +1356,14 @@ public class CppCompileAction extends AbstractAction
options.add(dotdFile.getSafeExecPath().getPathString());
}
- 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");
+ 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;
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 2304de349f..1f2d45f6a2 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
@@ -32,6 +32,7 @@ import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.Variables.Var
import com.google.devtools.build.lib.rules.cpp.Link.LinkStaticness;
import com.google.devtools.build.lib.rules.cpp.Link.LinkTargetType;
import com.google.devtools.build.lib.rules.cpp.LinkerInputs.LibraryToLink;
+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.util.RegexFilter;
@@ -368,7 +369,27 @@ public final class CppModel {
CppCompilationContext builderContext = builder.getContext();
CppModuleMap cppModuleMap = builderContext.getCppModuleMap();
- buildVariables.addVariable("output_file", builder.getOutputFile().getExecPathString());
+ Artifact outputFile = builder.getOutputFile();
+ String realOutputFilePath;
+
+ buildVariables.addVariable("source_file", builder.getSourceFile().getExecPathString());
+ buildVariables.addVariable("output_file", outputFile.getExecPathString());
+
+ if (fake) {
+ realOutputFilePath = builder.getTempOutputFile().getPathString();
+ } else {
+ realOutputFilePath = builder.getOutputFile().getExecPathString();
+ }
+
+ if (FileType.contains(outputFile, CppFileTypes.ASSEMBLER, CppFileTypes.PIC_ASSEMBLER)) {
+ buildVariables.addVariable("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);
+ } else {
+ buildVariables.addVariable("output_object_file", realOutputFilePath);
+ }
if (featureConfiguration.isEnabled(CppRuleClasses.MODULE_MAPS) && cppModuleMap != null) {
// If the feature is enabled and cppModuleMap is null, we are about to fail during analysis
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppRuleClasses.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppRuleClasses.java
index 2d3d0b5c4a..3a2add3f32 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppRuleClasses.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppRuleClasses.java
@@ -102,6 +102,13 @@ public class CppRuleClasses {
public static final String RANDOM_SEED = "random_seed";
/**
+ * A string constant for the compile_action_flags_in_flag_set feature. This feature is just a
+ * transitional feature which helps telling whether -c and -o options are already in flag_set of
+ * action_config in CROSSTOOL file. Once the transition is done, it should be removed.
+ */
+ public static final String COMPILE_ACTION_FLAGS_IN_FLAG_SET = "compile_action_flags_in_flag_set";
+
+ /**
* A string constant for the module_map_home_cwd feature.
*/
public static final String MODULE_MAP_HOME_CWD = "module_map_home_cwd";
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/FakeCppCompileAction.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/FakeCppCompileAction.java
index a548ca30de..874f1fd608 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/FakeCppCompileAction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/FakeCppCompileAction.java
@@ -183,9 +183,15 @@ public class FakeCppCompileAction extends CppCompileAction {
@Override
public String apply(String input) {
String result = ShellEscaper.escapeString(input);
+ // Once -c and -o options are added into action_config, the argument of
+ // getArgv(outputFile.getExecPath()) won't be used anymore. There will always be
+ // -c <tempOutputFile>, but here it has to be outputFile, so we replace it.
+ if (input.equals(tempOutputFile.getPathString())) {
+ result = outputPrefix + ShellEscaper.escapeString(outputFile.getExecPathString());
+ }
if (input.equals(outputFile.getExecPathString())
|| input.equals(getDotdFile().getSafeExecPath().getPathString())) {
- result = outputPrefix + result;
+ result = outputPrefix + ShellEscaper.escapeString(input);
}
return result;
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ExperimentalObjcLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ExperimentalObjcLibrary.java
index 83c1ede36b..deee358f1f 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ExperimentalObjcLibrary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ExperimentalObjcLibrary.java
@@ -168,6 +168,7 @@ public class ExperimentalObjcLibrary implements RuleConfiguredTargetFactory {
// We create a module map by default to allow for swift interop.
activatedCrosstoolSelectables.add(CppRuleClasses.MODULE_MAPS);
+ activatedCrosstoolSelectables.add(CppRuleClasses.COMPILE_ACTION_FLAGS_IN_FLAG_SET);
return toolchain.getFeatures().getFeatureConfiguration(activatedCrosstoolSelectables.build());
}