summaryrefslogtreecommitdiffstats
path: root/clang/tools/clang-cc/clang-cc.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'clang/tools/clang-cc/clang-cc.cpp')
-rw-r--r--clang/tools/clang-cc/clang-cc.cpp53
1 files changed, 46 insertions, 7 deletions
diff --git a/clang/tools/clang-cc/clang-cc.cpp b/clang/tools/clang-cc/clang-cc.cpp
index 669c47815e3..bf6bceec545 100644
--- a/clang/tools/clang-cc/clang-cc.cpp
+++ b/clang/tools/clang-cc/clang-cc.cpp
@@ -1374,13 +1374,6 @@ public:
if (InitializePreprocessor(*PP, InitOpts))
return 0;
- std::string ErrStr;
- bool DFG = CreateDependencyFileGen(PP.get(), ErrStr);
- if (!DFG && !ErrStr.empty()) {
- fprintf(stderr, "%s", ErrStr.c_str());
- return 0;
- }
-
return PP.take();
}
};
@@ -1527,6 +1520,28 @@ DumpMacros("dM", llvm::cl::desc("Print macro definitions in -E mode instead of"
static llvm::cl::opt<bool>
DumpDefines("dD", llvm::cl::desc("Print macro definitions in -E mode in "
"addition to normal output"));
+
+//===----------------------------------------------------------------------===//
+// Dependency file options
+//===----------------------------------------------------------------------===//
+static llvm::cl::opt<std::string>
+DependencyFile("dependency-file",
+ llvm::cl::desc("Filename (or -) to write dependency output to"));
+
+static llvm::cl::opt<bool>
+DependenciesIncludeSystemHeaders("sys-header-deps",
+ llvm::cl::desc("Include system headers in dependency output"));
+
+static llvm::cl::list<std::string>
+DependencyTargets("MT",
+ llvm::cl::desc("Specify target for dependency"));
+
+// FIXME: Implement feature
+static llvm::cl::opt<bool>
+PhonyDependencyTarget("MP",
+ llvm::cl::desc("Create phony target for each dependency "
+ "(other than main file)"));
+
//===----------------------------------------------------------------------===//
// -dump-build-information Stuff
//===----------------------------------------------------------------------===//
@@ -2133,6 +2148,30 @@ int main(int argc, char **argv) {
if (!PP)
continue;
+ // Handle generating dependencies, if requested
+ if (!DependencyFile.empty()) {
+ llvm::raw_ostream *DependencyOS;
+ if (DependencyTargets.empty()) {
+ // FIXME: Use a proper diagnostic
+ llvm::cerr << "-dependency-file requires at least one -MT option\n";
+ HadErrors = true;
+ continue;
+ }
+ std::string ErrStr;
+ DependencyOS =
+ new llvm::raw_fd_ostream(DependencyFile.c_str(), false, ErrStr);
+ if (!ErrStr.empty()) {
+ // FIXME: Use a proper diagnostic
+ llvm::cerr << "unable to open dependency file: " + ErrStr;
+ HadErrors = true;
+ continue;
+ }
+
+ AttachDependencyFileGen(PP.get(), DependencyOS, DependencyTargets,
+ DependenciesIncludeSystemHeaders,
+ PhonyDependencyTarget);
+ }
+
if (ImplicitIncludePCH.empty() &&
InitializeSourceManager(*PP.get(), InFile))
continue;
OpenPOWER on IntegriCloud