Coverage for cuda / bindings / _internal / nvvm.pyx: 74.12%

228 statements  

« prev     ^ index     » next       coverage.py v7.13.5, created at 2026-04-29 01:27 +0000

1# SPDX-FileCopyrightText: Copyright (c) 2025-2026 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.2.0, generator version 0.3.1.dev1422+gf4812259e.d20260318. 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_nvvm_init = False 

61  

62cdef void* __nvvmGetErrorString = NULL 

63cdef void* __nvvmVersion = NULL 

64cdef void* __nvvmIRVersion = NULL 

65cdef void* __nvvmCreateProgram = NULL 

66cdef void* __nvvmDestroyProgram = NULL 

67cdef void* __nvvmAddModuleToProgram = NULL 

68cdef void* __nvvmLazyAddModuleToProgram = NULL 

69cdef void* __nvvmCompileProgram = NULL 

70cdef void* __nvvmVerifyProgram = NULL 

71cdef void* __nvvmGetCompiledResultSize = NULL 

72cdef void* __nvvmGetCompiledResult = NULL 

73cdef void* __nvvmGetProgramLogSize = NULL 

74cdef void* __nvvmGetProgramLog = NULL 

75cdef void* __nvvmLLVMVersion = NULL 

76  

77  

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

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

80 return <void*>handle 

81  

82  

83cdef int _init_nvvm() except -1 nogil: 

84 global __py_nvvm_init 

85  

86 cdef void* handle = NULL 

87  

88 with gil, __symbol_lock: 

89 # Recheck the flag after obtaining the locks 

90 if __py_nvvm_init: 

91 return 0 

92  

93 # Load function 

94 global __nvvmGetErrorString 

95 __nvvmGetErrorString = dlsym(RTLD_DEFAULT, 'nvvmGetErrorString') 

96 if __nvvmGetErrorString == NULL: 

97 if handle == NULL: 

98 handle = load_library() 

99 __nvvmGetErrorString = dlsym(handle, 'nvvmGetErrorString') 

100  

101 global __nvvmVersion 

102 __nvvmVersion = dlsym(RTLD_DEFAULT, 'nvvmVersion') 

103 if __nvvmVersion == NULL: 

104 if handle == NULL: 

105 handle = load_library() 

106 __nvvmVersion = dlsym(handle, 'nvvmVersion') 

107  

108 global __nvvmIRVersion 

109 __nvvmIRVersion = dlsym(RTLD_DEFAULT, 'nvvmIRVersion') 

110 if __nvvmIRVersion == NULL: 

111 if handle == NULL: 

112 handle = load_library() 

113 __nvvmIRVersion = dlsym(handle, 'nvvmIRVersion') 

114  

115 global __nvvmCreateProgram 

116 __nvvmCreateProgram = dlsym(RTLD_DEFAULT, 'nvvmCreateProgram') 

117 if __nvvmCreateProgram == NULL: 

118 if handle == NULL: 

119 handle = load_library() 

120 __nvvmCreateProgram = dlsym(handle, 'nvvmCreateProgram') 

121  

122 global __nvvmDestroyProgram 

123 __nvvmDestroyProgram = dlsym(RTLD_DEFAULT, 'nvvmDestroyProgram') 

124 if __nvvmDestroyProgram == NULL: 

125 if handle == NULL: 

126 handle = load_library() 

127 __nvvmDestroyProgram = dlsym(handle, 'nvvmDestroyProgram') 

128  

129 global __nvvmAddModuleToProgram 

130 __nvvmAddModuleToProgram = dlsym(RTLD_DEFAULT, 'nvvmAddModuleToProgram') 

131 if __nvvmAddModuleToProgram == NULL: 

132 if handle == NULL: 

133 handle = load_library() 

134 __nvvmAddModuleToProgram = dlsym(handle, 'nvvmAddModuleToProgram') 

135  

136 global __nvvmLazyAddModuleToProgram 

137 __nvvmLazyAddModuleToProgram = dlsym(RTLD_DEFAULT, 'nvvmLazyAddModuleToProgram') 

138 if __nvvmLazyAddModuleToProgram == NULL: 

139 if handle == NULL: 

140 handle = load_library() 

141 __nvvmLazyAddModuleToProgram = dlsym(handle, 'nvvmLazyAddModuleToProgram') 

142  

143 global __nvvmCompileProgram 

144 __nvvmCompileProgram = dlsym(RTLD_DEFAULT, 'nvvmCompileProgram') 

145 if __nvvmCompileProgram == NULL: 

146 if handle == NULL: 

147 handle = load_library() 

148 __nvvmCompileProgram = dlsym(handle, 'nvvmCompileProgram') 

149  

150 global __nvvmVerifyProgram 

151 __nvvmVerifyProgram = dlsym(RTLD_DEFAULT, 'nvvmVerifyProgram') 

152 if __nvvmVerifyProgram == NULL: 

153 if handle == NULL: 

154 handle = load_library() 

155 __nvvmVerifyProgram = dlsym(handle, 'nvvmVerifyProgram') 1aYZj5k6l7m8noWXb9c!d#e$f%g'h(i)0MN;*23O+P,Q-R.S/T:pqrst

156  

157 global __nvvmGetCompiledResultSize 

158 __nvvmGetCompiledResultSize = dlsym(RTLD_DEFAULT, 'nvvmGetCompiledResultSize') 

159 if __nvvmGetCompiledResultSize == NULL: 

160 if handle == NULL: 

161 handle = load_library() 

162 __nvvmGetCompiledResultSize = dlsym(handle, 'nvvmGetCompiledResultSize') 

163  

164 global __nvvmGetCompiledResult 

165 __nvvmGetCompiledResult = dlsym(RTLD_DEFAULT, 'nvvmGetCompiledResult') 

166 if __nvvmGetCompiledResult == NULL: 

167 if handle == NULL: 

168 handle = load_library() 

169 __nvvmGetCompiledResult = dlsym(handle, 'nvvmGetCompiledResult') 

170  

171 global __nvvmGetProgramLogSize 

172 __nvvmGetProgramLogSize = dlsym(RTLD_DEFAULT, 'nvvmGetProgramLogSize') 

173 if __nvvmGetProgramLogSize == NULL: 

174 if handle == NULL: 

175 handle = load_library() 

176 __nvvmGetProgramLogSize = dlsym(handle, 'nvvmGetProgramLogSize') 

177  

178 global __nvvmGetProgramLog 

179 __nvvmGetProgramLog = dlsym(RTLD_DEFAULT, 'nvvmGetProgramLog') 

180 if __nvvmGetProgramLog == NULL: 

181 if handle == NULL: 

182 handle = load_library() 

183 __nvvmGetProgramLog = dlsym(handle, 'nvvmGetProgramLog') 

184  

185 global __nvvmLLVMVersion 

186 __nvvmLLVMVersion = dlsym(RTLD_DEFAULT, 'nvvmLLVMVersion') 

187 if __nvvmLLVMVersion == NULL: 

188 if handle == NULL: 

189 handle = load_library() 

190 __nvvmLLVMVersion = dlsym(handle, 'nvvmLLVMVersion') 

191  

192 __py_nvvm_init = True 

193 return 0 

194  

195  

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

197 if __py_nvvm_init: 1a=YZj5k6l7m8noWXb9c!d#e$f%g'h(i)0MN;*23O+P,Q-R.S/T:4?w@x[U1VyzABCDEFG]HIJKLuvpqrst

198 return 0 1a=YZj5k6l7m8noWXb9c!d#e$f%g'h(i)0MN;*23O+P,Q-R.S/T:4?w@x[U1VyzABCDEFG]HIJKLuvpqrst

199  

200 return _init_nvvm() 

201  

202  

203cdef dict func_ptrs = None 

204  

205  

206cpdef dict _inspect_function_pointers(): 

207 global func_ptrs 

208 if func_ptrs is not None: 

209 return func_ptrs 

210  

211 _check_or_init_nvvm() 

212 cdef dict data = {} 

213  

214 global __nvvmGetErrorString 

215 data["__nvvmGetErrorString"] = <intptr_t>__nvvmGetErrorString 

216  

217 global __nvvmVersion 

218 data["__nvvmVersion"] = <intptr_t>__nvvmVersion 

219  

220 global __nvvmIRVersion 

221 data["__nvvmIRVersion"] = <intptr_t>__nvvmIRVersion 

222  

223 global __nvvmCreateProgram 

224 data["__nvvmCreateProgram"] = <intptr_t>__nvvmCreateProgram 

225  

226 global __nvvmDestroyProgram 

227 data["__nvvmDestroyProgram"] = <intptr_t>__nvvmDestroyProgram 

228  

229 global __nvvmAddModuleToProgram 

230 data["__nvvmAddModuleToProgram"] = <intptr_t>__nvvmAddModuleToProgram 

231  

232 global __nvvmLazyAddModuleToProgram 

233 data["__nvvmLazyAddModuleToProgram"] = <intptr_t>__nvvmLazyAddModuleToProgram 

234  

235 global __nvvmCompileProgram 

236 data["__nvvmCompileProgram"] = <intptr_t>__nvvmCompileProgram 

237  

238 global __nvvmVerifyProgram 

239 data["__nvvmVerifyProgram"] = <intptr_t>__nvvmVerifyProgram 

240  

241 global __nvvmGetCompiledResultSize 

242 data["__nvvmGetCompiledResultSize"] = <intptr_t>__nvvmGetCompiledResultSize 1a3

243  

244 global __nvvmGetCompiledResult 

245 data["__nvvmGetCompiledResult"] = <intptr_t>__nvvmGetCompiledResult 1a3

246  

247 global __nvvmGetProgramLogSize 

248 data["__nvvmGetProgramLogSize"] = <intptr_t>__nvvmGetProgramLogSize 

249  

250 global __nvvmGetProgramLog 

251 data["__nvvmGetProgramLog"] = <intptr_t>__nvvmGetProgramLog 1a56789!#$%'()*+,-./:pqrst

252  

253 global __nvvmLLVMVersion 

254 data["__nvvmLLVMVersion"] = <intptr_t>__nvvmLLVMVersion 

255  

256 func_ptrs = data 

257 return data 

258  

259  

260cpdef _inspect_function_pointer(str name): 

261 global func_ptrs 

262 if func_ptrs is None: 1aYZjklmnoWXbcdefghi0MNOPQRSTpqrst

263 func_ptrs = _inspect_function_pointers() 

264 return func_ptrs[name] 1apqrst

265  

266  

267############################################################################### 

268# Wrapper functions 

269############################################################################### 

270  

271cdef const char* _nvvmGetErrorString(nvvmResult result) except?NULL nogil: 1aYZjklmnoWXbcdefghi0MNOPQRSTpqrst

272 global __nvvmGetErrorString 

273 _check_or_init_nvvm() 1;

274 if __nvvmGetErrorString == NULL: 1;

275 with gil: 1YZjklmnoWXbcdefghi0MNOPQRSTpqrst

276 raise FunctionNotFoundError("function nvvmGetErrorString is not found") 

277 return (<const char* (*)(nvvmResult) noexcept nogil>__nvvmGetErrorString)( 1;

278 result) 

279  

280  

281cdef nvvmResult _nvvmVersion(int* major, int* minor) except?_NVVMRESULT_INTERNAL_LOADING_ERROR nogil: 1ajklmnobcdefghiOPQRSTpqrst

282 global __nvvmVersion 

283 _check_or_init_nvvm() 1a3

284 if __nvvmVersion == NULL: 1a3

285 with gil: 1jklmnobcdefghiOPQRSTpqrst

286 raise FunctionNotFoundError("function nvvmVersion is not found") 

287 return (<nvvmResult (*)(int*, int*) noexcept nogil>__nvvmVersion)( 1a3

288 major, minor) 

289  

290  

291cdef nvvmResult _nvvmIRVersion(int* majorIR, int* minorIR, int* majorDbg, int* minorDbg) except?_NVVMRESULT_INTERNAL_LOADING_ERROR nogil: 

292 global __nvvmIRVersion 

293 _check_or_init_nvvm() 1a56789!#$%'()*+,-./:@[]uvpqrst

294 if __nvvmIRVersion == NULL: 1a56789!#$%'()*+,-./:@[]uvpqrst

295 with gil: 

296 raise FunctionNotFoundError("function nvvmIRVersion is not found") 

297 return (<nvvmResult (*)(int*, int*, int*, int*) noexcept nogil>__nvvmIRVersion)( 1a56789!#$%'()*+,-./:@[]uvpqrst

298 majorIR, minorIR, majorDbg, minorDbg) 

299  

300  

301cdef nvvmResult _nvvmCreateProgram(nvvmProgram* prog) except?_NVVMRESULT_INTERNAL_LOADING_ERROR nogil: 1ajlnWbcdefghipqrst

302 global __nvvmCreateProgram 

303 _check_or_init_nvvm() 1aYZjklmnoWXbcdefghi0MNOPQRST4wxU1VyzABCDEFGHIJKLuvpqrst

