-
Notifications
You must be signed in to change notification settings - Fork 14.9k
fix clang_cmake_builddir #161220
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fix clang_cmake_builddir #161220
Conversation
When building llvm from a subdirectory (like clspv does) `CMAKE_BINARY_DIR` is at the top of the build directory. When building runtimes (libclc for example), the build fails looking for clang (through `find_package` looking at `LLVM_BINARY_DIR` with `NO_DEFAULT_PATH` & `NO_CMAKE_FIND_ROOT_PATH`) because clang is not in `LLVM_BINARY_DIR`. Fix that issue by setting `clang_cmake_builddir` the same way we set `llvm_cmake_builddir` from `LLVM_BINARY_DIR`. For default llvm build (using llvm as the main cmake project), it should not change anything. For standalone clang build, keep the actual value as libclc cannot be built that way.
@llvm/pr-subscribers-clang Author: Romaric Jodin (rjodinchr) ChangesWhen building llvm from a subdirectory (like clspv does) When building runtimes (libclc for example), the build fails looking for clang (through Fix that issue by setting For default llvm build (using llvm as the main cmake project), it should not change anything. Full diff: https://github.com/llvm/llvm-project/pull/161220.diff 1 Files Affected:
diff --git a/clang/cmake/modules/CMakeLists.txt b/clang/cmake/modules/CMakeLists.txt
index d2d68121371bf..9ad2f984f0e27 100644
--- a/clang/cmake/modules/CMakeLists.txt
+++ b/clang/cmake/modules/CMakeLists.txt
@@ -8,15 +8,19 @@ include(FindPrefixFromConfig)
# the usual CMake convention seems to be ${Project}Targets.cmake.
set(CLANG_INSTALL_PACKAGE_DIR "${CMAKE_INSTALL_PACKAGEDIR}/clang" CACHE STRING
"Path for CMake subdirectory for Clang (defaults to '${CMAKE_INSTALL_PACKAGEDIR}/clang')")
-# CMAKE_INSTALL_PACKAGEDIR might be absolute, so don't reuse below.
-set(clang_cmake_builddir "${CMAKE_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX}/cmake/clang")
# Keep this in sync with llvm/cmake/CMakeLists.txt!
set(LLVM_INSTALL_PACKAGE_DIR "${CMAKE_INSTALL_PACKAGEDIR}/llvm" CACHE STRING
"Path for CMake subdirectory for LLVM (defaults to '${CMAKE_INSTALL_PACKAGEDIR}/llvm')")
# CMAKE_INSTALL_PACKAGEDIR might be absolute, so don't reuse below.
-string(REPLACE "${CMAKE_CFG_INTDIR}" "." llvm_cmake_builddir "${LLVM_LIBRARY_DIR}")
-set(llvm_cmake_builddir "${llvm_cmake_builddir}/cmake/llvm")
+string(REPLACE "${CMAKE_CFG_INTDIR}" "." llvm_builddir "${LLVM_LIBRARY_DIR}")
+set(llvm_cmake_builddir "${llvm_builddir}/cmake/llvm")
+if(CLANG_BUILT_STANDALONE)
+ # CMAKE_INSTALL_PACKAGEDIR might be absolute, so don't reuse below.
+ set(clang_cmake_builddir "${CMAKE_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX}/cmake/clang")
+else()
+ set(clang_cmake_builddir "${llvm_builddir}/cmake/clang")
+endif()
get_property(CLANG_EXPORTS GLOBAL PROPERTY CLANG_EXPORTS)
export(TARGETS ${CLANG_EXPORTS} FILE ${clang_cmake_builddir}/ClangTargets.cmake)
|
This is a following on #155844 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I was able to build this in nixpkgs which does standalone packaging of LLVM components so this should be good.
@tstellar please take a look. If you approve, please merge it (I cannot do it myself) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM, since this is mostly the same as the previous change & people impacted by the previous PR have confirmed this is OK, I'll move ahead and merge. We can always revert if we find a new issue.
LLVM Buildbot has detected a new failure on builder Full details are available at: https://lab.llvm.org/buildbot/#/builders/95/builds/18795 Here is the relevant piece of the build log for the reference
|
When building llvm from a subdirectory (like clspv does)
CMAKE_BINARY_DIR
is at the top of the build directory.When building runtimes (libclc for example), the build fails looking for clang (through
find_package
looking atLLVM_BINARY_DIR
withNO_DEFAULT_PATH
&NO_CMAKE_FIND_ROOT_PATH
) because clang is not inLLVM_BINARY_DIR
.Fix that issue by setting
clang_cmake_builddir
the same way we setllvm_cmake_builddir
fromLLVM_BINARY_DIR
.For default llvm build (using llvm as the main cmake project), it should not change anything.
For standalone clang build, keep the actual value as libclc cannot be built that way.