diff --git a/lib/spack/spack/build_systems/cached_cmake.py b/lib/spack/spack/build_systems/cached_cmake.py index 63bc2f36194..f3a365e264e 100644 --- a/lib/spack/spack/build_systems/cached_cmake.py +++ b/lib/spack/spack/build_systems/cached_cmake.py @@ -276,30 +276,18 @@ def initconfig_hardware_entries(self): entries.append("# ROCm") entries.append("#------------------{0}\n".format("-" * 30)) - if spec.satisfies("^blt@0.7:"): - rocm_root = os.path.dirname(spec["llvm-amdgpu"].prefix) - entries.append(cmake_cache_path("ROCM_PATH", rocm_root)) - else: - # Explicitly setting HIP_ROOT_DIR may be a patch that is no longer necessary - entries.append(cmake_cache_path("HIP_ROOT_DIR", "{0}".format(spec["hip"].prefix))) - llvm_bin = spec["llvm-amdgpu"].prefix.bin - llvm_prefix = spec["llvm-amdgpu"].prefix - # Some ROCm systems seem to point to //rocm-/ and - # others point to //rocm-/llvm - if os.path.basename(os.path.normpath(llvm_prefix)) != "llvm": - llvm_bin = os.path.join(llvm_prefix, "llvm/bin/") - entries.append( - cmake_cache_filepath( - "CMAKE_HIP_COMPILER", os.path.join(llvm_bin, "amdclang++") - ) - ) + rocm_root = os.path.dirname(spec["llvm-amdgpu"].prefix) + entries.append(cmake_cache_path("ROCM_PATH", rocm_root)) archs = self.spec.variants["amdgpu_target"].value if archs[0] != "none": arch_str = ";".join(archs) entries.append(cmake_cache_string("CMAKE_HIP_ARCHITECTURES", arch_str)) - entries.append(cmake_cache_string("AMDGPU_TARGETS", arch_str)) - entries.append(cmake_cache_string("GPU_TARGETS", arch_str)) + + llvm_bin = spec["llvm-amdgpu"].prefix.bin + entries.append( + cmake_cache_filepath("CMAKE_HIP_COMPILER", os.path.join(llvm_bin, "amdclang++")) + ) if spec.satisfies("%gcc"): entries.append( @@ -308,6 +296,15 @@ def initconfig_hardware_entries(self): ) ) + # Extra definitions that might be required in other cases + if not spec.satisfies("^blt"): + entries.append(cmake_cache_path("HIP_ROOT_DIR", "{0}".format(spec["hip"].prefix))) + + if archs[0] != "none": + arch_str = ";".join(archs) + entries.append(cmake_cache_string("AMDGPU_TARGETS", arch_str)) + entries.append(cmake_cache_string("GPU_TARGETS", arch_str)) + return entries def std_initconfig_entries(self):