11from __future__ import annotations
22
33import os
4+ import sys
45import threading
56from ctypes import *
67from pathlib import Path
78
9+ # Example ROCM_SMI_LIB_PATH
10+ # - /opt/dtk-24.04.3/rocm_smi/lib
11+ # - /opt/rocm/rocm_smi/lib
12+ rocmcore_lib_path = os .getenv ("ROCM_CORE_LIB_PATH" )
13+ if not rocmcore_lib_path :
14+ # Example ROCM_PATH/ROCM_HOME
15+ # - /opt/dtk-24.04.3
16+ # - /opt/rocm
17+ rocm_path = Path (os .getenv ("ROCM_HOME" , os .getenv ("ROCM_PATH" ) or "/opt/rocm" ))
18+ rocmcore_lib_path = str (rocm_path / "lib" )
19+ else :
20+ rocm_path = Path (
21+ os .getenv (
22+ "ROCM_HOME" ,
23+ os .getenv ("ROCM_PATH" ) or str (Path (rocmcore_lib_path ).parent .parent ),
24+ )
25+ )
26+
27+ rocmcore_lib_loc = Path (rocmcore_lib_path ) / "librocm-core.so"
28+
829## Lib loading ##
930rocmcoreLib = None
1031libLoadLock = threading .Lock ()
1132
12- if rocmcoreLib is None :
13- # Example ROCM_SMI_LIB_PATH
14- # - /opt/dtk-24.04.3/rocm_smi/lib
15- # - /opt/rocm/rocm_smi/lib
16- rocmcore_lib_path = os .getenv ("ROCM_CORE_LIB_PATH" )
17- if not rocmcore_lib_path :
18- # Example ROCM_PATH/ROCM_HOME
19- # - /opt/dtk-24.04.3
20- # - /opt/rocm
21- rocm_path = Path (os .getenv ("ROCM_HOME" , os .getenv ("ROCM_PATH" ) or "/opt/rocm" ))
22- rocmcore_lib_path = str (rocm_path / "lib" )
23- else :
24- rocm_path = Path (
25- os .getenv (
26- "ROCM_HOME" ,
27- os .getenv ("ROCM_PATH" ) or str (Path (rocmcore_lib_path ).parent .parent ),
28- )
29- )
3033
31- rocmcore_lib_loc = Path (rocmcore_lib_path ) / "librocm-core.so"
32- if rocmcore_lib_loc .exists ():
34+ def _LoadRocmCoreLibrary ():
35+ """
36+ Load the library if it isn't loaded already.
37+ """
38+ global rocmcoreLib
39+
40+ if rocmcoreLib is None :
41+ # lock to ensure only one caller loads the library
3342 libLoadLock .acquire ()
3443 try :
35- if not rocmcoreLib :
36- rocmcoreLib = CDLL (rocmcore_lib_loc )
37- except OSError :
38- pass
44+ # ensure the library still isn't loaded
45+ if (
46+ rocmcoreLib is None
47+ and not sys .platform .startswith ("win" )
48+ and rocmcore_lib_loc .is_file ()
49+ ):
50+ try :
51+ rocmcoreLib = CDLL (str (rocmcore_lib_loc ))
52+ except OSError :
53+ pass
3954 finally :
55+ # lock is always released
4056 libLoadLock .release ()
4157
4258
@@ -59,6 +75,8 @@ def getROCmVersion() -> str | None:
5975 except OSError :
6076 continue
6177
78+ _LoadRocmCoreLibrary ()
79+
6280 if rocmcoreLib :
6381 try :
6482 major = c_uint32 ()
0 commit comments