[llvm] r350108 - [gn build] Add check-clang target and make it work

Nico Weber via llvm-commits llvm-commits at lists.llvm.org
Thu Dec 27 15:38:59 PST 2018


Author: nico
Date: Thu Dec 27 15:38:58 2018
New Revision: 350108

URL: http://llvm.org/viewvc/llvm-project?rev=350108&view=rev
Log:
[gn build] Add check-clang target and make it work

With this, check-clang runs and passes all of clang's lit tests. It doesn't run
any of its unit tests yet.

Like with check-lld, running just ninja -C out/gn will build all prerequisites
needed to run tests, but it won't run the tests (so that the build becomes
clean after one build). Running ninja -C out/gn check-clang will build
prerequisites if needed and run the tests. The check-clang target never becomes
clean and runs tests every time.

Differential Revision: https://reviews.llvm.org/D56095

Added:
    llvm/trunk/utils/gn/secondary/clang/test/
    llvm/trunk/utils/gn/secondary/clang/test/BUILD.gn
    llvm/trunk/utils/gn/secondary/clang/test/clang_lit_site_cfg_files.gni
Modified:
    llvm/trunk/utils/gn/secondary/BUILD.gn
    llvm/trunk/utils/gn/secondary/llvm/triples.gni
    llvm/trunk/utils/gn/secondary/llvm/utils/llvm-lit/BUILD.gn

