1From 9e4e58b647c17c5fa098c8a74e221f88d3cb1a43 Mon Sep 17 00:00:00 2001
2From: Luna Nova <git@lunnova.dev>
3Date: Sun, 24 Aug 2025 07:41:30 -0700
4Subject: [PATCH] [AMD] Search HIP_PATH, hipconfig, and ROCM_PATH for
5 libamdhip64
6
7Search for libamdhip64 from HIP_PATH env var, hipconfig --path output,
8and ROCM_PATH before looking in system-wide ldconfig or /opt/rocm.
9
10The system-wide ROCm path isn't guaranteed to be where the ROCm
11install we're building against is located, so follow typical ROCm
12lib behavior and look under env paths first.
13
14This is especially important for non-FHS distros like NixOS
15where /opt/rocm never exists, but may be useful in more
16typical distros if multiple ROCm installs are present
17to ensure the right libamdhip64.so is picked up.
18---
19 third_party/amd/backend/driver.py | 28 ++++++++++++++++++++++++++++
20 1 file changed, 28 insertions(+)
21
22diff --git a/third_party/amd/backend/driver.py b/third_party/amd/backend/driver.py
23index af8e1a5c8097..57b0f7388c60 100644
24--- a/third_party/amd/backend/driver.py
25+++ b/third_party/amd/backend/driver.py
26@@ -110,6 +110,34 @@ def _get_path_to_hip_runtime_dylib():
27 return f
28 paths.append(f)
29
30+ # HIP_PATH should point to HIP SDK root if set
31+ env_hip_path = os.getenv("HIP_PATH")
32+ if env_hip_path:
33+ hip_lib_path = os.path.join(env_hip_path, "lib", lib_name)
34+ if os.path.exists(hip_lib_path):
35+ return hip_lib_path
36+ paths.append(hip_lib_path)
37+
38+ # if available, `hipconfig --path` prints the HIP SDK root
39+ try:
40+ hip_root = subprocess.check_output(["hipconfig", "--path"]).decode().strip()
41+ if hip_root:
42+ hip_lib_path = os.path.join(hip_root, "lib", lib_name)
43+ if os.path.exists(hip_lib_path):
44+ return hip_lib_path
45+ paths.append(hip_lib_path)
46+ except (subprocess.CalledProcessError, FileNotFoundError):
47+ # hipconfig may not be available
48+ pass
49+
50+ # ROCm lib dir based on env var
51+ env_rocm_path = os.getenv("ROCM_PATH")
52+ if env_rocm_path:
53+ rocm_lib_path = os.path.join(env_rocm_path, "lib", lib_name)
54+ if os.path.exists(rocm_lib_path):
55+ return rocm_lib_path
56+ paths.append(rocm_lib_path)
57+
58 # Afterwards try to search the loader dynamic library resolution paths.
59 libs = subprocess.check_output(["/sbin/ldconfig", "-p"]).decode(errors="ignore")
60 # each line looks like the following: