Skip to content

Commit c32c1d0

Browse files
authored
[Runtimes] Default build must use its own output dirs (#168266)
Post-commit fix of #164794 reported at #164794 (comment) `LLVM_LIBRARY_OUTPUT_INTDIR` and `LLVM_RUNTIME_OUTPUT_INTDIR` is used by `AddLLVM.cmake` as output directories. Unless we are in a bootstrapping-build, It must not point to directories found by `find_package(LLVM)` which may be read-only directories. MLIR for instance sets thesese variables to its own build output directory, so should the runtimes.
1 parent 7b94dd3 commit c32c1d0

File tree

8 files changed

+30
-24
lines changed

8 files changed

+30
-24
lines changed

compiler-rt/cmake/base-config-ix.cmake

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,9 @@ if (LLVM_TREE_AVAILABLE)
5959
set(_host_executable_suffix ${CMAKE_EXECUTABLE_SUFFIX})
6060
endif()
6161
set(COMPILER_RT_TEST_COMPILER
62-
${LLVM_RUNTIME_OUTPUT_INTDIR}/clang${_host_executable_suffix})
62+
${LLVM_TOOLS_BINARY_DIR}/clang${_host_executable_suffix})
6363
set(COMPILER_RT_TEST_CXX_COMPILER
64-
${LLVM_RUNTIME_OUTPUT_INTDIR}/clang++${_host_executable_suffix})
64+
${LLVM_TOOLS_BINARY_DIR}/clang++${_host_executable_suffix})
6565
else()
6666
# Take output dir and install path from the user.
6767
set(COMPILER_RT_OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR} CACHE PATH

compiler-rt/lib/sanitizer_common/symbolizer/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ foreach(arch ${SANITIZER_COMMON_SUPPORTED_ARCH})
1313
scripts/build_symbolizer.sh
1414
WORKING_DIRECTORY ${RTSanitizerCommonSymbolizerInternalDir}
1515
COMMAND FLAGS=${TARGET_CFLAGS}
16-
CLANG=${LLVM_RUNTIME_OUTPUT_INTDIR}/clang
16+
CLANG=${LLVM_TOOLS_BINARY_DIR}/clang
1717
${CMAKE_CURRENT_SOURCE_DIR}/scripts/build_symbolizer.sh
1818
${CMAKE_CURRENT_BINARY_DIR}/RTSanitizerCommonSymbolizerInternal.${arch}.o
1919
USES_TERMINAL)

offload/CMakeLists.txt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -90,18 +90,18 @@ else()
9090
set(OPENMP_INSTALL_LIBDIR "lib${LLVM_LIBDIR_SUFFIX}")
9191

9292
if (NOT MSVC)
93-
set(OPENMP_TEST_C_COMPILER ${LLVM_RUNTIME_OUTPUT_INTDIR}/clang)
94-
set(OPENMP_TEST_CXX_COMPILER ${LLVM_RUNTIME_OUTPUT_INTDIR}/clang++)
93+
set(OPENMP_TEST_C_COMPILER ${LLVM_TOOLS_BINARY_DIR}/clang)
94+
set(OPENMP_TEST_CXX_COMPILER ${LLVM_TOOLS_BINARY_DIR}/clang++)
9595
else()
96-
set(OPENMP_TEST_C_COMPILER ${LLVM_RUNTIME_OUTPUT_INTDIR}/clang.exe)
97-
set(OPENMP_TEST_CXX_COMPILER ${LLVM_RUNTIME_OUTPUT_INTDIR}/clang++.exe)
96+
set(OPENMP_TEST_C_COMPILER ${LLVM_TOOLS_BINARY_DIR}/clang.exe)
97+
set(OPENMP_TEST_CXX_COMPILER ${LLVM_TOOLS_BINARY_DIR}/clang++.exe)
9898
endif()
9999

100100
# Check for flang
101101
if (NOT MSVC)
102-
set(OPENMP_TEST_Fortran_COMPILER ${LLVM_RUNTIME_OUTPUT_INTDIR}/flang)
102+
set(OPENMP_TEST_Fortran_COMPILER ${LLVM_TOOLS_BINARY_DIR}/flang)
103103
else()
104-
set(OPENMP_TEST_Fortran_COMPILER ${LLVM_RUNTIME_OUTPUT_INTDIR}/flang.exe)
104+
set(OPENMP_TEST_Fortran_COMPILER ${LLVM_TOOLS_BINARY_DIR}/flang.exe)
105105
endif()
106106

107107
# Set fortran test compiler if flang is found

offload/cmake/OpenMPTesting.cmake

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,9 +68,9 @@ else()
6868
message(WARNING "The check targets will not be available!")
6969
set(ENABLE_CHECK_TARGETS FALSE)
7070
else()
71-
set(OPENMP_FILECHECK_EXECUTABLE ${LLVM_RUNTIME_OUTPUT_INTDIR}/FileCheck)
71+
set(OPENMP_FILECHECK_EXECUTABLE ${LLVM_TOOLS_BINARY_DIR}/FileCheck)
7272
endif()
73-
set(OPENMP_NOT_EXECUTABLE ${LLVM_RUNTIME_OUTPUT_INTDIR}/not)
73+
set(OPENMP_NOT_EXECUTABLE ${LLVM_TOOLS_BINARY_DIR}/not)
7474
endif()
7575
set(OFFLOAD_DEVICE_INFO_EXECUTABLE ${LLVM_RUNTIME_OUTPUT_INTDIR}/llvm-offload-device-info)
7676
set(OFFLOAD_TBLGEN_EXECUTABLE ${LLVM_RUNTIME_OUTPUT_INTDIR}/offload-tblgen)