Modified: llvm/trunk/utils/gn/secondary/BUILD.gn
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/gn/secondary/BUILD.gn?rev=350108&r1=350107&r2=350108&view=diff
==============================================================================
--- llvm/trunk/utils/gn/secondary/BUILD.gn (original)
+++ llvm/trunk/utils/gn/secondary/BUILD.gn Thu Dec 27 15:38:58 2018
@@ -3,22 +3,8 @@ import("//clang/lib/StaticAnalyzer/Front
 
 group("default") {
   deps = [
-    ":clang",
-    "//clang/tools/c-index-test",
-    "//clang/tools/clang-diff",
-    "//clang/tools/clang-format",
-    "//clang/tools/clang-import-test",
-    "//clang/tools/clang-refactor",
-    "//clang/tools/clang-rename",
-    "//clang/tools/diagtool",
-    "//clang/utils/hmaptool",
+    "//clang/test",
     "//lld/test",
-    "//llvm/tools/llvm-cat",
-    "//llvm/tools/llvm-lto",
-    "//llvm/tools/llvm-lto2",
-    "//llvm/tools/llvm-modextract",
-    "//llvm/tools/llvm-profdata",
-    "//llvm/tools/llvm-symbolizer:symlinks",
     "//llvm/tools/llvm-undname",
   ]
   if (clang_enable_arcmt) {

Added: llvm/trunk/utils/gn/secondary/clang/test/BUILD.gn
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/gn/secondary/clang/test/BUILD.gn?rev=350108&view=auto
==============================================================================
--- llvm/trunk/utils/gn/secondary/clang/test/BUILD.gn (added)
+++ llvm/trunk/utils/gn/secondary/clang/test/BUILD.gn Thu Dec 27 15:38:58 2018
@@ -0,0 +1,195 @@
+import("//clang/lib/ARCMigrate/enable.gni")
+import("//clang/lib/StaticAnalyzer/Frontend/enable.gni")
+import("//llvm/lib/Target/targets.gni")
+import("//llvm/triples.gni")
+import("//llvm/utils/gn/build/libs/zlib/enable.gni")
+import("clang_lit_site_cfg_files.gni")
+
+template("write_lit_config") {
+  action(target_name) {
+    script = "//llvm/utils/gn/build/write_cmake_config.py"
+
+    sources = [
+      invoker.input,
+    ]
+    outputs = [
+      invoker.output,
+    ]
+    args = [
+      "-o",
+      rebase_path(outputs[0], root_out_dir),
+      rebase_path(sources[0], root_out_dir),
+
+      "LIT_SITE_CFG_IN_HEADER=## Autogenerated from ${sources[0]}, do not edit",
+      "CLANG_BINARY_DIR=" +
+          rebase_path(get_label_info("//clang", "target_out_dir")),
+      "CLANG_SOURCE_DIR=" + rebase_path("//clang"),
+      "ENABLE_SHARED=0",
+      "LLVM_BINARY_DIR=" +
+          rebase_path(get_label_info("//llvm", "target_out_dir")),
+      "LLVM_LIBS_DIR=",  # needed only for shared builds
+      "LLVM_SOURCE_DIR=" + rebase_path("//llvm"),
+      "LLVM_TOOLS_DIR=" + rebase_path("$root_out_dir/bin"),
+      "TARGET_TRIPLE=$llvm_target_triple",
+    ]
+    if (host_os == "win") {
+      # See comment for Windows solink in llvm/utils/gn/build/toolchain/BUILD.gn
+      args += [ "SHLIBDIR=" + rebase_path("$root_out_dir/bin") ]
+    } else {
+      args += [ "SHLIBDIR=" + rebase_path("$root_out_dir/lib") ]
+    }
+    args += invoker.extra_args
+  }
+}
+
+write_lit_config("lit_site_cfg") {
+  # Fully-qualified instead of relative for LIT_SITE_CFG_IN_HEADER.
+  input = "//clang/test/lit.site.cfg.py.in"
+  output = clang_lit_site_cfg_file
+
+  extra_args = [
+    "CLANG_ANALYZER_WITH_Z3=",  # Must be empty, not 0.
+    "CLANG_BUILD_EXAMPLES=0",
+    "CLANG_DEFAULT_CXX_STDLIB=",  # Empty string means "default value" here.
+    "CLANG_TOOLS_DIR=" + rebase_path("$root_out_dir/bin"),
+
+    # This is only used if LLVM_USE_SANITIZER includes lsan and the host
+    # OS is macOS. Since the GN build currently never uses LLVM_USE_SANITIZER,
+    # this is never read.  If it's ever needed,
+    # utils/gn/build/toolchain/BUILD.gn should get the compiler from a variable
+    # that's also read here -- but that should happen after multi-toolchain
+    # builds exist, to make sure it's a toolchain var.
+    "CMAKE_CXX_COMPILER=c++",
+    "ENABLE_BACKTRACES=1",
+    "LLVM_HOST_TRIPLE=$llvm_host_triple",
+    "LLVM_LIT_TOOLS_DIR=",  # Intentionally empty, matches cmake build.
+    "LLVM_USE_SANITIZER=",
+    "PYTHON_EXECUTABLE=$python_path",
+    "USE_Z3_SOLVER=",
+  ]
+
+  if (clang_enable_arcmt) {
+    extra_args += [ "CLANG_ENABLE_ARCMT=1" ]
+  } else {
+    extra_args += [ "CLANG_ENABLE_ARCMT=0" ]
+  }
+
+  if (clang_enable_static_analyzer) {
+    extra_args += [ "CLANG_ENABLE_STATIC_ANALYZER=1" ]
+  } else {
+    extra_args += [ "CLANG_ENABLE_STATIC_ANALYZER=0" ]
+  }
+
+  if (llvm_enable_zlib) {
+    extra_args += [ "HAVE_LIBZ=1" ]
+  } else {
+    extra_args += [ "HAVE_LIBZ=0" ]  # Must be 0.
+  }
+
+  if (host_cpu == "x64") {
+    extra_args += [ "HOST_ARCH=x86_64" ]
+  } else {
+    assert(false, "unimplemented host_cpu " + host_cpu)
+  }
+
+  if (host_os == "mac") {
+    extra_args += [ "LLVM_PLUGIN_EXT=.dylib" ]
+  } else if (host_os == "win") {
+    extra_args += [ "LLVM_PLUGIN_EXT=.dll" ]
+  } else {
+    extra_args += [ "LLVM_PLUGIN_EXT=.so" ]
+  }
+}
+
+write_lit_config("lit_unit_site_cfg") {
+  # Fully-qualified instead of relative for LIT_SITE_CFG_IN_HEADER.
+  input = "//clang/test/Unit/lit.site.cfg.py.in"
+  output = clang_lit_unit_site_cfg_file
+  extra_args = [ "LLVM_BUILD_MODE=." ]
+}
+
+# This target should contain all dependencies of check-clang.
+# //:default depends on it, so that ninja's default target builds all
+# prerequisites for check-clang but doesn't run check-clang itself.
+group("test") {
+  deps = [
+    ":lit_site_cfg",
+    ":lit_unit_site_cfg",
+    "//clang/lib/Headers",
+    "//clang/tools/c-index-test",
+    "//clang/tools/clang-diff",
+    "//clang/tools/clang-format",
+    "//clang/tools/clang-import-test",
+    "//clang/tools/clang-offload-bundler",
+    "//clang/tools/clang-refactor",
+    "//clang/tools/clang-rename",
+    "//clang/tools/diagtool",
+    "//clang/tools/driver:symlinks",
+    "//clang/utils/TableGen:clang-tblgen",
+    "//clang/utils/hmaptool",
+    "//llvm/tools/llc",
+    "//llvm/tools/llvm-bcanalyzer",
+    "//llvm/tools/llvm-cat",
+    "//llvm/tools/llvm-config",
+    "//llvm/tools/llvm-dis",
+    "//llvm/tools/llvm-lto",
+    "//llvm/tools/llvm-lto2",
+    "//llvm/tools/llvm-modextract",
+    "//llvm/tools/llvm-nm:symlinks",
+    "//llvm/tools/llvm-objdump:symlinks",
+    "//llvm/tools/llvm-profdata",
+    "//llvm/tools/llvm-readobj:symlinks",
+    "//llvm/tools/llvm-symbolizer:symlinks",
+    "//llvm/tools/opt",
+    "//llvm/utils/FileCheck",
+    "//llvm/utils/count",
+    "//llvm/utils/llvm-lit",
+    "//llvm/utils/not",
+  ]
+  if (clang_enable_arcmt) {
+    deps += [
+      "//clang/tools/arcmt-test",
+      "//clang/tools/c-arcmt-test",
+    ]
+  }
+  if (clang_enable_static_analyzer) {
+    deps += [
+      "//clang/tools/clang-check",
+      "//clang/tools/clang-func-mapping",
+    ]
+  }
+
+  # FIXME: dep on "//clang/unittests" once it exists
+  # FIXME: clang_build_examples
+  testonly = true
+}
+
+action("check-clang") {
+  script = "$root_out_dir/bin/llvm-lit"
+  if (host_os == "win") {
+    script += ".py"
+  }
+  args = [
+    "-sv",
+    "--param",
+    "clang_site_config=" + rebase_path(clang_lit_site_cfg_file, root_out_dir),
+    "--param",
+    "clang_unit_site_config=" +
+        rebase_path(clang_lit_unit_site_cfg_file, root_out_dir),
+    rebase_path(".", root_out_dir),
+  ]
+  outputs = [
+    "$target_gen_dir/run-lit",  # Non-existing, so that ninja runs it each time.
+  ]
+
+  # Since check-clang is always dirty, //:default doesn't depend on it so that
+  # it's not part of the default ninja target.  Hence, check-clang shouldn't
+  # have any deps except :test. so that the default target is sure to build
+  # all the deps.
+  deps = [
+    ":test",
+  ]
+  testonly = true
+
+  pool = "//:console"
+}

Added: llvm/trunk/utils/gn/secondary/clang/test/clang_lit_site_cfg_files.gni
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/gn/secondary/clang/test/clang_lit_site_cfg_files.gni?rev=350108&view=auto
==============================================================================
--- llvm/trunk/utils/gn/secondary/clang/test/clang_lit_site_cfg_files.gni (added)
+++ llvm/trunk/utils/gn/secondary/clang/test/clang_lit_site_cfg_files.gni Thu Dec 27 15:38:58 2018
@@ -0,0 +1,2 @@
+clang_lit_site_cfg_file = "$root_gen_dir/clang/test/lit.site.cfg.py"
+clang_lit_unit_site_cfg_file = "$root_gen_dir/clang/test/Unit/lit.site.cfg.py"

Modified: llvm/trunk/utils/gn/secondary/llvm/triples.gni
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/gn/secondary/llvm/triples.gni?rev=350108&r1=350107&r2=350108&view=diff
==============================================================================
--- llvm/trunk/utils/gn/secondary/llvm/triples.gni (original)
+++ llvm/trunk/utils/gn/secondary/llvm/triples.gni Thu Dec 27 15:38:58 2018
@@ -1,9 +1,13 @@
-if (host_os == "linux") {
-  llvm_host_triple = "x86_64-unknown-linux-gnu"
-} else if (host_os == "mac") {
-  llvm_host_triple = "x86_64-apple-darwin"
-} else if (host_os == "win") {
-  llvm_host_triple = "x86_64-pc-windows"
+if (host_cpu == "x64") {
+  if (host_os == "linux") {
+    llvm_host_triple = "x86_64-unknown-linux-gnu"
+  } else if (host_os == "mac") {
+    llvm_host_triple = "x86_64-apple-darwin"
+  } else if (host_os == "win") {
+    llvm_host_triple = "x86_64-pc-windows"
+  }
+} else {
+  assert(false, "unimplemented host_cpu " + host_cpu)
 }
 
 declare_args() {

Modified: llvm/trunk/utils/gn/secondary/llvm/utils/llvm-lit/BUILD.gn
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/gn/secondary/llvm/utils/llvm-lit/BUILD.gn?rev=350108&r1=350107&r2=350108&view=diff
==============================================================================
--- llvm/trunk/utils/gn/secondary/llvm/utils/llvm-lit/BUILD.gn (original)
+++ llvm/trunk/utils/gn/secondary/llvm/utils/llvm-lit/BUILD.gn Thu Dec 27 15:38:58 2018
@@ -1,3 +1,4 @@
+import("//clang/test/clang_lit_site_cfg_files.gni")
 import("//lld/test/lld_lit_site_cfg_files.gni")
 
 action("llvm-lit") {
@@ -27,11 +28,17 @@ action("llvm-lit") {
   config_map = ""
 
   deps += [
+    "//clang/test:lit_site_cfg",
+    "//clang/test:lit_unit_site_cfg",
     "//lld/test:lit_site_cfg",
     "//lld/test:lit_unit_site_cfg",
   ]
 
   # Note: \n is converted into a newline by write_cmake_config.py, not by gn.
+  config_map += "map_config('" + rebase_path("//clang/test/lit.cfg.py") +
+                "', '" + rebase_path(clang_lit_site_cfg_file) + "')\n"
+  config_map += "map_config('" + rebase_path("//clang/test/Unit/lit.cfg.py") +
+                "', '" + rebase_path(clang_lit_unit_site_cfg_file) + "')\n"
   config_map += "map_config('" + rebase_path("//lld/test/lit.cfg.py") + "', '" +
                 rebase_path(lld_lit_site_cfg_file) + "')\n"
   config_map += "map_config('" + rebase_path("//lld/test/Unit/lit.cfg.py") +




More information about the llvm-commits mailing list