
    -Ph7                       d dl m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 ddlmZ dd	lmZmZ dd
lmZ ej        r2ddlmZ ddlmZ ej        ej        e         ej        e         ef         Z G d de          Zeed<   dS )    )annotationsN)Path   )mesonlib)mlog)detect_cpu_family   )DependencyExceptionSystemDependency)packages)Environment)Compilerc                      e Zd Zg dZd8 fdZed9d            Zd:dZd;dZd<dZ	d=dZ
d=dZd=dZ ej        d          Z ej        d          Z ej        d          Z ej        d          Zd>d Zd?d"Zd@d#ZedAd%            ZdBd&ZdCd(ZdCd)Zej        dDd+            Zej        dEd-            ZdFdGd0ZdBd1ZdBd2ZdHd3ZdIdJd7Z  xZ!S )KCudaDependency)cppccudaenvironment'Environment'kwargsT.Dict[str, T.Any]returnNonec                ~    |j         j                             |                   }                     |          }| j        vrt          d| d j         d          t                                          d|||           i  _         	                    |           _
        t           fddD                       s+dg}|                    d	d
          rdg}| j
        z    _
                                         \   _         _         _         j        sd S t"          j                             j                  st          d j         d           j        dk    st+          |          dk    rCt"          j                             j        d           _         xj        d j         gz  c_                                         }t"          j                             j        |           _        t7          j        dt7          j         j                                                               _        d S )Nz
Language 'z@' is not supported by the CUDA Toolkit. Supported languages are .r   )languagec              3  *   K   | ]}|j         v V  d S N)requested_modules).0runtimeselfs     \/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/mesonbuild/dependencies/cuda.py	<genexpr>z*CudaDependency.__init__.<locals>.<genexpr>&   s+      ``7d44``````    )cudartcudart_staticr&   staticTr'   z)CUDA Toolkit path must be absolute, got 'z'.r	   includez-IzCUDA library directory is)coredata	compilersget_for_machine_from_kwargs_detect_languagesupported_languagesr
   super__init__lib_modulesget_requestedr   anyget_detect_cuda_path_and_version	cuda_pathversionis_foundospathisabsr   lenjoinincdircompile_args_detect_arch_libdirlibdirr   debugbold_find_requested_libraries)r"   r   r   r+   r   req_modulesarch_libdir	__class__s   `      r#   r0   zCudaDependency.__init__   sH   (243S3STZ3[3[\	((334333%  '[H  '[  '[  @D  @X  '[  '[  '[  \  \  \fxHHH57!%!3!3F!;!;````D_````` 	J $*Kzz(D)) 0./%043I%ID"8<8Z8Z8\8\5t}} 	Fw}}T^,, 	h%&fSWSa&f&f&fggg =F""c)nnq&8&8',,t~yAADK"4t{"4"4!55..00gll4>;??
.	$+0F0FGGG6688r%   r+   T.Dict[str, 'Compiler']strc                t    | j         D ]
}||v r|c S t          |                                          d         S )Nr   )r.   listkeys)clsr+   langs      r#   r-   zCudaDependency._detect_languageA   sJ    + 	 	Dy   !INN$$%%a((r%   TV_ResultTuplec                                                       _        t          j        dt          j         j                              j        } j        dk    r                                                      j	                  }t          j        dt          j        |                     |r:t          j        ||          \  }}}|rd| d| d}                     |d          S d| g}nd } fd	                                 D             }|r                     |||          S d
 |D             }|r|d         d         |d         d         dfS                                  rdnd}	d|	 d}                     |d          S )NzDefault path env var:r   znvcc version:zThe current nvcc version zB does not satisfy the specified CUDA Toolkit version requirements r   NNF=c                F    g | ]\  }}|                     |          |fS  )_cuda_toolkit_version)r    r:   defaultr"   s      r#   
