Coverage for cuda / bindings / _internal / nvjitlink.pyx: 64%

228 statements  

« prev     ^ index     » next       coverage.py v7.13.0, created at 2025-12-10 01:19 +0000

1# SPDX-FileCopyrightText: Copyright (c) 2024-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. 

2# 

3# SPDX-License-Identifier: LicenseRef-NVIDIA-SOFTWARE-LICENSE 

4# 

5# This code was automatically generated across versions from 12.0.1 to 13.1.0. Do not modify it directly. 

6  

7from libc.stdint cimport intptr_t, uintptr_t 

8  

9import threading 

10from .utils import FunctionNotFoundError, NotSupportedError 

11  

12from cuda.pathfinder import load_nvidia_dynamic_lib 

13  

14  

15############################################################################### 

16# Extern 

17############################################################################### 

18  

19# You must 'from .utils import NotSupportedError' before using this template 

20  

21cdef extern from "<dlfcn.h>" nogil: 

22 void* dlopen(const char*, int) 

23 char* dlerror() 

24 void* dlsym(void*, const char*) 

25 int dlclose(void*) 

26  

27 enum: 

28 RTLD_LAZY 

29 RTLD_NOW 

30 RTLD_GLOBAL 

31 RTLD_LOCAL 

32  

33 const void* RTLD_DEFAULT 'RTLD_DEFAULT' 

34  

35cdef int get_cuda_version(): 

36 cdef void* handle = NULL 

37 cdef int err, driver_ver = 0 

38  

39 # Load driver to check version 

40 handle = dlopen('libcuda.so.1', RTLD_NOW | RTLD_GLOBAL) 

41 if handle == NULL: 

42 err_msg = dlerror() 

43 raise NotSupportedError(f'CUDA driver is not found ({err_msg.decode()})') 

44 cuDriverGetVersion = dlsym(handle, "cuDriverGetVersion") 

45 if cuDriverGetVersion == NULL: 

46 raise RuntimeError('Did not find cuDriverGetVersion symbol in libcuda.so.1') 

47 err = (<int (*)(int*) noexcept nogil>cuDriverGetVersion)(&driver_ver) 

48 if err != 0: 

49 raise RuntimeError(f'cuDriverGetVersion returned error code {err}') 

50  

51 return driver_ver 

52  

53  

54  

55############################################################################### 

56# Wrapper init 

57############################################################################### 

58  

59cdef object __symbol_lock = threading.Lock() 

60cdef bint __py_nvjitlink_init = False 

61  

62cdef void* __nvJitLinkCreate = NULL 

63cdef void* __nvJitLinkDestroy = NULL 

64cdef void* __nvJitLinkAddData = NULL 

65cdef void* __nvJitLinkAddFile = NULL 

66cdef void* __nvJitLinkComplete = NULL 

67cdef void* __nvJitLinkGetLinkedCubinSize = NULL 

68cdef void* __nvJitLinkGetLinkedCubin = NULL 

69cdef void* __nvJitLinkGetLinkedPtxSize = NULL 

70cdef void* __nvJitLinkGetLinkedPtx = NULL 

71cdef void* __nvJitLinkGetErrorLogSize = NULL 

72cdef void* __nvJitLinkGetErrorLog = NULL 

73cdef void* __nvJitLinkGetInfoLogSize = NULL 

74cdef void* __nvJitLinkGetInfoLog = NULL 

75cdef void* __nvJitLinkVersion = NULL 

76  

77  

78cdef void* load_library() except* with gil: 

79 cdef uintptr_t handle = load_nvidia_dynamic_lib("nvJitLink")._handle_uint 

80 return <void*>handle 

81  

82  

83cdef int _init_nvjitlink() except -1 nogil: 

84 global __py_nvjitlink_init 

85  

86 cdef void* handle = NULL 

87  

88 with gil, __symbol_lock: 

89 # Recheck the flag after obtaining the locks 

90 if __py_nvjitlink_init: 

91 return 0 

92  

93 # Load function 

94 global __nvJitLinkCreate 

95 __nvJitLinkCreate = dlsym(RTLD_DEFAULT, 'nvJitLinkCreate') 

96 if __nvJitLinkCreate == NULL: 

97 if handle == NULL: 

98 handle = load_library() 

99 __nvJitLinkCreate = dlsym(handle, 'nvJitLinkCreate') 

100  

101 global __nvJitLinkDestroy 

102 __nvJitLinkDestroy = dlsym(RTLD_DEFAULT, 'nvJitLinkDestroy') 

