Dependency errors when building as subdirectory (original) (raw)
August 17, 2023, 3:50pm 1
I’m attempting to build llvm with clang and openmp as a subdirectory of my project.
My project structure is as follows, with the llvm-project
subdirectory being a recent clone of trunk.
. myproject/
|--- CMakeLists.txt
|--- src/
|--- lib/
| |--- CMakeLists.txt
| |--- llvm-project/
| | |--- clang/
| | |--- openmp/
| | |--- llvm/
| | |--- .....
....
The file at lib/CMakeLists.txt
looks as follows:
cmake_minimum_required(VERSION 3.21 FATAL_ERROR)
add_subdirectory(llvm-project/llvm)
Basically, my problem is this: If I direct my build command at -S lib/llvm-project/llvm
it will work, but if I direct it at -S lib
using my own CMakeLists.txt
as above, it will fail with clang dependency errors.
This is my full build command:
cd '/data/myproject/build/build_libs' && env CC="clang" CXX="clang++" \
cmake \
-B '/data/myproject/build/build_libs' \
-S '/data/myproject/lib' \
-DCMAKE_INSTALL_PREFIX="/data/myproject/build/libs" \
-DCMAKE_BUILD_TYPE="Release" \
-DLLVM_TARGETS_TO_BUILD="X86;ARM;AArch64;WebAssembly;RISCV;NVPTX" \
-DLLVM_ENABLE_PROJECTS="clang" \
-DLLVM_ENABLE_RUNTIMES="openmp" \
-DCMAKE_CXX_FLAGS=-fPIC
cd '/data/myproject/build/build_libs' && env CC="clang" CXX="clang++" \
cmake \
--build '/data/myproject/build/build_libs' \
--target install \
--config Release \
-- -j8
However, the build will succeed when changing the respective line to -S '/data/myproject/lib/llvm-project/llvm'
in order to target llvm’s own CMakeLists.txt
rather than mine.
Here is the build output I’m getting:
[100%] Building CXX object llvm-project/llvm/tools/llvm-reduce/CMakeFiles/llvm-reduce.dir/deltas/ReduceDIMetadata.cpp.o
-- Performing Test LIBOMP_HAVE_RTM_INTRINSICS - Success
-- Found Perl: /usr/bin/perl (found version "5.34.0")
-- Performing Test LIBOMP_HAVE_VERSION_SYMBOLS
-- Performing Test LIBOMP_HAVE_VERSION_SYMBOLS - Success
-- Performing Test LIBOMP_HAVE___BUILTIN_FRAME_ADDRESS
-- Performing Test LIBOMP_HAVE___BUILTIN_FRAME_ADDRESS - Success
-- Performing Test LIBOMP_HAVE_WEAK_ATTRIBUTE
-- Performing Test LIBOMP_HAVE_WEAK_ATTRIBUTE - Success
-- Performing Test LIBOMP_HAVE_PSAPI
-- Performing Test LIBOMP_HAVE_PSAPI - Failed
-- Looking for sqrt in m
-- Looking for sqrt in m - found
-- Looking for __atomic_load_1
-- Looking for __atomic_load_1 - not found
-- Looking for __atomic_load_1 in atomic
-- Looking for __atomic_load_1 in atomic - found
-- Using LLVM include directories: /data/myproject/lib/llvm-project/llvm/include;/data/myproject/build/build_libs/llvm-project/llvm/include
-- Found PkgConfig: /usr/bin/pkg-config (found version "0.29.2")
-- Found LIBOMPTARGET_DEP_LIBFFI: /usr/lib/x86_64-linux-gnu/libffi.so
-- OMPT target enabled
-- OpenMP tools dir in libomptarget: /data/myproject/build/build_libs/llvm-project/llvm/runtimes/runtimes-bins/openmp/runtime/src
-- LIBOMPTARGET: Building offloading runtime library libomptarget.
[100%] Building CXX object llvm-project/llvm/tools/llvm-reduce/CMakeFiles/llvm-reduce.dir/deltas/ReduceFunctionBodies.cpp.o
-- LIBOMPTARGET: Not building aarch64 NextGen offloading plugin: machine not found in the system.
-- LIBOMPTARGET: Building AMDGPU NextGen plugin for dlopened libhsa
-- LIBOMPTARGET: Not generating AMDGPU tests, no supported devices detected.
-- LIBOMPTARGET: Building CUDA NextGen offloading plugin.
-- LIBOMPTARGET: Building CUDA plugin linked against libcuda
-- LIBOMPTARGET: Not generating NVIDIA tests, no supported devices detected.
-- LIBOMPTARGET: Not building PPC64 NextGen offloading plugin: machine not found in the system.
-- LIBOMPTARGET: Not building PPC64le NextGen offloading plugin: machine not found in the system.
-- LIBOMPTARGET: Building x86_64 NextGen offloading plugin.
-- LIBOMPTARGET: Not building DeviceRTL. Missing clang: /data/myproject/build/build_libs/llvm-project/llvm/bin/clang, llvm-link: /data/myproject/build/build_libs/llvm-project/llvm/bin/llvm-link, opt: OPT_TOOL-NOTFOUND, or clang-offload-packager: /data/myproject/build/build_libs/llvm-project/llvm/bin/clang-offload-packager
-- LIBOMPTARGET: Building the llvm-omp-device-info tool
-- LIBOMPTARGET: Building the llvm-omp-kernel-replay tool
-- Looking for __atomic_load_1
[100%] Building CXX object llvm-project/llvm/tools/llvm-reduce/CMakeFiles/llvm-reduce.dir/deltas/ReduceFunctions.cpp.o
-- Looking for __atomic_load_1 - not found
-- Looking for __atomic_load_1 in atomic
-- Looking for __atomic_load_1 in atomic - found
-- Could NOT find Python3 (missing: Python3_INCLUDE_DIRS Development Development.Module Development.Embed) (found version "3.10.12")
-- Configuring done
CMake Error at CMakeLists.txt:248 (add_dependencies):
The dependency target "clang" of target "runtimes-test-depends" does not
exist.
CMake Error at /data/myproject/lib/llvm-project/llvm/cmake/modules/AddLLVM.cmake:1940 (add_dependencies):
The dependency target "clang" of target "check-runtimes" does not exist.
Call Stack (most recent call first):
/data/myproject/lib/llvm-project/llvm/cmake/modules/AddLLVM.cmake:1980 (add_lit_target)
CMakeLists.txt:252 (umbrella_lit_testsuite_end)
CMake Error at /data/myproject/lib/llvm-project/llvm/cmake/modules/AddLLVM.cmake:1940 (add_dependencies):
The dependency target "clang" of target "check-openmp" does not exist.
Call Stack (most recent call first):
/data/myproject/lib/llvm-project/llvm/cmake/modules/AddLLVM.cmake:2007 (add_lit_target)
/data/myproject/lib/llvm-project/openmp/cmake/OpenMPTesting.cmake:217 (add_lit_testsuite)
/data/myproject/lib/llvm-project/openmp/cmake/OpenMPTesting.cmake:240 (add_openmp_testsuite)
/data/myproject/lib/llvm-project/openmp/CMakeLists.txt:135 (construct_check_openmp_target)
CMake Error at /data/myproject/lib/llvm-project/llvm/cmake/modules/AddLLVM.cmake:1940 (add_dependencies):
The dependency target "clang" of target "check-libomp" does not exist.
Call Stack (most recent call first):
/data/myproject/lib/llvm-project/llvm/cmake/modules/AddLLVM.cmake:2007 (add_lit_target)
/data/myproject/lib/llvm-project/openmp/cmake/OpenMPTesting.cmake:225 (add_lit_testsuite)
/data/myproject/lib/llvm-project/openmp/runtime/test/CMakeLists.txt:44 (add_openmp_testsuite)
CMake Error at /data/myproject/lib/llvm-project/llvm/cmake/modules/AddLLVM.cmake:1940 (add_dependencies):
The dependency target "clang" of target "check-ompt" does not exist.
Call Stack (most recent call first):
/data/myproject/lib/llvm-project/llvm/cmake/modules/AddLLVM.cmake:2007 (add_lit_target)
/data/myproject/lib/llvm-project/openmp/cmake/OpenMPTesting.cmake:217 (add_lit_testsuite)
/data/myproject/lib/llvm-project/openmp/runtime/test/CMakeLists.txt:46 (add_openmp_testsuite)
CMake Error at /data/myproject/lib/llvm-project/llvm/cmake/modules/AddLLVM.cmake:1940 (add_dependencies):
The dependency target "clang" of target
"check-libomptarget-x86_64-pc-linux-gnu" does not exist.
Call Stack (most recent call first):
/data/myproject/lib/llvm-project/llvm/cmake/modules/AddLLVM.cmake:2007 (add_lit_target)
/data/myproject/lib/llvm-project/openmp/cmake/OpenMPTesting.cmake:225 (add_lit_testsuite)
/data/myproject/lib/llvm-project/openmp/libomptarget/test/CMakeLists.txt:23 (add_openmp_testsuite)
CMake Error at /data/myproject/lib/llvm-project/llvm/cmake/modules/AddLLVM.cmake:1940 (add_dependencies):
The dependency target "clang" of target
"check-libomptarget-x86_64-pc-linux-gnu-LTO" does not exist.
Call Stack (most recent call first):
/data/myproject/lib/llvm-project/llvm/cmake/modules/AddLLVM.cmake:2007 (add_lit_target)
/data/myproject/lib/llvm-project/openmp/cmake/OpenMPTesting.cmake:225 (add_lit_testsuite)
/data/myproject/lib/llvm-project/openmp/libomptarget/test/CMakeLists.txt:23 (add_openmp_testsuite)
CMake Error at /data/myproject/lib/llvm-project/llvm/cmake/modules/AddLLVM.cmake:1940 (add_dependencies):
The dependency target "clang" of target "check-libomptarget" does not
exist.
Call Stack (most recent call first):
/data/myproject/lib/llvm-project/llvm/cmake/modules/AddLLVM.cmake:2007 (add_lit_target)
/data/myproject/lib/llvm-project/openmp/cmake/OpenMPTesting.cmake:217 (add_lit_testsuite)
/data/myproject/lib/llvm-project/openmp/libomptarget/test/CMakeLists.txt:40 (add_openmp_testsuite)
CMake Error at /data/myproject/lib/llvm-project/llvm/cmake/modules/AddLLVM.cmake:1940 (add_dependencies):
The dependency target "clang" of target "check-libarcher" does not exist.
Call Stack (most recent call first):
/data/myproject/lib/llvm-project/llvm/cmake/modules/AddLLVM.cmake:2007 (add_lit_target)
/data/myproject/lib/llvm-project/openmp/cmake/OpenMPTesting.cmake:225 (add_lit_testsuite)
/data/myproject/lib/llvm-project/openmp/tools/archer/tests/CMakeLists.txt:38 (add_openmp_testsuite)
CMake Error at /data/myproject/lib/llvm-project/llvm/cmake/modules/AddLLVM.cmake:1940 (add_dependencies):
The dependency target "clang" of target "check-ompt-multiplex" does not
exist.
Call Stack (most recent call first):
/data/myproject/lib/llvm-project/llvm/cmake/modules/AddLLVM.cmake:2007 (add_lit_target)
/data/myproject/lib/llvm-project/openmp/cmake/OpenMPTesting.cmake:225 (add_lit_testsuite)
/data/myproject/lib/llvm-project/openmp/tools/multiplex/tests/CMakeLists.txt:17 (add_openmp_testsuite)
-- Generating done
CMake Generate step failed. Build files cannot be regenerated correctly.
I checked and confirmed that e.g. add_lit_target
requests clang as a dependency, yet am not sure why it can’t satisfy that dependency. In theory, the two ways of building should likely not produce different results.
tschuett August 17, 2023, 4:01pm 2
The recommended way of embedding is the opposite of your approach.
This isn’t what I’m trying to do, though, and for that I do believe I am following an approach I found recommended: [llvm-dev] Embedding llvm as a git submodule in Project
tschuett August 17, 2023, 5:10pm 4
Would a fork of the project + your code work for you?
I’m not sure I understand your question, please could you clarify?
tschuett August 18, 2023, 7:50pm 6
Instead of using LLVM as a git submodule, you could fork the LLVM monorepo and add your own code.