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
« 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.
7from libc.stdint cimport intptr_t, uintptr_t
9import threading
10from .utils import FunctionNotFoundError, NotSupportedError
12from cuda.pathfinder import load_nvidia_dynamic_lib
15###############################################################################
16# Extern
17###############################################################################
19# You must 'from .utils import NotSupportedError' before using this template
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*)
27 enum:
28 RTLD_LAZY
29 RTLD_NOW
30 RTLD_GLOBAL
31 RTLD_LOCAL
33 const void* RTLD_DEFAULT 'RTLD_DEFAULT'
35cdef int get_cuda_version():
36 cdef void* handle = NULL
37 cdef int err, driver_ver = 0
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}')
51 return driver_ver
55###############################################################################
56# Wrapper init
57###############################################################################
59cdef object __symbol_lock = threading.Lock()
60cdef bint __py_nvvm_init = False
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
78cdef void* load_library() except* with gil:
79 cdef uintptr_t handle = load_nvidia_dynamic_lib("nvvm")._handle_uint
80 return <void*>handle
83cdef int _init_nvvm() except -1 nogil:
84 global __py_nvvm_init
86 cdef void* handle = NULL
88 with gil, __symbol_lock:
89 # Recheck the flag after obtaining the locks
90 if __py_nvvm_init:
91 return 0
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')
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')
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')
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')
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')
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')
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')
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')
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
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')
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')
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')
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')
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')
192 __py_nvvm_init = True
193 return 0
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
200 return _init_nvvm()
203cdef dict func_ptrs = None
206cpdef dict _inspect_function_pointers():
207 global func_ptrs
208 if func_ptrs is not None:
209 return func_ptrs
211 _check_or_init_nvvm()
212 cdef dict data = {}
214 global __nvvmGetErrorString
215 data["__nvvmGetErrorString"] = <intptr_t>__nvvmGetErrorString
217 global __nvvmVersion
218 data["__nvvmVersion"] = <intptr_t>__nvvmVersion
220 global __nvvmIRVersion
221 data["__nvvmIRVersion"] = <intptr_t>__nvvmIRVersion
223 global __nvvmCreateProgram
224 data["__nvvmCreateProgram"] = <intptr_t>__nvvmCreateProgram
226 global __nvvmDestroyProgram
227 data["__nvvmDestroyProgram"] = <intptr_t>__nvvmDestroyProgram
229 global __nvvmAddModuleToProgram
230 data["__nvvmAddModuleToProgram"] = <intptr_t>__nvvmAddModuleToProgram
232 global __nvvmLazyAddModuleToProgram
233 data["__nvvmLazyAddModuleToProgram"] = <intptr_t>__nvvmLazyAddModuleToProgram
235 global __nvvmCompileProgram
236 data["__nvvmCompileProgram"] = <intptr_t>__nvvmCompileProgram
238 global __nvvmVerifyProgram
239 data["__nvvmVerifyProgram"] = <intptr_t>__nvvmVerifyProgram
241 global __nvvmGetCompiledResultSize
242 data["__nvvmGetCompiledResultSize"] = <intptr_t>__nvvmGetCompiledResultSize 1a3
244 global __nvvmGetCompiledResult
245 data["__nvvmGetCompiledResult"] = <intptr_t>__nvvmGetCompiledResult 1a3
247 global __nvvmGetProgramLogSize
248 data["__nvvmGetProgramLogSize"] = <intptr_t>__nvvmGetProgramLogSize
250 global __nvvmGetProgramLog
251 data["__nvvmGetProgramLog"] = <intptr_t>__nvvmGetProgramLog 1a56789!#$%'()*+,-./:pqrst
253 global __nvvmLLVMVersion
254 data["__nvvmLLVMVersion"] = <intptr_t>__nvvmLLVMVersion
256 func_ptrs = data
257 return data
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
267###############################################################################
268# Wrapper functions
269###############################################################################
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)