[clang-scan-deps] Add clang-scan-deps to llvm-driver build
authorAlex Brachet <abrachet@google.com>
Tue, 18 Apr 2023 15:02:23 +0000 (15:02 +0000)
committerAlex Brachet <abrachet@google.com>
Tue, 18 Apr 2023 15:02:23 +0000 (15:02 +0000)
Differential Revision: https://reviews.llvm.org/D148583

clang/tools/clang-scan-deps/CMakeLists.txt
clang/tools/clang-scan-deps/ClangScanDeps.cpp
llvm/utils/gn/secondary/clang/tools/clang-scan-deps/BUILD.gn
utils/bazel/llvm-project-overlay/clang/BUILD.bazel

index 7ffc3f9..a0aa95d 100644 (file)
@@ -14,6 +14,7 @@ add_clang_tool(clang-scan-deps
 
   DEPENDS
   ScanDepsOptsTableGen
+  GENERATE_DRIVER
   )
 
 set(CLANG_SCAN_DEPS_LIB_DEPS
index 17d0620..60be5d2 100644 (file)
@@ -21,6 +21,7 @@
 #include "llvm/Support/FileUtilities.h"
 #include "llvm/Support/InitLLVM.h"
 #include "llvm/Support/JSON.h"
+#include "llvm/Support/LLVMDriver.h"
 #include "llvm/Support/Program.h"
 #include "llvm/Support/Signals.h"
 #include "llvm/Support/ThreadPool.h"
@@ -657,9 +658,9 @@ static std::string getModuleCachePath(ArrayRef<std::string> Args) {
 // generating P1689 format, trying to generate the compilation database
 // form specified command line after the positional parameter "--".
 static std::unique_ptr<tooling::CompilationDatabase>
-getCompilationDataBase(int argc, const char **argv, std::string &ErrorMessage) {
+getCompilationDataBase(int argc, char **argv, std::string &ErrorMessage) {
   llvm::InitLLVM X(argc, argv);
-  ParseArgs(argc, const_cast<char **>(argv));
+  ParseArgs(argc, argv);
 
   if (!CompilationDB.empty())
     return tooling::JSONCompilationDatabase::loadFromFile(
@@ -674,7 +675,7 @@ getCompilationDataBase(int argc, const char **argv, std::string &ErrorMessage) {
 
   // Trying to get the input file, the output file and the command line options
   // from the positional parameter "--".
-  const char **DoubleDash = std::find(argv, argv + argc, StringRef("--"));
+  char **DoubleDash = std::find(argv, argv + argc, StringRef("--"));
   if (DoubleDash == argv + argc) {
     llvm::errs() << "The command line arguments is required after '--' in "
                     "P1689 per file mode.";
@@ -746,7 +747,7 @@ getCompilationDataBase(int argc, const char **argv, std::string &ErrorMessage) {
       FEOpts.Inputs[0].getFile(), OutputFile, CommandLine);
 }
 
-int main(int argc, const char **argv) {
+int clang_scan_deps_main(int argc, char **argv, const llvm::ToolContext &) {
   std::string ErrorMessage;
   std::unique_ptr<tooling::CompilationDatabase> Compilations =
       getCompilationDataBase(argc, argv, ErrorMessage);
index 7b8f45a..48a9ddc 100644 (file)
@@ -1,3 +1,4 @@
+import("//llvm/utils/gn/build/driver_executable.gni")
 import("//llvm/utils/TableGen/tablegen.gni")
 
 tablegen("Opts") {
@@ -5,7 +6,7 @@ tablegen("Opts") {
   args = [ "-gen-opt-parser-defs" ]
 }
 
-executable("clang-scan-deps") {
+driver_executable("clang-scan-deps") {
   configs += [ "//llvm/utils/gn/build:clang_code" ]
   deps = [
     ":Opts",
index 1de8c82..d1cfc0b 100644 (file)
@@ -2251,9 +2251,18 @@ gentbl(
     td_srcs = [ "//llvm:include/llvm/Option/OptParser.td" ],
 )
 
+expand_template(
+    name = "clang-scan-deps-main",
+    out = "clang-scan-deps-driver.cpp",
+    substitutions = {
+        "@TOOL_NAME@": "clang_scan_deps",
+    },
+    template = "//llvm:cmake/modules/llvm-driver-template.cpp.in",
+)
+
 cc_binary(
     name = "clang-scan-deps",
-    srcs = glob(["tools/clang-scan-deps/*.cpp"]),
+    srcs = glob(["tools/clang-scan-deps/*.cpp"]) + ["clang-scan-deps-driver.cpp"],
     stamp = 0,
     deps = [
         ":driver",