From ce507a8441c51fa6098fc34b31e4a5ea2466f71f Mon Sep 17 00:00:00 2001 From: Michael Kruse Date: Sun, 16 Nov 2025 13:17:42 +0100 Subject: [PATCH 1/6] [Runtimes] Default build must use its own output dir --- runtimes/CMakeLists.txt | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/runtimes/CMakeLists.txt b/runtimes/CMakeLists.txt index b17bd8f665361..d9fcac3a646b8 100644 --- a/runtimes/CMakeLists.txt +++ b/runtimes/CMakeLists.txt @@ -77,11 +77,6 @@ if (NOT LLVM_FOUND) set(LLVM_LIBRARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX}) endif() -# Setting these variables will allow the sub-build to put their outputs into -# the library and bin directories of the top-level build. -set(LLVM_LIBRARY_OUTPUT_INTDIR ${LLVM_LIBRARY_DIR}) -set(LLVM_RUNTIME_OUTPUT_INTDIR ${LLVM_TOOLS_BINARY_DIR}) - # This variable makes sure that e.g. llvm-lit is found. set(LLVM_MAIN_SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../llvm) set(LLVM_CMAKE_DIR ${LLVM_MAIN_SRC_DIR}/cmake/modules) @@ -99,6 +94,17 @@ if (LLVM_LIBRARY_OUTPUT_INTDIR AND LLVM_RUNTIME_OUTPUT_INTDIR AND PACKAGE_VERSIO set(LLVM_TREE_AVAILABLE ON) endif() +if(LLVM_TREE_AVAILABLE) + # Setting these variables will allow the sub-build to put their outputs into + # the library and bin directories of the top-level build. + set(LLVM_LIBRARY_OUTPUT_INTDIR ${LLVM_LIBRARY_DIR}) + set(LLVM_RUNTIME_OUTPUT_INTDIR ${LLVM_TOOLS_BINARY_DIR}) +else() + # Use own build directory for artifact output. + set(LLVM_LIBRARY_OUTPUT_INTDIR "${CMAKE_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX}") + set(LLVM_RUNTIME_OUTPUT_INTDIR "${CMAKE_BINARY_DIR}/bin") +endif() + # CMake omits default compiler include paths, but in runtimes build, we use # -nostdinc and -nostdinc++ and control include paths manually so this behavior # is undesirable. Filtering CMAKE_{LANG}_IMPLICIT_INCLUDE_DIRECTORIES to remove From c8e73cae146ba31b77ab4ab79645b6be0993be4a Mon Sep 17 00:00:00 2001 From: Michael Kruse Date: Sun, 16 Nov 2025 13:39:14 +0100 Subject: [PATCH 2/6] Fix wrong uses of LLVM_RUNTIME_OUTPUT_INTDIR in compiler-rt --- compiler-rt/cmake/base-config-ix.cmake | 4 ++-- compiler-rt/lib/sanitizer_common/symbolizer/CMakeLists.txt | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/compiler-rt/cmake/base-config-ix.cmake b/compiler-rt/cmake/base-config-ix.cmake index d92bc0e71fa1a..37dfa5534dfef 100644 --- a/compiler-rt/cmake/base-config-ix.cmake +++ b/compiler-rt/cmake/base-config-ix.cmake @@ -59,9 +59,9 @@ if (LLVM_TREE_AVAILABLE) set(_host_executable_suffix ${CMAKE_EXECUTABLE_SUFFIX}) endif() set(COMPILER_RT_TEST_COMPILER - ${LLVM_RUNTIME_OUTPUT_INTDIR}/clang${_host_executable_suffix}) + ${LLVM_TOOLS_BINARY_DIR}/clang${_host_executable_suffix}) set(COMPILER_RT_TEST_CXX_COMPILER - ${LLVM_RUNTIME_OUTPUT_INTDIR}/clang++${_host_executable_suffix}) + ${LLVM_TOOLS_BINARY_DIR}/clang++${_host_executable_suffix}) else() # Take output dir and install path from the user. set(COMPILER_RT_OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR} CACHE PATH diff --git a/compiler-rt/lib/sanitizer_common/symbolizer/CMakeLists.txt b/compiler-rt/lib/sanitizer_common/symbolizer/CMakeLists.txt index ab37454acbe19..bb8298931c390 100644 --- a/compiler-rt/lib/sanitizer_common/symbolizer/CMakeLists.txt +++ b/compiler-rt/lib/sanitizer_common/symbolizer/CMakeLists.txt @@ -13,7 +13,7 @@ foreach(arch ${SANITIZER_COMMON_SUPPORTED_ARCH}) scripts/build_symbolizer.sh WORKING_DIRECTORY ${RTSanitizerCommonSymbolizerInternalDir} COMMAND FLAGS=${TARGET_CFLAGS} - CLANG=${LLVM_RUNTIME_OUTPUT_INTDIR}/clang + CLANG=${LLVM_TOOLS_BINARY_DIR}/clang ${CMAKE_CURRENT_SOURCE_DIR}/scripts/build_symbolizer.sh ${CMAKE_CURRENT_BINARY_DIR}/RTSanitizerCommonSymbolizerInternal.${arch}.o USES_TERMINAL) From e26b30d46ddcec5bf6c7c69aa963beea57794d69 Mon Sep 17 00:00:00 2001 From: Michael Kruse Date: Sun, 16 Nov 2025 13:49:51 +0100 Subject: [PATCH 3/6] Fix wrong uses of LLVM_RUNTIME_OUTPUT_INTDIR in openmp/offload --- offload/CMakeLists.txt | 12 ++++++------ offload/cmake/OpenMPTesting.cmake | 8 ++++---- offload/test/lit.site.cfg.in | 2 +- openmp/CMakeLists.txt | 8 ++++---- openmp/cmake/OpenMPTesting.cmake | 4 ++-- 5 files changed, 17 insertions(+), 17 deletions(-) diff --git a/offload/CMakeLists.txt b/offload/CMakeLists.txt index b277380783500..6e801b1d47011 100644 --- a/offload/CMakeLists.txt +++ b/offload/CMakeLists.txt @@ -90,18 +90,18 @@ else() set(OPENMP_INSTALL_LIBDIR "lib${LLVM_LIBDIR_SUFFIX}") if (NOT MSVC) - set(OPENMP_TEST_C_COMPILER ${LLVM_RUNTIME_OUTPUT_INTDIR}/clang) - set(OPENMP_TEST_CXX_COMPILER ${LLVM_RUNTIME_OUTPUT_INTDIR}/clang++) + set(OPENMP_TEST_C_COMPILER ${LLVM_TOOLS_BINARY_DIR}/clang) + set(OPENMP_TEST_CXX_COMPILER ${LLVM_TOOLS_BINARY_DIR}/clang++) else() - set(OPENMP_TEST_C_COMPILER ${LLVM_RUNTIME_OUTPUT_INTDIR}/clang.exe) - set(OPENMP_TEST_CXX_COMPILER ${LLVM_RUNTIME_OUTPUT_INTDIR}/clang++.exe) + set(OPENMP_TEST_C_COMPILER ${LLVM_TOOLS_BINARY_DIR}/clang.exe) + set(OPENMP_TEST_CXX_COMPILER ${LLVM_TOOLS_BINARY_DIR}/clang++.exe) endif() # Check for flang if (NOT MSVC) - set(OPENMP_TEST_Fortran_COMPILER ${LLVM_RUNTIME_OUTPUT_INTDIR}/flang) + set(OPENMP_TEST_Fortran_COMPILER ${LLVM_TOOLS_BINARY_DIR}/flang) else() - set(OPENMP_TEST_Fortran_COMPILER ${LLVM_RUNTIME_OUTPUT_INTDIR}/flang.exe) + set(OPENMP_TEST_Fortran_COMPILER ${LLVM_TOOLS_BINARY_DIR}/flang.exe) endif() # Set fortran test compiler if flang is found diff --git a/offload/cmake/OpenMPTesting.cmake b/offload/cmake/OpenMPTesting.cmake index ef8cf34ba0c85..623909bb15415 100644 --- a/offload/cmake/OpenMPTesting.cmake +++ b/offload/cmake/OpenMPTesting.cmake @@ -68,12 +68,12 @@ else() message(WARNING "The check targets will not be available!") set(ENABLE_CHECK_TARGETS FALSE) else() - set(OPENMP_FILECHECK_EXECUTABLE ${LLVM_RUNTIME_OUTPUT_INTDIR}/FileCheck) + set(OPENMP_FILECHECK_EXECUTABLE ${LLVM_TOOLS_BINARY_DIR}/FileCheck) endif() - set(OPENMP_NOT_EXECUTABLE ${LLVM_RUNTIME_OUTPUT_INTDIR}/not) + set(OPENMP_NOT_EXECUTABLE ${LLVM_TOOLS_BINARY_DIR}/not) endif() -set(OFFLOAD_DEVICE_INFO_EXECUTABLE ${LLVM_RUNTIME_OUTPUT_INTDIR}/llvm-offload-device-info) -set(OFFLOAD_TBLGEN_EXECUTABLE ${LLVM_RUNTIME_OUTPUT_INTDIR}/offload-tblgen) +set(OFFLOAD_DEVICE_INFO_EXECUTABLE ${LLVM_TOOLS_BINARY_DIR}/llvm-offload-device-info) +set(OFFLOAD_TBLGEN_EXECUTABLE ${LLVM_TOOLS_BINARY_DIR}/offload-tblgen) # Macro to extract information about compiler from file. (no own scope) macro(extract_test_compiler_information lang file) diff --git a/offload/test/lit.site.cfg.in b/offload/test/lit.site.cfg.in index 00f4e2b74a5b0..c8ba45c9683e2 100644 --- a/offload/test/lit.site.cfg.in +++ b/offload/test/lit.site.cfg.in @@ -1,6 +1,6 @@ @AUTO_GEN_COMMENT@ -config.bin_llvm_tools_dir = "@LLVM_RUNTIME_OUTPUT_INTDIR@" +config.bin_llvm_tools_dir = "@LLVM_TOOLS_BINARY_DIR@" config.test_c_compiler = "@OPENMP_TEST_C_COMPILER@" config.test_cxx_compiler = "@OPENMP_TEST_CXX_COMPILER@" config.test_fortran_compiler="@OPENMP_TEST_Fortran_COMPILER@" diff --git a/openmp/CMakeLists.txt b/openmp/CMakeLists.txt index 88be8c75abfe6..44cef3fb3f413 100644 --- a/openmp/CMakeLists.txt +++ b/openmp/CMakeLists.txt @@ -71,11 +71,11 @@ else() endif() if (NOT MSVC) - set(OPENMP_TEST_C_COMPILER ${LLVM_RUNTIME_OUTPUT_INTDIR}/clang) - set(OPENMP_TEST_CXX_COMPILER ${LLVM_RUNTIME_OUTPUT_INTDIR}/clang++) + set(OPENMP_TEST_C_COMPILER ${LLVM_TOOLS_BINARY_DIR}/clang) + set(OPENMP_TEST_CXX_COMPILER ${LLVM_TOOLS_BINARY_DIR}/clang++) else() - set(OPENMP_TEST_C_COMPILER ${LLVM_RUNTIME_OUTPUT_INTDIR}/clang.exe) - set(OPENMP_TEST_CXX_COMPILER ${LLVM_RUNTIME_OUTPUT_INTDIR}/clang++.exe) + set(OPENMP_TEST_C_COMPILER ${LLVM_TOOLS_BINARY_DIR}/clang.exe) + set(OPENMP_TEST_CXX_COMPILER ${LLVM_TOOLS_BINARY_DIR}/clang++.exe) endif() # Set fortran test compiler if flang is found diff --git a/openmp/cmake/OpenMPTesting.cmake b/openmp/cmake/OpenMPTesting.cmake index 60280b7ed4893..262ea968c8351 100644 --- a/openmp/cmake/OpenMPTesting.cmake +++ b/openmp/cmake/OpenMPTesting.cmake @@ -68,9 +68,9 @@ else() message(WARNING "The check targets will not be available!") set(ENABLE_CHECK_TARGETS FALSE) else() - set(OPENMP_FILECHECK_EXECUTABLE ${LLVM_RUNTIME_OUTPUT_INTDIR}/FileCheck) + set(OPENMP_FILECHECK_EXECUTABLE ${LLVM_TOOLS_BINARY_DIR}/FileCheck) endif() - set(OPENMP_NOT_EXECUTABLE ${LLVM_RUNTIME_OUTPUT_INTDIR}/not) + set(OPENMP_NOT_EXECUTABLE ${LLVM_TOOLS_BINARY_DIR}/not) endif() # Macro to extract information about compiler from file. (no own scope) From 983ebe8280ddf50b7b48a2bfcc16c5bdf48d8616 Mon Sep 17 00:00:00 2001 From: Michael Kruse Date: Sun, 16 Nov 2025 18:27:56 +0100 Subject: [PATCH 4/6] config-specific dir --- runtimes/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/runtimes/CMakeLists.txt b/runtimes/CMakeLists.txt index d9fcac3a646b8..415dc64bcb2f2 100644 --- a/runtimes/CMakeLists.txt +++ b/runtimes/CMakeLists.txt @@ -101,8 +101,8 @@ if(LLVM_TREE_AVAILABLE) set(LLVM_RUNTIME_OUTPUT_INTDIR ${LLVM_TOOLS_BINARY_DIR}) else() # Use own build directory for artifact output. - set(LLVM_LIBRARY_OUTPUT_INTDIR "${CMAKE_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX}") - set(LLVM_RUNTIME_OUTPUT_INTDIR "${CMAKE_BINARY_DIR}/bin") + set(LLVM_LIBRARY_OUTPUT_INTDIR "${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/lib${LLVM_LIBDIR_SUFFIX}") + set(LLVM_RUNTIME_OUTPUT_INTDIR "${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/bin") endif() # CMake omits default compiler include paths, but in runtimes build, we use From bb3d74a5b4232a0326af51e0a597cccc643dcfc3 Mon Sep 17 00:00:00 2001 From: Michael Kruse Date: Sun, 16 Nov 2025 23:42:13 +0100 Subject: [PATCH 5/6] Fix which variables to check --- runtimes/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runtimes/CMakeLists.txt b/runtimes/CMakeLists.txt index 415dc64bcb2f2..110b4b1025a3b 100644 --- a/runtimes/CMakeLists.txt +++ b/runtimes/CMakeLists.txt @@ -90,7 +90,7 @@ include(CheckCXXCompilerFlag) # Determine whether we are in the runtimes/runtimes-bins directory of a # bootstrap build. set(LLVM_TREE_AVAILABLE OFF) -if (LLVM_LIBRARY_OUTPUT_INTDIR AND LLVM_RUNTIME_OUTPUT_INTDIR AND PACKAGE_VERSION) +if (LLVM_LIBRARY_DIR AND LLVM_TOOLS_BINARY_DIR AND PACKAGE_VERSION) set(LLVM_TREE_AVAILABLE ON) endif() From e8b334959b133310fe820bf3202c30aeaea3bd84 Mon Sep 17 00:00:00 2001 From: Michael Kruse Date: Tue, 18 Nov 2025 09:08:28 +0100 Subject: [PATCH 6/6] LLVM_RUNTIME_OUTPUT_INTDIR for generated files --- offload/cmake/OpenMPTesting.cmake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/offload/cmake/OpenMPTesting.cmake b/offload/cmake/OpenMPTesting.cmake index 623909bb15415..b564e46b7b193 100644 --- a/offload/cmake/OpenMPTesting.cmake +++ b/offload/cmake/OpenMPTesting.cmake @@ -72,8 +72,8 @@ else() endif() set(OPENMP_NOT_EXECUTABLE ${LLVM_TOOLS_BINARY_DIR}/not) endif() -set(OFFLOAD_DEVICE_INFO_EXECUTABLE ${LLVM_TOOLS_BINARY_DIR}/llvm-offload-device-info) -set(OFFLOAD_TBLGEN_EXECUTABLE ${LLVM_TOOLS_BINARY_DIR}/offload-tblgen) +set(OFFLOAD_DEVICE_INFO_EXECUTABLE ${LLVM_RUNTIME_OUTPUT_INTDIR}/llvm-offload-device-info) +set(OFFLOAD_TBLGEN_EXECUTABLE ${LLVM_RUNTIME_OUTPUT_INTDIR}/offload-tblgen) # Macro to extract information about compiler from file. (no own scope) macro(extract_test_compiler_information lang file)