From 57ee624d7946b4d42890709287eb71d4eb1fa2fa Mon Sep 17 00:00:00 2001 From: Sam McCall Date: Wed, 16 Mar 2022 03:13:44 +0100 Subject: [PATCH] [cmake] Provide CURRENT_TOOLS_DIR centrally, replacing CLANG_TOOLS_DIR CLANG_TOOLS_DIR holds the the current bin/ directory, maybe with a %(build_mode) placeholder. It is used to add the just-built binaries to $PATH for lit tests. In most cases it equals LLVM_TOOLS_DIR, which is used for the same purpose. But for a standalone build of clang, CLANG_TOOLS_DIR points at the build tree and LLVM_TOOLS_DIR points at the provided LLVM binaries. Currently CLANG_TOOLS_DIR is set in clang/test/, clang-tools-extra/test/, and other things always built with clang. This is a few cryptic lines of CMake in each place. Meanwhile LLVM_TOOLS_DIR is provided by configure_site_lit_cfg(). This patch moves CLANG_TOOLS_DIR to configure_site_lit_cfg() and renames it: - there's nothing clang-specific about the value - it will also replace LLD_TOOLS_DIR, LLDB_TOOLS_DIR etc (not in this patch) It also defines CURRENT_LIBS_DIR. While I removed the last usage of CLANG_LIBS_DIR in e4cab4e24d1, there are LLD_LIBS_DIR usages etc that may be live, and I'd like to mechanically update them in a followup patch. Differential Revision: https://reviews.llvm.org/D121763 --- clang-tools-extra/clangd/test/CMakeLists.txt | 10 ---------- clang-tools-extra/clangd/test/lit.site.cfg.py.in | 2 +- clang-tools-extra/pseudo/test/CMakeLists.txt | 10 ---------- clang-tools-extra/pseudo/test/lit.site.cfg.py.in | 2 +- clang-tools-extra/test/CMakeLists.txt | 8 -------- clang-tools-extra/test/lit.site.cfg.py.in | 3 +-- clang/test/CMakeLists.txt | 10 +--------- clang/test/lit.site.cfg.py.in | 2 +- clang/utils/perf-training/CMakeLists.txt | 8 -------- clang/utils/perf-training/lit.site.cfg.in | 2 +- clang/utils/perf-training/order-files.lit.site.cfg.in | 2 +- lld/test/CMakeLists.txt | 9 --------- lld/test/Unit/lit.site.cfg.py.in | 4 ++-- lld/test/lit.site.cfg.py.in | 4 ++-- llvm/cmake/modules/AddLLVM.cmake | 8 +++++--- .../secondary/clang-tools-extra/clangd/test/BUILD.gn | 2 +- .../secondary/clang-tools-extra/pseudo/test/BUILD.gn | 2 +- .../utils/gn/secondary/clang-tools-extra/test/BUILD.gn | 2 +- llvm/utils/gn/secondary/clang/test/BUILD.gn | 2 +- llvm/utils/gn/secondary/lld/test/BUILD.gn | 4 ++-- 20 files changed, 22 insertions(+), 74 deletions(-) diff --git a/clang-tools-extra/clangd/test/CMakeLists.txt b/clang-tools-extra/clangd/test/CMakeLists.txt index f4c4fb61fbbf..6bb578263ffc 100644 --- a/clang-tools-extra/clangd/test/CMakeLists.txt +++ b/clang-tools-extra/clangd/test/CMakeLists.txt @@ -1,13 +1,3 @@ -# Set CLANG_TOOLS_DIR to buildtree/bin, or buildtree/%(build_mode)s/bin if the -# location is dynamic. The latter must be interpolated by lit configs. -# FIXME: this is duplicated in many places. -if (CMAKE_CFG_INTDIR STREQUAL ".") - set(LLVM_BUILD_MODE ".") -else () - set(LLVM_BUILD_MODE "%(build_mode)s") -endif () -string(REPLACE ${CMAKE_CFG_INTDIR} ${LLVM_BUILD_MODE} CLANG_TOOLS_DIR ${LLVM_RUNTIME_OUTPUT_INTDIR}) - set(CLANGD_TEST_DEPS clangd ClangdTests diff --git a/clang-tools-extra/clangd/test/lit.site.cfg.py.in b/clang-tools-extra/clangd/test/lit.site.cfg.py.in index 43475e83f987..20caa72af3da 100644 --- a/clang-tools-extra/clangd/test/lit.site.cfg.py.in +++ b/clang-tools-extra/clangd/test/lit.site.cfg.py.in @@ -7,7 +7,7 @@ config.host_triple = "@LLVM_HOST_TRIPLE@" config.python_executable = "@Python3_EXECUTABLE@" # Support substitution of the tools and libs dirs with user parameters. This is # used when we can't determine the tool dir at configuration time. -config.clang_tools_dir = lit_config.substitute("@CLANG_TOOLS_DIR@") +config.clang_tools_dir = lit_config.substitute("@CURRENT_TOOLS_DIR@") config.llvm_tools_dir = lit_config.substitute("@LLVM_TOOLS_DIR@") config.llvm_libs_dir = lit_config.substitute("@LLVM_LIBS_DIR@") diff --git a/clang-tools-extra/pseudo/test/CMakeLists.txt b/clang-tools-extra/pseudo/test/CMakeLists.txt index 334acb58d41c..e541359ee5cf 100644 --- a/clang-tools-extra/pseudo/test/CMakeLists.txt +++ b/clang-tools-extra/pseudo/test/CMakeLists.txt @@ -1,13 +1,3 @@ -# Set CLANG_TOOLS_DIR to buildtree/bin, or buildtree/%(build_mode)s/bin if the -# location is dynamic. The latter must be interpolated by lit configs. -# FIXME: this is duplicated in many places. -if (CMAKE_CFG_INTDIR STREQUAL ".") - set(LLVM_BUILD_MODE ".") -else () - set(LLVM_BUILD_MODE "%(build_mode)s") -endif () -string(REPLACE ${CMAKE_CFG_INTDIR} ${LLVM_BUILD_MODE} CLANG_TOOLS_DIR ${LLVM_RUNTIME_OUTPUT_INTDIR}) - set(CLANG_PSEUDO_TEST_DEPS clang-pseudo ClangPseudoTests diff --git a/clang-tools-extra/pseudo/test/lit.site.cfg.py.in b/clang-tools-extra/pseudo/test/lit.site.cfg.py.in index 2f7a095736ec..3a969381ca61 100644 --- a/clang-tools-extra/pseudo/test/lit.site.cfg.py.in +++ b/clang-tools-extra/pseudo/test/lit.site.cfg.py.in @@ -1,7 +1,7 @@ @LIT_SITE_CFG_IN_HEADER@ # Variables needed for common llvm config. -config.clang_tools_dir = "@CLANG_TOOLS_DIR@" +config.clang_tools_dir = "@CURRENT_TOOLS_DIR@" config.lit_tools_dir = "@LLVM_LIT_TOOLS_DIR@" config.llvm_tools_dir = lit_config.substitute("@LLVM_TOOLS_DIR@") config.llvm_libs_dir = lit_config.substitute("@LLVM_LIBS_DIR@") diff --git a/clang-tools-extra/test/CMakeLists.txt b/clang-tools-extra/test/CMakeLists.txt index 26aece9cf337..d64366cba232 100644 --- a/clang-tools-extra/test/CMakeLists.txt +++ b/clang-tools-extra/test/CMakeLists.txt @@ -7,14 +7,6 @@ set(CLANG_TOOLS_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/..") set(CLANG_TOOLS_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/..") -if (CMAKE_CFG_INTDIR STREQUAL ".") - set(LLVM_BUILD_MODE ".") -else () - set(LLVM_BUILD_MODE "%(build_mode)s") -endif () - -string(REPLACE ${CMAKE_CFG_INTDIR} ${LLVM_BUILD_MODE} CLANG_TOOLS_DIR ${LLVM_RUNTIME_OUTPUT_INTDIR}) - llvm_canonicalize_cmake_booleans( CLANG_TIDY_ENABLE_STATIC_ANALYZER CLANG_PLUGIN_SUPPORT diff --git a/clang-tools-extra/test/lit.site.cfg.py.in b/clang-tools-extra/test/lit.site.cfg.py.in index a784e12efe81..4eb830a1baf1 100644 --- a/clang-tools-extra/test/lit.site.cfg.py.in +++ b/clang-tools-extra/test/lit.site.cfg.py.in @@ -5,7 +5,6 @@ import sys config.llvm_plugin_ext = "@LLVM_PLUGIN_EXT@" config.lit_tools_dir = "@LLVM_LIT_TOOLS_DIR@" config.clang_tools_binary_dir = "@CLANG_TOOLS_BINARY_DIR@" -config.clang_tools_dir = "@CLANG_TOOLS_DIR@" config.llvm_shlib_dir = "@SHLIBDIR@" config.python_executable = "@Python3_EXECUTABLE@" config.target_triple = "@LLVM_TARGET_TRIPLE@" @@ -16,7 +15,7 @@ config.has_plugins = @CLANG_PLUGIN_SUPPORT@ & ~@LLVM_INSTALL_TOOLCHAIN_ONLY@ # used when we can't determine the tool dir at configuration time. config.llvm_tools_dir = lit_config.substitute("@LLVM_TOOLS_DIR@") config.llvm_libs_dir = lit_config.substitute("@LLVM_LIBS_DIR@") -config.clang_tools_dir = lit_config.substitute("@CLANG_TOOLS_DIR@") +config.clang_tools_dir = lit_config.substitute("@CURRENT_TOOLS_DIR@") import lit.llvm lit.llvm.initialize(lit_config, config) diff --git a/clang/test/CMakeLists.txt b/clang/test/CMakeLists.txt index d7cc8d279096..1fb538657ca5 100644 --- a/clang/test/CMakeLists.txt +++ b/clang/test/CMakeLists.txt @@ -1,14 +1,6 @@ # Test runner infrastructure for Clang. This configures the Clang test trees # for use by Lit, and delegates to LLVM's lit test handlers. -if (CMAKE_CFG_INTDIR STREQUAL ".") - set(LLVM_BUILD_MODE ".") -else () - set(LLVM_BUILD_MODE "%(build_mode)s") -endif () - -string(REPLACE ${CMAKE_CFG_INTDIR} ${LLVM_BUILD_MODE} CLANG_TOOLS_DIR ${LLVM_RUNTIME_OUTPUT_INTDIR}) - llvm_canonicalize_cmake_booleans( CLANG_BUILD_EXAMPLES CLANG_DEFAULT_PIE_ON_LINUX @@ -39,7 +31,7 @@ configure_lit_site_cfg( "LLVM_EXTERNAL_LIT" "CLANG_BINARY_DIR" "CLANG_SOURCE_DIR" - "CLANG_TOOLS_DIR" + "CURRENT_TOOLS_DIR" "CMAKE_LIBRARY_OUTPUT_DIRECTORY" ) diff --git a/clang/test/lit.site.cfg.py.in b/clang/test/lit.site.cfg.py.in index fde1a6222ea2..de1dc0f3304a 100644 --- a/clang/test/lit.site.cfg.py.in +++ b/clang/test/lit.site.cfg.py.in @@ -13,7 +13,7 @@ config.errc_messages = "@LLVM_LIT_ERRC_MESSAGES@" config.clang_lit_site_cfg = __file__ config.clang_obj_root = path(r"@CLANG_BINARY_DIR@") config.clang_src_dir = path(r"@CLANG_SOURCE_DIR@") -config.clang_tools_dir = lit_config.substitute(path(r"@CLANG_TOOLS_DIR@")) +config.clang_tools_dir = lit_config.substitute(path(r"@CURRENT_TOOLS_DIR@")) config.clang_lib_dir = path(r"@CMAKE_LIBRARY_OUTPUT_DIRECTORY@") config.host_triple = "@LLVM_HOST_TRIPLE@" config.target_triple = "@LLVM_TARGET_TRIPLE@" diff --git a/clang/utils/perf-training/CMakeLists.txt b/clang/utils/perf-training/CMakeLists.txt index 172076fd0ce5..57c974072d24 100644 --- a/clang/utils/perf-training/CMakeLists.txt +++ b/clang/utils/perf-training/CMakeLists.txt @@ -1,11 +1,3 @@ -if (CMAKE_CFG_INTDIR STREQUAL ".") - set(LLVM_BUILD_MODE ".") -else () - set(LLVM_BUILD_MODE "%(build_mode)s") -endif () - -string(REPLACE ${CMAKE_CFG_INTDIR} ${LLVM_BUILD_MODE} CLANG_TOOLS_DIR ${LLVM_RUNTIME_OUTPUT_INTDIR}) - set(CLANG_PGO_TRAINING_DATA "${CMAKE_CURRENT_SOURCE_DIR}" CACHE PATH "The path to a lit testsuite containing samples for PGO and order file generation" ) diff --git a/clang/utils/perf-training/lit.site.cfg.in b/clang/utils/perf-training/lit.site.cfg.in index c9624aa7339b..fae93065a4ed 100644 --- a/clang/utils/perf-training/lit.site.cfg.in +++ b/clang/utils/perf-training/lit.site.cfg.in @@ -2,7 +2,7 @@ import sys -config.clang_tools_dir = lit_config.substitute("@CLANG_TOOLS_DIR@") +config.clang_tools_dir = lit_config.substitute("@CURRENT_TOOLS_DIR@") config.perf_helper_dir = "@CMAKE_CURRENT_SOURCE_DIR@" config.test_exec_root = "@CMAKE_CURRENT_BINARY_DIR@" config.test_source_root = "@CLANG_PGO_TRAINING_DATA@" diff --git a/clang/utils/perf-training/order-files.lit.site.cfg.in b/clang/utils/perf-training/order-files.lit.site.cfg.in index 5923eae9a3b0..fb72b8cbd40e 100644 --- a/clang/utils/perf-training/order-files.lit.site.cfg.in +++ b/clang/utils/perf-training/order-files.lit.site.cfg.in @@ -2,7 +2,7 @@ import sys -config.clang_tools_dir = lit_config.substitute("@CLANG_TOOLS_DIR@") +config.clang_tools_dir = lit_config.substitute("@CURRENT_TOOLS_DIR@") config.perf_helper_dir = "@CMAKE_CURRENT_SOURCE_DIR@" config.test_exec_root = "@CMAKE_CURRENT_BINARY_DIR@" config.test_source_root = "@CLANG_PGO_TRAINING_DATA@" diff --git a/lld/test/CMakeLists.txt b/lld/test/CMakeLists.txt index 3f7ece8b8865..9c4dd2b27734 100644 --- a/lld/test/CMakeLists.txt +++ b/lld/test/CMakeLists.txt @@ -1,12 +1,3 @@ -if (CMAKE_CFG_INTDIR STREQUAL ".") - set(LLVM_BUILD_MODE ".") -else () - set(LLVM_BUILD_MODE "%(build_mode)s") -endif () - -string(REPLACE "${CMAKE_CFG_INTDIR}" "${LLVM_BUILD_MODE}" LLD_LIBS_DIR "${LLVM_LIBRARY_OUTPUT_INTDIR}") -string(REPLACE "${CMAKE_CFG_INTDIR}" "${LLVM_BUILD_MODE}" LLD_TOOLS_DIR "${LLVM_RUNTIME_OUTPUT_INTDIR}") - llvm_canonicalize_cmake_booleans( LLVM_ENABLE_ZLIB LLVM_ENABLE_LIBXML2 diff --git a/lld/test/Unit/lit.site.cfg.py.in b/lld/test/Unit/lit.site.cfg.py.in index ccabf0545182..70ff63a4d922 100644 --- a/lld/test/Unit/lit.site.cfg.py.in +++ b/lld/test/Unit/lit.site.cfg.py.in @@ -8,8 +8,8 @@ config.llvm_build_mode = lit_config.substitute("@LLVM_BUILD_MODE@") config.lit_tools_dir = "@LLVM_LIT_TOOLS_DIR@" config.lld_obj_root = "@LLD_BINARY_DIR@" config.lld_src_root = "@LLD_SOURCE_DIR@" -config.lld_libs_dir = lit_config.substitute("@LLD_LIBS_DIR@") -config.lld_tools_dir = lit_config.substitute("@LLD_TOOLS_DIR@") +config.lld_libs_dir = lit_config.substitute("@CURRENT_LIBS_DIR@") +config.lld_tools_dir = lit_config.substitute("@CURRENT_TOOLS_DIR@") config.target_triple = "@LLVM_TARGET_TRIPLE@" config.python_executable = "@Python3_EXECUTABLE@" diff --git a/lld/test/lit.site.cfg.py.in b/lld/test/lit.site.cfg.py.in index c86e54722a4a..bec13d6d3d3b 100644 --- a/lld/test/lit.site.cfg.py.in +++ b/lld/test/lit.site.cfg.py.in @@ -12,8 +12,8 @@ config.llvm_shlib_ext = "@SHLIBEXT@" config.lit_tools_dir = "@LLVM_LIT_TOOLS_DIR@" config.errc_messages = "@LLVM_LIT_ERRC_MESSAGES@" config.lld_obj_root = "@LLD_BINARY_DIR@" -config.lld_libs_dir = lit_config.substitute("@LLD_LIBS_DIR@") -config.lld_tools_dir = lit_config.substitute("@LLD_TOOLS_DIR@") +config.lld_libs_dir = lit_config.substitute("@CURRENT_LIBS_DIR@") +config.lld_tools_dir = lit_config.substitute("@CURRENT_TOOLS_DIR@") config.target_triple = "@LLVM_TARGET_TRIPLE@" config.python_executable = "@Python3_EXECUTABLE@" config.have_zlib = @LLVM_ENABLE_ZLIB@ diff --git a/llvm/cmake/modules/AddLLVM.cmake b/llvm/cmake/modules/AddLLVM.cmake index 25d8d4357739..0e20b613afd9 100644 --- a/llvm/cmake/modules/AddLLVM.cmake +++ b/llvm/cmake/modules/AddLLVM.cmake @@ -1630,13 +1630,15 @@ function(configure_lit_site_cfg site_in site_out) set_llvm_build_mode() - # The below might not be the build tree but provided binary tree. + # For standalone builds of subprojects, these might not be the build tree but + # a provided binary tree. set(LLVM_SOURCE_DIR ${LLVM_MAIN_SRC_DIR}) set(LLVM_BINARY_DIR ${LLVM_BINARY_DIR}) string(REPLACE "${CMAKE_CFG_INTDIR}" "${LLVM_BUILD_MODE}" LLVM_TOOLS_DIR "${LLVM_TOOLS_BINARY_DIR}") string(REPLACE "${CMAKE_CFG_INTDIR}" "${LLVM_BUILD_MODE}" LLVM_LIBS_DIR "${LLVM_LIBRARY_DIR}") - - # SHLIBDIR points the build tree. + # Like LLVM_{TOOLS,LIBS}_DIR, but pointing at the build tree. + string(REPLACE "${CMAKE_CFG_INTDIR}" "${LLVM_BUILD_MODE}" CURRENT_TOOLS_DIR "${LLVM_RUNTIME_OUTPUT_INTDIR}") + string(REPLACE "${CMAKE_CFG_INTDIR}" "${LLVM_BUILD_MODE}" CURRENT_LIBS_DIR "${LLVM_LIBRARY_OUTPUT_INTDIR}") string(REPLACE "${CMAKE_CFG_INTDIR}" "${LLVM_BUILD_MODE}" SHLIBDIR "${LLVM_SHLIB_OUTPUT_INTDIR}") # FIXME: "ENABLE_SHARED" doesn't make sense, since it is used just for diff --git a/llvm/utils/gn/secondary/clang-tools-extra/clangd/test/BUILD.gn b/llvm/utils/gn/secondary/clang-tools-extra/clangd/test/BUILD.gn index 09a225f27b0b..26525af67cf5 100644 --- a/llvm/utils/gn/secondary/clang-tools-extra/clangd/test/BUILD.gn +++ b/llvm/utils/gn/secondary/clang-tools-extra/clangd/test/BUILD.gn @@ -28,7 +28,7 @@ write_lit_config("lit_site_cfg") { "CMAKE_CURRENT_SOURCE_DIR=" + rebase_path("//clang-tools-extra/clangd/test"), - "CLANG_TOOLS_DIR=", + "CURRENT_TOOLS_DIR=", "CLANGD_ENABLE_REMOTE=0", "CLANGD_TIDY_CHECKS=1", "LLVM_HOST_TRIPLE=$llvm_current_triple", diff --git a/llvm/utils/gn/secondary/clang-tools-extra/pseudo/test/BUILD.gn b/llvm/utils/gn/secondary/clang-tools-extra/pseudo/test/BUILD.gn index e58f492b3755..13c6cdc8045d 100644 --- a/llvm/utils/gn/secondary/clang-tools-extra/pseudo/test/BUILD.gn +++ b/llvm/utils/gn/secondary/clang-tools-extra/pseudo/test/BUILD.gn @@ -26,7 +26,7 @@ write_lit_config("lit_site_cfg") { "CMAKE_CURRENT_SOURCE_DIR=" + rebase_path("//clang-tools-extra/pseudo/test"), - "CLANG_TOOLS_DIR=", + "CURRENT_TOOLS_DIR=", "LLVM_LIT_TOOLS_DIR=", # Intentionally empty, matches cmake build. "LLVM_TOOLS_DIR=" + rebase_path("$root_out_dir/bin"), "TARGET_TRIPLE=$llvm_target_triple", diff --git a/llvm/utils/gn/secondary/clang-tools-extra/test/BUILD.gn b/llvm/utils/gn/secondary/clang-tools-extra/test/BUILD.gn index 065808ad71d2..3f541f04de43 100644 --- a/llvm/utils/gn/secondary/clang-tools-extra/test/BUILD.gn +++ b/llvm/utils/gn/secondary/clang-tools-extra/test/BUILD.gn @@ -32,7 +32,7 @@ write_lit_config("lit_site_cfg") { output = clang_tools_extra_lit_site_cfg_file extra_values = [ - "CLANG_TOOLS_DIR=" + rebase_path("$root_out_dir/bin"), + "CURRENT_TOOLS_DIR=" + rebase_path("$root_out_dir/bin"), "CLANG_PLUGIN_SUPPORT=0", "LLVM_HOST_TRIPLE=$llvm_current_triple", "LLVM_INSTALL_TOOLCHAIN_ONLY=0", diff --git a/llvm/utils/gn/secondary/clang/test/BUILD.gn b/llvm/utils/gn/secondary/clang/test/BUILD.gn index f342786e0fe3..e919b017dd5d 100644 --- a/llvm/utils/gn/secondary/clang/test/BUILD.gn +++ b/llvm/utils/gn/secondary/clang/test/BUILD.gn @@ -48,7 +48,7 @@ write_lit_config("lit_site_cfg") { "CLANG_DEFAULT_CXX_STDLIB=", # Empty string means "default value" here. "CLANG_DEFAULT_PIE_ON_LINUX=0", "CLANG_PLUGIN_SUPPORT=0", # FIXME: Analysis/plugins need global -fPIC - "CLANG_TOOLS_DIR=" + rebase_path("$root_out_dir/bin", dir), + "CURRENT_TOOLS_DIR=" + rebase_path("$root_out_dir/bin", dir), "CLANG_VENDOR_UTI=org.llvm.clang", # This is only used if LLVM_USE_SANITIZER includes lsan and the host diff --git a/llvm/utils/gn/secondary/lld/test/BUILD.gn b/llvm/utils/gn/secondary/lld/test/BUILD.gn index 9342e51a9c92..bee3aab5ef05 100644 --- a/llvm/utils/gn/secondary/lld/test/BUILD.gn +++ b/llvm/utils/gn/secondary/lld/test/BUILD.gn @@ -15,8 +15,8 @@ template("write_lit_cfg") { "LIT_SITE_CFG_IN_HEADER=## Autogenerated from $input, do not edit", "LLD_BINARY_DIR=" + rebase_path(get_label_info("//lld", "target_out_dir")), - "LLD_LIBS_DIR=", # FIXME: for shared builds only (?) - "LLD_TOOLS_DIR=" + rebase_path("$root_out_dir/bin"), + "CURRENT_LIBS_DIR=", # FIXME: for shared builds only (?) + "CURRENT_TOOLS_DIR=" + rebase_path("$root_out_dir/bin"), "LLD_SOURCE_DIR=" + rebase_path("//lld"), "LLVM_BINARY_DIR=" + rebase_path(get_label_info("//llvm", "target_out_dir")),