Index: llvm/test/tools/llvm-config/booleans.test =================================================================== --- llvm/test/tools/llvm-config/booleans.test +++ llvm/test/tools/llvm-config/booleans.test @@ -18,7 +18,7 @@ CHECK-BUILD-MODE-NOT: warning RUN: llvm-config --build-system 2>&1 | FileCheck --check-prefix=CHECK-BUILD-SYSTEM %s -CHECK-BUILD-SYSTEM: cmake +CHECK-BUILD-SYSTEM: {{cmake|gn}} CHECK-BUILD-SYSTEM-NOT: error: CHECK-BUILD-SYSTEM-NOT: warning Index: llvm/utils/gn/secondary/BUILD.gn =================================================================== --- llvm/utils/gn/secondary/BUILD.gn +++ llvm/utils/gn/secondary/BUILD.gn @@ -5,6 +5,7 @@ deps = [ "//clang/test", "//lld/test", + "//llvm/test", "//llvm/tools/bugpoint", "//llvm/tools/dsymutil", "//llvm/tools/lli", Index: llvm/utils/gn/secondary/llvm/test/BUILD.gn =================================================================== --- /dev/null +++ llvm/utils/gn/secondary/llvm/test/BUILD.gn @@ -0,0 +1,267 @@ +import("//llvm/lib/DebugInfo/PDB/enable_dia.gni") +import("//llvm/lib/Target/targets.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"), # FIXME: assumes monorepo + "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") { + # FIXME: Duplicated with enable_targets in llvm/tools/llvm-config/BUILD.gn. + targets_to_build = "" + foreach(target, llvm_targets_to_build) { + targets_to_build = "$targets_to_build $target" + } + + input = "//llvm/test/lit.site.cfg.py.in" + output = llvm_lit_site_cfg_file + extra_args = [ + "LLVM_LIBRARY_DIR=" + rebase_path("$root_out_dir/lib"), + "LLVM_LIT_TOOLS_DIR=", # Intentionally empty, matches cmake build. + "PYTHON_EXECUTABLE=$python_path", + "LLVM_HOST_TRIPLE=$llvm_host_triple", + "TARGET_TRIPLE=$llvm_target_triple", + "GOLD_EXECUTABLE=", # FIXME! + "LD64_EXECUTABLE=", # FIXME! + + "LLVM_TOOL_LTO_BUILD=1", + "OCAMLFIND=OCAMLFIND-NOTFOUND", + "HAVE_OCAMLOPT=0", + "HAVE_OCAML_OUNIT=0", + "OCAMLFLAGS=", + "LLVM_INCLUDE_GO_TESTS=0", + "GO_EXECUTABLE=", + "TARGETS_TO_BUILD=$targets_to_build", + "LLVM_NATIVE_ARCH=$native_target", + "LLVM_BINDINGS=", + "HOST_CC=cc", # FIXME: better + "HOST_CXX=c++", # FIXME: better + "HOST_LDFLAGS=", + "LLVM_USE_INTEL_JITEVENTS=0", + "LLVM_USE_SANITIZER=", + "LLVM_ENABLE_FFI=0", + "BUILD_SHARED_LIBS=0", + "LLVM_LINK_LLVM_DYLIB=0", + "HOST_ARCH=x86_64", # FIXME: better + "LLVM_HAVE_OPT_VIEWER_MODULES=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 += [ + "SHLIBEXT=.dylib", + "EXEEXT=", + "HOST_OS=Darwin", + ] + } else if (host_os == "linux") { + extra_args += [ + "SHLIBEXT=.so", + "EXEEXT=", + "HOST_OS=Linux", + ] + } else if (host_os == "win") { + extra_args += [ + "SHLIBEXT=.dll", + "EXEEXT=.exe", + "HOST_OS=Windows", + ] + } else { + assert(false, "unsupported host_os " + host_os) + } + + 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", + + #"//llvm/lib/LineEditor", + "//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-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/obj2yaml", + "//llvm/tools/opt", + "//llvm/tools/sancov", + "//llvm/tools/sanstats", + "//llvm/tools/verify-uselistorder", + "//llvm/tools/yaml2obj", + + #"//llvm/unittests", + "//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", + ] + } + 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" +} Index: llvm/utils/gn/secondary/llvm/test/llvm_lit_site_cfg_files.gni =================================================================== --- /dev/null +++ llvm/utils/gn/secondary/llvm/test/llvm_lit_site_cfg_files.gni @@ -0,0 +1,2 @@ +llvm_lit_site_cfg_file = "$root_gen_dir/llvm/test/lit.site.cfg.py" +llvm_lit_unit_site_cfg_file = "$root_gen_dir/llvm/test/Unit/lit.site.cfg.py" Index: llvm/utils/gn/secondary/llvm/utils/llvm-lit/BUILD.gn =================================================================== --- llvm/utils/gn/secondary/llvm/utils/llvm-lit/BUILD.gn +++ llvm/utils/gn/secondary/llvm/utils/llvm-lit/BUILD.gn @@ -1,5 +1,6 @@ import("//clang/test/clang_lit_site_cfg_files.gni") import("//lld/test/lld_lit_site_cfg_files.gni") +import("//llvm/test/llvm_lit_site_cfg_files.gni") action("llvm-lit") { script = "//llvm/utils/gn/build/write_cmake_config.py" @@ -32,6 +33,8 @@ "//clang/test:lit_unit_site_cfg", "//lld/test:lit_site_cfg", "//lld/test:lit_unit_site_cfg", + "//llvm/test:lit_site_cfg", + "//llvm/test:lit_unit_site_cfg", ] # Note: \n is converted into a newline by write_cmake_config.py, not by gn. @@ -43,6 +46,10 @@ rebase_path(lld_lit_site_cfg_file) + "')\n" config_map += "map_config('" + rebase_path("//lld/test/Unit/lit.cfg.py") + "', '" + rebase_path(lld_lit_unit_site_cfg_file) + "')\n" + config_map += "map_config('" + rebase_path("//llvm/test/lit.cfg.py") + + "', '" + rebase_path(llvm_lit_site_cfg_file) + "')\n" + config_map += "map_config('" + rebase_path("//llvm/test/Unit/lit.cfg.py") + + "', '" + rebase_path(llvm_lit_unit_site_cfg_file) + "')\n" args = [ "-o",