B
     \                 @   s   d dl mZ d dlZd dlZd dlZd dlZd dlZd dlmZm	Z	 ejdkrVej
ZnejdkrhejZnejZdd Zdd	 Zdd
dZdddZdddZdd ZdS )    )print_functionN)find_lib	find_fileZwin32darwinc             C   sX   t jdpt jd}d|  }tt||}|sHd}tt||}|rTt|S d S )NZNUMBAPRO_LIBDEVICENUMBAPRO_CUDALIBzlibdevice\.%s(\.\d+)*\.bc$zlibdevice(\.\d+)*\.bc$)osenvirongetr   recompilemax)archlibdirZpat
candidates r   6lib/python3.7/site-packages/numba/cuda/cudadrv/libs.pyget_libdevice   s    r   c          	   C   s"   t t| d
}| S Q R X d S )Nrb)openr   read)r   Zbcfiler   r   r   open_libdevice    s    r   c             C   sH   | dkr t jdr t jdS t jd}t| ||}|rDt|S d S )NZnvvmZNUMBAPRO_NVVMr   )r   r   r	   r   r   )libplatformr   r   r   r   r   get_cudalib%   s
    r   Fc             C   s2   t | }|d krtd|  |r*t|S t|S )Nzlibrary %s not found)r   OSErrorctypesCDLL
_dllopener)r   cccpathr   r   r   open_cudalib-   s    
r    Tc       	      C   s(  d}d  }x|D ]}t|| }td| |rR|r>td| q^tdtj| ntd d}|s| d tjfkry$tdd	d
 t|dd td W q t	k
r } z"td||f  t
 sdnd}W d d }~X Y qX qW d}xB|D ]:}td|d	d
 t|}|rtd qtd|  d}qW | S )NFz!cublas cusparse cufft curand nvvmZFindingz	located atz	named z	ERROR: can't locate libTz	trying to open libraryz...)end)r   z	okz	ERROR: failed to open %s:
%s)Z
compute_20Z
compute_30Z
compute_35Z
compute_50z	finding libdevice forz#	ERROR: can't open libdevice for %s)splitr   printr   r   basenamesysr   r    r   _if_osx_10_5r   )	Z	_platformZprint_pathsZfailedZlibsr   r   eZarchsr   r   r   r   test6   s8    


$

r(   c              C   s6   t jdkr2tttt d d} | dk r2dS dS )Nr   r   .)
      TF)r%   r   tuplemapintZmac_verr"   )Zversr   r   r   r&   [   s
    
r&   )N)F)NT)Z
__future__r   r
   r   r%   r   r   Znumba.findlibr   r   ZWinDLLr   r   r   r   r   r    r(   r&   r   r   r   r   <module>   s"   



	
%