<listcomp>z@CudaDependency._detect_cuda_path_and_version.<locals>.<listcomp>\   s2    mmmg$22488'Bmmmr%   c                "    g | ]\  }}}|||fS rT   rT   )r    r:   r7   rV   s       r#   rW   z@CudaDependency._detect_cuda_path_and_version.<locals>.<listcomp>`   s(    UUU(@wWUT7OUUUr%   r   r	   Tz&set the CUDA_PATH environment variablezQset the CUDA_PATH environment variable/create the '/usr/local/cuda' symbolic linkzaPlease specify the desired CUDA Toolkit version (e.g. dependency('cuda', version : '>=10.1')) or z2 to point to the location of your desired version.)_default_path_env_varenv_varr   rB   rC   version_reqsr   _strip_patch_versionget_compilerr7   r   version_compare_many_report_dependency_error_cuda_paths_find_matching_toolkit_is_windows)
r"   r[   nvcc_version
found_some	not_foundfoundmsgpathsdefaultsplatform_msgs
   `         r#   r5   z,CudaDependency._detect_cuda_path_and_versionH   s   1133
*DIdl,C,CDDD(=F""44T5F5F5H5H5PQQLJ	,(?(?@@@ S191N|]i1j1j.Y S Vl  V  V  GS  V  V  VC88>QRRR /../LLLmmmmZ^ZjZjZlZlmmm 	R..ulLQQQUUEUUU 	:QKNHQKND99CGCSCSCUCU g??f 	 w  wC  w  w  w,,S2EFFFr%   rh   T.List[TV_ResultTuple]r[   T.List[str]rc   T.Optional[str]c                   d }t          j        ||          \  }}t          |          }|t          |d d          z   }t	          j        d|            |rW|rU| j        rd| j         dnd}d	                    |t          j	        
                    |d
         d
                   |          }	nd }	|D ]@\  }
}}t          j        ||          \  }}}|s|s|	rt	          j        |	           |
|dfc S A|	rt	          j        |	           dS )Nc                    | d          S )Nr   rT   ts    r#   <lambda>z7CudaDependency._find_matching_toolkit.<locals>.<lambda>l   s    ad( r%   c                6    t          j        | d                   S )Nr	   )r   Versionrp   s    r#   rr   z7CudaDependency._find_matching_toolkit.<locals>.<lambda>o   s    9I!A$9O9O r%   T)keyreversezSearch paths: zthe z environment variablez#the '/usr/local/cuda' symbolic linkzpThe default CUDA Toolkit as designated by {} ({}) doesn't match the current nvcc version {} and will be ignored.r   rQ   )r   	partitionrK   sortedr   rB   rZ   formatr9   r:   realpathr^   warning)r"   rh   r[   rc   	part_funcdefaults_itrest_itri   default_srcnvcc_warningr:   r7   rV   rd   re   rf   s                   r#   ra   z%CudaDependency._find_matching_toolkiti   s    9K8J	'1)UCCW$$6'/O/OY]^^^^
+E++,,, 	 H 	 HL  BDDDDD  [BK O  V  V  Wb  df  dk  dt  dt  u}  ~  u@  AB  uC  dD  dD  FR  S  SLLL(- 	- 	-$T7G-5-J7T`-a-a*ZE - /< /L...gt,,,,-
  	'L&&&""r%   c                B   |                                  rdgng d}d |D             }d |D             }t          |          dk    rNt          j        d                    d                    |          d                    |                               |r|d         nd S )	N	CUDA_PATH)r   	CUDA_HOME	CUDA_ROOTc                .    g | ]}|t           j        v |S rT   r9   environr    vars     r#   rW   z8CudaDependency._default_path_env_var.<locals>.<listcomp>   s$    AAACsbj/@/@C/@/@/@r%   c                2    h | ]}t           j        |         S rT   r   r   s     r#   	<setcomp>z7CudaDependency._default_path_env_var.<locals>.<setcomp>   s    ===SC===r%   r	   zyEnvironment variables {} point to conflicting toolkit locations ({}). Toolkit selection might produce unexpected results., r   )rb   r<   r   r{   ry   r=   )r"   env_varsuser_defaultss      r#   rY   z$CudaDependency._default_path_env_var   s    $($4$4$6$6cK==<c<c<cAA8AAA==H===}!!L  U  \  \  ]a  ]f  ]f  go  ]p  ]p  rv  r{  r{  |I  rJ  rJ  K  K  L  L  L&0x{{D0r%   T.List[T.Tuple[str, bool]]c                    | j         rt          j        | j                  dfgng |                                 r|                                 n|                                 z   S )NT)rZ   r9   r   rb   _cuda_paths_win_cuda_paths_nixr"   s    r#   r`   zCudaDependency._cuda_paths   s_    6:lJ"*T\*D122)-)9)9););Wt##%%%AUAUAWAWY 	Yr%   c                V    t           j                                        }d |D             S )Nc                `    g | ]+}|                     d           t          j        |         df,S )
