Coverage for cuda / bindings / _internal / nvvm.pyx: 74.12%
228 statements
« prev ^ index » next coverage.py v7.14.0, created at 2026-05-22 01:37 +0000
« prev ^ index » next coverage.py v7.14.0, created at 2026-05-22 01:37 +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') 1aYZj'k(l)m*noWXb+c,d-e.f/g:h;i=0NO{?34P@Q[R]S^T_U`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: 2a Y Z j ' k ( l ) m * n o W X b + c , d - e . f / g : h ; i = 0 N O { ? 3 4 P @ Q [ R ] S ^ T _ U ` 5 | w } x ~ 1 V 2 y z A B C D E F G H I J K abL M u v 6 7 8 9 ! # $ % p q r s t
198 return 0 2a Y Z j ' k ( l ) m * n o W X b + c , d - e . f / g : h ; i = 0 N O { ? 3 4 P @ Q [ R ] S ^ T _ U ` 5 | w } x ~ 1 V 2 y z A B C D E F G H I J K abL M u v 6 7 8 9 ! # $ % p q r s t
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 1a4
244 global __nvvmGetCompiledResult
245 data["__nvvmGetCompiledResult"] = <intptr_t>__nvvmGetCompiledResult 1a4
247 global __nvvmGetProgramLogSize
248 data["__nvvmGetProgramLogSize"] = <intptr_t>__nvvmGetProgramLogSize
250 global __nvvmGetProgramLog
251 data["__nvvmGetProgramLog"] = <intptr_t>__nvvmGetProgramLog 1a'()*+,-./:;=?@[]^_`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: 1aYZjklmnoWXbcdefghi0NOPQRSTUpqrst
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: 1aYZjklmnoWXbcdefghi0NOPQRSTUpqrst
272 global __nvvmGetErrorString
273 _check_or_init_nvvm() 1{
274 if __nvvmGetErrorString == NULL: 1{
275 with gil: 1YZjklmnoWXbcdefghi0NOPQRSTUpqrst
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: 1ajklmnobcdefghiPQRSTUpqrst
282 global __nvvmVersion
283 _check_or_init_nvvm() 1a46789!#$%
284 if __nvvmVersion == NULL: 1a46789!#$%
285 with gil: 1jklmnobcdefghiPQRSTUpqrst
286 raise FunctionNotFoundError("function nvvmVersion is not found")
287 return (<nvvmResult (*)(int*, int*) noexcept nogil>__nvvmVersion)( 1a46789!#$%
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() 2a ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` } ~ abu v 6 7 8 9 ! # $ % p q r s t
294 if __nvvmIRVersion == NULL: 2a ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` } ~ abu v 6 7 8 9 ! # $ % p q r s t
295 with gil:
296 raise FunctionNotFoundError("function nvvmIRVersion is not found")
297 return (<nvvmResult (*)(int*, int*, int*, int*) noexcept nogil>__nvvmIRVersion)( 2a ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` } ~ abu v 6 7 8 9 ! # $ % p q r s t
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() 1aYZjklmnoWXbcdefghi0NOPQRSTU5wx1V2yzABCDEFGHIJKLMuvpqrst
304 if __nvvmCreateProgram == NULL: 1aYZjklmnoWXbcdefghi0NOPQRSTU5wx1V2yzABCDEFGHIJKLMuvpqrst
305 with gil: 1jlnWbcdefghipqrst
306 raise FunctionNotFoundError("function nvvmCreateProgram is not found")
307 return (<nvvmResult (*)(nvvmProgram*) noexcept nogil>__nvvmCreateProgram)( 1aYZjklmnoWXbcdefghi0NOPQRSTU5wx1V2yzABCDEFGHIJKLMuvpqrst
308 prog)
311cdef nvvmResult _nvvmDestroyProgram(nvvmProgram* prog) except?_NVVMRESULT_INTERNAL_LOADING_ERROR nogil: 1akmoXPQRSTU
312 global __nvvmDestroyProgram
313 _check_or_init_nvvm() 1aYZjklmnoWXbcdefghi0NOPQRSTU|wx1V2yzABCDEFGHIJKLMuvpqrst
314 if __nvvmDestroyProgram == NULL: 1aYZjklmnoWXbcdefghi0NOPQRSTU|wx1V2yzABCDEFGHIJKLMuvpqrst
315 with gil: 1kmoXPQRSTU
316 raise FunctionNotFoundError("function nvvmDestroyProgram is not found")
317 return (<nvvmResult (*)(nvvmProgram*) noexcept nogil>__nvvmDestroyProgram)( 1aYZjklmnoWXbcdefghi0NOPQRSTU|wx1V2yzABCDEFGHIJKLMuvpqrst
318 prog)
321cdef nvvmResult _nvvmAddModuleToProgram(nvvmProgram prog, const char* buffer, size_t size, const char* name) except?_NVVMRESULT_INTERNAL_LOADING_ERROR nogil: 1abcdefghiN
322 global __nvvmAddModuleToProgram
323 _check_or_init_nvvm() 1ajklmnobcdefghiPQRSTU5wx1V2yzABCDEFGHIJKLMuvpqrst
324 if __nvvmAddModuleToProgram == NULL: 1ajklmnobcdefghiPQRSTU5wx1V2yzABCDEFGHIJKLMuvpqrst
325 with gil: 1bcdefghiN
326 raise FunctionNotFoundError("function nvvmAddModuleToProgram is not found")
327 return (<nvvmResult (*)(nvvmProgram, const char*, size_t, const char*) noexcept nogil>__nvvmAddModuleToProgram)( 1ajklmnobcdefghiPQRSTU5wx1V2yzABCDEFGHIJKLMuvpqrst
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: 1abcdefghiN
332 global __nvvmLazyAddModuleToProgram
333 _check_or_init_nvvm()
334 if __nvvmLazyAddModuleToProgram == NULL:
335 with gil: 1bcdefghiN
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: 1ajklmnobcdefghiO
342 global __nvvmCompileProgram
343 _check_or_init_nvvm() 1ajlnWbcdefghiwxyzABCDEFGHIJKLMuvpqrst
344 if __nvvmCompileProgram == NULL: 1ajlnWbcdefghiwxyzABCDEFGHIJKLMuvpqrst
345 with gil: 1jklmnobcdefghiO
346 raise FunctionNotFoundError("function nvvmCompileProgram is not found")
347 return (<nvvmResult (*)(nvvmProgram, int, const char**) noexcept nogil>__nvvmCompileProgram)( 1ajlnWbcdefghiwxyzABCDEFGHIJKLMuvpqrst
348 prog, numOptions, options)
351cdef nvvmResult _nvvmVerifyProgram(nvvmProgram prog, int numOptions, const char** options) except?_NVVMRESULT_INTERNAL_LOADING_ERROR nogil: 1ajklmnobcdefghiO
352 global __nvvmVerifyProgram
353 _check_or_init_nvvm() 1kmoXPQRSTUwxVyzABCDEFGHIJKLMuv
354 if __nvvmVerifyProgram == NULL: 1kmoXPQRSTUwxVyzABCDEFGHIJKLMuv
355 with gil: 1jklmnobcdefghiO
356 raise FunctionNotFoundError("function nvvmVerifyProgram is not found")
357 return (<nvvmResult (*)(nvvmProgram, int, const char**) noexcept nogil>__nvvmVerifyProgram)( 1kmoXPQRSTUwxVyzABCDEFGHIJKLMuv
358 prog, numOptions, options)
361cdef nvvmResult _nvvmGetCompiledResultSize(nvvmProgram prog, size_t* bufferSizeRet) except?_NVVMRESULT_INTERNAL_LOADING_ERROR nogil: 1a3
362 global __nvvmGetCompiledResultSize
363 _check_or_init_nvvm() 1bcdefghiNwxyzABCDEFGHIJKLMuv
364 if __nvvmGetCompiledResultSize == NULL: 1bcdefghiNwxyzABCDEFGHIJKLMuv
365 with gil: 13
366 raise FunctionNotFoundError("function nvvmGetCompiledResultSize is not found")
367 return (<nvvmResult (*)(nvvmProgram, size_t*) noexcept nogil>__nvvmGetCompiledResultSize)( 1bcdefghiNwxyzABCDEFGHIJKLMuv
368 prog, bufferSizeRet)
371cdef nvvmResult _nvvmGetCompiledResult(nvvmProgram prog, char* buffer) except?_NVVMRESULT_INTERNAL_LOADING_ERROR nogil:
372 global __nvvmGetCompiledResult
373 _check_or_init_nvvm() 1bcdefghiNwxyzABCDEFGHIJKLMuv
374 if __nvvmGetCompiledResult == NULL: 1bcdefghiNwxyzABCDEFGHIJKLMuv
375 with gil:
376 raise FunctionNotFoundError("function nvvmGetCompiledResult is not found")
377 return (<nvvmResult (*)(nvvmProgram, char*) noexcept nogil>__nvvmGetCompiledResult)( 1bcdefghiNwxyzABCDEFGHIJKLMuv
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() 1jklmnobcdefghiOV
384 if __nvvmGetProgramLogSize == NULL: 1jklmnobcdefghiOV
385 with gil:
386 raise FunctionNotFoundError("function nvvmGetProgramLogSize is not found")
387 return (<nvvmResult (*)(nvvmProgram, size_t*) noexcept nogil>__nvvmGetProgramLogSize)( 1jklmnobcdefghiOV
388 prog, bufferSizeRet)
391cdef nvvmResult _nvvmGetProgramLog(nvvmProgram prog, char* buffer) except?_NVVMRESULT_INTERNAL_LOADING_ERROR nogil:
392 global __nvvmGetProgramLog
393 _check_or_init_nvvm() 1jklmnobcdefghiOV
394 if __nvvmGetProgramLog == NULL: 1jklmnobcdefghiOV
395 with gil:
396 raise FunctionNotFoundError("function nvvmGetProgramLog is not found")
397 return (<nvvmResult (*)(nvvmProgram, char*) noexcept nogil>__nvvmGetProgramLog)( 1jklmnobcdefghiOV
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() 13
404 if __nvvmLLVMVersion == NULL: 13
405 with gil:
406 raise FunctionNotFoundError("function nvvmLLVMVersion is not found")
407 return (<nvvmResult (*)(const char*, int*) noexcept nogil>__nvvmLLVMVersion)( 13
408 arch, major)