o
    Ti                     @   s0   d dl Z d dlZddlmZ G dd deZdS )    N   )CPUOpBuilderc                       sn   e Zd ZdZdZ fddZdd Zdd Zd	d
 Zdd Z	 fddZ
dd Zdd Zd fdd	Z  ZS )AsyncIOBuilderDS_BUILD_AIOasync_ioc                    s   t  j| jd d S )N)name)super__init__NAMEself	__class__ Y/home/ubuntu/.local/lib/python3.10/site-packages/deepspeed/ops/op_builder/cpu/async_io.pyr	      s   zAsyncIOBuilder.__init__c                 C   s   d| j  dS )Nzdeepspeed.ops.aio._op)r
   r   r   r   r   absolute_name      zAsyncIOBuilder.absolute_namec                 C   s   g d}|S )N)z*csrc/aio/py_lib/deepspeed_py_io_handle.cppz$csrc/aio/py_lib/deepspeed_py_aio.cppz+csrc/aio/py_lib/deepspeed_py_aio_handle.cppz(csrc/aio/py_lib/deepspeed_aio_thread.cppz'csrc/aio/common/deepspeed_aio_utils.cppz(csrc/aio/common/deepspeed_aio_common.cppz'csrc/aio/common/deepspeed_aio_types.cppz$csrc/aio/py_lib/deepspeed_cpu_op.cppz)csrc/aio/py_lib/deepspeed_aio_op_desc.cppz%csrc/aio/py_lib/deepspeed_py_copy.cppz(csrc/aio/py_lib/deepspeed_pin_tensor.cppr   )r   src_listr   r   r   lib_sources   s   zAsyncIOBuilder.lib_sourcesc                 C   s   |   dg S )Nzcsrc/aio/py_lib/py_ds_aio.cpp)r   r   r   r   r   sources!   r   zAsyncIOBuilder.sourcesc                 C      ddgS )Nzcsrc/aio/py_libzcsrc/aio/commonr   r   r   r   r   include_paths$      zAsyncIOBuilder.include_pathsc                    sd   t   }dd l}tt|jddd \}}|dkr |dks*|d |d |g d7 }|S )Nr   .   r   z
-std=c++17z
-std=c++14)z-Wallz-O0z-sharedz-fPICz-Wno-reorder)	r   cxx_argstorchmapint__version__splitremoveappend)r   argsr   TORCH_MAJORTORCH_MINORr   r   r   r   '   s   


zAsyncIOBuilder.cxx_argsc                 C   r   )Nz-laioz-fopenmpr   r   r   r   r   extra_ldflags2   r   zAsyncIOBuilder.extra_ldflagsc                 C   s   t g dg dg dd}d}| D ]=\}}|\}}}t|}|d urP|||g}	tj|	tjtjd}
|
 dkr?d} |S | | j	 d	| d
|   |S q|S )N)z-lz
libaio-devapt)z-Qlibaiopacman)z-qzlibaio-develyum)dpkgr*   rpmF)stdoutstderrr   Tz: please install the z package with )
dictitemsshutilwhich
subprocessPopenPIPEwaitwarningr
   )r   libsfoundpkgmgrdataflaglibtoolpathcmdresultr   r   r   check_for_libaio_pkg5   s*   


z#AsyncIOBuilder.check_for_libaio_pkgFc                    sH   |  dd}|r|s| | j d |   | d t |o#|S )N	io_submit)aiozI requires the dev libaio .so object and headers but these were not found.zIf libaio is already installed (perhaps from source), try setting the CFLAGS and LDFLAGS environment variables to where it can be found.)has_functionr8   r
   rC   r   is_compatible)r   verboseaio_compatibler   r   r   rG   J   s   zAsyncIOBuilder.is_compatible)F)__name__
__module____qualname__	BUILD_VARr
   r	   r   r   r   r   r   r'   rC   rG   __classcell__r   r   r   r   r      s    r   )r2   r4   builderr   r   r   r   r   r   <module>   s   