U
    yÊ¹jq  ã                   @   sž   U d dl 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 ddlm	Z	 G dd„ dƒZ
i Zeee
f ed< eedœd	d
„Zedœdd„Ze  ¡ dd„ ƒZdS )é    N)ÚDicté   )Ú
DriverBasec                   @   sŒ   e Zd Zeddœdd„Zdd„ Zdd„ Zd	d
„ Zedœdd„Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zeedœdd„ƒZdS )ÚBaseBackendN)Údevice_typeÚreturnc                 C   s
   || _ d S ©N©r   )Úselfr   © r   úT/var/www/html/bwave/python/venv/lib/python3.8/site-packages/triton/common/backend.pyÚ__init__   s    zBaseBackend.__init__c                 C   s   t ‚dS )zZ
        Custom the arch, extern_libs and stages per backend specific requirement
        N©ÚNotImplementedError)r
   ÚarchZextern_libsZstagesr   r   r   Ú
add_stages   s    zBaseBackend.add_stagesc                 C   s   t ‚dS )zZ
        Custom the ir, module, metadata and asm per backend specific requirement
        Nr   )r
   ZirZ
cur_moduleZnext_moduleÚmetadataÚasmr   r   r   Úadd_meta_info   s    zBaseBackend.add_meta_infoc                 C   s   t ‚dS )z2
        Return a callable to load binary
        Nr   ©r
   r   r   r   Úget_load_binary_fn   s    zBaseBackend.get_load_binary_fn)r   c                 C   s   t ‚dS )zW
        Get the backend driver. Please refer to "DriverBase" for more details
        Nr   r   r   r   r   Ú
get_driver#   s    zBaseBackend.get_driverc                 C   s   t ‚dS )z/
        Get stream for current device
        Nr   r   r   r   r   Ú
get_stream)   s    zBaseBackend.get_streamc                 C   s   t ‚d S r   r   ©r
   Zdevicer   r   r   Úget_device_properties/   s    z!BaseBackend.get_device_propertiesc                 C   s   t ‚dS )z$
        Get current device
        Nr   r   r   r   r   Úget_current_device2   s    zBaseBackend.get_current_devicec                 C   s   t ‚dS )z8
        Set current device as the given device
        Nr   r   r   r   r   Úset_current_device8   s    zBaseBackend.set_current_devicec                 C   s   t ‚d S r   r   r   r   r   r   Úget_kernel_bin>   s    zBaseBackend.get_kernel_binc                 C   s   t ‚dS )zA
        Generate the launcher stub to launch the kernel
        Nr   )r
   ÚnameÚ	signatureÚ	constantsr   r   r   Úmake_launcher_stubA   s    zBaseBackend.make_launcher_stubc                 K   s   t ‚dS )z=
        Get the architecture descriptor the backend
        Nr   )r
   Úkwargsr   r   r   Úget_architecture_descriptorG   s    z'BaseBackend.get_architecture_descriptorr	   c                 C   s   | |ƒS r   r   )Úclsr   r   r   r   Úcreate_backendM   s    zBaseBackend.create_backend)Ú__name__Ú
__module__Ú__qualname__Ústrr   r   r   r   r   r   r   r   r   r   r   r!   r#   Úclassmethodr%   r   r   r   r   r      s   r   Ú	_backends©r   Zbackend_clsc                 C   s   | t kr| | ¡t | < d S r   )r+   r%   r,   r   r   r   Úregister_backendU   s    r-   r	   c                 C   sj   | t krVd| › �}tjj|tjd�rRztj|tjd� W qV tk
rN   Y d S X nd S | t krft |  S d S )Nz...third_party.)Úpackage)r+   Ú	importlibÚutilÚ	find_specÚ__spec__r   Úimport_moduleÚ	Exception)r   Zdevice_backend_package_namer   r   r   Úget_backendZ   s    

r5   c                  C   sÄ   t j t j t¡t j¡} t j dd¡t j | dddd¡g}|D ]x}| d¡d }t j 	|¡r>t j 
|¡r>tj|d	gtjd
�}|d k	r>tjd| d¡tjd�}|d k	r>|| d¡f  S q>tdƒ‚d S )NZTRITON_PTXAS_PATHÚ Zthird_partyÚcudaÚbinÚptxasú r   z	--version)Ústderrz.*release (\d+\.\d+).*zutf-8)Úflagsé   zCannot find ptxas)ÚosÚpathÚjoinÚdirnameÚ__file__ÚpardirÚenvironÚgetÚsplitÚexistsÚisfileÚ
subprocessÚcheck_outputÚSTDOUTÚreÚsearchÚdecodeÚ	MULTILINEÚgroupÚRuntimeError)Úbase_dirÚpathsr9   Z	ptxas_binÚresultÚversionr   r   r   Úpath_to_ptxasg   s    þrV   )Ú	functoolsr/   Zimportlib.utilr>   rL   rI   Útypingr   Zruntime.driverr   r   r+   r)   Ú__annotations__Útyper-   r5   Ú	lru_cacherV   r   r   r   r   Ú<module>   s    E