| # SPDX-FileCopyrightText: Copyright (c) 2024-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. | |
| # | |
| # SPDX-License-Identifier: LicenseRef-NVIDIA-SOFTWARE-LICENSE | |
| # | |
| # This code was automatically generated across versions from 12.0.1 to 12.9.1. Do not modify it directly. | |
| from libc.stdint cimport intptr_t, uintptr_t | |
| import threading | |
| from .utils import FunctionNotFoundError, NotSupportedError | |
| from cuda.pathfinder import load_nvidia_dynamic_lib | |
| ############################################################################### | |
| # Extern | |
| ############################################################################### | |
| cdef extern from "<dlfcn.h>" nogil: | |
| void* dlopen(const char*, int) | |
| char* dlerror() | |
| void* dlsym(void*, const char*) | |
| int dlclose(void*) | |
| enum: | |
| RTLD_LAZY | |
| RTLD_NOW | |
| RTLD_GLOBAL | |
| RTLD_LOCAL | |
| const void* RTLD_DEFAULT 'RTLD_DEFAULT' | |
| ############################################################################### | |
| # Wrapper init | |
| ############################################################################### | |
| cdef object __symbol_lock = threading.Lock() | |
| cdef bint __py_nvjitlink_init = False | |
| cdef void* __cuDriverGetVersion = NULL | |
| cdef void* __nvJitLinkCreate = NULL | |
| cdef void* __nvJitLinkDestroy = NULL | |
| cdef void* __nvJitLinkAddData = NULL | |
| cdef void* __nvJitLinkAddFile = NULL | |
| cdef void* __nvJitLinkComplete = NULL | |
| cdef void* __nvJitLinkGetLinkedCubinSize = NULL | |
| cdef void* __nvJitLinkGetLinkedCubin = NULL | |
| cdef void* __nvJitLinkGetLinkedPtxSize = NULL | |
| cdef void* __nvJitLinkGetLinkedPtx = NULL | |
| cdef void* __nvJitLinkGetErrorLogSize = NULL | |
| cdef void* __nvJitLinkGetErrorLog = NULL | |
| cdef void* __nvJitLinkGetInfoLogSize = NULL | |
| cdef void* __nvJitLinkGetInfoLog = NULL | |
| cdef void* __nvJitLinkVersion = NULL | |
| cdef void* load_library() except* with gil: | |
| cdef uintptr_t handle = load_nvidia_dynamic_lib("nvJitLink")._handle_uint | |
| return <void*>handle | |
| cdef int __check_or_init_nvjitlink() except -1 nogil: | |
| global __py_nvjitlink_init | |
| cdef void* handle = NULL | |
| with gil, __symbol_lock: | |
| # Load function | |
| global __nvJitLinkCreate | |
| __nvJitLinkCreate = dlsym(RTLD_DEFAULT, 'nvJitLinkCreate') | |
| if __nvJitLinkCreate == NULL: | |
| if handle == NULL: | |
| handle = load_library() | |
| __nvJitLinkCreate = dlsym(handle, 'nvJitLinkCreate') | |
| global __nvJitLinkDestroy | |
| __nvJitLinkDestroy = dlsym(RTLD_DEFAULT, 'nvJitLinkDestroy') | |
| if __nvJitLinkDestroy == NULL: | |
| if handle == NULL: | |
| handle = load_library() | |
| __nvJitLinkDestroy = dlsym(handle, 'nvJitLinkDestroy') | |
| global __nvJitLinkAddData | |
| __nvJitLinkAddData = dlsym(RTLD_DEFAULT, 'nvJitLinkAddData') | |
| if __nvJitLinkAddData == NULL: | |
| if handle == NULL: | |
| handle = load_library() | |
| __nvJitLinkAddData = dlsym(handle, 'nvJitLinkAddData') | |
| global __nvJitLinkAddFile | |
| __nvJitLinkAddFile = dlsym(RTLD_DEFAULT, 'nvJitLinkAddFile') | |
| if __nvJitLinkAddFile == NULL: | |
| if handle == NULL: | |
| handle = load_library() | |
| __nvJitLinkAddFile = dlsym(handle, 'nvJitLinkAddFile') | |
| global __nvJitLinkComplete | |
| __nvJitLinkComplete = dlsym(RTLD_DEFAULT, 'nvJitLinkComplete') | |
| if __nvJitLinkComplete == NULL: | |
| if handle == NULL: | |
| handle = load_library() | |
| __nvJitLinkComplete = dlsym(handle, 'nvJitLinkComplete') | |
| global __nvJitLinkGetLinkedCubinSize | |
| __nvJitLinkGetLinkedCubinSize = dlsym(RTLD_DEFAULT, 'nvJitLinkGetLinkedCubinSize') | |
| if __nvJitLinkGetLinkedCubinSize == NULL: | |
| if handle == NULL: | |
| handle = load_library() | |
| __nvJitLinkGetLinkedCubinSize = dlsym(handle, 'nvJitLinkGetLinkedCubinSize') | |
| global __nvJitLinkGetLinkedCubin | |
| __nvJitLinkGetLinkedCubin = dlsym(RTLD_DEFAULT, 'nvJitLinkGetLinkedCubin') | |
| if __nvJitLinkGetLinkedCubin == NULL: | |
| if handle == NULL: | |
| handle = load_library() | |
| __nvJitLinkGetLinkedCubin = dlsym(handle, 'nvJitLinkGetLinkedCubin') | |
| global __nvJitLinkGetLinkedPtxSize | |
| __nvJitLinkGetLinkedPtxSize = dlsym(RTLD_DEFAULT, 'nvJitLinkGetLinkedPtxSize') | |
| if __nvJitLinkGetLinkedPtxSize == NULL: | |
| if handle == NULL: | |
| handle = load_library() | |
| __nvJitLinkGetLinkedPtxSize = dlsym(handle, 'nvJitLinkGetLinkedPtxSize') | |
| global __nvJitLinkGetLinkedPtx | |
| __nvJitLinkGetLinkedPtx = dlsym(RTLD_DEFAULT, 'nvJitLinkGetLinkedPtx') | |
| if __nvJitLinkGetLinkedPtx == NULL: | |
| if handle == NULL: | |
| handle = load_library() | |
| __nvJitLinkGetLinkedPtx = dlsym(handle, 'nvJitLinkGetLinkedPtx') | |
| global __nvJitLinkGetErrorLogSize | |
| __nvJitLinkGetErrorLogSize = dlsym(RTLD_DEFAULT, 'nvJitLinkGetErrorLogSize') | |
| if __nvJitLinkGetErrorLogSize == NULL: | |
| if handle == NULL: | |
| handle = load_library() | |
| __nvJitLinkGetErrorLogSize = dlsym(handle, 'nvJitLinkGetErrorLogSize') | |
| global __nvJitLinkGetErrorLog | |
| __nvJitLinkGetErrorLog = dlsym(RTLD_DEFAULT, 'nvJitLinkGetErrorLog') | |
| if __nvJitLinkGetErrorLog == NULL: | |
| if handle == NULL: | |
| handle = load_library() | |
| __nvJitLinkGetErrorLog = dlsym(handle, 'nvJitLinkGetErrorLog') | |
| global __nvJitLinkGetInfoLogSize | |
| __nvJitLinkGetInfoLogSize = dlsym(RTLD_DEFAULT, 'nvJitLinkGetInfoLogSize') | |
| if __nvJitLinkGetInfoLogSize == NULL: | |
| if handle == NULL: | |
| handle = load_library() | |
| __nvJitLinkGetInfoLogSize = dlsym(handle, 'nvJitLinkGetInfoLogSize') | |
| global __nvJitLinkGetInfoLog | |
| __nvJitLinkGetInfoLog = dlsym(RTLD_DEFAULT, 'nvJitLinkGetInfoLog') | |
| if __nvJitLinkGetInfoLog == NULL: | |
| if handle == NULL: | |
| handle = load_library() | |
| __nvJitLinkGetInfoLog = dlsym(handle, 'nvJitLinkGetInfoLog') | |
| global __nvJitLinkVersion | |
| __nvJitLinkVersion = dlsym(RTLD_DEFAULT, 'nvJitLinkVersion') | |
| if __nvJitLinkVersion == NULL: | |
| if handle == NULL: | |
| handle = load_library() | |
| __nvJitLinkVersion = dlsym(handle, 'nvJitLinkVersion') | |
| __py_nvjitlink_init = True | |
| return 0 | |
| cdef inline int _check_or_init_nvjitlink() except -1 nogil: | |
| if __py_nvjitlink_init: | |
| return 0 | |
| return __check_or_init_nvjitlink() | |
| cdef dict func_ptrs = None | |
| cpdef dict _inspect_function_pointers(): | |
| global func_ptrs | |
| if func_ptrs is not None: | |
| return func_ptrs | |
| _check_or_init_nvjitlink() | |
| cdef dict data = {} | |
| global __nvJitLinkCreate | |
| data["__nvJitLinkCreate"] = <intptr_t>__nvJitLinkCreate | |
| global __nvJitLinkDestroy | |
| data["__nvJitLinkDestroy"] = <intptr_t>__nvJitLinkDestroy | |
| global __nvJitLinkAddData | |
| data["__nvJitLinkAddData"] = <intptr_t>__nvJitLinkAddData | |
| global __nvJitLinkAddFile | |
| data["__nvJitLinkAddFile"] = <intptr_t>__nvJitLinkAddFile | |
| global __nvJitLinkComplete | |
| data["__nvJitLinkComplete"] = <intptr_t>__nvJitLinkComplete | |
| global __nvJitLinkGetLinkedCubinSize | |
| data["__nvJitLinkGetLinkedCubinSize"] = <intptr_t>__nvJitLinkGetLinkedCubinSize | |
| global __nvJitLinkGetLinkedCubin | |
| data["__nvJitLinkGetLinkedCubin"] = <intptr_t>__nvJitLinkGetLinkedCubin | |
| global __nvJitLinkGetLinkedPtxSize | |
| data["__nvJitLinkGetLinkedPtxSize"] = <intptr_t>__nvJitLinkGetLinkedPtxSize | |
| global __nvJitLinkGetLinkedPtx | |
| data["__nvJitLinkGetLinkedPtx"] = <intptr_t>__nvJitLinkGetLinkedPtx | |
| global __nvJitLinkGetErrorLogSize | |
| data["__nvJitLinkGetErrorLogSize"] = <intptr_t>__nvJitLinkGetErrorLogSize | |
| global __nvJitLinkGetErrorLog | |
| data["__nvJitLinkGetErrorLog"] = <intptr_t>__nvJitLinkGetErrorLog | |
| global __nvJitLinkGetInfoLogSize | |
| data["__nvJitLinkGetInfoLogSize"] = <intptr_t>__nvJitLinkGetInfoLogSize | |
| global __nvJitLinkGetInfoLog | |
| data["__nvJitLinkGetInfoLog"] = <intptr_t>__nvJitLinkGetInfoLog | |
| global __nvJitLinkVersion | |
| data["__nvJitLinkVersion"] = <intptr_t>__nvJitLinkVersion | |
| func_ptrs = data | |
| return data | |
| cpdef _inspect_function_pointer(str name): | |
| global func_ptrs | |
| if func_ptrs is None: | |
| func_ptrs = _inspect_function_pointers() | |
| return func_ptrs[name] | |
| ############################################################################### | |
| # Wrapper functions | |
| ############################################################################### | |
| cdef nvJitLinkResult _nvJitLinkCreate(nvJitLinkHandle* handle, uint32_t numOptions, const char** options) except?_NVJITLINKRESULT_INTERNAL_LOADING_ERROR nogil: | |
| global __nvJitLinkCreate | |
| _check_or_init_nvjitlink() | |
| if __nvJitLinkCreate == NULL: | |
| with gil: | |
| raise FunctionNotFoundError("function nvJitLinkCreate is not found") | |
| return (<nvJitLinkResult (*)(nvJitLinkHandle*, uint32_t, const char**) noexcept nogil>__nvJitLinkCreate)( | |
| handle, numOptions, options) | |
| cdef nvJitLinkResult _nvJitLinkDestroy(nvJitLinkHandle* handle) except?_NVJITLINKRESULT_INTERNAL_LOADING_ERROR nogil: | |
| global __nvJitLinkDestroy | |
| _check_or_init_nvjitlink() | |
| if __nvJitLinkDestroy == NULL: | |
| with gil: | |
| raise FunctionNotFoundError("function nvJitLinkDestroy is not found") | |
| return (<nvJitLinkResult (*)(nvJitLinkHandle*) noexcept nogil>__nvJitLinkDestroy)( | |
| handle) | |
| cdef nvJitLinkResult _nvJitLinkAddData(nvJitLinkHandle handle, nvJitLinkInputType inputType, const void* data, size_t size, const char* name) except?_NVJITLINKRESULT_INTERNAL_LOADING_ERROR nogil: | |
| global __nvJitLinkAddData | |
| _check_or_init_nvjitlink() | |
| if __nvJitLinkAddData == NULL: | |
| with gil: | |
| raise FunctionNotFoundError("function nvJitLinkAddData is not found") | |
| return (<nvJitLinkResult (*)(nvJitLinkHandle, nvJitLinkInputType, const void*, size_t, const char*) noexcept nogil>__nvJitLinkAddData)( | |
| handle, inputType, data, size, name) | |
| cdef nvJitLinkResult _nvJitLinkAddFile(nvJitLinkHandle handle, nvJitLinkInputType inputType, const char* fileName) except?_NVJITLINKRESULT_INTERNAL_LOADING_ERROR nogil: | |
| global __nvJitLinkAddFile | |
| _check_or_init_nvjitlink() | |
| if __nvJitLinkAddFile == NULL: | |
| with gil: | |
| raise FunctionNotFoundError("function nvJitLinkAddFile is not found") | |
| return (<nvJitLinkResult (*)(nvJitLinkHandle, nvJitLinkInputType, const char*) noexcept nogil>__nvJitLinkAddFile)( | |
| handle, inputType, fileName) | |
| cdef nvJitLinkResult _nvJitLinkComplete(nvJitLinkHandle handle) except?_NVJITLINKRESULT_INTERNAL_LOADING_ERROR nogil: | |
| global __nvJitLinkComplete | |
| _check_or_init_nvjitlink() | |
| if __nvJitLinkComplete == NULL: | |
| with gil: | |
| raise FunctionNotFoundError("function nvJitLinkComplete is not found") | |
| return (<nvJitLinkResult (*)(nvJitLinkHandle) noexcept nogil>__nvJitLinkComplete)( | |
| handle) | |
| cdef nvJitLinkResult _nvJitLinkGetLinkedCubinSize(nvJitLinkHandle handle, size_t* size) except?_NVJITLINKRESULT_INTERNAL_LOADING_ERROR nogil: | |
| global __nvJitLinkGetLinkedCubinSize | |
| _check_or_init_nvjitlink() | |
| if __nvJitLinkGetLinkedCubinSize == NULL: | |
| with gil: | |
| raise FunctionNotFoundError("function nvJitLinkGetLinkedCubinSize is not found") | |
| return (<nvJitLinkResult (*)(nvJitLinkHandle, size_t*) noexcept nogil>__nvJitLinkGetLinkedCubinSize)( | |
| handle, size) | |
| cdef nvJitLinkResult _nvJitLinkGetLinkedCubin(nvJitLinkHandle handle, void* cubin) except?_NVJITLINKRESULT_INTERNAL_LOADING_ERROR nogil: | |
| global __nvJitLinkGetLinkedCubin | |
| _check_or_init_nvjitlink() | |
| if __nvJitLinkGetLinkedCubin == NULL: | |
| with gil: | |
| raise FunctionNotFoundError("function nvJitLinkGetLinkedCubin is not found") | |
| return (<nvJitLinkResult (*)(nvJitLinkHandle, void*) noexcept nogil>__nvJitLinkGetLinkedCubin)( | |
| handle, cubin) | |
| cdef nvJitLinkResult _nvJitLinkGetLinkedPtxSize(nvJitLinkHandle handle, size_t* size) except?_NVJITLINKRESULT_INTERNAL_LOADING_ERROR nogil: | |
| global __nvJitLinkGetLinkedPtxSize | |
| _check_or_init_nvjitlink() | |
| if __nvJitLinkGetLinkedPtxSize == NULL: | |
| with gil: | |
| raise FunctionNotFoundError("function nvJitLinkGetLinkedPtxSize is not found") | |
| return (<nvJitLinkResult (*)(nvJitLinkHandle, size_t*) noexcept nogil>__nvJitLinkGetLinkedPtxSize)( | |
| handle, size) | |
| cdef nvJitLinkResult _nvJitLinkGetLinkedPtx(nvJitLinkHandle handle, char* ptx) except?_NVJITLINKRESULT_INTERNAL_LOADING_ERROR nogil: | |
| global __nvJitLinkGetLinkedPtx | |
| _check_or_init_nvjitlink() | |
| if __nvJitLinkGetLinkedPtx == NULL: | |
| with gil: | |
| raise FunctionNotFoundError("function nvJitLinkGetLinkedPtx is not found") | |
| return (<nvJitLinkResult (*)(nvJitLinkHandle, char*) noexcept nogil>__nvJitLinkGetLinkedPtx)( | |
| handle, ptx) | |
| cdef nvJitLinkResult _nvJitLinkGetErrorLogSize(nvJitLinkHandle handle, size_t* size) except?_NVJITLINKRESULT_INTERNAL_LOADING_ERROR nogil: | |
| global __nvJitLinkGetErrorLogSize | |
| _check_or_init_nvjitlink() | |
| if __nvJitLinkGetErrorLogSize == NULL: | |
| with gil: | |
| raise FunctionNotFoundError("function nvJitLinkGetErrorLogSize is not found") | |
| return (<nvJitLinkResult (*)(nvJitLinkHandle, size_t*) noexcept nogil>__nvJitLinkGetErrorLogSize)( | |
| handle, size) | |
| cdef nvJitLinkResult _nvJitLinkGetErrorLog(nvJitLinkHandle handle, char* log) except?_NVJITLINKRESULT_INTERNAL_LOADING_ERROR nogil: | |
| global __nvJitLinkGetErrorLog | |
| _check_or_init_nvjitlink() | |
| if __nvJitLinkGetErrorLog == NULL: | |
| with gil: | |
| raise FunctionNotFoundError("function nvJitLinkGetErrorLog is not found") | |
| return (<nvJitLinkResult (*)(nvJitLinkHandle, char*) noexcept nogil>__nvJitLinkGetErrorLog)( | |
| handle, log) | |
| cdef nvJitLinkResult _nvJitLinkGetInfoLogSize(nvJitLinkHandle handle, size_t* size) except?_NVJITLINKRESULT_INTERNAL_LOADING_ERROR nogil: | |
| global __nvJitLinkGetInfoLogSize | |
| _check_or_init_nvjitlink() | |
| if __nvJitLinkGetInfoLogSize == NULL: | |
| with gil: | |
| raise FunctionNotFoundError("function nvJitLinkGetInfoLogSize is not found") | |
| return (<nvJitLinkResult (*)(nvJitLinkHandle, size_t*) noexcept nogil>__nvJitLinkGetInfoLogSize)( | |
| handle, size) | |
| cdef nvJitLinkResult _nvJitLinkGetInfoLog(nvJitLinkHandle handle, char* log) except?_NVJITLINKRESULT_INTERNAL_LOADING_ERROR nogil: | |
| global __nvJitLinkGetInfoLog | |
| _check_or_init_nvjitlink() | |
| if __nvJitLinkGetInfoLog == NULL: | |
| with gil: | |
| raise FunctionNotFoundError("function nvJitLinkGetInfoLog is not found") | |
| return (<nvJitLinkResult (*)(nvJitLinkHandle, char*) noexcept nogil>__nvJitLinkGetInfoLog)( | |
| handle, log) | |
| cdef nvJitLinkResult _nvJitLinkVersion(unsigned int* major, unsigned int* minor) except?_NVJITLINKRESULT_INTERNAL_LOADING_ERROR nogil: | |
| global __nvJitLinkVersion | |
| _check_or_init_nvjitlink() | |
| if __nvJitLinkVersion == NULL: | |
| with gil: | |
| raise FunctionNotFoundError("function nvJitLinkVersion is not found") | |
| return (<nvJitLinkResult (*)(unsigned int*, unsigned int*) noexcept nogil>__nvJitLinkVersion)( | |
| major, minor) | |