103 if __nvJitLinkDestroy == NULL: 

104 if handle == NULL: 

105 handle = load_library() 

106 __nvJitLinkDestroy = dlsym(handle, 'nvJitLinkDestroy') 

107  

108 global __nvJitLinkAddData 

109 __nvJitLinkAddData = dlsym(RTLD_DEFAULT, 'nvJitLinkAddData') 

110 if __nvJitLinkAddData == NULL: 

111 if handle == NULL: 

112 handle = load_library() 

113 __nvJitLinkAddData = dlsym(handle, 'nvJitLinkAddData') 

114  

115 global __nvJitLinkAddFile 

116 __nvJitLinkAddFile = dlsym(RTLD_DEFAULT, 'nvJitLinkAddFile') 

117 if __nvJitLinkAddFile == NULL: 

118 if handle == NULL: 

119 handle = load_library() 

120 __nvJitLinkAddFile = dlsym(handle, 'nvJitLinkAddFile') 

121  

122 global __nvJitLinkComplete 

123 __nvJitLinkComplete = dlsym(RTLD_DEFAULT, 'nvJitLinkComplete') 

124 if __nvJitLinkComplete == NULL: 

125 if handle == NULL: 

126 handle = load_library() 

127 __nvJitLinkComplete = dlsym(handle, 'nvJitLinkComplete') 

128  

129 global __nvJitLinkGetLinkedCubinSize 

130 __nvJitLinkGetLinkedCubinSize = dlsym(RTLD_DEFAULT, 'nvJitLinkGetLinkedCubinSize') 

131 if __nvJitLinkGetLinkedCubinSize == NULL: 

132 if handle == NULL: 

133 handle = load_library() 

134 __nvJitLinkGetLinkedCubinSize = dlsym(handle, 'nvJitLinkGetLinkedCubinSize') 

135  

136 global __nvJitLinkGetLinkedCubin 

137 __nvJitLinkGetLinkedCubin = dlsym(RTLD_DEFAULT, 'nvJitLinkGetLinkedCubin') 

138 if __nvJitLinkGetLinkedCubin == NULL: 

139 if handle == NULL: 

140 handle = load_library() 

141 __nvJitLinkGetLinkedCubin = dlsym(handle, 'nvJitLinkGetLinkedCubin') 

142  

143 global __nvJitLinkGetLinkedPtxSize 

144 __nvJitLinkGetLinkedPtxSize = dlsym(RTLD_DEFAULT, 'nvJitLinkGetLinkedPtxSize') 

145 if __nvJitLinkGetLinkedPtxSize == NULL: 

146 if handle == NULL: 

147 handle = load_library() 

148 __nvJitLinkGetLinkedPtxSize = dlsym(handle, 'nvJitLinkGetLinkedPtxSize') 

149  

150 global __nvJitLinkGetLinkedPtx 

151 __nvJitLinkGetLinkedPtx = dlsym(RTLD_DEFAULT, 'nvJitLinkGetLinkedPtx') 

152 if __nvJitLinkGetLinkedPtx == NULL: 

153 if handle == NULL: 

154 handle = load_library() 

155 __nvJitLinkGetLinkedPtx = dlsym(handle, 'nvJitLinkGetLinkedPtx') 

156  

157 global __nvJitLinkGetErrorLogSize 

158 __nvJitLinkGetErrorLogSize = dlsym(RTLD_DEFAULT, 'nvJitLinkGetErrorLogSize') 

159 if __nvJitLinkGetErrorLogSize == NULL: 

160 if handle == NULL: 

161 handle = load_library() 

162 __nvJitLinkGetErrorLogSize = dlsym(handle, 'nvJitLinkGetErrorLogSize') 

163  

164 global __nvJitLinkGetErrorLog 

165 __nvJitLinkGetErrorLog = dlsym(RTLD_DEFAULT, 'nvJitLinkGetErrorLog') 

166 if __nvJitLinkGetErrorLog == NULL: 

167 if handle == NULL: 

168 handle = load_library() 

169 __nvJitLinkGetErrorLog = dlsym(handle, 'nvJitLinkGetErrorLog') 

170  

171 global __nvJitLinkGetInfoLogSize 

172 __nvJitLinkGetInfoLogSize = dlsym(RTLD_DEFAULT, 'nvJitLinkGetInfoLogSize') 

173 if __nvJitLinkGetInfoLogSize == NULL: 

174 if handle == NULL: 

175 handle = load_library() 

176 __nvJitLinkGetInfoLogSize = dlsym(handle, 'nvJitLinkGetInfoLogSize') 

