Coverage for cuda / bindings / _internal / nvvm.pyx: 64.91%
228 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-03-25 01:07 +0000
« prev ^ index » next coverage.py v7.13.5, created at 2026-03-25 01:07 +0000
1# SPDX-FileCopyrightText: Copyright (c) 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.2.0, generator version 0.3.1.dev1406+gd8426ea19.d20260316. 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 1ab
80 return <void*>handle 1ab
83cdef int _init_nvvm() except -1 nogil:
84 global __py_nvvm_init
86 cdef void* handle = NULL 1ab
88 with gil, __symbol_lock: 1ab
89 # Recheck the flag after obtaining the locks
90 if __py_nvvm_init: 1ab
91 return 0
93 # Load function
94 global __nvvmGetErrorString
95 __nvvmGetErrorString = dlsym(RTLD_DEFAULT, 'nvvmGetErrorString') 1ab
96 if __nvvmGetErrorString == NULL: 1ab
97 if handle == NULL: 1ab
98 handle = load_library() 1ab
99 __nvvmGetErrorString = dlsym(handle, 'nvvmGetErrorString') 1abc
101 global __nvvmVersion
102 __nvvmVersion = dlsym(RTLD_DEFAULT, 'nvvmVersion') 1ab
103 if __nvvmVersion == NULL: 1ab
104 if handle == NULL:
105 handle = load_library() 1c
106 __nvvmVersion = dlsym(handle, 'nvvmVersion')
108 global __nvvmIRVersion
109 __nvvmIRVersion = dlsym(RTLD_DEFAULT, 'nvvmIRVersion') 1abc
110 if __nvvmIRVersion == NULL: 1ab
111 if handle == NULL:
112 handle = load_library() 1c
113 __nvvmIRVersion = dlsym(handle, 'nvvmIRVersion')
115 global __nvvmCreateProgram
116 __nvvmCreateProgram = dlsym(RTLD_DEFAULT, 'nvvmCreateProgram') 1ab
117 if __nvvmCreateProgram == NULL: 1ab
118 if handle == NULL: 1c
119 handle = load_library()
120 __nvvmCreateProgram = dlsym(handle, 'nvvmCreateProgram')
122 global __nvvmDestroyProgram
123 __nvvmDestroyProgram = dlsym(RTLD_DEFAULT, 'nvvmDestroyProgram') 1ab
124 if __nvvmDestroyProgram == NULL: 1abc
125 if handle == NULL:
126 handle = load_library()
127 __nvvmDestroyProgram = dlsym(handle, 'nvvmDestroyProgram') 1c
129 global __nvvmAddModuleToProgram
130 __nvvmAddModuleToProgram = dlsym(RTLD_DEFAULT, 'nvvmAddModuleToProgram') 1abc
131 if __nvvmAddModuleToProgram == NULL: 1ab
132 if handle == NULL:
133 handle = load_library() 1ac
134 __nvvmAddModuleToProgram = dlsym(handle, 'nvvmAddModuleToProgram')
136 global __nvvmLazyAddModuleToProgram
137 __nvvmLazyAddModuleToProgram = dlsym(RTLD_DEFAULT, 'nvvmLazyAddModuleToProgram') 1ab
138 if __nvvmLazyAddModuleToProgram == NULL: 1ab
139 if handle == NULL: 1c
140 handle = load_library()
141 __nvvmLazyAddModuleToProgram = dlsym(handle, 'nvvmLazyAddModuleToProgram')
143 global __nvvmCompileProgram
144 __nvvmCompileProgram = dlsym(RTLD_DEFAULT, 'nvvmCompileProgram') 1ab
145 if __nvvmCompileProgram == NULL: 1abc
146 if handle == NULL:
147 handle = load_library()
148 __nvvmCompileProgram = dlsym(handle, 'nvvmCompileProgram') 1c
150 global __nvvmVerifyProgram
151 __nvvmVerifyProgram = dlsym(RTLD_DEFAULT, 'nvvmVerifyProgram') 1abc
152 if __nvvmVerifyProgram == NULL: 1ab
153 if handle == NULL:
154 handle = load_library()
155 __nvvmVerifyProgram = dlsym(handle, 'nvvmVerifyProgram') 1Ubl0m1n2o3pcSTd4e5f6g7h8i9j!k#VIJ,$XYK%L'M(N)O*P+
157 global __nvvmGetCompiledResultSize
158 __nvvmGetCompiledResultSize = dlsym(RTLD_DEFAULT, 'nvvmGetCompiledResultSize') 1abc
159 if __nvvmGetCompiledResultSize == NULL: 1ab
160 if handle == NULL:
161 handle = load_library()
162 __nvvmGetCompiledResultSize = dlsym(handle, 'nvvmGetCompiledResultSize')
164 global __nvvmGetCompiledResult
165 __nvvmGetCompiledResult = dlsym(RTLD_DEFAULT, 'nvvmGetCompiledResult') 1ab
166 if __nvvmGetCompiledResult == NULL: 1ab
167 if handle == NULL:
168 handle = load_library()
169 __nvvmGetCompiledResult = dlsym(handle, 'nvvmGetCompiledResult')
171 global __nvvmGetProgramLogSize
172 __nvvmGetProgramLogSize = dlsym(RTLD_DEFAULT, 'nvvmGetProgramLogSize') 1ab
173 if __nvvmGetProgramLogSize == NULL: 1ab
174 if handle == NULL:
175 handle = load_library()
176 __nvvmGetProgramLogSize = dlsym(handle, 'nvvmGetProgramLogSize')
178 global __nvvmGetProgramLog
179 __nvvmGetProgramLog = dlsym(RTLD_DEFAULT, 'nvvmGetProgramLog') 1ab
180 if __nvvmGetProgramLog == NULL: 1ab
181 if handle == NULL:
182 handle = load_library()
183 __nvvmGetProgramLog = dlsym(handle, 'nvvmGetProgramLog')
185 global __nvvmLLVMVersion
186 __nvvmLLVMVersion = dlsym(RTLD_DEFAULT, 'nvvmLLVMVersion') 1ab
187 if __nvvmLLVMVersion == NULL: 1ab
188 if handle == NULL:
189 handle = load_library()
190 __nvvmLLVMVersion = dlsym(handle, 'nvvmLLVMVersion')
192 __py_nvvm_init = True 1ab
193 return 0 1ab
196cdef inline int _check_or_init_nvvm() except -1 nogil:
197 if __py_nvvm_init: 1a-Ubl0m1n2o3pcSTd4e5f6g7h8i9j!k#VIJ,$XYK%L'M(N)O*P+Z.s/t:QWRu;vwxyzABCDEFGHqr
198 return 0 1a-Ubl0m1n2o3pcSTd4e5f6g7h8i9j!k#VIJ,$XYK%L'M(N)O*P+Z.s/t:QWRu;vwxyzABCDEFGHqr
200 return _init_nvvm() 1ab
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 1Y
244 global __nvvmGetCompiledResult
245 data["__nvvmGetCompiledResult"] = <intptr_t>__nvvmGetCompiledResult 1Y
247 global __nvvmGetProgramLogSize
248 data["__nvvmGetProgramLogSize"] = <intptr_t>__nvvmGetProgramLogSize
250 global __nvvmGetProgramLog
251 data["__nvvmGetProgramLog"] = <intptr_t>__nvvmGetProgramLog 10123456789!#$%'()*+
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: 1UblmnopcSTdefghijkVIJKLMNOP
263 func_ptrs = _inspect_function_pointers()
264 return func_ptrs[name]
267###############################################################################
268# Wrapper functions
269###############################################################################
271cdef const char* _nvvmGetErrorString(nvvmResult result) except?NULL nogil: 1aUblmnopcSTdefghijkVIJKLMNOP
272 global __nvvmGetErrorString
273 _check_or_init_nvvm() 1,
274 if __nvvmGetErrorString == NULL: 1,
275 with gil: 1UblmnopcSTdefghijkVIJKLMNOP
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: 1almnopcdefghijkKLMNOP
282 global __nvvmVersion
283 _check_or_init_nvvm() 1aY
284 if __nvvmVersion == NULL: 1aY
285 with gil: 1lmnopcdefghijkKLMNOP
286 raise FunctionNotFoundError("function nvvmVersion is not found")
287 return (<nvvmResult (*)(int*, int*) noexcept nogil>__nvvmVersion)( 1aY
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() 1a0123456789!#$%'()*+/:;qr
294 if __nvvmIRVersion == NULL: 1a0123456789!#$%'()*+/:;qr
295 with gil:
296 raise FunctionNotFoundError("function nvvmIRVersion is not found")
297 return (<nvvmResult (*)(int*, int*, int*, int*) noexcept nogil>__nvvmIRVersion)( 1a0123456789!#$%'()*+/:;qr
298 majorIR, minorIR, majorDbg, minorDbg)
301cdef nvvmResult _nvvmCreateProgram(nvvmProgram* prog) except?_NVVMRESULT_INTERNAL_LOADING_ERROR nogil: 1alnpSdefghijk
302 global __nvvmCreateProgram
303 _check_or_init_nvvm() 1aUblmnopcSTdefghijkVIJKLMNOPZstQWRuvwxyzABCDEFGHqr
304 if __nvvmCreateProgram == NULL: 1aUblmnopcSTdefghijkVIJKLMNOPZstQWRuvwxyzABCDEFGHqr
305 with gil: 1lnpSdefghijk
306 raise FunctionNotFoundError("function nvvmCreateProgram is not found")
307 return (<nvvmResult (*)(nvvmProgram*) noexcept nogil>__nvvmCreateProgram)( 1aUblmnopcSTdefghijkVIJKLMNOPZstQWRuvwxyzABCDEFGHqr
308 prog)
311cdef nvvmResult _nvvmDestroyProgram(nvvmProgram* prog) except?_NVVMRESULT_INTERNAL_LOADING_ERROR nogil: 1amocTKLMNOP
312 global __nvvmDestroyProgram
313 _check_or_init_nvvm() 1a-UblmnopcSTdefghijkVIJKLMNOP.stQWuvwxyzABCDEFGHqr
314 if __nvvmDestroyProgram == NULL: 1a-UblmnopcSTdefghijkVIJKLMNOP.stQWuvwxyzABCDEFGHqr
315 with gil: 1mocTKLMNOP
316 raise FunctionNotFoundError("function nvvmDestroyProgram is not found")
317 return (<nvvmResult (*)(nvvmProgram*) noexcept nogil>__nvvmDestroyProgram)( 1a-UblmnopcSTdefghijkVIJKLMNOP.stQWuvwxyzABCDEFGHqr
318 prog)
321cdef nvvmResult _nvvmAddModuleToProgram(nvvmProgram prog, const char* buffer, size_t size, const char* name) except?_NVVMRESULT_INTERNAL_LOADING_ERROR nogil: 1adefghijkI
322 global __nvvmAddModuleToProgram
323 _check_or_init_nvvm() 1almnopcdefghijkKLMNOPZstQWRuvwxyzABCDEFGHqr
324 if __nvvmAddModuleToProgram == NULL: 1almnopcdefghijkKLMNOPZstQWRuvwxyzABCDEFGHqr
325 with gil: 1defghijkI
326 raise FunctionNotFoundError("function nvvmAddModuleToProgram is not found")
327 return (<nvvmResult (*)(nvvmProgram, const char*, size_t, const char*) noexcept nogil>__nvvmAddModuleToProgram)( 1almnopcdefghijkKLMNOPZstQWRuvwxyzABCDEFGHqr
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: 1adefghijkI
332 global __nvvmLazyAddModuleToProgram
333 _check_or_init_nvvm()
334 if __nvvmLazyAddModuleToProgram == NULL:
335 with gil: 1defghijkI
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: 1almnopcdefghijkJ
342 global __nvvmCompileProgram
343 _check_or_init_nvvm() 1alnpSdefghijkstRuvwxyzABCDEFGHqr
344 if __nvvmCompileProgram == NULL: 1alnpSdefghijkstRuvwxyzABCDEFGHqr
345 with gil: 1lmnopcdefghijkJ
346 raise FunctionNotFoundError("function nvvmCompileProgram is not found")
347 return (<nvvmResult (*)(nvvmProgram, int, const char**) noexcept nogil>__nvvmCompileProgram)( 1alnpSdefghijkstRuvwxyzABCDEFGHqr
348 prog, numOptions, options)
351cdef nvvmResult _nvvmVerifyProgram(nvvmProgram prog, int numOptions, const char** options) except?_NVVMRESULT_INTERNAL_LOADING_ERROR nogil: 1almnopcdefghijkJ
352 global __nvvmVerifyProgram
353 _check_or_init_nvvm() 1amocTKLMNOPstQRuvwxyzABCDEFGHqr
354 if __nvvmVerifyProgram == NULL: 1amocTKLMNOPstQRuvwxyzABCDEFGHqr
355 with gil: 1lmnopcdefghijkJ
356 raise FunctionNotFoundError("function nvvmVerifyProgram is not found")
357 return (<nvvmResult (*)(nvvmProgram, int, const char**) noexcept nogil>__nvvmVerifyProgram)( 1amocTKLMNOPstQRuvwxyzABCDEFGHqr
358 prog, numOptions, options)
361cdef nvvmResult _nvvmGetCompiledResultSize(nvvmProgram prog, size_t* bufferSizeRet) except?_NVVMRESULT_INTERNAL_LOADING_ERROR nogil: 1aX
362 global __nvvmGetCompiledResultSize
363 _check_or_init_nvvm() 1adefghijkIstRuvwxyzABCDEFGHqr
364 if __nvvmGetCompiledResultSize == NULL: 1adefghijkIstRuvwxyzABCDEFGHqr
365 with gil: 1X
366 raise FunctionNotFoundError("function nvvmGetCompiledResultSize is not found")
367 return (<nvvmResult (*)(nvvmProgram, size_t*) noexcept nogil>__nvvmGetCompiledResultSize)( 1adefghijkIstRuvwxyzABCDEFGHqr
368 prog, bufferSizeRet)
371cdef nvvmResult _nvvmGetCompiledResult(nvvmProgram prog, char* buffer) except?_NVVMRESULT_INTERNAL_LOADING_ERROR nogil:
372 global __nvvmGetCompiledResult
373 _check_or_init_nvvm() 1adefghijkIstRuvwxyzABCDEFGHqr
374 if __nvvmGetCompiledResult == NULL: 1adefghijkIstRuvwxyzABCDEFGHqr
375 with gil:
376 raise FunctionNotFoundError("function nvvmGetCompiledResult is not found")
377 return (<nvvmResult (*)(nvvmProgram, char*) noexcept nogil>__nvvmGetCompiledResult)( 1adefghijkIstRuvwxyzABCDEFGHqr
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() 1lmnopcdefghijkJQ
384 if __nvvmGetProgramLogSize == NULL: 1lmnopcdefghijkJQ
385 with gil:
386 raise FunctionNotFoundError("function nvvmGetProgramLogSize is not found")
387 return (<nvvmResult (*)(nvvmProgram, size_t*) noexcept nogil>__nvvmGetProgramLogSize)( 1lmnopcdefghijkJQ
388 prog, bufferSizeRet)
391cdef nvvmResult _nvvmGetProgramLog(nvvmProgram prog, char* buffer) except?_NVVMRESULT_INTERNAL_LOADING_ERROR nogil:
392 global __nvvmGetProgramLog
393 _check_or_init_nvvm() 1lmnopcdefghijkJQ
394 if __nvvmGetProgramLog == NULL: 1lmnopcdefghijkJQ
395 with gil:
396 raise FunctionNotFoundError("function nvvmGetProgramLog is not found")
397 return (<nvvmResult (*)(nvvmProgram, char*) noexcept nogil>__nvvmGetProgramLog)( 1lmnopcdefghijkJQ
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() 1X
404 if __nvvmLLVMVersion == NULL: 1X
405 with gil:
406 raise FunctionNotFoundError("function nvvmLLVMVersion is not found")
407 return (<nvvmResult (*)(const char*, int*) noexcept nogil>__nvvmLLVMVersion)( 1X
408 arch, major)