diff options
| author | Michael Kruse <llvm-project@meinersbur.de> | 2025-07-26 01:56:57 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-07-26 01:56:57 +0200 |
| commit | 799f28d7a5f155ae5456c87a511fbd18498f6396 (patch) | |
| tree | 078f9032e6091095a8b4d0cac8e3702c965f6fd0 | |
| parent | 15b03687ff655e2e64afb8554645457d2e4cabd7 (diff) | |
[OpenMP] Fix runtimes default build (#149871)
The default build of openmp (`cmake -S <llvm-project>/runtimes
-DLLVM_ENABLE_RUNTIMES=openmp`) current fails with
```
CMake Error at /home/meinersbur/src/llvm/flangrt/_src/cmake/Modules/GetClangResourceDir.cmake:17 (string):
string sub-command REGEX, mode MATCH needs at least 5 arguments total to
command.
Call Stack (most recent call first):
/home/meinersbur/src/llvm/flangrt/_src/openmp/CMakeLists.txt:126 (get_clang_resource_dir)
```
The reason is that because it is not a bootstrapping-build, the clang
resource dir that it intends to write files such as `omp-tools.h` into,
is unavailable. Using the Clang resource dir for writing files is
conceptually broken, as that dir might be located in
`/usr/lib/clang/<version>/`. Writing to it is only intended in
bootstrapping builds where Clang is built alongside openmp.
This patch unifies the identification of being in a bootstrapping built.
The same `LLVM_TREE_AVAILABLE` definition is going to be used in
#137828. No reason for each runtime to define its own.
| -rw-r--r-- | openmp/CMakeLists.txt | 2 | ||||
| -rw-r--r-- | openmp/runtime/src/CMakeLists.txt | 2 | ||||
| -rw-r--r-- | runtimes/CMakeLists.txt | 8 |
3 files changed, 10 insertions, 2 deletions
diff --git a/openmp/CMakeLists.txt b/openmp/CMakeLists.txt index c206386fa6b6..ab34851d8961 100644 --- a/openmp/CMakeLists.txt +++ b/openmp/CMakeLists.txt @@ -115,7 +115,7 @@ option(OPENMP_ENABLE_LIBOMPTARGET "Enable building libomptarget for offloading." option(OPENMP_ENABLE_LIBOMP_PROFILING "Enable time profiling for libomp." OFF) # Header install location -if(${OPENMP_STANDALONE_BUILD}) +if(NOT LLVM_TREE_AVAILABLE) set(LIBOMP_HEADERS_INSTALL_PATH "${CMAKE_INSTALL_INCLUDEDIR}") else() include(GetClangResourceDir) diff --git a/openmp/runtime/src/CMakeLists.txt b/openmp/runtime/src/CMakeLists.txt index 698e185d9c4d..569061c6494b 100644 --- a/openmp/runtime/src/CMakeLists.txt +++ b/openmp/runtime/src/CMakeLists.txt @@ -11,7 +11,7 @@ include(ExtendPath) # The generated headers will be placed in clang's resource directory if present. -if(OPENMP_STANDALONE_BUILD OR NOT LLVM_RUNTIMES_BUILD) +if(NOT LLVM_TREE_AVAILABLE) set(LIBOMP_HEADERS_INTDIR ${CMAKE_CURRENT_BINARY_DIR}) else() set(LIBOMP_HEADERS_INTDIR ${LLVM_BINARY_DIR}/${LIBOMP_HEADERS_INSTALL_PATH}) diff --git a/runtimes/CMakeLists.txt b/runtimes/CMakeLists.txt index e4dd4ebfc678..d0d2a538e1e8 100644 --- a/runtimes/CMakeLists.txt +++ b/runtimes/CMakeLists.txt @@ -92,6 +92,14 @@ include(LLVMCheckCompilerLinkerFlag) include(CheckCCompilerFlag) 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) + set(LLVM_TREE_AVAILABLE ON) +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 |