offload/test/lit.site.cfg.in

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
@AUTO_GEN_COMMENT@
22

3-
config.bin_llvm_tools_dir = "@LLVM_RUNTIME_OUTPUT_INTDIR@"
3+
config.bin_llvm_tools_dir = "@LLVM_TOOLS_BINARY_DIR@"
44
config.test_c_compiler = "@OPENMP_TEST_C_COMPILER@"
55
config.test_cxx_compiler = "@OPENMP_TEST_CXX_COMPILER@"
66
config.test_fortran_compiler="@OPENMP_TEST_Fortran_COMPILER@"

openmp/CMakeLists.txt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -71,11 +71,11 @@ else()
7171
endif()
7272

7373
if (NOT MSVC)
74-
set(OPENMP_TEST_C_COMPILER ${LLVM_RUNTIME_OUTPUT_INTDIR}/clang)
75-
set(OPENMP_TEST_CXX_COMPILER ${LLVM_RUNTIME_OUTPUT_INTDIR}/clang++)
74+
set(OPENMP_TEST_C_COMPILER ${LLVM_TOOLS_BINARY_DIR}/clang)
75+
set(OPENMP_TEST_CXX_COMPILER ${LLVM_TOOLS_BINARY_DIR}/clang++)
7676
else()
77-
set(OPENMP_TEST_C_COMPILER ${LLVM_RUNTIME_OUTPUT_INTDIR}/clang.exe)
78-
set(OPENMP_TEST_CXX_COMPILER ${LLVM_RUNTIME_OUTPUT_INTDIR}/clang++.exe)
77+
set(OPENMP_TEST_C_COMPILER ${LLVM_TOOLS_BINARY_DIR}/clang.exe)
78+
set(OPENMP_TEST_CXX_COMPILER ${LLVM_TOOLS_BINARY_DIR}/clang++.exe)
7979
endif()
8080

8181
# Set fortran test compiler if flang is found

openmp/cmake/OpenMPTesting.cmake

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,9 +68,9 @@ else()
6868
message(WARNING "The check targets will not be available!")
6969
set(ENABLE_CHECK_TARGETS FALSE)
7070
else()
71-
set(OPENMP_FILECHECK_EXECUTABLE ${LLVM_RUNTIME_OUTPUT_INTDIR}/FileCheck)
71+
set(OPENMP_FILECHECK_EXECUTABLE ${LLVM_TOOLS_BINARY_DIR}/FileCheck)
7272
endif()
73-
set(OPENMP_NOT_EXECUTABLE ${LLVM_RUNTIME_OUTPUT_INTDIR}/not)
73+
set(OPENMP_NOT_EXECUTABLE ${LLVM_TOOLS_BINARY_DIR}/not)
7474
endif()
7575

7676
# Macro to extract information about compiler from file. (no own scope)

runtimes/CMakeLists.txt

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -77,11 +77,6 @@ if (NOT LLVM_FOUND)
7777
set(LLVM_LIBRARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX})
7878
endif()
7979

80-
# Setting these variables will allow the sub-build to put their outputs into
81-
# the library and bin directories of the top-level build.
82-
set(LLVM_LIBRARY_OUTPUT_INTDIR ${LLVM_LIBRARY_DIR})
83-
set(LLVM_RUNTIME_OUTPUT_INTDIR ${LLVM_TOOLS_BINARY_DIR})
84-
8580
# This variable makes sure that e.g. llvm-lit is found.
8681
set(LLVM_MAIN_SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../llvm)
8782
set(LLVM_CMAKE_DIR ${LLVM_MAIN_SRC_DIR}/cmake/modules)
@@ -95,10 +90,21 @@ include(CheckCXXCompilerFlag)
9590
# Determine whether we are in the runtimes/runtimes-bins directory of a
9691
# bootstrap build.
9792
set(LLVM_TREE_AVAILABLE OFF)
98-
if (LLVM_LIBRARY_OUTPUT_INTDIR AND LLVM_RUNTIME_OUTPUT_INTDIR AND PACKAGE_VERSION)
93+
if (LLVM_LIBRARY_DIR AND LLVM_TOOLS_BINARY_DIR AND PACKAGE_VERSION)
9994
set(LLVM_TREE_AVAILABLE ON)
10095
endif()
10196

97+
if(LLVM_TREE_AVAILABLE)
98+
# Setting these variables will allow the sub-build to put their outputs into
99+
# the library and bin directories of the top-level build.
100+
set(LLVM_LIBRARY_OUTPUT_INTDIR ${LLVM_LIBRARY_DIR})
101+
set(LLVM_RUNTIME_OUTPUT_INTDIR ${LLVM_TOOLS_BINARY_DIR})
102+
else()
103+
# Use own build directory for artifact output.
104+
set(LLVM_LIBRARY_OUTPUT_INTDIR "${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/lib${LLVM_LIBDIR_SUFFIX}")
105+
set(LLVM_RUNTIME_OUTPUT_INTDIR "${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/bin")
106+
endif()
107+
102108
# CMake omits default compiler include paths, but in runtimes build, we use
103109
# -nostdinc and -nostdinc++ and control include paths manually so this behavior
104110
# is undesirable. Filtering CMAKE_{LANG}_IMPLICIT_INCLUDE_DIRECTORIES to remove

0 commit comments

Comments
 (0)