diff --git a/numba_cuda/numba/cuda/core/compiler.py b/numba_cuda/numba/cuda/core/compiler.py index 14b506a78..68f2556bc 100644 --- a/numba_cuda/numba/cuda/core/compiler.py +++ b/numba_cuda/numba/cuda/core/compiler.py @@ -8,7 +8,7 @@ from numba.core.errors import CompilerError from numba.parfors.parfor import ParforDiagnostics -from numba.core.untyped_passes import ExtractByteCode, FixupArgs +from numba.cuda.core.untyped_passes import ExtractByteCode, FixupArgs from numba.core.targetconfig import ConfigStack diff --git a/numba_cuda/numba/cuda/core/compiler_machinery.py b/numba_cuda/numba/cuda/core/compiler_machinery.py index 996015958..bf560ebac 100644 --- a/numba_cuda/numba/cuda/core/compiler_machinery.py +++ b/numba_cuda/numba/cuda/core/compiler_machinery.py @@ -12,7 +12,7 @@ from numba.cuda import utils from numba.core.tracing import event from numba.core.postproc import PostProcessor -from numba.core.ir_utils import enforce_no_dels, legalize_single_scope +from numba.cuda.core.ir_utils import enforce_no_dels, legalize_single_scope import numba.core.event as ev import numba.core.compiler_machinery as nccm diff --git a/numba_cuda/numba/cuda/core/ir_utils.py b/numba_cuda/numba/cuda/core/ir_utils.py index eaed25dba..d0eeb6ea7 100644 --- a/numba_cuda/numba/cuda/core/ir_utils.py +++ b/numba_cuda/numba/cuda/core/ir_utils.py @@ -1893,7 +1893,7 @@ def compile_to_numba_ir( if typingctx and other typing inputs are available and update typemap and calltypes. """ - from numba.core import typed_passes + from numba.cuda.core import typed_passes # mk_func can be actual function or make_function node, or a njit function if hasattr(mk_func, "code"): @@ -2013,8 +2013,8 @@ def __init__(self, f_ir): # added to create valid IR. # rebuild IR in SSA form - from numba.core.untyped_passes import ReconstructSSA - from numba.core.typed_passes import PreLowerStripPhis + from numba.cuda.core.untyped_passes import ReconstructSSA + from numba.cuda.core.typed_passes import PreLowerStripPhis reconstruct_ssa = ReconstructSSA() phistrip = PreLowerStripPhis() diff --git a/numba_cuda/numba/cuda/core/typed_passes.py b/numba_cuda/numba/cuda/core/typed_passes.py index b6a4ee19f..4c1c08a8c 100644 --- a/numba_cuda/numba/cuda/core/typed_passes.py +++ b/numba_cuda/numba/cuda/core/typed_passes.py @@ -36,7 +36,7 @@ register_pass, ) from numba.core.annotations import type_annotations -from numba.core.ir_utils import ( +from numba.cuda.core.ir_utils import ( raise_on_unsupported_feature, warn_deprecated, check_and_legalize_ir, diff --git a/numba_cuda/numba/cuda/core/untyped_passes.py b/numba_cuda/numba/cuda/core/untyped_passes.py index 2785036d7..f619e31bf 100644 --- a/numba_cuda/numba/cuda/core/untyped_passes.py +++ b/numba_cuda/numba/cuda/core/untyped_passes.py @@ -1868,7 +1868,7 @@ def run_pass(self, state): return False # run as subpipeline - from numba.cuda.compiler_machinery import PassManager + from numba.cuda.core.compiler_machinery import PassManager from numba.cuda.core.typed_passes import PartialTypeInference pm = PassManager("literal_unroll_subpipeline") diff --git a/numba_cuda/numba/cuda/cuda_paths.py b/numba_cuda/numba/cuda/cuda_paths.py index d8a37a59b..f664f837e 100644 --- a/numba_cuda/numba/cuda/cuda_paths.py +++ b/numba_cuda/numba/cuda/cuda_paths.py @@ -9,7 +9,7 @@ import site from pathlib import Path from numba.core.config import IS_WIN32 -from numba.misc.findlib import find_lib +from numba.cuda.misc.findlib import find_lib from numba import config import ctypes diff --git a/numba_cuda/numba/cuda/cudadrv/libs.py b/numba_cuda/numba/cuda/cudadrv/libs.py index 09f50ee92..9b5268d95 100644 --- a/numba_cuda/numba/cuda/cudadrv/libs.py +++ b/numba_cuda/numba/cuda/cudadrv/libs.py @@ -16,7 +16,7 @@ import sys import ctypes -from numba.misc.findlib import find_lib +from numba.cuda.misc.findlib import find_lib from numba.cuda.cuda_paths import get_cuda_paths from numba.cuda.cudadrv.driver import locate_driver_and_loader, load_driver from numba.cuda.cudadrv.error import CudaSupportError diff --git a/numba_cuda/numba/cuda/misc/findlib.py b/numba_cuda/numba/cuda/misc/findlib.py new file mode 100644 index 000000000..cd2804af3 --- /dev/null +++ b/numba_cuda/numba/cuda/misc/findlib.py @@ -0,0 +1,71 @@ +# SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: BSD-2-Clause + +import sys +import os +import re + + +def get_lib_dirs(): + """ + Anaconda specific + """ + if sys.platform == "win32": + # on windows, historically `DLLs` has been used for CUDA libraries, + # since approximately CUDA 9.2, `Library\bin` has been used. + dirnames = ["DLLs", os.path.join("Library", "bin")] + else: + dirnames = [ + "lib", + ] + libdirs = [os.path.join(sys.prefix, x) for x in dirnames] + return libdirs + + +DLLNAMEMAP = { + "linux": r"lib%(name)s\.so\.%(ver)s$", + "linux2": r"lib%(name)s\.so\.%(ver)s$", + "linux-static": r"lib%(name)s\.a$", + "darwin": r"lib%(name)s\.%(ver)s\.dylib$", + "win32": r"%(name)s%(ver)s\.dll$", + "win32-static": r"%(name)s\.lib$", + "bsd": r"lib%(name)s\.so\.%(ver)s$", +} + +RE_VER = r"[0-9]*([_\.][0-9]+)*" + + +def find_lib(libname, libdir=None, platform=None, static=False): + platform = platform or sys.platform + platform = "bsd" if "bsd" in platform else platform + if static: + platform = f"{platform}-static" + if platform not in DLLNAMEMAP: + # Return empty list if platform name is undefined. + # Not all platforms define their static library paths. + return [] + pat = DLLNAMEMAP[platform] % {"name": libname, "ver": RE_VER} + regex = re.compile(pat) + return find_file(regex, libdir) + + +def find_file(pat, libdir=None): + if libdir is None: + libdirs = get_lib_dirs() + elif isinstance(libdir, str): + libdirs = [ + libdir, + ] + else: + libdirs = list(libdir) + files = [] + for ldir in libdirs: + try: + entries = os.listdir(ldir) + except FileNotFoundError: + continue + candidates = [ + os.path.join(ldir, ent) for ent in entries if pat.match(ent) + ] + files.extend([c for c in candidates if os.path.isfile(c)]) + return files diff --git a/numba_cuda/numba/cuda/tests/cudadrv/test_cuda_libraries.py b/numba_cuda/numba/cuda/tests/cudadrv/test_cuda_libraries.py index 2ba26791a..c96162fb6 100644 --- a/numba_cuda/numba/cuda/tests/cudadrv/test_cuda_libraries.py +++ b/numba_cuda/numba/cuda/tests/cudadrv/test_cuda_libraries.py @@ -3,7 +3,7 @@ from numba.cuda.testing import unittest from numba.cuda.testing import skip_on_cudasim, skip_unless_conda_cudatoolkit -from numba.misc.findlib import find_lib +from numba.cuda.misc.findlib import find_lib @skip_on_cudasim("Library detection unsupported in the simulator") diff --git a/numba_cuda/numba/cuda/tests/cudapy/test_ir_utils.py b/numba_cuda/numba/cuda/tests/cudapy/test_ir_utils.py index b0c7838c0..4382dd49b 100644 --- a/numba_cuda/numba/cuda/tests/cudapy/test_ir_utils.py +++ b/numba_cuda/numba/cuda/tests/cudapy/test_ir_utils.py @@ -4,18 +4,19 @@ from numba.cuda.testing import CUDATestCase import numba from numba.core.registry import cpu_target -from numba.core.compiler import CompilerBase, Flags -from numba.core.compiler_machinery import PassManager -from numba.cuda.core import ir_utils, bytecode -from numba.core import types, ir, compiler, registry -from numba.core.untyped_passes import ( +from numba.cuda.core.compiler import CompilerBase +from numba.cuda.flags import Flags +from numba.cuda.core.compiler_machinery import PassManager +from numba.cuda.core import ir_utils +from numba.core import types, ir, bytecode, compiler, registry +from numba.cuda.core.untyped_passes import ( ExtractByteCode, TranslateByteCode, FixupArgs, IRProcessing, ) from numba.experimental import jitclass -from numba.core.typed_passes import ( +from numba.cuda.core.typed_passes import ( NopythonTypeInference, type_inference_stage, DeadCodeElimination, diff --git a/numba_cuda/numba/cuda/typing/templates.py b/numba_cuda/numba/cuda/typing/templates.py index fef4ef603..04f5a3682 100644 --- a/numba_cuda/numba/cuda/typing/templates.py +++ b/numba_cuda/numba/cuda/typing/templates.py @@ -645,7 +645,7 @@ def generic(self, args, kws): Type the overloaded function by compiling the appropriate implementation for the given args. """ - from numba.core.typed_passes import PreLowerStripPhis + from numba.cuda.core.typed_passes import PreLowerStripPhis disp, new_args = self._get_impl(args, kws) if disp is None: @@ -658,7 +658,7 @@ def generic(self, args, kws): if not self._inline.is_never_inline: # need to run the compiler front end up to type inference to compute # a signature - from numba.core import typed_passes, compiler + from numba.cuda.core import typed_passes, compiler from numba.core.inline_closurecall import InlineWorker fcomp = disp._compiler