aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar Yun Peng <pcloudy@google.com>2016-06-10 12:45:12 +0000
committerGravatar Dmitry Lomov <dslomov@google.com>2016-06-10 13:41:22 +0000
commit2eda8c13243c4603fbc8d2b6865d672cde4e2024 (patch)
tree13c5f90878a30423467f5931c72a674ff22da286 /src
parentc72fac6c1fd04840059b563c1ff882205ef9a03d (diff)
*** Reason for rollback *** -- MOS_MIGRATED_REVID=124553522
Diffstat (limited to 'src')
-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.java16
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileActionBuilder.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java32
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppModel.java11
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppRuleClasses.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ExperimentalObjcLibrary.java1
7 files changed, 53 insertions, 17 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 a83f9b85ec..8ccd6e1dea 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.DEPENDENCY_FILE,
CppRuleClasses.COMPILE_ACTION_FLAGS_IN_FLAG_SET,
CppRuleClasses.RANDOM_SEED,
CppRuleClasses.MODULE_MAPS,
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 86ab21f09a..b2ca7a23b7 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
@@ -1340,22 +1340,6 @@ public class CppCompileAction extends AbstractAction
}
}
- // Enable <object>.d file generation.
- if (dotdFile != null) {
- // Gcc options:
- // -MD turns on .d file output as a side-effect (doesn't imply -E)
- // -MM[D] enables user includes only, not system includes
- // -MF <name> specifies the dotd file name
- // Issues:
- // -M[M] alone subverts actual .o output (implies -E)
- // -M[M]D alone breaks some of the .d naming assumptions
- // This combination gets user and system includes with specified name:
- // -MD -MF <name>
- options.add("-MD");
- options.add("-MF");
- options.add(dotdFile.getSafeExecPath().getPathString());
- }
-
if (!featureConfiguration.isEnabled("compile_action_flags_in_flag_set")) {
if (FileType.contains(outputFile, CppFileTypes.ASSEMBLER, CppFileTypes.PIC_ASSEMBLER)) {
options.add("-S");
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileActionBuilder.java
index 1997dc84a2..015d76d6a9 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileActionBuilder.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileActionBuilder.java
@@ -426,6 +426,10 @@ public class CppCompileActionBuilder {
return this;
}
+ public DotdFile getDotdFile() {
+ return this.dotdFile;
+ }
+
public CppCompileActionBuilder setGcnoFile(Artifact gcnoFile) {
this.gcnoFile = gcnoFile;
return this;
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java
index 07e87246ee..3c4ac5f3c0 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java
@@ -692,6 +692,38 @@ public class CppConfiguration extends BuildConfiguration.Fragment {
return toolchain;
}
try {
+ if (!features.contains("dependency_file")) {
+ // Gcc options:
+ // -MD turns on .d file output as a side-effect (doesn't imply -E)
+ // -MM[D] enables user includes only, not system includes
+ // -MF <name> specifies the dotd file name
+ // Issues:
+ // -M[M] alone subverts actual .o output (implies -E)
+ // -M[M]D alone breaks some of the .d naming assumptions
+ // This combination gets user and system includes with specified name:
+ // -MD -MF <name>
+ TextFormat.merge(""
+ + "feature {"
+ + " name: 'dependency_file'"
+ + " flag_set {"
+ + " action: 'assemble'"
+ + " action: 'preprocess-assemble'"
+ + " action: 'c-compile'"
+ + " action: 'c++-compile'"
+ + " action: 'c++-module-compile'"
+ + " action: 'objc-compile'"
+ + " action: 'objc++-compile'"
+ + " expand_if_all_available: 'dependency_file'"
+ + " flag_group {"
+ + " flag: '-MD'"
+ + " flag: '-MF'"
+ + " flag: '%{dependency_file}'"
+ + " }"
+ + " }"
+ + "}",
+ toolchainBuilder);
+ }
+
if (!features.contains("random_seed")) {
// GCC and Clang give randomized names to symbols which are defined in
// an anonymous namespace but have external linkage. To make
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 1f2d45f6a2..2569b4d9ea 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
@@ -29,6 +29,7 @@ import com.google.devtools.build.lib.packages.BuildType;
import com.google.devtools.build.lib.rules.cpp.CcCompilationOutputs.Builder;
import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.FeatureConfiguration;
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;
import com.google.devtools.build.lib.rules.cpp.Link.LinkTargetType;
import com.google.devtools.build.lib.rules.cpp.LinkerInputs.LibraryToLink;
@@ -369,10 +370,11 @@ public final class CppModel {
CppCompilationContext builderContext = builder.getContext();
CppModuleMap cppModuleMap = builderContext.getCppModuleMap();
+ Artifact sourceFile = builder.getSourceFile();
Artifact outputFile = builder.getOutputFile();
String realOutputFilePath;
- buildVariables.addVariable("source_file", builder.getSourceFile().getExecPathString());
+ buildVariables.addVariable("source_file", sourceFile.getExecPathString());
buildVariables.addVariable("output_file", outputFile.getExecPathString());
if (fake) {
@@ -391,6 +393,13 @@ public final class CppModel {
buildVariables.addVariable("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());
+ }
+
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.
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 3a2add3f32..d8987bb8ec 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
@@ -109,6 +109,11 @@ public class CppRuleClasses {
public static final String COMPILE_ACTION_FLAGS_IN_FLAG_SET = "compile_action_flags_in_flag_set";
/**
+ * A string constant for the dependency_file feature. This feature generates the .d file.
+ */
+ public static final String DEPENDENCY_FILE = "dependency_file";
+
+ /**
* 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/objc/ExperimentalObjcLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ExperimentalObjcLibrary.java
index deee358f1f..e6a720b619 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
@@ -169,6 +169,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);
+ activatedCrosstoolSelectables.add(CppRuleClasses.DEPENDENCY_FILE);
return toolchain.getFeatures().getFeatureConfiguration(activatedCrosstoolSelectables.build());
}