llvm
llvm copied to clipboard
Cannot build standalone clang due to missing DeviceConfigFile
Describe the bug
I am not able to build a standalone clang with my prebuilt llvm. These are the flags I use to build llvm:
cmakeFlags = [
"-DCMAKE_BUILD_TYPE=Release"
"-DLLVM_TARGETS_TO_BUILD=X86"
"-DLLVM_INSTALL_UTILS=ON"
"-DLLVM_INSTALL_BINUTILS_SYMLINKS=ON"
# intrinsics
"-DLLVMGenXIntrinsics_SOURCE_DIR=${pins.vc-intrinsics}"
# tests
"-DLLVM_INCLUDE_TESTS=OFF"
"-DLLVM_BUILD_TESTS=OFF"
"-DLLVM_ENABLE_ASSERTIONS=OFF"
# docs
"-DLLVM_ENABLE_DOXYGEN=OFF"
"-DLLVM_ENABLE_SPHINX=OFF"
# spirv
"-DLLVM_EXTERNAL_PROJECTS=llvm-spirv"
"-DLLVM_ENABLE_PROJECTS=llvm-spirv"
"-DLLVM_EXTERNAL_SPIRV_HEADERS_SOURCE_DIR=${pins.spirv-headers}"
"-DLLVM_EXTERNAL_LLVM_SPIRV_SOURCE_DIR=/build/source/llvm-spirv"
];
And these are the flags for clang:
cmakeFlags = [
"-DCMAKE_BUILD_TYPE=Release"
"-DLLVM_TARGETS_TO_BUILD=X86"
"-DLLVM_INCLUDE_TESTS=OFF"
"-DLLVM_ENABLE_ASSERTIONS=OFF"
];
Here is the error message I am getting:
Call Stack (most recent call first):
cmake/modules/CMakeLists.txt:59 (extend_path)
-- Configuring done (8.6s)
CMake Error at /nix/store/l5mjyks0xhmr9dyjh0wqdsmmb4by56wn-intel-llvm-18.0.0-unstable-2024-04-12/lib/cmake/llvm/AddLLV>
The dependency target "DeviceConfigFile" of target "obj.clangDriver" does
not exist.
Call Stack (most recent call first):
cmake/modules/AddClang.cmake:106 (llvm_add_library)
lib/Driver/CMakeLists.txt:24 (add_clang_library)
CMake Error at /nix/store/l5mjyks0xhmr9dyjh0wqdsmmb4by56wn-intel-llvm-18.0.0-unstable-2024-04-12/lib/cmake/llvm/AddLLV>
The dependency target "DeviceConfigFile" of target "clangDriver" does not
exist.
Call Stack (most recent call first):
cmake/modules/AddClang.cmake:106 (llvm_add_library)
lib/Driver/CMakeLists.txt:24 (add_clang_library)
With my very limited knowledge I am suspecting something is going wrong with clang's tablegen ?
To reproduce
No response
Environment
No response
Additional context
I am trying to package intel llvm for Nixos. I have already sucessfully built llvm with inbuilt clang etc. with the following derivation:
Edit: This is actually an edited version in the original I had also clang enabled
{
callPackage,
fetchFromGitHub,
level-zero,
boost,
ocl-icd,
opencl-headers,
}: let
pins = import ../pins.nix {
inherit fetchFromGitHub;
};
in
(callPackage ../base.nix {
name = "llvm";
cmakeFlags = [
"-DCMAKE_BUILD_TYPE=Release"
"-DLLVM_ENABLE_ASSERTIONS=OFF"
"-DLLVM_TARGETS_TO_BUILD=X86"
"-DLLVM_EXTERNAL_PROJECTS=sycl;sycl-fusion;llvm-spirv;opencl;xpti;xptifw"
"-DLLVM_EXTERNAL_SYCL_SOURCE_DIR=/build/source/sycl"
"-DLLVM_EXTERNAL_LLVM_SPIRV_SOURCE_DIR=/build/source/llvm-spirv"
"-DLLVM_EXTERNAL_XPTI_SOURCE_DIR=/build/source/xpti"
"-DXPTI_SOURCE_DIR=/build/source/xpti"
"-DLLVM_EXTERNAL_XPTIFW_SOURCE_DIR=/build/source/xptifw"
# "-DLLVM_EXTERNAL_LIBDEVICE_SOURCE_DIR=/build/source/libdevice"
"-DLLVM_EXTERNAL_SYCL_FUSION_SOURCE_DIR=/build/source/sycl-fusion"
# "-DLLVM_ENABLE_PROJECTS=clang;lld;sycl;sycl-fusion;llvm-spirv;opencl;xpti;xptifw"
"-DLLVM_ENABLE_PROJECTS=sycl;sycl-fusion;llvm-spirv;opencl;xpti;xptifw"
"-DLIBCLC_TARGETS_TO_BUILD=''"
"-DLIBCLC_GENERATE_REMANGLED_VARIANTS=ON"
"-DSYCL_BUILD_PI_HIP_PLATFORM=''"
"-DLLVM_BUILD_TOOLS=ON"
"-DSYCL_ENABLE_WERROR=OFF"
"-DSYCL_INCLUDE_TESTS=ON"
"-DLLVM_ENABLE_DOXYGEN=OFF"
"-DLLVM_ENABLE_SPHINX=OFF"
"-DBUILD_SHARED_LIBS=ON"
"-DSYCL_ENABLE_XPTI_TRACING=ON"
# "-DLLVM_ENABLE_LLD=ON"
"-DLLVM_ENABLE_LLD=OFF"
"-DXPTI_ENABLE_WERROR=OFF"
# "-DSYCL_USE_LIBCXX=ON"
# "-DSYCL_LIBCXX_INCLUDE_PATH=${libcxx.dev}/include/c++/v1"
# "-DSYCL_LIBCXX_LIBRARY_PATH=${lib.makeLibraryPath [libcxx]}"
"-DSYCL_BUILD_PI_ESIMD_CPU=OFF"
# "-DSYCL_CLANG_EXTRA_FLAGS=''"
"-DSYCL_ENABLE_PLUGINS=opencl;level_zero;"
"-DSYCL_ENABLE_KERNEL_FUSION=ON"
"-DSYCL_ENABLE_MAJOR_RELEASE_PREVIEW_LIB=ON"
"-DLEVEL_ZERO_INCLUDE_DIR=${level-zero}/include/level_zero"
"-DLEVEL_ZERO_LIBRARY=${level-zero}/lib/libze_loader.so"
"-DSYCL_PI_TESTS=OFF"
"-DSYCL_PI_UR_USE_FETCH_CONTENT=OFF"
"-DSYCL_PI_UR_SOURCE_DIR=${pins.unified-runtime}"
"-DLLVMGenXIntrinsics_SOURCE_DIR=${pins.vc-intrinsics}"
"-DOpenCL_HEADERS=${pins.ocl-headers}"
"-DOpenCL_LIBRARY_SRC=${pins.ocl-loader}"
"-DBOOST_MP11_SOURCE_DIR=${pins.mp11}"
"-DBOOST_MODULE_SRC_DIR=${boost.dev}"
"-DLLVM_EXTERNAL_SPIRV_HEADERS_SOURCE_DIR=${pins.spirv-headers}"
"-DUR_OPENCL_INCLUDE_DIR=${opencl-headers}/include/CL"
"-DOpenCL-ICD=${ocl-icd}/lib/libOpenCL.so"
];
})
.overrideAttrs (_: {
# https://github.com/intel/llvm/issues/6937
buildPhase = ''
cmake --build /build/source/llvm/build --parallel $NIX_BUILD_CORES --target=deploy-sycl-toolchain
'';
})
But I am now trying to modularize it more.
Hi @MordragT! Do you know if it is using an upstream version of clang-tblgen (CLANG_TABLEGEN in CMakeCache.txt may tell us)? The DeviceConfigFile.inc configuration uses a special option (-gen-dynamic-tables) that is not in upstream, but we usually rely on building and using our own clang-tblgen executable as part of the build.
@MordragT hi! Any updates here?
Hey I just tried it again. I haven't updated the repo because I then have to manually update also all the fetch-contents occurences to point to the correct source dirs (nix cannot use fetch-content), but I have taken a look at the CMakeCache.txt:
CLANG_TABLEGEN:STRING=clang-tblgen
LLVM_PARALLEL_TABLEGEN_JOBS:STRING=
LLVM_TABLEGEN_EXE:FILEPATH=/nix/store/rzib4gkiyp8gkhs46fddw6003qvnx6rn-intel-llvm-19.0.0-unstable-2024-04-15/bin/llvm-tblgen
CLANG_TABLEGEN_EXE:INTERNAL=clang-tblgen
This is everything I could find about table-gen. just for context this is the version I am currently trying to build:
pname = "intel-${name}";
version = "19.0.0-unstable-2024-04-15";
src = fetchFromGitHub {
rev = "06bd6bca82e1ba93e2e233cac9b86631e6c2d958";
owner = "intel";
repo = "llvm";
hash = "sha256-o3QERO8DRnHyQ84WBuDvj46qJT4ZVB3A94QHVIrriIU=";
};
When I find the time I will try it against the current master.
I don't think that this has anything to do with tablegen, but most likely it was an issue with our cmake files, i.e. actual missed dependency.
If my assumption is correct, then #13328 likely fixed that. @MordragT, could you please check if that change helps you? That's a one-liner, so full update shouldn't be required, you can just apply it locally or do a cherry-pick
@AlexeySachkov pr #13328 does solve that error thanks.