# SPDX-FileCopyrightText: Copyright (c) 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 "" 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' cdef int get_cuda_version(): cdef void* handle = NULL cdef int err, driver_ver = 0 # Load driver to check version handle = dlopen('libcuda.so.1', RTLD_NOW | RTLD_GLOBAL) if handle == NULL: err_msg = dlerror() raise NotSupportedError(f'CUDA driver is not found ({err_msg.decode()})') cuDriverGetVersion = dlsym(handle, "cuDriverGetVersion") if cuDriverGetVersion == NULL: raise RuntimeError('Did not find cuDriverGetVersion symbol in libcuda.so.1') err = (cuDriverGetVersion)(&driver_ver) if err != 0: raise RuntimeError(f'cuDriverGetVersion returned error code {err}') return driver_ver ############################################################################### # Wrapper init ############################################################################### cdef object __symbol_lock = threading.Lock() cdef bint __py_nvvm_init = False cdef void* __cuDriverGetVersion = NULL cdef void* __nvvmGetErrorString = NULL cdef void* __nvvmVersion = NULL cdef void* __nvvmIRVersion = NULL cdef void* __nvvmCreateProgram = NULL cdef void* __nvvmDestroyProgram = NULL cdef void* __nvvmAddModuleToProgram = NULL cdef void* __nvvmLazyAddModuleToProgram = NULL cdef void* __nvvmCompileProgram = NULL cdef void* __nvvmVerifyProgram = NULL cdef void* __nvvmGetCompiledResultSize = NULL cdef void* __nvvmGetCompiledResult = NULL cdef void* __nvvmGetProgramLogSize = NULL cdef void* __nvvmGetProgramLog = NULL cdef void* load_library() except* with gil: cdef uintptr_t handle = load_nvidia_dynamic_lib("nvvm")._handle_uint return handle cdef int __check_or_init_nvvm() except -1 nogil: global __py_nvvm_init cdef void* handle = NULL with gil, __symbol_lock: # Load function global __nvvmGetErrorString __nvvmGetErrorString = dlsym(RTLD_DEFAULT, 'nvvmGetErrorString') if __nvvmGetErrorString == NULL: if handle == NULL: handle = load_library() __nvvmGetErrorString = dlsym(handle, 'nvvmGetErrorString') global __nvvmVersion __nvvmVersion = dlsym(RTLD_DEFAULT, 'nvvmVersion') if __nvvmVersion == NULL: if handle == NULL: handle = load_library() __nvvmVersion = dlsym(handle, 'nvvmVersion') global __nvvmIRVersion __nvvmIRVersion = dlsym(RTLD_DEFAULT, 'nvvmIRVersion') if __nvvmIRVersion == NULL: if handle == NULL: handle = load_library() __nvvmIRVersion = dlsym(handle, 'nvvmIRVersion') global __nvvmCreateProgram __nvvmCreateProgram = dlsym(RTLD_DEFAULT, 'nvvmCreateProgram') if __nvvmCreateProgram == NULL: if handle == NULL: handle = load_library() __nvvmCreateProgram = dlsym(handle, 'nvvmCreateProgram') global __nvvmDestroyProgram __nvvmDestroyProgram = dlsym(RTLD_DEFAULT, 'nvvmDestroyProgram') if __nvvmDestroyProgram == NULL: if handle == NULL: handle = load_library() __nvvmDestroyProgram = dlsym(handle, 'nvvmDestroyProgram') global __nvvmAddModuleToProgram __nvvmAddModuleToProgram = dlsym(RTLD_DEFAULT, 'nvvmAddModuleToProgram') if __nvvmAddModuleToProgram == NULL: if handle == NULL: handle = load_library() __nvvmAddModuleToProgram = dlsym(handle, 'nvvmAddModuleToProgram') global __nvvmLazyAddModuleToProgram __nvvmLazyAddModuleToProgram = dlsym(RTLD_DEFAULT, 'nvvmLazyAddModuleToProgram') if __nvvmLazyAddModuleToProgram == NULL: if handle == NULL: handle = load_library() __nvvmLazyAddModuleToProgram = dlsym(handle, 'nvvmLazyAddModuleToProgram') global __nvvmCompileProgram __nvvmCompileProgram = dlsym(RTLD_DEFAULT, 'nvvmCompileProgram') if __nvvmCompileProgram == NULL: if handle == NULL: handle = load_library() __nvvmCompileProgram = dlsym(handle, 'nvvmCompileProgram') global __nvvmVerifyProgram __nvvmVerifyProgram = dlsym(RTLD_DEFAULT, 'nvvmVerifyProgram') if __nvvmVerifyProgram == NULL: if handle == NULL: handle = load_library() __nvvmVerifyProgram = dlsym(handle, 'nvvmVerifyProgram') global __nvvmGetCompiledResultSize __nvvmGetCompiledResultSize = dlsym(RTLD_DEFAULT, 'nvvmGetCompiledResultSize') if __nvvmGetCompiledResultSize == NULL: if handle == NULL: handle = load_library() __nvvmGetCompiledResultSize = dlsym(handle, 'nvvmGetCompiledResultSize') global __nvvmGetCompiledResult __nvvmGetCompiledResult = dlsym(RTLD_DEFAULT, 'nvvmGetCompiledResult') if __nvvmGetCompiledResult == NULL: if handle == NULL: handle = load_library() __nvvmGetCompiledResult = dlsym(handle, 'nvvmGetCompiledResult') global __nvvmGetProgramLogSize __nvvmGetProgramLogSize = dlsym(RTLD_DEFAULT, 'nvvmGetProgramLogSize') if __nvvmGetProgramLogSize == NULL: if handle == NULL: handle = load_library() __nvvmGetProgramLogSize = dlsym(handle, 'nvvmGetProgramLogSize') global __nvvmGetProgramLog __nvvmGetProgramLog = dlsym(RTLD_DEFAULT, 'nvvmGetProgramLog') if __nvvmGetProgramLog == NULL: if handle == NULL: handle = load_library() __nvvmGetProgramLog = dlsym(handle, 'nvvmGetProgramLog') __py_nvvm_init = True return 0 cdef int _check_or_init_nvvm() except -1 nogil: if __py_nvvm_init: return 0 return __check_or_init_nvvm() 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_nvvm() cdef dict data = {} global __nvvmGetErrorString data["__nvvmGetErrorString"] = __nvvmGetErrorString global __nvvmVersion data["__nvvmVersion"] = __nvvmVersion global __nvvmIRVersion data["__nvvmIRVersion"] = __nvvmIRVersion global __nvvmCreateProgram data["__nvvmCreateProgram"] = __nvvmCreateProgram global __nvvmDestroyProgram data["__nvvmDestroyProgram"] = __nvvmDestroyProgram global __nvvmAddModuleToProgram data["__nvvmAddModuleToProgram"] = __nvvmAddModuleToProgram global __nvvmLazyAddModuleToProgram data["__nvvmLazyAddModuleToProgram"] = __nvvmLazyAddModuleToProgram global __nvvmCompileProgram data["__nvvmCompileProgram"] = __nvvmCompileProgram global __nvvmVerifyProgram data["__nvvmVerifyProgram"] = __nvvmVerifyProgram global __nvvmGetCompiledResultSize data["__nvvmGetCompiledResultSize"] = __nvvmGetCompiledResultSize global __nvvmGetCompiledResult data["__nvvmGetCompiledResult"] = __nvvmGetCompiledResult global __nvvmGetProgramLogSize data["__nvvmGetProgramLogSize"] = __nvvmGetProgramLogSize global __nvvmGetProgramLog data["__nvvmGetProgramLog"] = __nvvmGetProgramLog 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 const char* _nvvmGetErrorString(nvvmResult result) except?NULL nogil: global __nvvmGetErrorString _check_or_init_nvvm() if __nvvmGetErrorString == NULL: with gil: raise FunctionNotFoundError("function nvvmGetErrorString is not found") return (__nvvmGetErrorString)( result) cdef nvvmResult _nvvmVersion(int* major, int* minor) except?_NVVMRESULT_INTERNAL_LOADING_ERROR nogil: global __nvvmVersion _check_or_init_nvvm() if __nvvmVersion == NULL: with gil: raise FunctionNotFoundError("function nvvmVersion is not found") return (__nvvmVersion)( major, minor) cdef nvvmResult _nvvmIRVersion(int* majorIR, int* minorIR, int* majorDbg, int* minorDbg) except?_NVVMRESULT_INTERNAL_LOADING_ERROR nogil: global __nvvmIRVersion _check_or_init_nvvm() if __nvvmIRVersion == NULL: with gil: raise FunctionNotFoundError("function nvvmIRVersion is not found") return (__nvvmIRVersion)( majorIR, minorIR, majorDbg, minorDbg) cdef nvvmResult _nvvmCreateProgram(nvvmProgram* prog) except?_NVVMRESULT_INTERNAL_LOADING_ERROR nogil: global __nvvmCreateProgram _check_or_init_nvvm() if __nvvmCreateProgram == NULL: with gil: raise FunctionNotFoundError("function nvvmCreateProgram is not found") return (__nvvmCreateProgram)( prog) cdef nvvmResult _nvvmDestroyProgram(nvvmProgram* prog) except?_NVVMRESULT_INTERNAL_LOADING_ERROR nogil: global __nvvmDestroyProgram _check_or_init_nvvm() if __nvvmDestroyProgram == NULL: with gil: raise FunctionNotFoundError("function nvvmDestroyProgram is not found") return (__nvvmDestroyProgram)( prog) cdef nvvmResult _nvvmAddModuleToProgram(nvvmProgram prog, const char* buffer, size_t size, const char* name) except?_NVVMRESULT_INTERNAL_LOADING_ERROR nogil: global __nvvmAddModuleToProgram _check_or_init_nvvm() if __nvvmAddModuleToProgram == NULL: with gil: raise FunctionNotFoundError("function nvvmAddModuleToProgram is not found") return (__nvvmAddModuleToProgram)( prog, buffer, size, name) cdef nvvmResult _nvvmLazyAddModuleToProgram(nvvmProgram prog, const char* buffer, size_t size, const char* name) except?_NVVMRESULT_INTERNAL_LOADING_ERROR nogil: global __nvvmLazyAddModuleToProgram _check_or_init_nvvm() if __nvvmLazyAddModuleToProgram == NULL: with gil: raise FunctionNotFoundError("function nvvmLazyAddModuleToProgram is not found") return (__nvvmLazyAddModuleToProgram)( prog, buffer, size, name) cdef nvvmResult _nvvmCompileProgram(nvvmProgram prog, int numOptions, const char** options) except?_NVVMRESULT_INTERNAL_LOADING_ERROR nogil: global __nvvmCompileProgram _check_or_init_nvvm() if __nvvmCompileProgram == NULL: with gil: raise FunctionNotFoundError("function nvvmCompileProgram is not found") return (__nvvmCompileProgram)( prog, numOptions, options) cdef nvvmResult _nvvmVerifyProgram(nvvmProgram prog, int numOptions, const char** options) except?_NVVMRESULT_INTERNAL_LOADING_ERROR nogil: global __nvvmVerifyProgram _check_or_init_nvvm() if __nvvmVerifyProgram == NULL: with gil: raise FunctionNotFoundError("function nvvmVerifyProgram is not found") return (__nvvmVerifyProgram)( prog, numOptions, options) cdef nvvmResult _nvvmGetCompiledResultSize(nvvmProgram prog, size_t* bufferSizeRet) except?_NVVMRESULT_INTERNAL_LOADING_ERROR nogil: global __nvvmGetCompiledResultSize _check_or_init_nvvm() if __nvvmGetCompiledResultSize == NULL: with gil: raise FunctionNotFoundError("function nvvmGetCompiledResultSize is not found") return (__nvvmGetCompiledResultSize)( prog, bufferSizeRet) cdef nvvmResult _nvvmGetCompiledResult(nvvmProgram prog, char* buffer) except?_NVVMRESULT_INTERNAL_LOADING_ERROR nogil: global __nvvmGetCompiledResult _check_or_init_nvvm() if __nvvmGetCompiledResult == NULL: with gil: raise FunctionNotFoundError("function nvvmGetCompiledResult is not found") return (__nvvmGetCompiledResult)( prog, buffer) cdef nvvmResult _nvvmGetProgramLogSize(nvvmProgram prog, size_t* bufferSizeRet) except?_NVVMRESULT_INTERNAL_LOADING_ERROR nogil: global __nvvmGetProgramLogSize _check_or_init_nvvm() if __nvvmGetProgramLogSize == NULL: with gil: raise FunctionNotFoundError("function nvvmGetProgramLogSize is not found") return (__nvvmGetProgramLogSize)( prog, bufferSizeRet) cdef nvvmResult _nvvmGetProgramLog(nvvmProgram prog, char* buffer) except?_NVVMRESULT_INTERNAL_LOADING_ERROR nogil: global __nvvmGetProgramLog _check_or_init_nvvm() if __nvvmGetProgramLog == NULL: with gil: raise FunctionNotFoundError("function nvvmGetProgramLog is not found") return (__nvvmGetProgramLog)( prog, buffer)