
    )`i*                        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	 d dl
mZmZ d dlZd dlZddlmZ ddlmZ d	ee         fd
Zd	ee         fdZe j        d	efd            Ze j        d	efd            Zded	efdZdee         d	efdZded	efdZ	 d&dedeee	                  d	ee         fdZ	 d&dee         deee                  d	ee         fdZ	 d&dee         deee                  d	ee         fdZ 	 d'dedee	         deee                  deee                  deee                  deee	                  ded	efd Z!d	ee"         fd!Z#d"e	d#e	d$ed	dfd%Z$dS )(    N)Version)Path)ListOptional   )env   )CompilationContextreturnc                    t           j                            |           }|rg	 dd l}|                    |          S # t
          $ r@}t          d|  d| dt          j                   |                                cY d }~S d }~ww xY wg S )Nr   zWarning: Could not parse z with shlex: z. Falling back to simple split.)file)	osenvirongetshlexsplit
ValueErrorprintsysstderr)env_var_name	env_flagsr   es       j/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/flashinfer/jit/cpp_ext.pyparse_env_flagsr      s    
|,,I 
%		%LLL;;y))) 	% 	% 	%iLiiqiiiZ    ??$$$$$$$$	% Is   < 
B5B;BBc                  d    dt          t          t          j        j                            z   g} | S )Nz-D_GLIBCXX_USE_CXX11_ABI=)strinttorch_C_GLIBCXX_USE_CXX11_ABI)glibcxx_abi_cflagss    r   _get_glibcxx_abi_build_flagsr#   $   s/    #c#eh.M*N*N&O&OO     c                     t           j                            d          pt           j                            d          } | | S t          j        ddgd          }|j        dk    rgt           j                            t           j                            |j        	                    d          
                                                    } n4d	} t           j                            |           st          d
| d          | S )N	CUDA_HOME	CUDA_PATHwhichnvccT)capture_outputr   zutf-8z/usr/local/cudaz*Could not find nvcc and default cuda_home=z doesn't exist)r   r   r   
subprocessrun
returncodepathdirnamestdoutdecodestripexistsRuntimeError)	cuda_home	nvcc_paths     r   get_cuda_pathr7   +   s    
{++Jrz~~k/J/JI0FFFIq  GOOGOOI,33G<<BBDDEE
 
		 &	w~~i(( 	M9MMM   r$   c                     	 t                      } t          j                            | d          }t	          j        |dgd          }t          j        d|          }|st          d|           t          |d                   S # t          t          t          j        f$ rI}t          j        j        t          d          |t          t          j        j                  cY d }~S d }~ww xY w)	Nzbin/nvccz	--versionT)textzrelease (\d+\.\d+),z9Could not parse CUDA version from nvcc --version output: r   z\nvcc not found and PyTorch is not built with CUDA support. Could not determine CUDA version.)r7   r   r.   joinr+   check_outputrefindallr4   r   FileNotFoundErrorCalledProcessErrorr   versioncuda)r5   r)   txtmatchesr   s        r   get_cuda_versionrD   ?   s    +!OO	w||Iz22%t[&9EEE*3S99 	QCQQ   wqz"""+Z-JK + + +=%4   u})********+s   BB C+">C& C+&C+version_strc                 @    t                      t          |           k    S N)rD   r   )rE   s    r   is_cuda_version_at_leastrH   V   s    !5!555r$   vsc                 ,    d                     |           S )Nz $
    )r:   )rI   s    r   join_multilinerK   Z   s    ??2r$   r5   c                    t          j        d          ddt          j                                        t          j                                        t          j                                        t          j	                                        g}|d t          j
        D             z  }|                    t          j                                                   | dk    r|                    d           |S )z'Get list of system include directories.includez$cuda_home/includez$cuda_home/include/ccclc                 6    g | ]}|                                 S  )resolve).0ps     r   
<listcomp>z'get_system_includes.<locals>.<listcomp>i   s     JJJ		JJJr$   z/usr)	sysconfigget_pathtvm_ffilibinfofind_include_pathfind_dlpack_include_pathjit_envFLASHINFER_INCLUDE_DIRrP   FLASHINFER_CSRC_DIRCUTLASS_INCLUDE_DIRSappendSPDLOG_INCLUDE_DIRremove)r5   system_includess     r   get_system_includesrb   ^   s     	9%%!))++0022&..00#++--O JJW-IJJJJO75==??@@@F3444r$   extra_include_dirsc                 8   t          |           }g }t          j        d          s|                    d           |t	                      z  }|/|D ],}|                    d|                                            -|D ]}|                    d|            |S )zBuild common compilation flags.Py_GIL_DISABLEDz-DPy_LIMITED_API=0x03090000Nz-Iz	-isystem )rb   rT   get_config_varr^   r#   rP   )r5   rc   ra   common_cflags	extra_dirsys_dirs         r   build_common_cflagsrj   s   s    
 *)44OM#$566 <:;;;1333M%+ 	= 	=I  !;i&7&7&9&9!;!;<<<<" 4 42223333r$   rg   extra_cflagsc                 H    ddg}|||z  }t          d          }|||z  }|S )zBuild C++ compilation flags.$common_cflagsz-fPICNFLASHINFER_EXTRA_CFLAGS)r   )rg   rk   cflagsenv_extra_cflagss       r   build_cflagsrq      sH     	F ,&'@AA#""Mr$   extra_cuda_cflagsc                    g }t           j                            d          }||d|gz  }|g dz  }t                      }|t	          d          k    r|dgz  }t                      }|                                }|9t          d |D                       }|rd |D             }|||z   z  }n|||z   z  }n||z  }t          d	          }	|	||	z  }|S )
zBuild CUDA compilation flags.CCNz-ccbin)rm   z--compiler-options=-fPICz--expt-relaxed-constexprz12.8z"-static-global-template-stub=falsec              3   @   K   | ]}|                     d           V  dS )	-gencode=N
startswithrQ   flags     r   	<genexpr>z$build_cuda_cflags.<locals>.<genexpr>   s?       !
 !
-1DOOK((!
 !
 !
 !
 !
 !
r$   c                 <    g | ]}|                     d           |S )rv   rw   ry   s     r   rS   z%build_cuda_cflags.<locals>.<listcomp>   s9     % % %T__[5Q5Q%% % %r$   FLASHINFER_EXTRA_CUDAFLAGS)	r   r   r   rD   r   r
   get_nvcc_flags_listanyr   )
rg   rr   cuda_cflagscc_envcuda_version#cpp_ext_initial_compilation_contextglobal_flagsmodule_has_gencodeglobal_non_arch_flagsenv_extra_cuda_cflagss
             r   build_cuda_cflagsr      sO   
  KZ^^D!!F&))    K
 $%%Lwv&&0
 	
 +=*>*>'6JJLLL$  !
 !
5F!
 !
 !
 
 
  	<% %!-% % %! 03DDDKK <*;;;KK 	|#+,HII(,,r$   Fnamesourcesextra_ldflagsneeds_device_linkingc                 8   t                      }t          ||          }t          ||          }	t          ||          }
g d}t	          d          }|||z  }|||z  }t
          j                            dd          }t
          j                            dd          }dd|  d	| d
| d| ddt          |          z   dt          |	          z   ddt          |
          z   ddt          |          z   dddddddddddg}|r|	                    g d           n|	                    g d           t          j        | z  }g }|D ]}|j        dk    }|rdnd}|rdnd}|                    |          j        }t          ||z                                            }|                    |           |                    d | d!| d"|                                            |                    d           |rd#nd$}t          ||  d%z                                            }|                    d | d!| d"d"                    |          z              |                    d&|            |                    d           d'                    |          S )(N)z-sharedz-L$cuda_home/lib64z-L$cuda_home/lib64/stubsz-lcudartz-lcudaFLASHINFER_EXTRA_LDFLAGSCXXzc++FLASHINFER_NVCCz$cuda_home/bin/nvcczninja_required_version = 1.3zname = zcuda_home = zcxx = znvcc =  zcommon_cflags = z	cflags = zpost_cflags =zcuda_cflags = zcuda_post_cflags =z
ldflags = zrule compilezD  command = $cxx -MMD -MF $out.d $cflags -c $in -o $out $post_cflagsz  depfile = $out.dz  deps = gcczrule cuda_compilez  command = $nvcc --generate-dependencies-with-compile --dependency-output $out.d $cuda_cflags -c $in -o $out $cuda_post_cflags)zrule nvcc_linkz.  command = $nvcc -shared $in $ldflags -o $outr   )z	rule linkz%  command = $cxx $in $ldflags -o $outr   z.cuz.cuda.oz.ocuda_compilecompilezbuild z:  	nvcc_linklinkz.sozdefault 
)r7   rj   rq   r   r   r   r   r   rK   extendrZ   FLASHINFER_JIT_DIRsuffixwith_suffixr   r   rP   r^   r:   )r   r   rk   rr   r   rc   r   r5   rg   ro   r   ldflagsenv_extra_ldflagscxxr)   lines
output_dirobjectssourceis_cudaobject_suffixcmdobj_nameobj	link_rule	output_sos                             r   generate_ninja_build_for_opr      s,    I'	3EFFM-66F#M3DEEK  G ((BCC$$$ = 
*..
&
&C:>>+-BCCD 	'$"y""$
^M:::nV,,,>+666~g...
N
 	J
/E6  
  	
 	
 	
 	
 	  	
 	
 	
 +d2JG ? ?-5(%,6		$ '6nnY%%m449:(113344s=c==S==6>>+;+;==>>>>	LL3?IZT,,,.7799::I	LL3)33y333chhw6G6GGHHH	LL'I''(((	LL99Ur$   c                      t           j                            d          } | #|                                 rt	          |           S d S )NMAX_JOBS)r   r   r   isdigitr   )max_jobss    r   _get_num_workersr   0  s=    z~~j))H 0 0 2 28}}4r$   workdir
ninja_fileverbosec           	         |                      dd           dddt          |                                           dt          |                                          g}t                      }||dt          |          gz  }t          j                                         t          j                                         	 t          j	        ||rd nt          j
        t          j        t          |                                           dd           d S # t          j        $ r+}d	}|j        r|d
|j        z   z  }t          |          |d }~ww xY w)NT)parentsexist_okninjaz-vz-Cz-fz-j)r0   r   cwdcheckr9   zNinja build failed.z Ninja output:
)mkdirr   rP   r   r   r0   flushr   r+   r,   PIPESTDOUTr?   outputr4   )r   r   r   commandnum_workersr   msgs          r   	run_ninjar   7  sX   MM$M...GOOJ  !!G #$$KD#k**++JJ'"744
$GOO%%&&	
 	
 	
 	
 	
 	
 ( ' ' '#8 	1%00C3Q&	's   ?AD E!&EErG   )F)%	functoolsr   r<   r+   r   rT   packaging.versionr   pathlibr   typingr   r   rV   r   r   r   rZ   compilation_contextr
   r   r   r#   cacher7   rD   boolrH   rK   rb   rj   rq   r   r   r   r   r   rO   r$   r   <module>r      s       				 				     



     % % % % % %       ! ! ! ! ! ! ! !         4 4 4 4 4 4T#Y     d3i     s    & +' + + + +,6# 6$ 6 6 6 6tCy S    3 4    . 04  d, 
#Y   , )- 949% 
#Y   * .2. .9.S	*. 
#Y. . . .p "'b b
b$Zb 49%b  S	*	b
 DI&b !d,b b 	b b b bJ(3-    't ' ' ' ' ' ' ' ' 'r$   