1import("//clang-tools-extra/clang-tidy/enable.gni")
2import("//clang/lib/StaticAnalyzer/Frontend/enable.gni")
3import("//clang/tools/libclang/include_clang_tools_extra.gni")
4import("//llvm/triples.gni")
5import("//llvm/utils/gn/build/write_cmake_config.gni")
6import("clang_tools_extra_lit_site_cfg_files.gni")
7
8template("write_lit_config") {
9  write_cmake_config(target_name) {
10    input = invoker.input
11    output = invoker.output
12    values = [
13      "LIT_SITE_CFG_IN_HEADER=## Autogenerated from $input, do not edit",
14      "CLANG_TOOLS_BINARY_DIR=" +
15          rebase_path(get_label_info("//clang-tools-extra", "target_out_dir")),
16      "CLANG_TOOLS_SOURCE_DIR=" + rebase_path("//clang-tools-extra"),
17      "LLVM_LIBS_DIR=",  # needed only for shared builds
18      "TARGET_TRIPLE=$llvm_target_triple",
19    ]
20    if (host_os == "win") {
21      # See comment for Windows solink in llvm/utils/gn/build/toolchain/BUILD.gn
22      values += [ "SHLIBDIR=" + rebase_path("$root_out_dir/bin") ]
23    } else {
24      values += [ "SHLIBDIR=" + rebase_path("$root_out_dir/lib") ]
25    }
26    values += invoker.extra_values
27  }
28}
29
30write_lit_config("lit_site_cfg") {
31  # Fully-qualified instead of relative for LIT_SITE_CFG_IN_HEADER.
32  input = "//clang-tools-extra/test/lit.site.cfg.py.in"
33  output = clang_tools_extra_lit_site_cfg_file
34
35  extra_values = [
36    "CLANG_TOOLS_DIR=" + rebase_path("$root_out_dir/bin"),
37    "LLVM_LIT_TOOLS_DIR=",  # Intentionally empty, matches cmake build.
38    "LLVM_TOOLS_DIR=" + rebase_path("$root_out_dir/bin"),
39    "Python3_EXECUTABLE=$python_path",
40  ]
41
42  if (clang_tidy_enable_static_analyzer) {
43    extra_values += [ "CLANG_TIDY_ENABLE_STATIC_ANALYZER=1" ]
44  } else {
45    extra_values += [ "CLANG_TIDY_ENABLE_STATIC_ANALYZER=0" ]
46  }
47
48  if (libclang_include_clang_tools_extra) {
49    extra_values += [ "LIBCLANG_INCLUDE_CLANG_TOOLS_EXTRA=1" ]
50  } else {
51    extra_values += [ "LIBCLANG_INCLUDE_CLANG_TOOLS_EXTRA=0" ]
52  }
53}
54
55write_lit_config("lit_unit_site_cfg") {
56  # Fully-qualified instead of relative for LIT_SITE_CFG_IN_HEADER.
57  input = "//clang-tools-extra/test/Unit/lit.site.cfg.py.in"
58  output = clang_tools_extra_lit_unit_site_cfg_file
59  extra_values = []
60}
61
62# This target should contain all dependencies of check-clang-tools.
63# //:default depends on it, so that ninja's default target builds all
64# prerequisites for check-clang but doesn't run check-clang itself.
65group("test") {
66  deps = [
67    ":lit_site_cfg",
68    ":lit_unit_site_cfg",
69    "//clang-tools-extra/clang-apply-replacements/tool:clang-apply-replacements",
70    "//clang-tools-extra/clang-change-namespace/tool:clang-change-namespace",
71    "//clang-tools-extra/clang-doc/tool:clang-doc",
72    "//clang-tools-extra/clang-include-fixer/find-all-symbols/tool:find-all-symbols",
73    "//clang-tools-extra/clang-include-fixer/tool:clang-include-fixer",
74    "//clang-tools-extra/clang-move/tool:clang-move",
75    "//clang-tools-extra/clang-query/tool:clang-query",
76    "//clang-tools-extra/clang-reorder-fields/tool:clang-reorder-fields",
77    "//clang-tools-extra/clang-tidy/tool:clang-tidy",
78    "//clang-tools-extra/modularize",
79    "//clang-tools-extra/pp-trace",
80    "//clang-tools-extra/unittests",
81    "//clang/lib/Headers",
82    "//clang/tools/c-index-test",
83    "//clang/tools/clang-rename",
84    "//clang/tools/driver:symlinks",
85    "//llvm/tools/llvm-bcanalyzer",
86    "//llvm/utils/FileCheck",
87    "//llvm/utils/count",
88    "//llvm/utils/llvm-lit",
89    "//llvm/utils/not",
90  ]
91  testonly = true
92}
93
94action("check-clang-tools") {
95  script = "$root_out_dir/bin/llvm-lit"
96  if (host_os == "win") {
97    script += ".py"
98  }
99  args = [
100    "-sv",
101    rebase_path(".", root_out_dir),
102  ]
103  outputs = [ "$target_gen_dir/run-lit" ]  # Non-existing, so that ninja runs it
104                                           # each time.
105
106  # Since check-clang-tools is always dirty, //:default doesn't depend on it so
107  # that it's not part of the default ninja target.  Hence, check-clang-tools
108  # shouldn't have any deps except :test. so that the default target is sure to
109  # build all the deps.
110  deps = [ ":test" ]
111  testonly = true
112
113  pool = "//:console"
114}
115