o
    Ti                  
   @   s   d dl Z d dlZzd dlZW n ey  Z zW Y dZ[ndZ[ww zd dlmZ d dlmZ W n ey>   d dl	mZ Y nw G dd deZ
dS )    N)__deepspeed__)	OpBuilderc                       sf   e Zd ZdZdZdZ fddZdd Zdd Zdd	d
Z	 fddZ
 fddZ fddZ  ZS )NPUOpBuilderNc                    sp   t  | |  | _tjtjtjt	j
| _z
| | j| _W d S  ty7   t| j d Y d S w )Nz4 ascend_cann is missing, npu ops cannot be compiled!)super__init__installed_cann_path_ascend_pathospathjoindirnameabspath	torch_npu__file___torch_npu_pathinstalled_cann_versionname_cann_versionBaseExceptionprint)selfr   	__class__ X/home/ubuntu/.local/lib/python3.10/site-packages/deepspeed/ops/op_builder/npu/builder.pyr      s   
 zNPUOpBuilder.__init__c                 C   s   | j rdS dS )Nz-D__ENABLE_CANN__z-D__DISABLE_CANN__)r   r   r   r   r   	cann_defs$   s   zNPUOpBuilder.cann_defsc                 C   s*   dt jv st jt jd rt jd S d S )NASCEND_HOME_PATH)r	   environr
   existsr   r   r   r   r   )   s   
z NPUOpBuilder.installed_cann_path c              	   C   s   |   }|d usJ dd}ttj|D ]H\}}}|r! |S dd |D }|r_tj||d }t|d}	|	D ]}
|
ddkrO|
 	d	d } nq;W d    n1 sZw   Y  q|S )
Nz5CANN_HOME does not exist, unable to compile NPU op(s)r    c                 S   s   g | ]
}t d |r|qS )zascend_.*_install\.info)rematch).0filer   r   r   
<listcomp>5   s    z7NPUOpBuilder.installed_cann_version.<locals>.<listcomp>r   rversion=)
r   r	   walkr
   realpathr   openfindstripsplit)r   r   ascend_pathcann_versiondirpath_	filenamesinstall_filesfilepathfliner   r   r   r   .   s(   	z#NPUOpBuilder.installed_cann_versionc                    s2   t   }|tj| jdtj| jdg7 }|S )Ninclude)r   include_pathsr	   r
   r   r   r   )r   pathsr   r   r   r:   ?   s   
$zNPUOpBuilder.include_pathsc              
      sd   t   }|g d7 }|g d7 }||  |  |  dtj| jd dtj| j	d g7 }|S )N)z-O3z
-std=c++17z-gz-Wno-reorderz-fopenmp)z-fstack-protector-allz"-Wl,-z,relro,-z,now,-z,noexecstackz-Wl,--disable-new-dtags,--rpath-Llib64lib)
r   cxx_argsr   cpu_arch
simd_widthr	   r
   r   r   r   )r   argsr   r   r   r?   D   s   
zNPUOpBuilder.cxx_argsc                    s>   t   }|dtj| jd ddtj| jd dg7 }|S )Nr<   r=   z
-lascendclr>   z-ltorch_npu)r   extra_ldflagsr	   r
   r   r   r   )r   flagsr   r   r   rC   P   s   
zNPUOpBuilder.extra_ldflags)r    )__name__
__module____qualname__r   r   r   r   r   r   r   r:   r?   rC   __classcell__r   r   r   r   r      s    	
r   )r!   r	   r   ImportErrore
op_builderr   op_builder.builderr    deepspeed.ops.op_builder.builderr   r   r   r   r   <module>   s   