HIP: CMake does not search multiarch dirs for hip-lang-config.cmake
There is a mismatch between where CMake looks for hip-lang-config.cmake
and where that file is installed on Debian and Debian-derived distros.
What was done
In a fresh Ubuntu 23.04 container:
apt-get -y update
apt-get -y install hipcc cmake build-essential
cat << 'EOF' > main.hip
#include <hip/hip_runtime.h>
int main() {
return 0;
}
EOF
cat << 'EOF' > CMakeLists.txt
cmake_minimum_required(VERSION 3.22)
project(example LANGUAGES HIP)
add_executable(ex main.hip)
EOF
HIPFLAGS="--rocm-path=/usr --rocm-device-lib-path=/usr/lib/x86_64-linux-gnu/amdgcn/bitcode" \
HIPCXX=clang++-15 cmake -S. -Bbuild --debug-output
What was seen
-- The HIP compiler identification is Clang 15.0.7
Called from: [3] /usr/share/cmake-3.25/Modules/CMakeDetermineCompilerId.cmake
[2] /usr/share/cmake-3.25/Modules/CMakeDetermineHIPCompiler.cmake
[1] /root/CMakeLists.txt
CMake Error at /usr/share/cmake-3.25/Modules/CMakeDetermineHIPCompiler.cmake:106 (message):
The ROCm root directory:
/usr
does not contain the HIP runtime CMake package, expected at:
/usr/lib/cmake/hip-lang/hip-lang-config.cmake
Call Stack (most recent call first):
CMakeLists.txt:2 (project)
Called from: [2] /usr/share/cmake-3.25/Modules/CMakeDetermineHIPCompiler.cmake
[1] /root/CMakeLists.txt
-- Configuring incomplete, errors occurred!
See also "/root/build/CMakeFiles/CMakeOutput.log".
Attached: CMakeOutput.log
I used the distro cmake in the example above for simplicity, but the behaviour is unchanged on cmake-3.26.0-rc5-linux-x86_64.
Discussion
The package libamdhip64-dev
provides /usr/lib/x86_64-linux-gnu/cmake/hip-lang/hip-lang-config.cmake
. However, the x86_64-linux-gnu
subdirectory is not searched for two reasons:
- The path is hardcoded to
lib/cmake
in these three places:
- Modules/CMakeDetermineHIPCompiler.cmake:105
- Modules/CMakeDetermineHIPCompiler.cmake:110
- Modules/CMakeHIPInformation.cmake:145
- The HIP library architecture does not seem to be set before cmake tries to include
hip-lang-config.cmake
. This also prevents ROCm components in/usr/lib/x86_64-linux-gnu
such as comgr and the rocm-device-libs from being found byfind_dependency
.
This issue has also been filed as Debian Bug 1031799. Ubuntu 23.04 is convenient for illustrating this problem because the relevant packages are now all frozen in preparation for release, whereas on Debian Testing or Unstable these packages are still somewhat in flux.