177  

178 global __nvJitLinkGetInfoLog 

179 __nvJitLinkGetInfoLog = dlsym(RTLD_DEFAULT, 'nvJitLinkGetInfoLog') 

180 if __nvJitLinkGetInfoLog == NULL: 

181 if handle == NULL: 

182 handle = load_library() 

183 __nvJitLinkGetInfoLog = dlsym(handle, 'nvJitLinkGetInfoLog') 

184  

185 global __nvJitLinkVersion 

186 __nvJitLinkVersion = dlsym(RTLD_DEFAULT, 'nvJitLinkVersion') 

187 if __nvJitLinkVersion == NULL: 

188 if handle == NULL: 

189 handle = load_library() 

190 __nvJitLinkVersion = dlsym(handle, 'nvJitLinkVersion') 

191  

192 __py_nvjitlink_init = True 

193 return 0 

194  

195  

196cdef inline int _check_or_init_nvjitlink() except -1 nogil: 

197 if __py_nvjitlink_init: 

198 return 0 

199  

200 return _init_nvjitlink() 

201  

202cdef dict func_ptrs = None 

203  

204  

205cpdef dict _inspect_function_pointers(): 

206 global func_ptrs 

207 if func_ptrs is not None: 

208 return func_ptrs 

209  

210 _check_or_init_nvjitlink() 

211 cdef dict data = {} 

212  

213 global __nvJitLinkCreate 

214 data["__nvJitLinkCreate"] = <intptr_t>__nvJitLinkCreate 

215  

216 global __nvJitLinkDestroy 

217 data["__nvJitLinkDestroy"] = <intptr_t>__nvJitLinkDestroy 

218  

219 global __nvJitLinkAddData 

220 data["__nvJitLinkAddData"] = <intptr_t>__nvJitLinkAddData 

221  

222 global __nvJitLinkAddFile 

223 data["__nvJitLinkAddFile"] = <intptr_t>__nvJitLinkAddFile 

224  

225 global __nvJitLinkComplete 

226 data["__nvJitLinkComplete"] = <intptr_t>__nvJitLinkComplete 

227  

228 global __nvJitLinkGetLinkedCubinSize 

229 data["__nvJitLinkGetLinkedCubinSize"] = <intptr_t>__nvJitLinkGetLinkedCubinSize 

230  

231 global __nvJitLinkGetLinkedCubin 

232 data["__nvJitLinkGetLinkedCubin"] = <intptr_t>__nvJitLinkGetLinkedCubin 

233  

234 global __nvJitLinkGetLinkedPtxSize 

235 data["__nvJitLinkGetLinkedPtxSize"] = <intptr_t>__nvJitLinkGetLinkedPtxSize 

236  

237 global __nvJitLinkGetLinkedPtx 

238 data["__nvJitLinkGetLinkedPtx"] = <intptr_t>__nvJitLinkGetLinkedPtx 

239  

240 global __nvJitLinkGetErrorLogSize 

241 data["__nvJitLinkGetErrorLogSize"] = <intptr_t>__nvJitLinkGetErrorLogSize 

242  

243 global __nvJitLinkGetErrorLog 

244 data["__nvJitLinkGetErrorLog"] = <intptr_t>__nvJitLinkGetErrorLog 

245  

246 global __nvJitLinkGetInfoLogSize 

247 data["__nvJitLinkGetInfoLogSize"] = <intptr_t>__nvJitLinkGetInfoLogSize 

248  

249 global __nvJitLinkGetInfoLog 

250 data["__nvJitLinkGetInfoLog"] = <intptr_t>__nvJitLinkGetInfoLog 

251  

252 global __nvJitLinkVersion 

253 data["__nvJitLinkVersion"] = <intptr_t>__nvJitLinkVersion 

254  

255 func_ptrs = data 

256 return data 

257  

258  

259cpdef _inspect_function_pointer(str name): 

260 global func_ptrs 

261 if func_ptrs is None: 

262 func_ptrs = _inspect_function_pointers() 

263 return func_ptrs[name] 

264  

265  

266############################################################################### 

267# Wrapper functions 

268############################################################################### 

269  

270cdef nvJitLinkResult _nvJitLinkCreate(nvJitLinkHandle* handle, uint32_t numOptions, const char** options) except?_NVJITLINKRESULT_INTERNAL_LOADING_ERROR nogil: 

271 global __nvJitLinkCreate 

272 _check_or_init_nvjitlink() 

273 if __nvJitLinkCreate == NULL: 

274 with gil: 

275 raise FunctionNotFoundError("function nvJitLinkCreate is not found") 