CUDA_PATH_F)
startswithr9   r   r   s     r#   rW   z2CudaDependency._cuda_paths_win.<locals>.<listcomp>   s4    ]]]S|@\@\]C%(]]]r%   )r9   r   rL   )r"   r   s     r#   r   zCudaDependency._cuda_paths_win   s'    :??$$]]H]]]]r%   c                T    | j         rdnd}d t          j        |          D             S )Nz/usr/local/cuda-*z/usr/local/cuda*c                X    g | ]'}|t           j                            |          d k    f(S )r   )r9   r:   basename)r    r:   s     r#   rW   z2CudaDependency._cuda_paths_nix.<locals>.<listcomp>   s2    YYYTrw''--78YYYr%   )rZ   globiglob)r"   patterns     r#   r   zCudaDependency._cuda_paths_nix   s4    )-M%%;MYYTZPWEXEXYYYYr%   z^CUDA Version\s+(.*)$z^v(.*)$z^cuda-(.*)$z##define\s+CUDART_VERSION\s+([0-9]+)r:   c                   |                      |          }|r|S |                     |          }|r|S t          j        d           |                                 r| j        n| j        }	 |                    t          j	        
                    |                    }|r|                    d          S t          j        d|            n1# t          $ r$}t          j        d| d|           Y d }~nd }~ww xY wdS )Nz,Falling back to extracting version from pathr	   z*Could not detect CUDA Toolkit version for : z0.0)_read_toolkit_version_txt_read_cuda_runtime_api_versionr   rB   rb   path_version_win_regexpath_version_nix_regexmatchr9   r:   r   groupr{   	Exception)r"   r:   r7   path_version_regexmes         r#   rU   z$CudaDependency._cuda_toolkit_version   s.   0066 	N55d;; 	N
ABBB<@<L<L<N<NoT88TXTo	U"(()9)9$)?)?@@A Rwwqzz!P$PPQQQQ 	U 	U 	ULSdSSaSSTTTTTTTT	U us   *AC 3C 
C9C44C9path_strc                R   t          |          }|                    d          D ]}|                    d          }| j                            |          }|s5	 t          |                    d                    }n# t          $ r Y ew xY w|dz  }||dz  z
  dz  }| d| c S d S )Nzcuda_runtime_api.hutf-8encodingr	   i  
   r   )r   rglob	read_textcudart_version_regexsearchintr   
ValueError)	r"   r   r:   irawr   vers_intmajorminors	            r#   r   z-CudaDependency._read_cuda_runtime_api_version   s    H~~011 	& 	&A++w+//C)0055A qwwqzz??    $E,3E%%e%%%%%ts   "A>>
B
Bc                   t           j                            |d          }	 t          |d          5 }|                                }| j                            |          }|r4|                     |                    d                    cd d d            S 	 d d d            n# 1 swxY w Y   n1# t          $ r$}t          j        d| d|           Y d }~nd }~ww xY wd S )Nzversion.txtr   r   r	   z+Could not read CUDA Toolkit's version file r   )r9   r:   r=   openreadlinetoolkit_version_regexr   r\   r   r   r   rB   )r"   r:   version_file_pathversion_fileversion_strr   r   s          r#   r   z(CudaDependency._read_toolkit_version_txt   st   GLL}==	b''::: Al*3355.44[AA A44QWWQZZ@@	A A A A A A A AAA A A A A A A A A A A A A A A
  	b 	b 	bJ`FW``[\``aaaaaaaa	b tsA   B1 AB%B1 B1 %B))B1 ,B)-B1 1
