<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/56311>56311</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
The 'default build' puts the compiler-rt libraries in the wrong place
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
Mark-Dunn-OIL
</td>
</tr>
</table>
<pre>
The document [https://libcxx.llvm.org//BuildingLibcxx.html](url) Introduces the concept of a 'Default Build', but building compiler-rt in this style causes the compiler-rt libraries to be put in the wrong place.
In the file .../compiler-rt/cmake/base-config-ix.cmake line: 33
```
# Setting these variables from an LLVM build is sufficient that compiler-rt can
# construct the output paths, so it can behave as if it were in-tree here.
if (LLVM_LIBRARY_OUTPUT_INTDIR AND LLVM_RUNTIME_OUTPUT_INTDIR AND PACKAGE_VERSION)
set(LLVM_TREE_AVAILABLE On)
endif()
if (LLVM_TREE_AVAILABLE)
# Compute the Clang version from the LLVM version.
# FIXME: We should be able to reuse CLANG_VERSION variable calculated
# in Clang cmake files, instead of copying the rules here.
string(REGEX MATCH "[0-9]+\\.[0-9]+(\\.[0-9]+)?" CLANG_VERSION
${PACKAGE_VERSION})
# Setup the paths where compiler-rt runtimes and headers should be stored.
set(COMPILER_RT_OUTPUT_DIR ${LLVM_LIBRARY_OUTPUT_INTDIR}/clang/${CLANG_VERSION})
set(COMPILER_RT_EXEC_OUTPUT_DIR ${LLVM_RUNTIME_OUTPUT_INTDIR})
set(COMPILER_RT_INSTALL_PATH lib${LLVM_LIBDIR_SUFFIX}/clang/${CLANG_VERSION})
option(COMPILER_RT_INCLUDE_TESTS "Generate and build compiler-rt unit tests."
${LLVM_INCLUDE_TESTS})
option(COMPILER_RT_ENABLE_WERROR "Fail and stop if warning is triggered"
${LLVM_ENABLE_WERROR})
```
The PACKAGE_VERSION is unavailble (but both LLVM_LIBRARY_OUTPUT_INTDIR and LLVM_RUNTIME_OUTPUT_INTDIR are)
and therefore depending on the value of LLVM_ENABLE_PER_TARGET_RUNTIME_DIR the libraries are put in either:
> \<build directory>/compiler-rt/lib/\<triple> or
> \<build directory>/compiler-rt/lib/\<operating system>
and installed to
> \<parent directory>/lib/\<triple> or
> \<parent directory>/lib/\<operating system>
where \<parent directory> represents the parent directory of the clang binary or library
clang looks for them in:
> \<parent directory>/lib/clang/\<clang version>/lib/\<triple> or
> \<parent directory>/lib/clang/\<clang version>/lib/\<operating system>
If we used CMAKE_C_COMPILER_ID and CMAKE_C_COMPILER_VERSION they would go in the correct place.
> \<build directory>/compiler-rt/lib/\<CMAKE_C_COMPILER_ID>/\<CMAKE_C_COMPILER_VERSION>/\<triple> or
> \<build directory>/lib/<CMAKE_C_COMPILER_ID>/\<CMAKE_C_COMPILER_VERSION>/lib/\<operating system>
```
# Setting these variables from an LLVM build is sufficient that compiler-rt can
# construct the output paths, so it can behave as if it were in-tree here.
if (LLVM_LIBRARY_OUTPUT_INTDIR AND LLVM_RUNTIME_OUTPUT_INTDIR AND CMAKE_C_COMPILER_VERSION)
set(LLVM_TREE_AVAILABLE On)
endif()
if (LLVM_TREE_AVAILABLE)
# Setup the paths where compiler-rt runtimes and headers should be stored.
set(COMPILER_RT_OUTPUT_DIR ${LLVM_LIBRARY_OUTPUT_INTDIR}/${CMAKE_C_COMPILER_ID}/${CMAKE_C_COMPILER_VERSION})
set(COMPILER_RT_EXEC_OUTPUT_DIR ${LLVM_RUNTIME_OUTPUT_INTDIR})
set(COMPILER_RT_INSTALL_PATH lib${LLVM_LIBDIR_SUFFIX}/clang/${CMAKE_C_COMPILER_VERSION})
```
Fixing the FIXME: on line 41 in time for your release?
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzlWNty4jgQ_RrzooICG0LywINjTMY1QFLEycw-uWRbBu0YyyXLSfj76ZYNsYFcZnZra7eWcqCsS_fp00ctKaGIdxN_w0gsonLLMkWM0fVGqbwwLNswZ_CkPIxeXnpp-rTtCbmuGq9LnsY8W8-rzo3apsZoapiXpUwN84p4mZIiLiNWEAXWI5FFLFdEJIQSwxxPWULLVBFtBt4N0yFhqeCvMgsTtjlPmexKRXgGNnhBCrVLwRQti4PV10GAUlLJsUeQkJG8rCcy8iwFWMxTGrGe0Z8afbv69qruBEyQXq8HUTUM4tuW_mDwG9KCdSGChK-7_KWnm8FfxoAiYlm1yYt-_VSvpkXumVIYCzgpGHkCdDRMAWAixZbQjMznj4sqYoLRlUnCI44pUBuqWsFFNHs1C0gKJctIafSiVBhqTtWmQBYLQbieACRs6BMjtCA8wbZnJhlQ0lWSMbKBl5oM6IW8IZhg7l2v7NUfwe2Df_fgB97Sn3orYi-nGmuwelj63sI9031nO1_tGzd4dFf33u0SFFDZJqRgam_dX7luYD_a3ty-nrvkNjsMY1nMExh2aDhB1p7bsI-MOEBVqZjmw0kpUP7EZMFFVlGNzZrrurXXnDvzvi9cTOQ3RoqNKCEZoB5MFApJMhAbceb28mYf2yGRQHIalSlVLG4arD-gvQpKJRcUmc4Ph-QxGuNKiES-q_VBZInKaGQFmFMSeoGAlXvjficL23e-gAcTFmi_e6VX27UxcuDptZqAxnOtV4YFC9dsB7P3VX8Mc2iMr4-TOZ4e8Q3CLnMNW8uOPCPulmBlmSm-hYhoFkNUNAbmG_QWSkgW99oacW4Xd97cXQUrf68wlFeF6W15anizCLnWpQlHt2Ns4T_15X53nTccnhX8R_a85b1vz-fBne1_wbLUDgAMBPcPM5DdLwIXuQLtnvhy5g9TN_Dde_8exXHDMiZBkpr4qrY081JmUAgUK1TRQyWdy74G2rL7CRzuEpdl8M1drW6RQXNGeaoxQKpzLEDPVGYodqh0oOv1GhQTvwuhZbIJ4ajS4uZ1pFh0Umb0CTDgOgWsem8RakPeKXOI9p0yRyU7QMChCkWfgI5JzHIsYBCcqHaUJ5qWDFd4M5A7YMq3Vzeuf3CAZvWE180LvOy3LsbRBZamOm7LJbiyLafKa8wli2Ah7aDjZO_SuptVw4HvPGU4XchXU79nS-QoL4y12EEh2-L4RsVGYrDC0TRlMRbQY-g5BAg73JG_T6P9ePoHAKtS9aYxKPi5hN06U0Vd39pDMKn65KFLe8gzim2yTuCu6akakgrxA3Z8GALTtsANHqt-gZNDedAjo-bm9lnq_mYnHxBMPFjrjMC2GRNnYX91Ayc4VApvqlfZSft-3QJHO_Ksd4m12B_fIiERc_sA97tr4Qykasob3ftS3BjzHstn0dT-_6Lzz-Xgf30KfZPAf_Y4-i88HtWnizP6e6_7v3iA-kQMR4tkxl_2p_DDZQA2crzgkeFAVyHIla7hO1FK2CJSBjdCPE43xHH63YknVnxlXdGO4ipl-pYNV924vvqG9dUXt_v3rrOnl9gO3LEn7Tv6Gs4KZdgDC1gp4KZe_3RzKf6EWgSvvChKvILMRhfWYNDZTPoWi2hymZgRHY7G49CMwktrHNP4athPrIt-J6UhS4sJXCPgoJaxZ6JN6BvItMMnZt80-xdWf3BhDgaj3sCKByPrMrSG4Wg0HF8Ywz7bwgns8I-DjpxoSGG5LqAz5XgKPXTSouDrjDHtDuzTUm2EnCyo_NGdllnWvfXmHQ1gogP4CT3FE38">