Revert "Revert "[gn build] (manually) port 9b6765e784b3" anf follow-ups"
authorNico Weber <thakis@chromium.org>
Sat, 19 Sep 2020 12:28:38 +0000 (08:28 -0400)
committerNico Weber <thakis@chromium.org>
Sat, 19 Sep 2020 12:28:38 +0000 (08:28 -0400)
This reverts commit 90fffdd0f705bfb480810cef087305567dc4f6cf.
The original change relanded.

llvm/utils/gn/secondary/clang-tools-extra/clangd/BUILD.gn
llvm/utils/gn/secondary/clang-tools-extra/clangd/quality/gen_decision_forest.gni [new file with mode: 0644]
llvm/utils/gn/secondary/clang-tools-extra/clangd/unittests/BUILD.gn

index 7fa4cc8fd32c1d4add33543109c97cddf5c87929..20309f35d85acc2d06514d500997c40222e3ee5e 100644 (file)
@@ -1,3 +1,4 @@
+import("//clang-tools-extra/clangd/quality/gen_decision_forest.gni")
 import("//clang-tools-extra/clangd/xpc/enable.gni")
 import("//llvm/utils/gn/build/write_cmake_config.gni")
 
@@ -20,10 +21,17 @@ write_cmake_config("features") {
   public_configs = [ ":features_config" ]
 }
 
+gen_decision_forest("CompletionModel") {
+  model = "quality/model"
+  filename = "CompletionModel"
+  cpp_class = "clang::clangd::Example"
+}
+
 static_library("clangd") {
   output_name = "clangDaemon"
   configs += [ "//llvm/utils/gn/build:clang_code" ]
   deps = [
+    ":CompletionModel",
     ":features",
     "//clang-tools-extra/clang-tidy",
     "//clang-tools-extra/clang-tidy:all-checks",
diff --git a/llvm/utils/gn/secondary/clang-tools-extra/clangd/quality/gen_decision_forest.gni b/llvm/utils/gn/secondary/clang-tools-extra/clangd/quality/gen_decision_forest.gni
new file mode 100644 (file)
index 0000000..09c7d3e
--- /dev/null
@@ -0,0 +1,37 @@
+template("gen_decision_forest") {
+  model = invoker.model
+  filename = invoker.filename
+  cpp_class = invoker.cpp_class
+
+  action("${target_name}Cpp") {
+    script = "//clang-tools-extra/clangd/quality/CompletionModelCodegen.py"
+    outputs = [
+      "$target_gen_dir/$filename.cpp",
+      "$target_gen_dir/$filename.h",
+    ]
+    args = [
+      "--model",
+      rebase_path(model, root_build_dir),
+      "--output_dir",
+      rebase_path(target_gen_dir, root_build_dir),
+      "--filename",
+      filename,
+      "--cpp_class",
+      cpp_class,
+    ]
+  }
+
+  config("${target_name}Config") {
+    cflags = [ "-Wno-unused-label" ]
+  }
+
+  source_set(target_name) {
+    configs += [
+      "//llvm/utils/gn/build:clang_code",
+      ":${target_name}Config",
+    ]
+    deps = [ ":${target_name}Cpp" ]
+    include_dirs = [ "." ]
+    sources = get_target_outputs(":${target_name}Cpp")
+  }
+}
index f732e837a88ef0dc4ba2136c8edad06dc6ceb8aa..409eaf8105a1d6d659f6ba36ec4bf2e17d8c9b41 100644 (file)
@@ -1,8 +1,16 @@
+import("//clang-tools-extra/clangd/quality/gen_decision_forest.gni")
 import("//llvm/utils/unittest/unittest.gni")
 
+gen_decision_forest("DecisionForestRuntimeTest") {
+  model = "decision_forest_model"
+  filename = "DecisionForestRuntimeTest"
+  cpp_class = "::ns1::ns2::test::Example"
+}
+
 unittest("ClangdTests") {
   configs += [ "//llvm/utils/gn/build:clang_code" ]
   deps = [
+    ":DecisionForestRuntimeTest",
     "//clang-tools-extra/clang-tidy",
     "//clang-tools-extra/clangd",
     "//clang-tools-extra/clangd:features",
@@ -28,6 +36,9 @@ unittest("ClangdTests") {
 
     # To pick up the generated inc files.
     "$target_gen_dir/../../clangd/tool",
+
+    # To pick up the generated DecisionForestRuntimeTest.h file.
+    target_gen_dir,
   ]
   sources = [
     "ASTTests.cpp",
@@ -44,6 +55,7 @@ unittest("ClangdTests") {
     "ConfigCompileTests.cpp",
     "ConfigProviderTests.cpp",
     "ConfigYAMLTests.cpp",
+    "DecisionForestTests.cpp",
     "DexTests.cpp",
     "DiagnosticsTests.cpp",
     "DraftStoreTests.cpp",