C;CCr7   c                b    d                     |                    d          d d                   S )Nr   r   )r=   split)rM   r7   s     r#   r\   z#CudaDependency._strip_patch_version   s)    xxc**2A2.///r%   c                   t          | j        j        j        j                  }| j        j        | j                 }d}|                                rRddd}||vr#t          |	                    |d                    t          j                            d||                   S |                                r6ddddd}||vr#t          |	                    |d	                    ||         S |                                r3d
di}||vr#t          |	                    |d                    ||         S t          d          )NzC{} architecture is not supported in {} version of the CUDA Toolkit.Win32x64)x86x86_64Windowsliblib64)r   ppc64aarch64loongarch64Linuxr   macOSz#CUDA Toolkit: unsupported platform.)r   envr*   r+   hostmachinesfor_machine
is_windowsr
   ry   r9   r:   r=   is_linux	is_darwin)r"   archmachinerg   libdirss        r#   r@   z"CudaDependency._detect_arch_libdir   sK    !2!<!ABB(#D$45S 	M%77G7"")#**T9*E*EFFF7<<wt}555 	M!(5W]deeG7"")#**T7*C*CDDD4=    	M)G7"")#**T7*C*CDDD4= %&KLLLr%   boolc                v   d}| j         D ]}| j                            || j        | j        g          }|dk    r=| j        dk    r2| j        j        | j                 }|                                r|g dz  }|| 	                    d| d           d}t          j        d| d	|            || j        |<   |S )
NTr'   r   )z-lrtz	-lpthreadz-ldlz%Couldn't find requested CUDA module ''FzLink args for CUDA module 'z' are )r   clib_compilerfind_libraryr   rA   r   r   r   r   r_   r   rB   r1   )r"   	all_foundmoduleargsr   s        r#   rD   z(CudaDependency._find_requested_libraries   s    	, 	0 	0F%22648dk]SSD((T]f-D-D(+D,<=##%% : 9999D|--.bX^.b.b.bccc!		
O&OOOOPPP+/ ((r%   c                T    | j         j        | j                                                 S r   )r   r   r   r   r   s    r#   rb   zCudaDependency._is_windows   s!    x !12==???r%   rg   c                    d S r   rT   )r"   rg   s     r#   r_   z'CudaDependency._report_dependency_error  s    :=#r%   ret_valc                    d S r   rT   r"   rg   r   s      r#   r_   z'CudaDependency._report_dependency_error  s    ]`]`r%   NT.Optional[TV_ResultTuple]c                Z    | j         rt          |          t          j        |           |S r   )requiredr
   r   rB   r   s      r#   r_   z'CudaDependency._report_dependency_error	  s,    = 	+%c***
3r%   c                @    d                     | j                  }d|z   S )Nr   z	modules: )r=   r   )r"   
module_strs     r#   log_detailszCudaDependency.log_details  s!    YYt566
Z''r%   c                "    | j         r| j         ndS )N )r6   r   s    r#   log_infozCudaDependency.log_info  s    !%7t~~R7r%   c                    t          j        |d          }|D ]&}t          |t                    st	          d          '|S )Nmodulesz%CUDA module argument is not a string.)r   extract_as_list
isinstancerI   r
   )r"   r   
candidatesr   s       r#   r2   zCudaDependency.get_requested  sS    -fi@@
 	S 	SAa%% S)*QRRRSr%   Fr   r   c                *   g }| j         D ]}| j        |         }|dk    rn|t          ddg          v rt          j        d| d           g }n@|r>|d                             | j                  rt          j        d| d           d	|z   g}||z  }|S )
Nr   r&   r'   zNot adding 'z3' to dependency, since nvcc will link it implicitlyr   zCUDA module 'z' found in CUDA libdirz-l)r   r1   	frozensetr   rB   r   rA   )r"   r   r   r   r   	link_argss         r#   get_link_argszCudaDependency.get_link_args  s    ) 	 	C(-I 6!!)X$?@@@@Jhshhhiii "II -9Q<#:#:4;#G#G -JLLLLMMM!%IIDDr%   )r   r   r   r   r   r   )r+   rH   r   rI   )r   rO   )rh   rk   r[   rl   rc   rm   r   rO   )r   rm   )r   r   )r:   rI   r   rI   )r   rI   r   rm   )r:   rI   r   rm   )r7   rI   r   rI   )r   rI   )r   r   )rg   rI   r   r   )rg   rI   r   rO   r   rO   r   )rg   rI   r   r   r   r   )r   r   r   rl   )NF)r   rm   r   r   r   rl   )"__name__
__module____qualname__r.   r0   classmethodr-   r5   ra   rY   r`   r   r   recompiler   r   r   r   rU   r   r   r\   r@   rD   rb   Toverloadr_   r   r   r2   r   __classcell__)rG   s   @r#   r   r      s       ..."9 "9 "9 "9 "9 "9H ) ) ) [)G G G GB# # # #41 1 1 1Y Y Y Y^ ^ ^ ^Z Z Z Z
 'BJ'?@@'RZ
33'RZ77%2:&LMM   *   "    0 0 0 [0M M M M,   *@ @ @ @ Z=== Z=Z``` Z`    ( ( ( (8 8 8 8           r%   r   r   )
__future__r   r   r   r9   typingr   pathlibr   r   r   r   r   r   baser
   r   detectr   TYPE_CHECKINGr   r+   r   TupleOptionalrI   r   rO   r   rT   r%   r#   <module>r     sH   # " " " " "  				 				                       + + + + + + 7 7 7 7 7 7 7 7       ? E))))))$$$$$$WQZ_ajotCDNY Y Y Y Y% Y Y Yv "   r%   