304 if __nvvmCreateProgram == NULL: 1aYZjklmnoWXbcdefghi0MNOPQRST4wxU1VyzABCDEFGHIJKLuvpqrst

305 with gil: 1jlnWbcdefghipqrst

306 raise FunctionNotFoundError("function nvvmCreateProgram is not found") 

307 return (<nvvmResult (*)(nvvmProgram*) noexcept nogil>__nvvmCreateProgram)( 1aYZjklmnoWXbcdefghi0MNOPQRST4wxU1VyzABCDEFGHIJKLuvpqrst

308 prog) 

309  

310  

311cdef nvvmResult _nvvmDestroyProgram(nvvmProgram* prog) except?_NVVMRESULT_INTERNAL_LOADING_ERROR nogil: 1akmoXOPQRST

312 global __nvvmDestroyProgram 

313 _check_or_init_nvvm() 1a=YZjklmnoWXbcdefghi0MNOPQRST?wxU1yzABCDEFGHIJKLuvpqrst

314 if __nvvmDestroyProgram == NULL: 1a=YZjklmnoWXbcdefghi0MNOPQRST?wxU1yzABCDEFGHIJKLuvpqrst

315 with gil: 1kmoXOPQRST

316 raise FunctionNotFoundError("function nvvmDestroyProgram is not found") 

317 return (<nvvmResult (*)(nvvmProgram*) noexcept nogil>__nvvmDestroyProgram)( 1a=YZjklmnoWXbcdefghi0MNOPQRST?wxU1yzABCDEFGHIJKLuvpqrst

318 prog) 

319  

320  

321cdef nvvmResult _nvvmAddModuleToProgram(nvvmProgram prog, const char* buffer, size_t size, const char* name) except?_NVVMRESULT_INTERNAL_LOADING_ERROR nogil: 1abcdefghiM

322 global __nvvmAddModuleToProgram 

323 _check_or_init_nvvm() 1ajklmnobcdefghiOPQRST4wxU1VyzABCDEFGHIJKLuvpqrst

324 if __nvvmAddModuleToProgram == NULL: 1ajklmnobcdefghiOPQRST4wxU1VyzABCDEFGHIJKLuvpqrst

325 with gil: 1bcdefghiM

326 raise FunctionNotFoundError("function nvvmAddModuleToProgram is not found") 

327 return (<nvvmResult (*)(nvvmProgram, const char*, size_t, const char*) noexcept nogil>__nvvmAddModuleToProgram)( 1ajklmnobcdefghiOPQRST4wxU1VyzABCDEFGHIJKLuvpqrst

328 prog, buffer, size, name) 

329  

330  

331cdef nvvmResult _nvvmLazyAddModuleToProgram(nvvmProgram prog, const char* buffer, size_t size, const char* name) except?_NVVMRESULT_INTERNAL_LOADING_ERROR nogil: 1abcdefghiM

332 global __nvvmLazyAddModuleToProgram 

333 _check_or_init_nvvm() 

334 if __nvvmLazyAddModuleToProgram == NULL: 

335 with gil: 1bcdefghiM

336 raise FunctionNotFoundError("function nvvmLazyAddModuleToProgram is not found") 

337 return (<nvvmResult (*)(nvvmProgram, const char*, size_t, const char*) noexcept nogil>__nvvmLazyAddModuleToProgram)( 

338 prog, buffer, size, name) 

339  

340  

341cdef nvvmResult _nvvmCompileProgram(nvvmProgram prog, int numOptions, const char** options) except?_NVVMRESULT_INTERNAL_LOADING_ERROR nogil: 1ajklmnobcdefghiN

342 global __nvvmCompileProgram 

343 _check_or_init_nvvm() 1ajlnWbcdefghiwxVyzABCDEFGHIJKLuvpqrst

344 if __nvvmCompileProgram == NULL: 1ajlnWbcdefghiwxVyzABCDEFGHIJKLuvpqrst

345 with gil: 1jklmnobcdefghiN

346 raise FunctionNotFoundError("function nvvmCompileProgram is not found") 

347 return (<nvvmResult (*)(nvvmProgram, int, const char**) noexcept nogil>__nvvmCompileProgram)( 1ajlnWbcdefghiwxVyzABCDEFGHIJKLuvpqrst

348 prog, numOptions, options) 

349  

350  

351cdef nvvmResult _nvvmVerifyProgram(nvvmProgram prog, int numOptions, const char** options) except?_NVVMRESULT_INTERNAL_LOADING_ERROR nogil: 1ajklmnobcdefghiN

