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
« 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.
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_nvjitlink_init = False
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
78cdef void* load_library() except* with gil:
79 cdef uintptr_t handle = load_nvidia_dynamic_lib("nvJitLink")._handle_uint
80 return <void*>handle
83cdef int _init_nvjitlink() except -1 nogil:
84 global __py_nvjitlink_init
86 cdef void* handle = NULL
88 with gil, __symbol_lock:
89 # Recheck the flag after obtaining the locks
90 if __py_nvjitlink_init:
91 return 0
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')
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')
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')
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')
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')
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')
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')
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')
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')
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')
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')
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')
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')
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')
192 __py_nvjitlink_init = True
193 return 0
196cdef inline int _check_or_init_nvjitlink() except -1 nogil:
197 if __py_nvjitlink_init:
198 return 0
200 return _init_nvjitlink()
202cdef dict func_ptrs = None
205cpdef dict _inspect_function_pointers():
206 global func_ptrs
207 if func_ptrs is not None:
208 return func_ptrs
210 _check_or_init_nvjitlink()
211 cdef dict data = {}
213 global __nvJitLinkCreate
214 data["__nvJitLinkCreate"] = <intptr_t>__nvJitLinkCreate
216 global __nvJitLinkDestroy
217 data["__nvJitLinkDestroy"] = <intptr_t>__nvJitLinkDestroy
219 global __nvJitLinkAddData
220 data["__nvJitLinkAddData"] = <intptr_t>__nvJitLinkAddData
222 global __nvJitLinkAddFile
223 data["__nvJitLinkAddFile"] = <intptr_t>__nvJitLinkAddFile
225 global __nvJitLinkComplete
226 data["__nvJitLinkComplete"] = <intptr_t>__nvJitLinkComplete
228 global __nvJitLinkGetLinkedCubinSize
229 data["__nvJitLinkGetLinkedCubinSize"] = <intptr_t>__nvJitLinkGetLinkedCubinSize
231 global __nvJitLinkGetLinkedCubin
232 data["__nvJitLinkGetLinkedCubin"] = <intptr_t>__nvJitLinkGetLinkedCubin
234 global __nvJitLinkGetLinkedPtxSize
235 data["__nvJitLinkGetLinkedPtxSize"] = <intptr_t>__nvJitLinkGetLinkedPtxSize
237 global __nvJitLinkGetLinkedPtx
238 data["__nvJitLinkGetLinkedPtx"] = <intptr_t>__nvJitLinkGetLinkedPtx
240 global __nvJitLinkGetErrorLogSize
241 data["__nvJitLinkGetErrorLogSize"] = <intptr_t>__nvJitLinkGetErrorLogSize
243 global __nvJitLinkGetErrorLog
244 data["__nvJitLinkGetErrorLog"] = <intptr_t>__nvJitLinkGetErrorLog
246 global __nvJitLinkGetInfoLogSize
247 data["__nvJitLinkGetInfoLogSize"] = <intptr_t>__nvJitLinkGetInfoLogSize
249 global __nvJitLinkGetInfoLog
250 data["__nvJitLinkGetInfoLog"] = <intptr_t>__nvJitLinkGetInfoLog
252 global __nvJitLinkVersion
253 data["__nvJitLinkVersion"] = <intptr_t>__nvJitLinkVersion
255 func_ptrs = data
256 return data
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]
266###############################################################################
267# Wrapper functions
268###############################################################################
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)