276 return (<nvJitLinkResult (*)(nvJitLinkHandle*, uint32_t, const char**) noexcept nogil>__nvJitLinkCreate)( 

277 handle, numOptions, options) 

278  

279  

280cdef nvJitLinkResult _nvJitLinkDestroy(nvJitLinkHandle* handle) except?_NVJITLINKRESULT_INTERNAL_LOADING_ERROR nogil: 

281 global __nvJitLinkDestroy 

282 _check_or_init_nvjitlink() 

283 if __nvJitLinkDestroy == NULL: 

284 with gil: 

285 raise FunctionNotFoundError("function nvJitLinkDestroy is not found") 

286 return (<nvJitLinkResult (*)(nvJitLinkHandle*) noexcept nogil>__nvJitLinkDestroy)( 

287 handle) 

288  

289  

290cdef nvJitLinkResult _nvJitLinkAddData(nvJitLinkHandle handle, nvJitLinkInputType inputType, const void* data, size_t size, const char* name) except?_NVJITLINKRESULT_INTERNAL_LOADING_ERROR nogil: 

291 global __nvJitLinkAddData 

292 _check_or_init_nvjitlink() 

293 if __nvJitLinkAddData == NULL: 

294 with gil: 

295 raise FunctionNotFoundError("function nvJitLinkAddData is not found") 

296 return (<nvJitLinkResult (*)(nvJitLinkHandle, nvJitLinkInputType, const void*, size_t, const char*) noexcept nogil>__nvJitLinkAddData)( 

297 handle, inputType, data, size, name) 

298  

299  

300cdef nvJitLinkResult _nvJitLinkAddFile(nvJitLinkHandle handle, nvJitLinkInputType inputType, const char* fileName) except?_NVJITLINKRESULT_INTERNAL_LOADING_ERROR nogil: 

301 global __nvJitLinkAddFile 

302 _check_or_init_nvjitlink() 

303 if __nvJitLinkAddFile == NULL: 

304 with gil: 

305 raise FunctionNotFoundError("function nvJitLinkAddFile is not found") 

306 return (<nvJitLinkResult (*)(nvJitLinkHandle, nvJitLinkInputType, const char*) noexcept nogil>__nvJitLinkAddFile)( 

307 handle, inputType, fileName) 

308  

309  

310cdef nvJitLinkResult _nvJitLinkComplete(nvJitLinkHandle handle) except?_NVJITLINKRESULT_INTERNAL_LOADING_ERROR nogil: 

311 global __nvJitLinkComplete 

312 _check_or_init_nvjitlink() 

313 if __nvJitLinkComplete == NULL: 

314 with gil: 

315 raise FunctionNotFoundError("function nvJitLinkComplete is not found") 

316 return (<nvJitLinkResult (*)(nvJitLinkHandle) noexcept nogil>__nvJitLinkComplete)( 

317 handle) 

318  

319  

320cdef nvJitLinkResult _nvJitLinkGetLinkedCubinSize(nvJitLinkHandle handle, size_t* size) except?_NVJITLINKRESULT_INTERNAL_LOADING_ERROR nogil: 

321 global __nvJitLinkGetLinkedCubinSize 

322 _check_or_init_nvjitlink() 

323 if __nvJitLinkGetLinkedCubinSize == NULL: 

324 with gil: 

325 raise FunctionNotFoundError("function nvJitLinkGetLinkedCubinSize is not found") 

326 return (<nvJitLinkResult (*)(nvJitLinkHandle, size_t*) noexcept nogil>__nvJitLinkGetLinkedCubinSize)( 

327 handle, size) 

328  

329  

330cdef nvJitLinkResult _nvJitLinkGetLinkedCubin(nvJitLinkHandle handle, void* cubin) except?_NVJITLINKRESULT_INTERNAL_LOADING_ERROR nogil: 

331 global __nvJitLinkGetLinkedCubin 

332 _check_or_init_nvjitlink() 

333 if __nvJitLinkGetLinkedCubin == NULL: 

334 with gil: 

335 raise FunctionNotFoundError("function nvJitLinkGetLinkedCubin is not found") 

336 return (<nvJitLinkResult (*)(nvJitLinkHandle, void*) noexcept nogil>__nvJitLinkGetLinkedCubin)( 

337 handle, cubin) 

338  

339  

340cdef nvJitLinkResult _nvJitLinkGetLinkedPtxSize(nvJitLinkHandle handle, size_t* size) except?_NVJITLINKRESULT_INTERNAL_LOADING_ERROR nogil: 