352 global __nvvmVerifyProgram 

353 _check_or_init_nvvm() 1kmoXOPQRSTwxUVyzABCDEFGHIJKLuv

354 if __nvvmVerifyProgram == NULL: 1kmoXOPQRSTwxUVyzABCDEFGHIJKLuv

355 with gil: 1jklmnobcdefghiN

356 raise FunctionNotFoundError("function nvvmVerifyProgram is not found") 

357 return (<nvvmResult (*)(nvvmProgram, int, const char**) noexcept nogil>__nvvmVerifyProgram)( 1kmoXOPQRSTwxUVyzABCDEFGHIJKLuv

358 prog, numOptions, options) 

359  

360  

361cdef nvvmResult _nvvmGetCompiledResultSize(nvvmProgram prog, size_t* bufferSizeRet) except?_NVVMRESULT_INTERNAL_LOADING_ERROR nogil: 1a2

362 global __nvvmGetCompiledResultSize 

363 _check_or_init_nvvm() 1bcdefghiMwxVyzABCDEFGHIJKLuv

364 if __nvvmGetCompiledResultSize == NULL: 1bcdefghiMwxVyzABCDEFGHIJKLuv

365 with gil: 12

366 raise FunctionNotFoundError("function nvvmGetCompiledResultSize is not found") 

367 return (<nvvmResult (*)(nvvmProgram, size_t*) noexcept nogil>__nvvmGetCompiledResultSize)( 1bcdefghiMwxVyzABCDEFGHIJKLuv

368 prog, bufferSizeRet) 

369  

370  

371cdef nvvmResult _nvvmGetCompiledResult(nvvmProgram prog, char* buffer) except?_NVVMRESULT_INTERNAL_LOADING_ERROR nogil: 

372 global __nvvmGetCompiledResult 

373 _check_or_init_nvvm() 1bcdefghiMwxVyzABCDEFGHIJKLuv

374 if __nvvmGetCompiledResult == NULL: 1bcdefghiMwxVyzABCDEFGHIJKLuv

375 with gil: 

376 raise FunctionNotFoundError("function nvvmGetCompiledResult is not found") 

377 return (<nvvmResult (*)(nvvmProgram, char*) noexcept nogil>__nvvmGetCompiledResult)( 1bcdefghiMwxVyzABCDEFGHIJKLuv

378 prog, buffer) 

379  

380  

381cdef nvvmResult _nvvmGetProgramLogSize(nvvmProgram prog, size_t* bufferSizeRet) except?_NVVMRESULT_INTERNAL_LOADING_ERROR nogil: 

382 global __nvvmGetProgramLogSize 

383 _check_or_init_nvvm() 1jklmnobcdefghiNU

384 if __nvvmGetProgramLogSize == NULL: 1jklmnobcdefghiNU

385 with gil: 

386 raise FunctionNotFoundError("function nvvmGetProgramLogSize is not found") 

387 return (<nvvmResult (*)(nvvmProgram, size_t*) noexcept nogil>__nvvmGetProgramLogSize)( 1jklmnobcdefghiNU

388 prog, bufferSizeRet) 

389  

390  

391cdef nvvmResult _nvvmGetProgramLog(nvvmProgram prog, char* buffer) except?_NVVMRESULT_INTERNAL_LOADING_ERROR nogil: 

392 global __nvvmGetProgramLog 

393 _check_or_init_nvvm() 1jklmnobcdefghiNU

394 if __nvvmGetProgramLog == NULL: 1jklmnobcdefghiNU

395 with gil: 

396 raise FunctionNotFoundError("function nvvmGetProgramLog is not found") 

397 return (<nvvmResult (*)(nvvmProgram, char*) noexcept nogil>__nvvmGetProgramLog)( 1jklmnobcdefghiNU

398 prog, buffer) 

399  

400  

401cdef nvvmResult _nvvmLLVMVersion(const char* arch, int* major) except?_NVVMRESULT_INTERNAL_LOADING_ERROR nogil: 

402 global __nvvmLLVMVersion 

403 _check_or_init_nvvm() 12

404 if __nvvmLLVMVersion == NULL: 12

405 with gil: 

406 raise FunctionNotFoundError("function nvvmLLVMVersion is not found") 

407 return (<nvvmResult (*)(const char*, int*) noexcept nogil>__nvvmLLVMVersion)( 12

408 arch, major)