diff --git a/llvm/utils/gn/secondary/clang-tools-extra/clangd/BUILD.gn b/llvm/utils/gn/secondary/clang-tools-extra/clangd/BUILD.gn index 7fa4cc8fd32c1d..20309f35d85acc 100644 --- a/llvm/utils/gn/secondary/clang-tools-extra/clangd/BUILD.gn +++ b/llvm/utils/gn/secondary/clang-tools-extra/clangd/BUILD.gn @@ -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 index 00000000000000..09c7d3e96ffffd --- /dev/null +++ b/llvm/utils/gn/secondary/clang-tools-extra/clangd/quality/gen_decision_forest.gni @@ -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") + } +} diff --git a/llvm/utils/gn/secondary/clang-tools-extra/clangd/unittests/BUILD.gn b/llvm/utils/gn/secondary/clang-tools-extra/clangd/unittests/BUILD.gn index f732e837a88ef0..409eaf8105a1d6 100644 --- a/llvm/utils/gn/secondary/clang-tools-extra/clangd/unittests/BUILD.gn +++ b/llvm/utils/gn/secondary/clang-tools-extra/clangd/unittests/BUILD.gn @@ -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",