341 global __nvJitLinkGetLinkedPtxSize 

342 _check_or_init_nvjitlink() 

343 if __nvJitLinkGetLinkedPtxSize == NULL: 

344 with gil: 

345 raise FunctionNotFoundError("function nvJitLinkGetLinkedPtxSize is not found") 

346 return (<nvJitLinkResult (*)(nvJitLinkHandle, size_t*) noexcept nogil>__nvJitLinkGetLinkedPtxSize)( 

347 handle, size) 

348  

349  

350cdef nvJitLinkResult _nvJitLinkGetLinkedPtx(nvJitLinkHandle handle, char* ptx) except?_NVJITLINKRESULT_INTERNAL_LOADING_ERROR nogil: 

351 global __nvJitLinkGetLinkedPtx 

352 _check_or_init_nvjitlink() 

353 if __nvJitLinkGetLinkedPtx == NULL: 

354 with gil: 

355 raise FunctionNotFoundError("function nvJitLinkGetLinkedPtx is not found") 

356 return (<nvJitLinkResult (*)(nvJitLinkHandle, char*) noexcept nogil>__nvJitLinkGetLinkedPtx)( 

357 handle, ptx) 

358  

359  

360cdef nvJitLinkResult _nvJitLinkGetErrorLogSize(nvJitLinkHandle handle, size_t* size) except?_NVJITLINKRESULT_INTERNAL_LOADING_ERROR nogil: 

361 global __nvJitLinkGetErrorLogSize 

362 _check_or_init_nvjitlink() 

363 if __nvJitLinkGetErrorLogSize == NULL: 

364 with gil: 

365 raise FunctionNotFoundError("function nvJitLinkGetErrorLogSize is not found") 

366 return (<nvJitLinkResult (*)(nvJitLinkHandle, size_t*) noexcept nogil>__nvJitLinkGetErrorLogSize)( 

367 handle, size) 

368  

369  

370cdef nvJitLinkResult _nvJitLinkGetErrorLog(nvJitLinkHandle handle, char* log) except?_NVJITLINKRESULT_INTERNAL_LOADING_ERROR nogil: 

371 global __nvJitLinkGetErrorLog 

372 _check_or_init_nvjitlink() 

373 if __nvJitLinkGetErrorLog == NULL: 

374 with gil: 

375 raise FunctionNotFoundError("function nvJitLinkGetErrorLog is not found") 

376 return (<nvJitLinkResult (*)(nvJitLinkHandle, char*) noexcept nogil>__nvJitLinkGetErrorLog)( 

377 handle, log) 

378  

379  

380cdef nvJitLinkResult _nvJitLinkGetInfoLogSize(nvJitLinkHandle handle, size_t* size) except?_NVJITLINKRESULT_INTERNAL_LOADING_ERROR nogil: 

381 global __nvJitLinkGetInfoLogSize 

382 _check_or_init_nvjitlink() 

383 if __nvJitLinkGetInfoLogSize == NULL: 

384 with gil: 

385 raise FunctionNotFoundError("function nvJitLinkGetInfoLogSize is not found") 

386 return (<nvJitLinkResult (*)(nvJitLinkHandle, size_t*) noexcept nogil>__nvJitLinkGetInfoLogSize)( 

387 handle, size) 

388  

389  

390cdef nvJitLinkResult _nvJitLinkGetInfoLog(nvJitLinkHandle handle, char* log) except?_NVJITLINKRESULT_INTERNAL_LOADING_ERROR nogil: 

391 global __nvJitLinkGetInfoLog 

392 _check_or_init_nvjitlink() 

393 if __nvJitLinkGetInfoLog == NULL: 

394 with gil: 

395 raise FunctionNotFoundError("function nvJitLinkGetInfoLog is not found") 

396 return (<nvJitLinkResult (*)(nvJitLinkHandle, char*) noexcept nogil>__nvJitLinkGetInfoLog)( 

397 handle, log) 

398  

399  

400cdef nvJitLinkResult _nvJitLinkVersion(unsigned int* major, unsigned int* minor) except?_NVJITLINKRESULT_INTERNAL_LOADING_ERROR nogil: 

401 global __nvJitLinkVersion 

402 _check_or_init_nvjitlink() 

403 if __nvJitLinkVersion == NULL: 

404 with gil: 

405 raise FunctionNotFoundError("function nvJitLinkVersion is not found") 

406 return (<nvJitLinkResult (*)(unsigned int*, unsigned int*) noexcept nogil>__nvJitLinkVersion)( 

407 major, minor)