deps = [
"//clang/test",
"//lld/test",
- "//llvm/tools/bugpoint",
- "//llvm/tools/dsymutil",
- "//llvm/tools/lli",
- "//llvm/tools/lli/ChildTarget:lli-child-target",
- "//llvm/tools/llvm-c-test",
- "//llvm/tools/llvm-cfi-verify",
- "//llvm/tools/llvm-cov",
- "//llvm/tools/llvm-cvtres",
- "//llvm/tools/llvm-cxxdump",
- "//llvm/tools/llvm-cxxfilt",
- "//llvm/tools/llvm-cxxmap",
- "//llvm/tools/llvm-diff",
- "//llvm/tools/llvm-dwp",
- "//llvm/tools/llvm-exegesis",
- "//llvm/tools/llvm-extract",
- "//llvm/tools/llvm-isel-fuzzer",
- "//llvm/tools/llvm-link",
- "//llvm/tools/llvm-mca",
- "//llvm/tools/llvm-mt",
- "//llvm/tools/llvm-opt-fuzzer",
- "//llvm/tools/llvm-opt-report",
- "//llvm/tools/llvm-rc",
- "//llvm/tools/llvm-rtdyld",
- "//llvm/tools/llvm-size",
- "//llvm/tools/llvm-split",
- "//llvm/tools/llvm-strings",
- "//llvm/tools/llvm-undname",
- "//llvm/tools/llvm-xray",
- "//llvm/tools/sancov",
- "//llvm/tools/sanstats",
- "//llvm/tools/verify-uselistorder",
- "//llvm/utils/yaml-bench",
+ "//llvm/test",
]
- 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",
- ]
- }
- if (host_os != "win") {
- # loadable_modules don't work on Windows.
- # FIXME: In the CMake build, ENABLE_SHARED makes them work somehow
- # (but they're off by default there too).
- deps += [
- "//llvm/lib/Transforms/Hello",
- "//llvm/tools/bugpoint-passes",
- ]
- }
testonly = true
}
--- /dev/null
+import("//llvm/lib/DebugInfo/PDB/enable_dia.gni")
+import("//llvm/lib/Target/targets_string.gni")
+import("//llvm/triples.gni")
+import("//llvm/utils/gn/build/buildflags.gni")
+import("//llvm/utils/gn/build/libs/pthread/enable.gni")
+import("//llvm/utils/gn/build/libs/xar/enable.gni")
+import("//llvm/utils/gn/build/libs/xml/enable.gni")
+import("//llvm/utils/gn/build/libs/zlib/enable.gni")
+import("llvm_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",
+ "ENABLE_SHARED=0",
+ "LLVM_BINARY_DIR=" +
+ rebase_path(get_label_info("//llvm", "target_out_dir")),
+ "LLVM_SOURCE_DIR=" + rebase_path("//llvm"),
+ "LLVM_TOOLS_DIR=" + rebase_path("$root_out_dir/bin"),
+ ]
+ 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") {
+ input = "//llvm/test/lit.site.cfg.py.in"
+ output = llvm_lit_site_cfg_file
+ extra_args = [
+ "BUILD_SHARED_LIBS=0",
+
+ # Only used by the Go bindings tests, or if LLVM_USE_SANITIZER includes
+ # asan and the host OS is macOS. The GN build currently never uses
+ # LLVM_USE_SANITIZER. (See also CMAKE_CXX_COMPILER in clang/test/BUILD.gn.)
+ "HOST_CC=cc",
+
+ # Only used by the Go bindings tests, or if LLVM_USE_SANITIZER includes
+ # lsan and the host OS is macOS. The GN build currently never uses
+ # LLVM_USE_SANITIZER. (See also CMAKE_CXX_COMPILER in clang/test/BUILD.gn.)
+ "HOST_CXX=c++",
+
+ # Only used by the Go bindings tests, and for detecting a 32-bit build
+ # and in a belt-and-suspenders check for detecting 32-bit host builds.
+ # (That check also checks LLVM_HOST_TRIPLE.)
+ "HOST_LDFLAGS=",
+
+ "LLVM_ENABLE_FFI=0",
+ "LLVM_HAVE_OPT_VIEWER_MODULES=0",
+ "LLVM_HOST_TRIPLE=$llvm_host_triple",
+ "LLVM_LIBRARY_DIR=" + rebase_path("$root_out_dir/lib"),
+ "LLVM_LINK_LLVM_DYLIB=0",
+ "LLVM_LIT_TOOLS_DIR=", # Intentionally empty, matches cmake build.
+ "LLVM_NATIVE_ARCH=$native_target",
+ "LLVM_TOOL_LTO_BUILD=1", # The GN build always builds //llvm/tools/lto.
+ "LLVM_USE_INTEL_JITEVENTS=0",
+ "LLVM_USE_SANITIZER=",
+ "PYTHON_EXECUTABLE=$python_path",
+ "TARGETS_TO_BUILD=$llvm_targets_to_build_string",
+ "TARGET_TRIPLE=$llvm_target_triple",
+
+ # No bindings are implemented in the GN build.
+ "LLVM_BINDINGS=",
+
+ "GO_EXECUTABLE=",
+ "LLVM_INCLUDE_GO_TESTS=0",
+
+ "HAVE_OCAMLOPT=0",
+ "HAVE_OCAML_OUNIT=0",
+ "OCAMLFIND=OCAMLFIND-NOTFOUND",
+ "OCAMLFLAGS=",
+ ]
+
+ if (host_cpu == "x64") {
+ extra_args += [ "HOST_ARCH=x86_64" ]
+ } else {
+ assert(false, "unimplemented host_cpu " + host_cpu)
+ }
+
+ if (host_os == "mac") {
+ extra_args += [
+ "EXEEXT=",
+ "HOST_OS=Darwin",
+ "SHLIBEXT=.dylib",
+ ]
+ } else if (host_os == "linux") {
+ extra_args += [
+ "EXEEXT=",
+ "HOST_OS=Linux",
+ "SHLIBEXT=.so",
+ ]
+ } else if (host_os == "win") {
+ extra_args += [
+ "EXEEXT=.exe",
+ "HOST_OS=Windows",
+ "SHLIBEXT=.dll",
+ ]
+ } else {
+ assert(false, "unsupported host_os " + host_os)
+ }
+ if (host_os == "linux") {
+ # lit.cfg.py's have_ld_plugin_support() checks for "gold" in --version,
+ # so just claim that ld is gold on Linux. The function also checks if
+ # LLVMgold.so exists, but since that target isn't hooked up yet in the GN
+ # build the LLVMgold.so tests currently don't run anywhere in the GN build.
+ extra_args += [ "GOLD_EXECUTABLE=ld" ]
+ } else {
+ extra_args += [ "GOLD_EXECUTABLE=" ]
+ }
+ if (host_os == "mac") {
+ extra_args += [ "LD64_EXECUTABLE=ld" ]
+ } else {
+ extra_args += [ "LD64_EXECUTABLE=" ]
+ }
+
+ if (llvm_enable_assertions) {
+ extra_args += [ "ENABLE_ASSERTIONS=1" ]
+ } else {
+ extra_args += [ "ENABLE_ASSERTIONS=0" ] # Must be 0.
+ }
+
+ if (llvm_enable_libxar) {
+ extra_args += [ "HAVE_LIBXAR=1" ]
+ } else {
+ extra_args += [ "HAVE_LIBXAR=0" ] # Must be 0.
+ }
+
+ if (llvm_enable_dia_sdk) {
+ extra_args += [ "LLVM_ENABLE_DIA_SDK=1" ]
+ } else {
+ extra_args += [ "LLVM_ENABLE_DIA_SDK=0" ] # Must be 0.
+ }
+
+ if (llvm_enable_libxml2) {
+ extra_args += [ "LLVM_LIBXML2_ENABLED=1" ]
+ } else {
+ extra_args += [ "LLVM_LIBXML2_ENABLED=" ] # Must be empty.
+ }
+
+ if (llvm_enable_threads) {
+ extra_args += [ "LLVM_ENABLE_THREADS=1" ]
+ } else {
+ extra_args += [ "LLVM_ENABLE_THREADS=0" ] # Must be 0.
+ }
+
+ if (llvm_enable_zlib) {
+ extra_args += [ "HAVE_LIBZ=1" ]
+ } else {
+ extra_args += [ "HAVE_LIBZ=0" ] # Must be 0.
+ }
+}
+
+write_lit_config("lit_unit_site_cfg") {
+ input = "//llvm/test/Unit/lit.site.cfg.py.in"
+ output = llvm_lit_unit_site_cfg_file
+ extra_args = [ "LLVM_BUILD_MODE=." ]
+}
+
+# This target should contain all dependencies of check-llvm.
+# //:default depends on it, so that ninja's default target builds all
+# prerequisites for check-llvm but doesn't run check-llvm itself.
+group("test") {
+ deps = [
+ ":lit_site_cfg",
+ ":lit_unit_site_cfg",
+
+ # Because llvm/tools/llvm-config/BUILD.gn calls llvm-build to generate
+ # LibraryDependencies.inc, llvm-config expects these libraries to exist
+ # even though nothing but unittests depends on them. Add explicit
+ # dependencies to make sure the libaries exist on disk when llvm-config's
+ # lit tests run.
+ "//llvm/lib/LineEditor",
+ "//llvm/lib/Testing/Support",
+ "//llvm/lib/TextAPI",
+ "//llvm/tools/bugpoint",
+ "//llvm/tools/dsymutil",
+ "//llvm/tools/llc",
+ "//llvm/tools/lli",
+ "//llvm/tools/lli/ChildTarget:lli-child-target",
+ "//llvm/tools/llvm-ar:symlinks",
+ "//llvm/tools/llvm-as",
+ "//llvm/tools/llvm-bcanalyzer",
+ "//llvm/tools/llvm-c-test",
+ "//llvm/tools/llvm-cat",
+ "//llvm/tools/llvm-cfi-verify",
+ "//llvm/tools/llvm-cov",
+ "//llvm/tools/llvm-cvtres",
+ "//llvm/tools/llvm-cxxdump",
+ "//llvm/tools/llvm-cxxfilt",
+ "//llvm/tools/llvm-cxxmap",
+ "//llvm/tools/llvm-diff",
+ "//llvm/tools/llvm-dis",
+ "//llvm/tools/llvm-dwarfdump",
+ "//llvm/tools/llvm-dwp",
+ "//llvm/tools/llvm-exegesis",
+ "//llvm/tools/llvm-extract",
+ "//llvm/tools/llvm-isel-fuzzer",
+ "//llvm/tools/llvm-link",
+ "//llvm/tools/llvm-lto",
+ "//llvm/tools/llvm-lto2",
+ "//llvm/tools/llvm-mc",
+ "//llvm/tools/llvm-mca",
+ "//llvm/tools/llvm-modextract",
+ "//llvm/tools/llvm-mt",
+ "//llvm/tools/llvm-nm",
+ "//llvm/tools/llvm-objcopy:symlinks",
+ "//llvm/tools/llvm-objdump",
+ "//llvm/tools/llvm-opt-fuzzer",
+ "//llvm/tools/llvm-opt-report",
+ "//llvm/tools/llvm-pdbutil",
+ "//llvm/tools/llvm-profdata",
+ "//llvm/tools/llvm-rc",
+ "//llvm/tools/llvm-readobj:symlinks",
+ "//llvm/tools/llvm-rtdyld",
+ "//llvm/tools/llvm-size",
+ "//llvm/tools/llvm-split",
+ "//llvm/tools/llvm-strings",
+ "//llvm/tools/llvm-symbolizer",
+ "//llvm/tools/llvm-undname",
+ "//llvm/tools/llvm-xray",
+ "//llvm/tools/lto",
+ "//llvm/tools/obj2yaml",
+ "//llvm/tools/opt",
+ "//llvm/tools/sancov",
+ "//llvm/tools/sanstats",
+ "//llvm/tools/verify-uselistorder",
+ "//llvm/tools/yaml2obj",
+ "//llvm/utils/FileCheck",
+ "//llvm/utils/TableGen:llvm-tblgen",
+ "//llvm/utils/count",
+ "//llvm/utils/not",
+
+ # llvm-config wants libgtest_main.a to exist at runtime when run as in
+ # its tests, but nothing in the tree depends on them.
+ "//llvm/utils/unittest/UnitTestMain:gtest_main",
+ "//llvm/utils/yaml-bench",
+ ]
+ if (host_os != "win") {
+ # loadable_modules don't work on Windows.
+ # FIXME: In the CMake build, ENABLE_SHARED makes them work somehow
+ # (but they're off by default there too).
+ deps += [
+ "//llvm/lib/Transforms/Hello",
+ "//llvm/tools/bugpoint-passes",
+ ]
+ }
+
+ # FIXME: dep on "//llvm/unittests" once it exists
+ # FIXME: llvm_build_examples
+ testonly = true
+}
+
+action("check-llvm") {
+ script = "$root_out_dir/bin/llvm-lit"
+ if (host_os == "win") {
+ script += ".py"
+ }
+ args = [
+ "-sv",
+ "--param",
+ "llvm_site_config=" + rebase_path(llvm_lit_site_cfg_file, root_out_dir),
+ "--param",
+ "llvm_unit_site_config=" +
+ rebase_path(llvm_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-llvm is always dirty, //:default doesn't depend on it so that
+ # it's not part of the default ninja target. Hence, check-llvm 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"
+}