Ë
    ÄÓ^jU— ã                   óž  — 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Z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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mZ d dlmZ d dlmZ d dlmZ d dlZd dlmZ d dlm Z m!Z! d d	l"m#Z#m$Z$ d d
l%m&Z& d dl'm(Z( d dl)m*Z*  e jV                  «       rd dl,m-Z-m.Z. d dl/m0Z0m1Z1m2Z2m3Z3 n$dededdfd„Z0dededdfd„Z1dededdfd„Z2de4fd„Z3dZ5ejl                  jo                  e8«      Z9ejl                  ju                  ejl                  ju                  e9«      «      Z;ejl                  jy                  e;d«      Z=ej                  j}                  d«      Z?ej                  j}                  d«      Z@ej                  dk(  ZAdZBeAr ej†                  «       dfndZD ejŠ                  eF«      ZG ej�                  d«      deIdeIfd „«       ZJdeIfd!„ZKej˜                  d"eIddfd#„«       ZM G d$„ d%«      ZNej˜                  d"eIddfd&„«       ZOej˜                  d"eIdeIfd'„«       ZPdeIfd(„ZQd)e4deReIeIf   fd*„ZSd+eId,eId-eId.eIdeIf
d/„ZT	 d˜d0eUeReIeIf      d1eId2eIdeIfd3„ZVej˜                  d2eIde4fd4„«       ZWej˜                  d2eIde4fd5„«       ZXej˜                  d2eIde4fd6„«       ZYej˜                  d2eId7eZde4fd8„«       Z[ej˜                  d2eIde4fd9„«       Z\ej˜                  d2eIde4fd:„«       Z]ej˜                  de4fd;„«       Z^ej˜                  de4fd<„«       Z_ej˜                  de4fd=„«       Z`ej˜                  de4fd>„«       Zaej˜                  de4fd?„«       Zbej˜                  d"eIdeIfd@„«       ZcdAeUeI   dBeUeI   ddfdC„ZddDeUeI   deUeI   fdE„ZedFeIddfdG„ZfdFeIddfdH„ZgdIeIdJeIddfdK„ZhdIeIdJeIddfdL„ZidMeIdeIfdN„Zj G dO„ dP«      Zkd™dQe4deUeI   fdR„ZldšdSeIdeUeI   fdT„Zmd2eIdeUeI   fdU„Znd2eIdeUeI   fdV„ZodeUeI   fdW„ZpdeReUeI   eUeI   f   fdX„Zqej˜                  de*eI   fdY„«       Zrej˜                  d2eIdeIfdZ„«       Zsd2eIdeUeI   fd[„Zt	 d›d2eId\e4deReUeI   eUeI   f   fd]„Zud^e4deUeI   fd_„Zv	 	 	 dœd2eId^e4dQe4d`eeI   d\e4deReUeI   eUeI   eUeI   eUeI   eUeI   eUeI   eUeI   f   fda„Zw G db„ dcek«      ZxdeUeI   fdd„ZydeUeI   fde„ZzdeUeI   fdf„Z{d2eIdge4d)e4deReUeI   eUeI   eUeI   eUeI   f   fdh„Z|die$deReUeI   eUeI   f   fdj„Z}dke4dge4deReUeI   eUeI   eUeI   f   fdl„Z~deUeI   fdm„ZdeReUeI   eUeI   f   fdn„Z€ej˜                  de4fdo„«       Z�ej˜                  deRe4eIf   fdp„«       Z‚ej˜                  d2eIdqeIddfdr„«       Zƒej˜                  d2eIddfds„«       Z„d2eIdeReUeI   eUeI   eUeI   eUeI   eUeI   eUeI   f   fdt„Z…deReUeI   eUeI   f   fdu„Z†dve4dwe4deUeI   fdx„Z‡deUeI   fdy„Zˆd2eIdie$dke4dge4d)e4dve4dwe4deReUeI   eUeI   eUeI   eUeI   eUeI   eUeI   eUeI   f   fdz„Z‰ G d{„ d|ex«      ZŠd�d}„Z‹ ej�                  d~«      deIdedz  fd€„«       ZŒd�eId‚eIdƒeIddfd„„Z�d…ZŽd1eIdeIdz  fd†„Z�d‡eUeI   deUeI   fdˆ„Z�d‰eUeI   ddfdŠ„Z‘d‰eUeI   ddfd‹„Z’	 	 dždŒeIdge4d�e4deReUeI   eUeI   eUeI   eUeI   eUeI   eUeI   eUeI   f   fdŽ„Z“ G d�„ d�eŠ«      Z”d‘eIdeReIeIf   fd’„Z• G d“„ d”«      Z–d•eId–eIdJeIddfd—„Z—y)Ÿé    N)ÚSequence)ÚcdllÚwintypes)Úfind_library)ÚPath)ÚAny)Údynamo_timed)ÚconfigÚexc)Úinvalid_vec_isaÚVecISA)Ú	cache_dir)ÚTorchVersion)Ú
OrderedSet)Ú_run_build_commandÚbuild_paths)Úlog_global_cache_errorsÚlog_global_cache_statsÚlog_global_cache_valsÚuse_global_cacheÚargsÚkwargsÚreturnc                   ó   — y ©N© ©r   r   s     úf/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/torch/_inductor/cpp_builder.pyr   r   0   ó   € Øó    c                   ó   — y r   r   r   s     r   r   r   3   r   r    c                   ó   — y r   r   r   s     r   r   r   6   r   r    c                   ó   — y)NFr   r   r    r   r   r   9   s   € Ør    ÚCxxBuildz_inductor/script.ldÚlinuxÚdarwinÚwin32zx86_64-w64-mingw32-g++Úreplacer   é   Úsearchc                 óÂ  — ddl m}m} | D ]“  }	 |€tt        j                  dk7  rŒt        j                  d«      sŒ0ddlm}  |«       } |t
        j                  j                  |d«      |¬«      }|5  t        «       }d d d «       t        j                  |dg«       |c S  t"        j$                  ‚# 1 sw Y   Œ5xY w# t        j                  t        t         f$ r Y ŒÒw xY w)	Nr   )Úget_lock_dirÚLOCK_TIMEOUTr%   ÚTORCH_INDUCTOR_INSTALL_GXX)ÚFileLockzg++.lock)Útimeoutú	--version)Útorch._inductor.codecacher,   r-   ÚsysÚplatformÚosÚgetenvÚtorch.utils._filelockr/   ÚpathÚjoinÚinstall_gcc_via_condaÚ
subprocessÚcheck_outputÚSubprocessErrorÚFileNotFoundErrorÚImportErrorr   ÚInvalidCxxCompiler)r*   r,   r-   Úcxxr/   Úlock_dirÚlocks          r   Úcpp_compiler_searchrD   R   sÐ   € çDàò ˆð	Øˆ{ô —<‘< 7Ò*Øä—y‘yÐ!=Ô>ØÝ:á'›>�ÙÜ—G‘G—L‘L ¨:Ó6Àô�ð ñ 2Ü/Ó1�C÷2ä×#Ñ# S¨+Ð$6Ô7ØŠJð'ô, ×
 Ñ
 Ð ÷2ð 2ûô ×*Ñ*Ô,=¼{ÐKò 	Ùð	ús3   �B=¥B=»7B=Á2B1Á= B=Â1B:	Â6B=Â=CÃCc            
      óÒ  — t         j                  j                  t        «       d«      } t         j                  j                  | dd«      }t         j                  j	                  |«      s~t
        j                  d«       t         j                  j                  dd«      }|€t        j                  d«      }|�0t        j                  |dd| › �d	d
dddgt        j                  ¬«       |S )z>On older systems, this is a quick way to get a modern compilerÚgccÚbinúg++zDownloading GCC via condaÚ	CONDA_EXEÚcondaÚcreatez	--prefix=z--channel=conda-forgez--quietz-yz
python=3.8Úgxx)Ústdout)r5   r8   r9   r   ÚexistsÚlogÚinfoÚenvironÚgetÚshutilÚwhichr;   Ú
check_callÚPIPE)ÚprefixÚcxx_pathrJ   s      r   r:   r:   o   sº   € ä�W‰W�\‰\œ)›+ uÓ-€FÜ�w‰w�|‰|˜F E¨5Ó1€HÜ�7‰7�>‰>˜(Ô#Ü�‰Ð,Ô-Ü—
‘
—‘˜{¨GÓ4ˆØˆ=Ü—L‘L Ó)ˆEØÐÜ×!Ñ!àØØ ˜xÐ(Ø+ØØØ Øð	ô "—‘õð €Or    Úcompilerc                 óÊ   — 	 t        j                  | dgt         j                  ¬«       y# t        $ r}t	        j
                  | «      |‚d}~wt         j                  $ r Y yw xY w)zU
    Check if compiler is ready, in case end user not activate MSVC environment.
    ú/help©ÚstderrN)r;   r<   ÚSTDOUTr>   r   r@   r=   )rY   Úes     r   Úcheck_compiler_exist_windowsr`   ‰   sV   € ð
Ü×Ñ ¨7Ð 3¼J×<MÑ<MÖNøÜò 6Ü×$Ñ$ XÓ.°AÐ5ûÜ×%Ñ%ò áðús   ‚'* ª	A"³A	Á	A"Á!A"c                   ó8   — e Zd Zdeddfd„Zdd„Zdd„Zdefd„Zy)	ÚWinPeFileVersionInfoÚ	file_pathr   Nc                 ó†   — || _         t        j                  d«      | _        | j	                  «        | j                  «        y )Nzversion.dll)rc   ÚctypesÚWinDLLÚversion_dllÚ_setup_functionsÚ_get_version_info)Úselfrc   s     r   Ú__init__zWinPeFileVersionInfo.__init__˜   s2   € Ø"ˆŒÜ!Ÿ=™=¨Ó7ˆÔØ×ÑÔØ×ÑÕ r    c                 ó  — t         j                  t         j                  g| j                  j                  _        t         j                  | j                  j                  _        t         j                  t         j                  t         j                  t         j                  g| j                  j                  _        t         j                  | j                  j                  _        t         j                  t         j                  t        j                  t        j                  «      t        j                  t         j                  «      g| j                  j                   _        t         j                  | j                  j                   _        y r   )r   ÚLPCWSTRÚLPDWORDrg   ÚGetFileVersionInfoSizeWÚargtypesÚDWORDÚrestypeÚLPVOIDÚGetFileVersionInfoWÚBOOLÚLPCVOIDre   ÚPOINTERÚc_void_pÚUINTÚVerQueryValueW©rj   s    r   rh   z%WinPeFileVersionInfo._setup_functionsž   sú   € ä×ÑÜ×Ñð=
ˆ×Ñ×0Ñ0Ô9ô <D¿>¹>ˆ×Ñ×0Ñ0Ô8ô ×ÑÜ�N‰NÜ�N‰NÜ�O‰Oð	9
ˆ×Ñ×,Ñ,Ô5ô 8@·}±}ˆ×Ñ×,Ñ,Ô4ô ×ÑÜ×ÑÜ�N‰Nœ6Ÿ?™?Ó+Ü�N‰Nœ8Ÿ=™=Ó)ð	4
ˆ×Ñ×'Ñ'Ô0ô 3;·-±-ˆ×Ñ×'Ñ'Õ/r    c                 ó¨  — t        j                  «       }| j                  j                  | j                  t        j                  |«      «      }|dk(  rt        d| j                  › d�«      ‚t        j                  |«      | _	        | j                  j                  | j                  d|| j                  «      }|st        d| j                  › d�«      ‚y )Nr   zCan't get version info size of ú.zCan't get version info of )r   rq   rg   ro   rc   re   ÚbyrefÚRuntimeErrorÚcreate_string_bufferÚversion_infort   )rj   ÚdummyÚsizeÚsuccesss       r   ri   z&WinPeFileVersionInfo._get_version_infoµ   sº   € Ü—‘Ó ˆØ×Ñ×7Ñ7Ø�N‰NœFŸL™L¨Ó/ó
ˆð �1Š9ÜÐ!@ÀÇÁÐ@PÐPQÐRÓSÐSä"×7Ñ7¸Ó=ˆÔØ×"Ñ"×6Ñ6Ø�N‰N˜A˜t T×%6Ñ%6ó
ˆñ ÜÐ!;¸D¿N¹NÐ;KÈ1ÐMÓNÐNð r    c                 ód  — t        j                  «       }t        j                  «       }| j                  j                  | j                  dt        j                  |«      t        j                  |«      «      }|r|j                  dk(  ryg }d}|j                  �Œt        |j                  dz  «      D ]o  }|dz  }t        j                  |j                  |z   d«      }t        j                  |d d d«      }t        j                  |dd d«      }	|j                  ||	f«       Œq |S t        d«       |S )Nz\VarFileInfo\Translationr   é   é   ÚlittlezBuffer is None)re   rx   r   ry   rg   rz   r�   r~   ÚvalueÚrangeÚ	string_atÚintÚ
from_bytesÚappendÚprint)
rj   Ú	lp_bufferÚu_lenr„   ÚtranslationsÚlang_idÚiÚoffsetÚdataÚ	code_pages
             r   Úget_language_idz$WinPeFileVersionInfo.get_language_idÆ   s  € Ü—O‘OÓ%ˆ	Ü—‘“ˆà×"Ñ"×1Ñ1Ø×ÑØ'Ü�L‰L˜Ó#Ü�L‰L˜Óó	
ˆñ ˜%Ÿ+™+¨Ò*ØàˆØˆØ�?‰?Ð&Ü˜5Ÿ;™;¨!Ñ+Ó,ò :�Ø˜Q™�Ü×'Ñ'¨	¯©¸&Ñ(@À!ÓD�ÜŸ.™.¨¨b¨q¨°8Ó<�ÜŸN™N¨4°°!¨9°hÓ?�	Ø×#Ñ# W¨iÐ$8Õ9ð:ð ˆô Ð"Ô#àˆr    ©r   N)	Ú__name__Ú
__module__Ú__qualname__Ústrrk   rh   ri   rŒ   r˜   r   r    r   rb   rb   —   s-   „ ð! #ð !¨$ó !ó@ó.Oð" ô r    rb   c                 ó  — dt         t        t        f   fd„}t        | «      syt        j
                  j                  | «      r| }n |«       \  }}|du ryt        |«      }|j                  «       }|dk7  rt        d«      ‚y)z¸
    Torch.compile() is only work on MSVC with English language pack well.
    Check MSVC's language pack: https://github.com/pytorch/pytorch/issues/157673#issuecomment-3051682766
    r   c            	      óº  — t         j                  j                  t         j                  j	                  dd«      ddd«      } t         j                  j                  | «      s`t         j                  j                  t         j                  j	                  dd«      ddd«      } t         j                  j                  | «      sy	 | d	d
ddddddg	}t        j                  |dd¬«      j                  «       }|syt         j                  j                  |ddd«      }t         j                  j                  |«      syt        j                  |«      D �cg c]A  }t         j                  j                  t         j                  j                  ||«      «      r|‘ŒC }}|syt        |d¬«      d   }t         j                  j                  ||dddd«      }t         j                  j                  |«      rd|fS t         j                  j                  ||dddd«      }t         j                  j                  |«      rd|fS 	 yc c}w # t        j                  t        f$ r Y yw xY w)z=
        Finds the path to cl.exe using vswhere.exe.
        zProgramFiles(x86)zC:\Program Files (x86)zMicrosoft Visual StudioÚ	Installerzvswhere.exeÚProgramFileszC:\Program Files©FÚ z-latestz-prereleasez	-productsÚ*z	-requiresz1Microsoft.VisualStudio.Component.VC.Tools.x86.x64z	-propertyÚinstallationPathTúutf-8)ÚtextÚencodingÚVCÚToolsÚMSVC)Úreverser   rG   ÚHostX64Úx64zcl.exeÚHostX86Úx86)r5   r8   r9   rQ   rR   rN   r;   r<   ÚstripÚlistdirÚisdirÚsortedÚCalledProcessErrorr>   )Úvswhere_pathÚcmdÚvs_install_pathÚmsvc_tools_pathÚdÚtoolset_versionsÚlatest_toolset_versionÚcl_paths           r   Úget_msvc_cl_pathz3check_msvc_cl_language_id.<locals>.get_msvc_cl_pathë   s!  € ô —w‘w—|‘|Ü�J‰J�N‰NÐ.Ð0IÓJØ%ØØó	
ˆô �w‰w�~‰~˜lÔ+ÜŸ7™7Ÿ<™<Ü—
‘
—‘˜~Ð/BÓCØ)ØØó	ˆLô —7‘7—>‘> ,Ô/Ø ð<	ð ØØØØØØCØØ"ð
ˆCô )×5Ñ5Ø˜$¨ôç‰e‹gð ñ #Ø ô !Ÿg™gŸl™l¨?¸DÀ'È6ÓRˆOÜ—7‘7—>‘> /Ô2Ø ô
 Ÿ™ OÓ4ö àÜ—7‘7—=‘=¤§¡§¡¨o¸qÓ!AÔBò ð Ðð  ñ
 $Ø Ü%+Ð,<ÀdÔ%KÈAÑ%NÐ"ô —g‘g—l‘lØØ&ØØØØóˆGô �w‰w�~‰~˜gÔ&Ø˜W�}Ð$ô Ÿ'™'Ÿ,™,Ø#Ø*ØØØØó�ô —7‘7—>‘> 'Ô*Ø ˜=Ð(ð +ð ùòI øôB ×-Ñ-Ô/@ÐAò 	Ùð	ús@   Ã3H> Ã5AH> Ä7H> ÅAH9ÆH> ÆAH> Ç0AH> È9H> È>IÉINFi	  znTorch.compile() is only support MSVC with English language pack,Please reinstall its language pack to English.)
ÚtupleÚboolr�   Ú_is_msvc_clr5   r8   rN   rb   r˜   r   )rY   r¾   Úcl_exe_pathÚb_retr�   r“   s         r   Úcheck_msvc_cl_language_idrÄ   ä   s‰   € ðRœe¤D¬# IÑ.ó Rôh �xÔ Øä	‡w�w‡~�~�hÔà‰á-Ó/Ñˆˆ{Ø�E‰>Øä'¨Ó4€LØ×*Ñ*Ó,€GØ�$‚äð=ó
ð 	
ð r    c                 ó¾  — 	 t        j                  | dgt         j                  d¬«      }d}|j                  «       D ]8  }d	|v sŒ|j                  d
d«      d   j                  «       j                  «       }Œ: |€t	        d| › d| › d�«      ‚|dvrt	        d| › d|› �«      ‚|S # t        $ r}t	        d| › d�«      |‚d}~wt
        $ r}t	        d| › d�«      |‚d}~ww xY w)zS
    Check if MinGW `compiler` exists and return it's flavor (win32 or posix).
    ú-vT)r]   r§   z
Compiler: z is not found.NzFailed to run z -vzThread modelú:r)   éÿÿÿÿzCannot determine the flavor of z, (win32 or posix). No Thread model found in )r'   ÚposixzOnly win32 and pofix flavor of z is supported. The flavor is )
r;   r<   r^   r>   r   Ú	ExceptionÚ
splitlinesÚsplitr±   Úlower)rY   Úoutr_   ÚflavorÚlines        r   Úcheck_mingw_win32_flavorrÑ   T  s  € ð
BÜ×%Ñ%Ø�tÐ¤Z×%6Ñ%6¸Tô
ˆð €FØ—‘Ó ò <ˆØ˜TÒ!Ø—Z‘Z  QÓ'¨Ñ+×1Ñ1Ó3×9Ñ9Ó;‰Fð<ð €~ÜØ-¨h¨ZÐ7cÐdlÐcmÐmpÐqó
ð 	
ð Ð'Ñ'ÜØ-¨h¨ZÐ7TÐU[ÐT\Ð]ó
ð 	
ð €Møô) ò IÜ˜Z¨ z°Ð@ÓAÀqÐHûÜò BÜ˜^¨H¨:°SÐ9Ó:ÀÐAûðBús#   ‚(B" Â"	CÂ+B;Â;CÃCÃCc                  óŠ  — t         j                  j                  dk(  r@t        j                  dk7  r-t
        } t         j                  j                  st        | «       | S t        rCt        j                  j                  dd«      } t        | «      } t        | «       t        | «       | S t        j                  «       rt         j"                  S t%        t         j&                  j(                  t*        t,        f«      r$t-        t         j&                  j(                  «      }nt         j&                  j(                  f}t/        |«      } | S )NÚwindowsr'   ÚCXXÚcl)r
   Úaot_inductorÚcross_target_platformr3   r4   Ú	MINGW_GXXÚpackage_cpp_onlyrÑ   Ú_IS_WINDOWSr5   rQ   rR   Únormalize_path_separatorr`   rÄ   Ú	is_fbcoder   ÚccÚ
isinstanceÚcpprA   Úlistr¿   rD   )rY   r*   s     r   Úget_cpp_compilerrá   t  sÜ   € ä×Ñ×1Ñ1°YÒ>Ü�L‰L˜GÒ#ô ˆÜ×"Ñ"×3Ò3Ü$ XÔ.ØˆåÜ—:‘:—>‘> %¨Ó.ˆÜ+¨HÓ5ˆÜ$ XÔ.Ü! (Ô+ð €Oô ×ÑÔÜ—>‘>Ð!Ü”f—j‘j—n‘n¤t¬U mÔ4Üœ6Ÿ:™:Ÿ>™>Ó*‰Fä—j‘j—n‘nÐ&ˆFÜ& vÓ.ˆØ€Or    Úuse_relative_pathc                 óÈ   — t         rt        d«      ‚t        j                  «       r6t        j
                  }| rt        j                  nt        j                  }||fS d}d}||fS )NzWindows is not supported yet.ÚldÚobjcopy)rÚ   r   r
   rÜ   r   rä   Úobjcopy_fallbackrå   )râ   rä   rå   s      r   Úget_ld_and_objcopyrç   �  sf   € ÝÜÐ:Ó;Ð;ä×ÑÔÜ—‘ˆBñ %ô ×,Ò,ä ×(Ñ(ð ð ˆwˆ;Ðð ˆBØˆGØˆwˆ;Ðr    Ú
cubin_fileÚkernel_namerä   rå   c                 ó�  — | dz   }|› d|› d| › �}t        j                  |j                  «       ddd¬«       |› d|› �}t        j                  |j                  «       ddd¬«       t        j                  dd| «      }|d	|› d
|› d�z   d|› d|› d�z   d|› d|› d�z   |z   }t        j                  |j                  «       ddd¬«       |S )Nú.oz  -r -b binary -z noexecstack -o ú T©Úcapture_outputr§   ÚcheckzB --rename-section .data=.rodata,alloc,load,readonly,data,contents z[\W]Ú_z --redefine-sym _binary_z	_start=__z_start z--redefine-sym _binary_z_size=__z_size z_end=__z_end )r;   ÚrunrÌ   ÚreÚsub)rè   ré   rä   rå   Úobj_filer·   Ú	file_names          r   Úconvert_cubin_to_objrö      s÷   € ð ˜DÑ €HàˆDÐ0°°
¸!¸J¸<Ð
H€CÜ‡N�N�3—9‘9“;¨t¸$ÀdÕKàˆIÐWÐX`ÐWaÐ
b€CÜ‡N�N�3—9‘9“;¨t¸$ÀdÕKô —‘�w  ZÓ0€IàØ$ Y K¨y¸¸ÀWÐ
Mñ	Nà# I ;¨h°{°mÀ6Ð
Jñ	Kð $ I ;¨g°k°]À%Ð
Hñ	Ið ñ		ð ô ‡N�N�3—9‘9“;¨t¸$ÀdÕKØ€Or    ÚcubinsÚ
output_dirÚcpp_compilerc                 ó  — t         j                  j                  |d«      }t         j                  j                  |d«      }t        |d«      5 }|j	                  d«       | D ]s  \  }}t         j                  j                  |«      }|j                  dd«      j                  dd«      }	|j	                  d	|› d
|› d|› d|	› d|› d|› d|› d|› d|› d�«       Œu 	 ddd«       t        j                  |d|d|gddd¬«       |S # 1 sw Y   Œ)xY w)aq  Convert multiple cubin files to a single .o using batched .incbin assembly.

    Instead of spawning 3 subprocesses per cubin (ld + 2x objcopy), generates
    a single .S file with .incbin directives for all cubins and compiles it
    with one compiler invocation. Produces bit-identical rodata and symbols
    as the per-cubin convert_cubin_to_obj approach.

    Args:
        cubins: list of (cubin_file_path, kernel_name) tuples.
        output_dir: directory for the generated .S and .o files.
        cpp_compiler: C compiler to use for assembling (default: gcc).

    Returns:
        Path to the combined .o file.
    zcubins_combined.Szcubins_combined.oÚwz.section .rodata
ú\z\\ú"z\"z.balign 16
.global __z_start
.global __z_end
__z_start:
.incbin "z"
__z_end:
.global __z_size
.set __z	_size, __z	_end - __z_start
Nú-cú-oTrí   )	r5   r8   r9   ÚopenÚwriteÚabspathr(   r;   rñ   )
r÷   rø   rù   Úasm_pathÚobj_pathÚfrè   ré   Ú	abs_cubinÚescaped_paths
             r   Úbatch_convert_cubins_to_objr  »  s7  € ô( �w‰w�|‰|˜JÐ(;Ó<€HÜ�w‰w�|‰|˜JÐ(;Ó<€Hä	ˆh˜Ó	ð  Ø	�‰Ð$Ô%Ø'-ò 	Ñ#ˆJ˜äŸ™Ÿ™¨
Ó3ˆIØ$×,Ñ,¨T°6Ó:×BÑBÀ3ÈÓNˆLØ�G‰GðØ(˜Mð *Ø(˜Mð *Ø �Mð "Ø(˜>ð *Ø �Mð "Ø(˜Mð *Ø%˜ð 'Ø �M ¨;¨-°xðAõ
ñ		÷ô$ ‡N�NØ	�t˜X t¨XÐ6ØØØõ	ð €O÷1ð ús   ÁB
D Ä D	c                 óx   — t        j                  | dg«      j                  d«      }d|j                  «       d   v S )Nr1   Úutf8ÚAppler   )r;   r<   ÚdecoderË   )rù   Úversion_strings     r   Ú_is_apple_clangr  í  s<   € ä×,Ñ,¨l¸KÐ-HÓI×PÑPÐQWÓX€NØ�n×/Ñ/Ó1°!Ñ4Ð4Ð4r    c                 ó  — t         j                  dk(  rt        | «      S t        r@t	        j
                  d| «      rt        d«      ‚t        t	        j
                  d| «      «      S t        t	        j
                  d| «      «      S )Nr&   z((clang$)|(clang\+\+$))z]Please use clang-cl, due to torch.compile only support MSVC-like CLI (compiler flags syntax).z
(clang-cl)z(clang|clang\+\+))r3   r4   r  rÚ   rò   r*   r   rÀ   ©rù   s    r   Ú	_is_clangr  ó  sl   € ô ‡|�|�xÒÜ˜|Ó,Ð,Ý	ä�9‰9Ð/°Ô>ÜØoóð ô ”B—I‘I˜m¨\Ó:Ó;Ð;Ü”—	‘	Ð.°Ó=Ó>Ð>r    c                 óX   — t        | «      ryt        t        j                  d| «      «      S )NFz(gcc|g\+\+|gnu-c\+\+))r  rÀ   rò   r*   r  s    r   Ú_is_gccr    s&   € ô �ÔØÜ”—	‘	Ð2°LÓAÓBÐBr    Úmajorc                 óx  — t        | «      sy	  t        j                  | ddgt        j                  ¬«      j	                  «       j
                  t        Ž }t        j                  d|«      }|€yt        |j                  d«      «      t        t        |«      «      k  S # t        t        j                  f$ r Y yw xY w)NFz-dumpfullversionz-dumpversionr\   z\d+(?:\.\d+)*r   )r  r;   r<   ÚDEVNULLr±   r  ÚSUBPROCESS_DECODE_ARGSr>   r=   rò   r*   r   Úgroupr�   )rù   r  Ú
output_msgÚversion_searchs       r   Ú_is_gcc_version_less_thanr  
  s²   € ä�<Ô Øð
ðŒJ×#Ñ#ØÐ1°>ÐBÜ!×)Ñ)ô÷ ‰U‹Wß‰VÔ+ð-ð 	ô —Y‘YÐ/°Ó<€NØÐØä˜×,Ñ,¨QÓ/Ó0´<ÄÀEÃ
Ó3KÑKÐKøô œz×9Ñ9Ð:ò Ùðús   ŽAB ÂB9Â8B9c                 ó<  — t         sy	 t        j                  | dgt        j                  t        j                  d¬«      } |j
                  j                  «       j                  t        Ž }|j                  «       }t        |«      xr d|d   v S # t        $ r Y yw xY w)NFr[   ©rM   r]   rï   Ú	Microsoftr   )rÚ   r;   rñ   rV   r^   rM   r±   r  r  rË   rÀ   ÚOSError)rù   Úresultr  Úliness       r   rÁ   rÁ   "  s�   € åØðÜ—‘Ø˜7Ð#Ü—?‘?Ü×$Ñ$Øô	
ˆð 2�V—]‘]×(Ñ(Ó*×1Ñ1Ô3IÐJˆ
Ø×%Ñ%Ó'ˆä�E‹{Ò6˜{¨e°A©hÐ6Ð6øäò Ùðús   ‰BB Â	BÂBc                 óâ  — dt         dd fd„}	  t        j                  | dgt        j                  ¬«      j	                  «       j
                  t        Ž }d|j                  «       d   v }|rat        r!t        j                  d| «      rt        d	«      ‚t        j                  d
|«      }|�"|j                  d«      } |t        |«      «       |S # t        $ r Y yt        j                  $ r Y yw xY w)NÚcompiler_versionr   c                 óR   — t         rdnd}| t        |«      k  rt        d|› d�«      ‚y)zw
        On Windows: early version icx has `-print-file-name` issue, and can't preload correctly for inductor.
        z2024.2.1z0.0.0z0Intel Compiler error: less than minimal version r}   N)rÚ   r   r   )r#  Úmin_versions     r   Ú_check_minimal_versionz2_is_intel_compiler.<locals>._check_minimal_version:  s8   € õ %0‘j°WˆØœl¨;Ó7Ò7ÜØBÀ;À-ÈqÐQóð ð 8r    r1   r\   ÚIntelr   z((icx$)|(icx-cc$))z[Please use icx-cl, due to torch.compile only support MSVC-like CLI (compiler flags syntax).z(\d+[.]\d+[.]\d+[.]\d+)r)   F)r   r;   r<   r  r±   r  r  rË   rÚ   rò   r*   r   r  r>   r=   )rù   r&  r  Úis_intel_compilerÚicx_ver_searchÚicx_vers         r   Ú_is_intel_compilerr+  8  sö   € ð´ð À$ó ððŒJ×#Ñ#Ø˜{Ð+´J×4FÑ4Fô÷ ‰U‹Wß‰VÔ+ð	-ð 	ð $ z×'<Ñ'<Ó'>¸qÑ'AÐAÐÙÝÜ—9‘9Ð2°LÔAÜ&Øuóð ô
  ŸY™YÐ'AÀ:ÓNˆNØÐ)Ø(×.Ñ.¨qÓ1�Ù&¤|°GÓ'<Ô=à Ð øÜò ÙÜ×%Ñ%ò áðús   ŽB?C Ã	C.ÃC.Ã-C.c                  ó(   — t        t        «       «      S r   )r  rá   r   r    r   Úis_gccr-  e  s   € äÔ#Ó%Ó&Ð&r    c                  ó(   — t        t        «       «      S r   )r  rá   r   r    r   Úis_clangr/  j  s   € äÔ%Ó'Ó(Ð(r    c                  ó(   — t        t        «       «      S r   )r+  rá   r   r    r   r(  r(  o  s   € äÔ.Ó0Ó1Ð1r    c                  ó(   — t        t        «       «      S r   )r  rá   r   r    r   Úis_apple_clangr2  t  s   € äÔ+Ó-Ó.Ð.r    c                  ó(   — t        t        «       «      S r   )rÁ   rá   r   r    r   Ú
is_msvc_clr4  y  s   € äÔ'Ó)Ó*Ð*r    c                 ó¼  — t         j                  j                  «       }d|d<   	  t        j                  | dgt        j
                  |¬«      j                  t        Ž }|j                  dd«      }|j                  d	d«      }|S # t        $ rN 	  t        j                  | dgt        j
                  |¬«      j                  t        Ž }n# t        $ r Y Y yw xY wY Œ|w xY w)
NÚCÚLC_ALLrÆ   )r]   Úenvr1   r£   úrð   ú
)
r5   rQ   Úcopyr;   r<   r^   r  r  rÊ   r(   )rY   r8  r  s      r   Úget_compiler_version_infor<  ~  sá   € ä
�*‰*�/‰/Ó
€CØ€Cˆ�Mð
ðœ×0Ñ0Ø�tÐ¤Z×%6Ñ%6¸Cô
ç
‰&Ô(ð*ˆð $×+Ñ+¨D°#Ó6€NØ#×+Ñ+¨D°#Ó6€NØÐøô ò ð	ðœZ×4Ñ4Ø˜;Ð'´
×0AÑ0AÀsôç‰fÔ,ð.‰Nøô ò 	Úð	úñ ðús5   ¥9B Â	CÂ9CÃCÃ	CÃCÃCÃCÃCÚ	dest_listÚsrc_listc                 ó4   — | j                  d„ |D «       «       y )Nc              3   óF   K  — | ]  }t        j                  |«      –— Œ y ­wr   ©r;  Údeepcopy)Ú.0Úitems     r   ú	<genexpr>z_append_list.<locals>.<genexpr>•  s   è ø€ Ò>¨T”T—]‘] 4×(Ñ>ùó   ‚!)Úextend)r=  r>  s     r   Ú_append_listrH  ”  s   € Ø×ÑÑ>°XÔ>Õ>r    Ú	orig_listc                 óD   — g }| D ]  }||vsŒ|j                  |«       Œ |S r   )rŽ   )rI  Únew_listrD  s      r   Ú_remove_duplication_in_listrL  ˜  s1   € Ø€HØò "ˆØ�xÒØ�O‰O˜DÕ!ð"ð €Or    Úpath_dirc                 ó  — t         j                  j                  | «      s	 t        | «      j	                  dd¬«       y y # t
        $ r6}|j                  t        j                  k7  rt        d| › �«      |‚Y d }~y d }~ww xY w)NT)ÚparentsÚexist_okzFail to create path )	r5   r8   rN   r   Úmkdirr  ÚerrnoÚEEXISTr   )rM  r   s     r   Ú_create_if_dir_not_existrT     sr   € Ü�7‰7�>‰>˜(Ô#ð	OÜ�‹N× Ñ ¨¸Ð Õ=ð $øô ò 	OØ�y‰yœEŸL™LÒ(Ü"Ð%9¸(¸Ð#DÓEÈ3ÐNô )ûð	Oús   ¡? ¿	A>Á,A9Á9A>c                 óž  — t         j                  j                  | «      r®t        j                  | d¬«      D ]~  \  }}}|D ]7  }t         j                  j	                  ||«      }t        j
                  |«       Œ9 |D ]7  }t         j                  j	                  ||«      }t        j                  |«       Œ9 Œ€ t        j                  | «       y y )NF)Útopdown)r5   r8   rN   Úwalkr9   ÚremoveÚrmdir)rM  ÚrootÚdirsÚfilesÚnamerc   Údir_paths          r   Ú_remove_dirr_  ©  s¦   € Ü	‡w�w‡~�~�hÔÜ!#§¡¨¸5Ô!Aò 	#ÑˆD�$˜Øò %�ÜŸG™GŸL™L¨¨tÓ4�	Ü—	‘	˜)Õ$ð%ð ò #�ÜŸ7™7Ÿ<™<¨¨dÓ3�Ü—‘˜Õ"ñ#ð		#ô 	�‰�Õð  r    Úcmd_lineÚcwdc                 ó†  — t        j                  | «      }	 t        j                  ||dt        j                  t        j
                  ¬«       y # t        j                  $ r_} |j                  j                  t        Ž }d|v xs d|v }|rt        j                  dk(  rd}||z  }t        j                  ||«      |‚d }~ww xY w)NT)ra  rï   rM   r]   z'omp.h' file not foundÚlibompr&   a¢  

OpenMP support not found. Please try one of the following solutions:
(1) Set the `CXX` environment variable to a compiler other than Apple clang++/g++ that has builtin OpenMP support;
(2) install OpenMP via conda: `conda install llvm-openmp`;
(3) install libomp via brew: `brew install libomp`;
(4) manually setup OpenMP and set the `OMP_PREFIX` environment variable to point to a path with `include/omp.h` under it.)ÚshlexrÌ   r;   rñ   rV   r^   rµ   rM   r  r  r3   r4   r   ÚCppCompileError)r`  ra  r·   r_   ÚoutputÚopenmp_problemÚinstructions          r   Ú_run_compile_cmdri  µ  s°   € Ü
�+‰+�hÓ
€Cð6Ü�‰Ø�S ¬Z¯_©_ÄZ×EVÑEVö	
øô ×(Ñ(ò 6Ø �—‘—‘Ô"8Ð9ˆØ1°VÐ;ÒQ¸xÈ6Ð?QˆÙœcŸl™l¨hÒ6ð2ð ð �kÑ!ˆFÜ×!Ñ! # vÓ.°AÐ5ûð6ús   —6A ÁC Á!AB;Â;C c                 ó\   — t        d«      5  t        | |«       d d d «       y # 1 sw Y   y xY w)NÚcompile_file)r	   ri  )r`  ra  s     r   Úrun_compile_cmdrl  Ì  s)   € Ü	�nÓ	%ñ (Ü˜ 3Ô'÷(÷ (ñ (ús   Œ"¢+Ú	orig_pathc                 óR   — t         r | j                  t        j                  d«      S | S )Nú/)rÚ   r(   r5   Úsep)rm  s    r   rÛ   rÛ   Ñ  s"   € ÝØ× Ñ ¤§¡¨Ó-Ð-ØÐr    c                   ó®  — e Zd ZdZ	 	 	 	 	 	 	 	 	 	 	 	 	 d$dedee   dz  dee   dz  dee   dz  dee   dz  dee   dz  d	ee   dz  d
ee   dz  dedededededdfd„Zd%d„Zd%d„Z	d%d„Z
defd„Zdee   fd„Zdee   fd„Zdee   fd„Zdee   fd„Zdee   fd„Zdee   fd„Zdee   fd„Zdefd„Zdefd„Zdefd„Zdefd „Zdefd!„Zd"eddfd#„Zy)&ÚBuildOptionsBasezÀ
    This is the Base class for store cxx build options, as a template.
    Actually, to build a cxx shared library. We just need to select a compiler
    and maintains the suitable args.
    NrY   ÚdefinitionsÚinclude_dirsÚcflagsÚldflagsÚlibraries_dirsÚ	librariesÚpassthrough_argsÚaot_moderâ   Úcompile_onlyÚprecompilingÚpreprocessingr   c                 ó   — || _         |xs g | _        |xs g | _        |xs g | _        |xs g | _        |xs g | _        |xs g | _        |xs g | _        d | _        |	| _	        |
| _
        || _        || _        || _        y r   )Ú	_compilerÚ_definitionsÚ_include_dirsÚ_cflagsÚ_ldflagsÚ_libraries_dirsÚ
_librariesÚ_passthrough_argsÚprecompiled_headerÚ	_aot_modeÚ_use_relative_pathÚ_compile_onlyÚ_precompilingÚ_preprocessing)rj   rY   rs  rt  ru  rv  rw  rx  ry  rz  râ   r{  r|  r}  s                 r   rk   zBuildOptionsBase.__init__Þ  s‘   € ð  "ˆŒØ'2Ò'8°bˆÔØ(4Ò(:¸ˆÔØ"(¢,¨BˆŒØ#*¢=¨bˆŒØ*8Ò*>¸BˆÔØ%.¢_°"ˆŒà,<Ò,BÀˆÔð /3ˆÔà'ˆŒØ(9ˆÔØ#/ˆÔØ#/ˆÔØ$1ˆÕr    c                 óx   — | j                   s| j                  s| j                  rg | _        g | _        g | _        y y r   )rŠ  r‹  rŒ  r„  r…  rƒ  r{   s    r   Ú_process_compile_only_optionsz.BuildOptionsBase._process_compile_only_options  s7   € Ø×Ò ×!3Ò!3°t×7JÒ7JØ#%ˆDÔ Ø ˆDŒOØˆD�Mð 8Kr    c                 óp  — t        | j                  «      | _        t        | j                  «      | _        t        | j                  «      | _        t        | j                  «      | _        t        | j
                  «      | _        t        | j                  «      | _        t        | j                  «      | _        y r   )rL  r€  r�  r‚  rƒ  r„  r…  r†  r{   s    r   Ú_remove_duplicate_optionsz*BuildOptionsBase._remove_duplicate_options  s~   € Ü7¸×8IÑ8IÓJˆÔÜ8¸×9KÑ9KÓLˆÔÜ2°4·<±<Ó@ˆŒÜ3°D·M±MÓBˆŒÜ:¸4×;OÑ;OÓPˆÔÜ5°d·o±oÓFˆŒÜ!<¸T×=SÑ=SÓ!TˆÕr    c                 óD   — | j                  «        | j                  «        y r   )rŽ  r�  r{   s    r   Ú_finalize_optionsz"BuildOptionsBase._finalize_options  s   € Ø×*Ñ*Ô,Ø×&Ñ&Õ(r    c                 ó   — | j                   S r   )r  r{   s    r   Úget_compilerzBuildOptionsBase.get_compiler  ó   € Ø�~‰~Ðr    c                 ó   — | j                   S r   )r€  r{   s    r   Úget_definitionsz BuildOptionsBase.get_definitions  s   € Ø× Ñ Ð r    c                 ó   — | j                   S r   )r�  r{   s    r   Úget_include_dirsz!BuildOptionsBase.get_include_dirs  ó   € Ø×!Ñ!Ð!r    c                 ó   — | j                   S r   )r‚  r{   s    r   Ú
get_cflagszBuildOptionsBase.get_cflags  s   € Ø�|‰|Ðr    c                 ó   — | j                   S r   )rƒ  r{   s    r   Úget_ldflagszBuildOptionsBase.get_ldflags!  s   € Ø�}‰}Ðr    c                 ó   — | j                   S r   )r„  r{   s    r   Úget_libraries_dirsz#BuildOptionsBase.get_libraries_dirs$  s   € Ø×#Ñ#Ð#r    c                 ó   — | j                   S r   )r…  r{   s    r   Úget_librarieszBuildOptionsBase.get_libraries'  s   € Ø�‰Ðr    c                 ó   — | j                   S r   )r†  r{   s    r   Úget_passthrough_argsz%BuildOptionsBase.get_passthrough_args*  s   € Ø×%Ñ%Ð%r    c                 ó   — | j                   S r   )rˆ  r{   s    r   Úget_aot_modezBuildOptionsBase.get_aot_mode-  r•  r    c                 ó   — | j                   S r   )r‰  r{   s    r   Úget_use_relative_pathz&BuildOptionsBase.get_use_relative_path0  s   € Ø×&Ñ&Ð&r    c                 ó   — | j                   S r   )rŠ  r{   s    r   Úget_compile_onlyz!BuildOptionsBase.get_compile_only3  rš  r    c                 ó   — | j                   S r   )r‹  r{   s    r   Úget_precompilingz!BuildOptionsBase.get_precompiling6  rš  r    c                 ó   — | j                   S r   )rŒ  r{   s    r   Úget_preprocessingz"BuildOptionsBase.get_preprocessing9  s   € Ø×"Ñ"Ð"r    Úfilec                 óÂ  — | j                  «       | j                  «       | j                  «       | j                  «       | j	                  «       | j                  «       | j                  «       | j                  «       | j                  «       | j                  «       | j                  «       dœ}t        |d«      5 }t        j                  ||«       d d d «       y # 1 sw Y   y xY w)N)rY   rs  rt  ru  rv  rw  rx  ry  rz  râ   r{  rû   )r”  r—  r™  rœ  rž  r   r¢  r¤  r¦  r¨  rª  r   ÚjsonÚdump)rj   r¯  Úattrsr  s       r   Úsave_flags_to_jsonz#BuildOptionsBase.save_flags_to_json<  s»   € à×)Ñ)Ó+Ø×/Ñ/Ó1Ø ×1Ñ1Ó3Ø—o‘oÓ'Ø×'Ñ'Ó)Ø"×5Ñ5Ó7Ø×+Ñ+Ó-Ø $× 9Ñ 9Ó ;Ø×)Ñ)Ó+Ø!%×!;Ñ!;Ó!=Ø ×1Ñ1Ó3ñ
ˆô �$˜‹_ð 	  Ü�I‰I�e˜QÔ÷	 ÷ 	 ñ 	 ús   Â5CÃC)r£   NNNNNNNFFFFFr™   )rš   r›   rœ   Ú__doc__r�   rà   rÀ   rk   rŽ  r�  r’  r”  r—  r™  rœ  rž  r   r¢  r¤  r¦  r¨  rª  r¬  r®  r´  r   r    r   rr  rr  ×  sÚ  „ ñð Ø(,Ø)-Ø#'Ø$(Ø+/Ø&*Ø-1ØØ"'Ø"Ø"Ø#ñ"2àð"2ð ˜#‘Y Ñ%ð"2ð ˜3‘i $Ñ&ð	"2ð
 �S‘	˜DÑ ð"2ð �c‘˜TÑ!ð"2ð ˜S™	 DÑ(ð"2ð ˜‘9˜tÑ#ð"2ð ˜s™) dÑ*ð"2ð ð"2ð  ð"2ð ð"2ð ð"2ð ð"2ð 
ó"2óHóUó)ð˜có ð!  c¡ó !ð" $ s¡)ó "ð˜D ™Ió ð˜T #™Yó ð$ D¨¡Ió $ð˜t C™yó ð& d¨3¡ió &ð˜dó ð' tó 'ð" $ó "ð" $ó "ð# 4ó #ð  sð  ¨tô  r    rr  Úwarning_allc                 ó    — t         s| rdgS g S g S )NÚWall©rÚ   )r¶  s    r   Ú_get_warning_all_cflagrº  O  s   € ÝÙ&�ˆxÐ.¨BÐ.àˆ	r    Ústd_numc                 ó,   — t         r		 d} d| › �gS d| › �gS )Núc++20zstd:zstd=r¹  )r»  s    r   Ú_get_cpp_std_cflagr¾  V  s1   € Ýð	ð ˆØ�w�iÐ Ð!Ð!à�w�iÐ Ð!Ð!r    c                 óÒ   — t         rg d¢}|S ddg}t        | «      r/t        j                  j                  rdnd}|j                  |«       t        | «      r|j                  d«       |S )N)Úwd4819Úwd4251Úwd4244Úwd4267Úwd4275Úwd4018Úwd4190Úwd4624Úwd4067Úwd4068ÚEHsczZc:__cpluspluszpermissive-zWno-unused-variablezWno-unknown-pragmasz$Werror=ignored-optimization-argumentz!Wno-ignored-optimization-argumentÚpedantic)rÚ   r  r
   rÖ   Ú#raise_error_on_ignored_optimizationrŽ   r  )rù   ru  Úignored_optimization_arguments      r   Ú_get_os_related_cpp_cflagsrÎ  e  sp   € Ýò
ˆð> €Mð (Ð)>Ð?ˆÜ�\Ô"ô ×&Ñ&×JÒJñ 7à8ð *ð
 �M‰MÐ7Ô8Ü�<Ô ð �M‰M˜*Ô%Ø€Mr    c                 ó8   — g }t         r|j                  d«       |S )NÚNOMINMAX©rÚ   rŽ   )rù   Úos_definitionss     r   Ú_get_os_related_cpp_definitionsrÓ  ‰  s    € Ø "€NÝð 	×Ñ˜jÔ)ØÐr    c                  óJ  — t         rg } | S g d¢} | j                  d«       t        j                  j                  s| j                  d«       | j                  d«       | j                  dt        j                  j
                  › �«       t        «       r| j                  d«       | S )N)zfno-trapping-mathzfunsafe-math-optimizationszffinite-math-onlyzfno-signed-zeroszfno-finite-math-onlyzfno-unsafe-math-optimizationszfmath-errnozffp-contract=zfexcess-precision=fast)rÚ   rŽ   r
   rß   Úenable_unsafe_math_opt_flagÚ#enable_floating_point_contract_flagr-  )Úflagss    r   Ú_get_ffast_math_flagsrØ  ’  s„   € ÝØˆð6 €Lò'
ˆð 	�‰Ð+Ô,Ü�z‰z×5Ò5Ø�L‰LÐ8Ô9ð 	�‰�]Ô#Ø�‰�}¤V§Z¡Z×%SÑ%SÐ$TÐUÔVäŒ8Ø�L‰LÐ1Ô2à€Lr    c                  óX   — g } g }t         rddg} g d¢}| |fS | j                  d«       | |fS )zÈ
    When we turn on generate debug symbol.
    On Windows, it should create a [module_name].pdb file. It helps debug by WinDBG.
    On Linux, it should create some debug sections in binary file.
    ÚZIÚ_DEBUG)ÚDEBUGzASSEMBLYDEBUG zOPT:REFzOPT:ICFÚgrÑ  )ru  rv  s     r   Ú!_get_inductor_debug_symbol_cflagsrÞ  ²  sD   € ð €FØ€GåØ˜Ð!ˆÚCˆð �7ˆ?Ðð 	�‰�cÔà�7ˆ?Ðr    c                  óþ   ‡— t        «       } t        j                  «       dvr| S t        j                  j	                  d«      s| S t
        j                  j                  «       Š| j                  ˆfd„dD «       «       | S )N©Úaarch64Úarm64r%   c              3   óF   •K  — | ]  }‰j                  |d «      r|–— Œ y­w)FN)rR   )rC  Ú
capabilityÚcapabilitiess     €r   rE  z/_get_linux_aarch64_cpu_flags.<locals>.<genexpr>Ï  s)   øè ø€ ò àØ×Ñ˜J¨Ô.ô 	ñùs   ƒ!©Úbf16ÚsveÚsve2)	r   r4   Úmachiner3   Ú
startswithÚtorchÚcpuÚget_capabilitiesÚupdate)r×  rå  s    @r   Ú_get_linux_aarch64_cpu_flagsrð  Ä  sj   ø€ ä'›\€Eä×ÑÓÐ!5Ñ5Øˆä�<‰<×"Ñ" 7Ô+Øˆä—9‘9×-Ñ-Ó/€LØ	‡L�Ló à1ôô ð €Lr    c                 óº   — t        «       }t        | «      rFt        | d«      r:t        g d¢«      j	                  |«      ryt        ddg«      j	                  |«      ryy)Né   ræ  zmarch=armv8.6-a+sve+sve2+bf16rç  rè  zmarch=armv8.6-a+sve+bf16úmarch=native)rð  r  r  r   Úissubset)rù   r×  s     r   Ú_get_linux_aarch64_arch_flagrõ  Ø  sP   € ä(Ó*€Eäˆ|ÔÔ!:¸<ÈÔ!LÜÒ-Ó.×7Ñ7¸Ô>Ø2ä�v˜u�oÓ&×/Ñ/°Ô6Ø-àr    c                 óB  — t        j                  «       rg S t         j                  j                  }|dk(  rg S t        j
                  dk(  r|€g S t        j                  «       }|€+|dk(  rdgS |dk(  rdgS |dk(  rdgS |d	v rt        | «      gS d
gS |dk(  rd|› �gS d|› �gS )Nr£   r&   Úppc64lezmcpu=nativeÚriscv64zmarch=rv64gcÚriscv32zmarch=rv32gcrà  ró  zmcpu=zmarch=)r
   rÜ   rß   Úmarchr3   r4   rê  rõ  )rù   rú  rê  s      r   Ú_get_cpu_arch_cflagsrû  æ  sÑ   € Ü×ÑÔØˆ	ä�J‰J×Ñ€EØ�‚{Øˆ	ô ‡|�|�xÒ E MØˆ	ä×ÑÓ €GØ€}Ø�iÒØ!�?Ð"Ø�iÒØ"Ð#Ð#Ø�iÒØ"Ð#Ð#ØÐ*Ñ*Ü0°Ó>Ð?Ð?ØÐÐà�)ÒØ˜�w�Ð Ð Ø�U�GÐÐÐr    Úmin_optimizec                 ó–  — g }g }t         j                  j                  xs# t        j                  j                  dd«      dk(   }t         j                  j                  xsd t         j                  j                  xsH t        j                  j                  dd«      dk(  xs# t        j                  j                  dd«      dk(  }|r5t        r||rdndgz  }n8||rt         j                  j                  nddgz  }nt        r|g d	¢z  }n|d
gz  }|rt        «       \  }}||z  }||z  }t         j                  j                  r)t        r|j                  d«       n|j                  d«       t         j                  j                  r6|s4t        s.t        | «      r|j                  d«       n|j                  d«       |t        «       z  }t        r	 ||fS t        j                   dk7  rt#        | «      r|j                  d«       |t%        | «      z  }t         j                  j&                  rt        | «      r|j                  d«       ||fS )NÚTORCHINDUCTOR_DEBUG_COMPILEÚ0Ú1ÚTORCHINDUCTOR_DEBUG_SYMBOLÚO1ÚO2ÚO3ÚDNDEBUG)ÚOdÚOb0úOy-ÚO0r  zfno-omit-frame-pointerzgline-tables-onlyÚg1r&   zfno-tree-loop-vectorizeú	flto=thin)r
   rÖ   Údebug_compiler5   rQ   rR   Údebug_symbolsrÚ   Úcompile_wrapper_opt_levelrÞ  Úenable_frame_pointerrŽ   Úenable_line_tablesr  rØ  r3   r4   r  rû  Ú
enable_lto)rù   rü  ru  rv  Úshould_use_optimized_flagsÚshould_add_debug_symbol_flagsÚdebug_cflagsÚdebug_ldflagss           r   Ú_get_optimization_cflagsr    s  € ð €FØ€Gô 	×Ñ×)Ñ)ò 	EÜ�:‰:�>‰>Ð7¸Ó=ÀÑDð"Ðô
 	×Ñ×)Ñ)ò 	DÜ×Ñ×,Ñ,ò	Dä�:‰:�>‰>Ð7¸Ó=ÀÑDò	Dô �:‰:�>‰>Ð6¸Ó<ÀÑCð	 "ñ "ÝØ™|‘t°Ð6Ñ6‰FàÙAM”×#Ñ#×=Ò=ÐSWØðñ ‰Fõ
 ØÒ*Ñ*‰Fà�t�fÑˆFá$Ü&GÓ&IÑ#ˆ�mØ�,ÑˆØ�=Ñ ˆä×Ñ×/Ò/ÝØ�M‰M˜%Õ à�M‰MÐ2Ô3ä×Ñ×-Ò-Ñ6SÝÜ˜Ô&Ø—‘Ð1Õ2à—‘˜dÔ#à
Ô#Ó%Ñ%€FåØð �7ˆ?Ðô �<‰<˜8Ò#¬°Ô(=Ø�M‰MÐ3Ô4ØÔ& |Ó4Ñ4ˆä×Ñ×)Ò)¬i¸Ô.EØ�M‰M˜+Ô&à�7ˆ?Ðr    Údo_linkc                 ó¶   — t         r	 ddgS t        j                  «       dk(  rdt        «       v rg d¢S g }| r|j	                  d«       |j	                  d«       |S )NÚDLLÚMDÚDarwinÚclang)ÚsharedÚfPICzundefined dynamic_lookupr  r  )rÚ   r4   Úsystemrá   rŽ   )r  r×  s     r   Ú_get_shared_cflagsr   D  s[   € Ýð	ð �tˆ}ÐÜ‡�Ó˜HÒ$¨Ô4DÓ4FÑ)Fâ=Ð=Ø€EÙØ�‰�XÔà	‡L�L�ÔØ€Lr    Úextra_flagsc                 óR  — g }g }g }g }g }	g }
g }t        | |«      \  }}|t        |«      z   t        |«      z   t        «       z   t	        | «      z   }|t        | «      z  }t        sGt        j                  j                  r-t        | «      r"|j                  d«       |j                  d«       |j                  dj                  |«      «       t        j                  j                  dk(  r6|j                  ddg«       t        t         «      dk(  r|j                  d«       |||||z   |	|
|fS )	Núfuse-ld=lldr  rì   rÓ   z-static-libstdc++z-static-libgccrÉ   z'-Wl,-Bstatic -lwinpthread -Wl,-Bdynamic)r  r   rº  r¾  rÎ  rÓ  rÚ   r
   rÖ   r  r  rŽ   r9   r×   rG  rÑ   rØ   )rù   r  r¶  r!  rü  rs  rt  ru  rv  rw  rx  ry  Ú
opt_cflagsÚopt_ldflagss                 r   Úget_cpp_optionsr&  V  s=  € ð  €KØ €LØ€FØ€GØ "€NØ€IØ"$Ðä6°|À\ÓRÑ€J�ð 	Ü
˜WÓ
%ñ	&ä
  Ó
-ñ	.ô Ó
ñ	ô % \Ó
2ñ		3ð ð Ô2°<Ó@Ñ@€Kåœ6×.Ñ.×9Ò9¼iÈÔ>UØ�‰�}Ô%Ø�‰�{Ô#à×Ñ˜CŸH™H [Ó1Ô2ä×Ñ×0Ñ0°IÒ=Ø×ÑÐ!4Ð6FÐ GÔHÜ#¤IÓ.°'Ò9Ø×#Ñ#Ð$MÔNð 	ØØØ�+ÑØØØðð r    c                   ó`   ‡ — e Zd ZdZ	 	 	 	 	 	 	 	 ddededee   dedededed	ed
dfˆ fd„Zˆ xZS )Ú
CppOptionsaH  
    This class is inherited from BuildOptionsBase, and as cxx build options.
    This option need contains basic cxx build option, which contains:
    1. OS related args.
    2. Toolchains related args.
    3. Cxx standard related args.
    Note:
    1. This Options is good for assist modules build, such as x86_isa_help.
    r{  r¶  r!  râ   rY   rü  r|  r}  r   Nc	                 óü  •— t         ‰| �  ||||¬«       |r|n	t        «       | _        t	        | j                  |xs |xs | |||¬«      \  }	}
}}}}}t        | j                  |	«       t        | j                  |
«       t        | j                  |«       t        | j                  |«       t        | j                  |«       t        | j                  |«       t        | j                  |«       | j                  «        y )N)r{  râ   r|  r}  )rù   r  r!  r¶  rü  )Úsuperrk   rá   r  r&  rH  r€  r�  r‚  rƒ  r„  r…  r†  r’  )rj   r{  r¶  r!  râ   rY   rü  r|  r}  rs  rt  ru  rv  rw  rx  ry  Ú	__class__s                   €r   rk   zCppOptions.__init__’  sñ   ø€ ô 	‰ÑØ%Ø/Ø%Ø'ð	 	ô 	
ñ &.™Ô3CÓ3EˆŒô ØŸ™Ø%ÒF¨ÒF¸ÐGØ#Ø#Ø%ô
ñ	
ØØØØØØØô 	�T×&Ñ&¨Ô4Ü�T×'Ñ'¨Ô6Ü�T—\‘\ 6Ô*Ü�T—]‘] GÔ,Ü�T×)Ñ)¨>Ô:Ü�T—_‘_ iÔ0Ü�T×+Ñ+Ð-=Ô>Ø×ÑÕ r    )FTr   Fr£   FFF)	rš   r›   rœ   rµ  rÀ   r   r�   rk   Ú__classcell__©r+  s   @r   r(  r(  ‡  sˆ   ø„ ñð #Ø Ø%'Ø"'ØØ"Ø"Ø#ñ*!àð*!ð ð*!ð ˜c‘]ð	*!ð
  ð*!ð ð*!ð ð*!ð ð*!ð ð*!ð 
÷*!ñ *!r    r(  c                  óP   — ddg} t         j                  r| j                  d«       | S )NÚTORCH_INDUCTOR_CPP_WRAPPERÚSTANDALONE_TORCH_HEADERÚ!TORCH_INDUCTOR_PRECOMPILE_HEADERS)r
   Úcpp_cache_precompile_headersrŽ   )Údefss    r   Ú!_get_torch_cpp_wrapper_definitionr4  ¿  s(   € Ø(Ð*CÐD€DÜ×*Ò*Ø�‰Ð7Ô8Ø€Kr    c                  ó   — dgS )Nz" C10_USING_CUSTOM_GENERATED_MACROSr   r   r    r   Ú_use_custom_generated_macrosr6  Æ  s   € Ø0Ð1Ð1r    c                  ó†   — t         s:t        j                  «       r$g d¢} t        j                  «       dk(  r| ddgz  } | S g S g S )N)ÚC10_USE_GLOGÚC10_USE_MINIMAL_GLOGÚ$C10_DISABLE_TENSORIMPL_EXTENSIBILITYÚx86_64zATEN_MKL_ENABLED_FBCODE=1zATEN_MKLDNN_ENABLED_FBCODE=1)rÚ   r
   rÜ   r4   rê  )Úfb_internal_macross    r   Ú_use_fb_internal_macrosr=  Ê  sT   € ÝÜ×ÑÔò"Ðô
 ×ÑÓ! XÒ-Ø"Ø/Ø2ð'ñ Ð"ð &Ð%àˆIàˆ	r    rz  c                 ó8  — g }g }g }g }t         r||||fS t        j                  «       �rì|j                  d«       |j                  t        j
                  «       |j                  t        j                  «       |j                  t        j                  «       |j                  t        j                  «       |j                  t        j                  «       |j                  t        j                  «       |j                  t        j                  «       |j                  t        j                  «       |j                  t        j                  «       |j                  d«       |r	|st        }n#t        j                   j#                  t        «      }t%        | «      rz|j                  d«       |j                  dt        j&                  z   «       |j                  d«       |j                  d|› �«       |j                  dt        j&                  z   «       ||||fS )NÚnostdincÚincludez --rtlib=compiler-rtz -Br#  zWl,--script=ÚL)rÚ   r
   rÜ   rŽ   r   Úsleef_includeÚopenmp_includeÚpython_includeÚ
cc_includeÚlibgcc_includeÚlibgcc_arch_includeÚlibgcc_backward_includeÚglibc_includeÚlinux_kernel_includeÚ_LINKER_SCRIPTr5   r8   Úbasenamer  Ú	glibc_lib)rù   rz  râ   ru  rt  ry  rv  Úlinker_scripts           r   Ú_setup_standard_sys_libsrO  Þ  s�  € ð
 €FØ €LØ"$ÐØ€GÝØ�|Ð%5°wÐ>Ð>ä×ÑÕà�‰�jÔ!ð 	×ÑœK×5Ñ5Ô6Ø×ÑœK×6Ñ6Ô7Ø×ÑœK×6Ñ6Ô7Ø×ÑœK×2Ñ2Ô3Ø×ÑœK×6Ñ6Ô7Ø×ÑœK×;Ñ;Ô<Ø×ÑœK×?Ñ?Ô@Ø×ÑœK×5Ñ5Ô6Ø×ÑœK×<Ñ<Ô=Ø×Ñ˜IÔ&áÑ-Ü*‰MäŸG™G×,Ñ,¬^Ó<ˆMä�\Ô"Ø×#Ñ#Ð$:Ô;Ø×#Ñ# E¬K×,AÑ,AÑ$AÔBØ�N‰N˜=Ô)Ø�N‰N˜\¨-¨Ð9Ô:Ø�N‰N˜3¤×!6Ñ!6Ñ6Ô7à�<Ð!1°7Ð:Ð:r    Úvec_isac                 ó
  — g }g }| t         k7  rs|j                  d„ | j                  «       D «       «       | j                  «       g}t	        j
                  «       r(t        | «      j                  «       }d|› �d|› �d|› d�g}||fS )Nc              3   óF   K  — | ]  }t        j                  |«      –— Œ y ­wr   rA  )rC  Úxs     r   rE  z0_get_build_args_of_chosen_isa.<locals>.<genexpr>  s   è ø€ ÒF¨1”d—m‘m A×&ÑFùrF  zCPU_CAPABILITY=ÚCPU_CAPABILITY_ÚHAVE_Ú_CPU_DEFINITION)r   rG  Úbuild_macroÚbuild_arch_flagsr
   rÜ   r�   Úupper)rP  ÚmacrosÚbuild_flagsÚcaps       r   Ú_get_build_args_of_chosen_isar]  	  s’   € Ø€FØ€KØ”/Ò!à�‰ÑF°×0CÑ0CÓ0EÔFÔFà×/Ñ/Ó1Ð2ˆä×ÑÔÜ�g“,×$Ñ$Ó&ˆCà! # Ð'Ø! # Ð'Ø˜�u˜OÐ,ðˆFð �;ÐÐr    Úinclude_pytorchc                 ó<  — ddl m}m} g } |«       }t        j                  j
                  rh|g}t        j                  dk7  rÙt        j                  «       sÅ|j                  ddg«       t        r|j                  d«       |s™|j                  d«       n‡g }t        j                  j                  dk(  rht        j                  j                  }|sJ d	«       ‚t        |t        «      r|j                  |«       n#t        |t         «      sJ ‚|j                  |«       t        j                  j                  dk(  rJt        j                  j"                  sJ d
«       ‚|j                  t        j                  j"                  «       t        r|j                  d«       |||fS )Nr   )Úinclude_pathsÚTORCH_LIB_PATHr&   rì  Ú	torch_cpuÚc10Útorch_pythonrÓ   z^'config.aot_inductor.aoti_shim_library' must be set when 'cross_target_platform' is 'windows'.)z]'config.aot_inductor.aoti_shim_library_path' must be set to the path of the AOTI shim libraryz+ when 'cross_target_platform' is 'windows'.Úsleef)Útorch.utils.cpp_extensionr`  ra  r
   rÖ   Úlink_libtorchr3   r4   rÜ   rG  rÚ   rŽ   r×   Úaoti_shim_libraryrÞ   r�   rà   Úaoti_shim_library_path)r^  rz  r`  ra  rx  rt  rw  rh  s           r   Ú_get_torch_related_argsrj    s`  € ÷ Hà€IÙ “?€Lä×Ñ×(Ò(Ø(Ð)ˆÜ�<‰<˜8Ò#¬F×,<Ñ,<Ô,>Ø×Ñ˜g {Ð3Ô4ÝØ× Ñ  Ô'ÙØ× Ñ  Õ0àˆÜ×Ñ×4Ñ4¸	ÒAÜ &× 3Ñ 3× EÑ EÐá$ð ØpóÐ$ô Ð+¬SÔ1Ø× Ñ Ð!2Õ3ä!Ð"3´TÔ:Ð:Ð:Ø× Ñ Ð!2Ô3ä×Ñ×0Ñ0°IÒ=Ü×"Ñ"×9Ò9ð 	
ð <
ó 	
Ð9ð 	×Ñœf×1Ñ1×HÑHÔIåØ×Ñ˜Ô!à˜¨Ð2Ð2r    c                  ó–  — t        t        j                  d«      «      } | j                  «       s\t	        j
                  «       dk(  rEt        t        j                  d«      «      }|j                  j                  dz  j                  «       } | dz  j                  «       s!t        j                  dt        | «      › �«       t        | «      gS )Nr@  r  ÚstdlibÚHeaderszPython.hzCan't find Python.h in )r   Ú	sysconfigÚget_pathrN   r4   r  ÚparentÚabsoluteÚwarningsÚwarnr�   )Úinclude_dirÚstd_libs     r   Ú_get_python_include_dirsrv  H  sž   € Ü”y×)Ñ)¨)Ó4Ó5€Kð ×ÑÔ¤H§O¡OÓ$5¸Ò$AÜ”y×)Ñ)¨(Ó3Ó4ˆØ—~‘~×,Ñ,¨yÑ8×BÑBÓDˆØ˜*Ñ$×,Ñ,Ô.Ü�‰Ð/´°KÓ0@Ð/AÐBÔCÜ�ÓÐÐr    c                  ó¬  — t        «       } t        j                  dt        rdnd¬«      }|�| j	                  |«       t        rFt        t        t        j                  dd¬«      «      j                  dz  j                  «       «      g}nt        j                  d«      g}t        j                  «       r| j	                  t        j                  «       | |fS )Nr@  ÚntÚposix_prefix)ÚschemeÚlibsÚLIBDIR)rv  rn  ro  rÚ   rŽ   r�   r   rp  rq  Úget_config_varr
   rÜ   r   rD  )Úpython_include_dirsÚpython_include_pathÚpython_lib_paths      r   Ú_get_python_related_argsr�  U  sµ   € Ü2Ó4ÐÜ#×,Ñ,Ø¥+™$°>ôÐð Ð&Ø×"Ñ"Ð#6Ô7åääœ×+Ñ+¨I¸dÔCÓD×KÑKÈfÑTß‘(“*óð
‰ô %×3Ñ3°HÓ=Ð>ˆä×ÑÔØ×"Ñ"¤;×#=Ñ#=Ô>à Ð/Ð/r    c                  óì   — 	 d} t        j                  | j                  «       «      j                  d«      }t	        t        j                  |«      «      dkD  S # t         j                  t        f$ r Y yw xY w)Nzconda list llvm-openmp --jsonr
  r   F)	r;   r<   rÌ   r  Úlenr±  Úloadsr=   r>   )Úcommandrf  s     r   Úis_conda_llvm_openmp_installedr†  n  sd   € ðØ1ˆÜ×(Ñ(¨¯©«Ó9×@Ñ@ÀÓHˆÜ”4—:‘:˜fÓ%Ó&¨Ñ*Ð*øÜ×&Ñ&Ô(9Ð:ò Ùðús   ‚AA ÁA3Á2A3c                  ó  — 	 t        j                  d«      €yt        j                  g d¢«      j	                  d«      j                  «       } t        j                  j                  | «      }|| fS # t        j                  $ r Y yw xY w)NÚbrewr¢   )rˆ  z--prefixrc  r
  )
rS   rT   r;   r<   r  r±   r5   r8   rN   r=   )Úlibomp_pathÚomp_availables     r   Úhomebrew_libompr‹  x  sv   € ðä�<‰<˜ÓÐ'Øô
 ×#Ñ#Ò$BÓCß‰V�F‹^ß‰U‹Wð 	ô Ÿ™Ÿ™ {Ó3ˆØ˜kÐ)Ð)øÜ×%Ñ%ò Ùðús   ‚A/ ˜AA/ Á/BÂBÚomp_namec                 óp  — 	 t        j                  | dg«      j                  d«      }t        j                  j                  |j                  «       |«      }t        j                  j                  |«      r)dt        j                  d<   t        j                  |«       y y # t         j                  $ r Y y w xY w)Nz-print-file-name=binr
  ÚTRUEÚKMP_DUPLICATE_LIB_OK)r;   r<   r  r5   r8   r9   ÚrstripÚisfilerQ   r   ÚLoadLibraryr=   )rù   rŒ  rf  Úomp_paths       r   Úperload_clang_libomp_winr”  �  s“   € ð	Ü×(Ñ(¨,Ð8NÐ)OÓP×WÑWØó
ˆô —7‘7—<‘< §¡£°Ó:ˆÜ�7‰7�>‰>˜(Ô#Ø17ŒB�J‰JÐ-Ñ.Ü×Ñ˜XÕ&ð $øô ×%Ñ%ò Ùðús   ‚BB ÂB5Â4B5c                 óZ   — dt         dt         dt        fd„}	 g d¢}|D ]  } || |«       Œ y )Nrù   Úlib_namer   c                 ó`  — 	  t        j                  | d|› �gt         j                  ¬«      j                  t        Ž }|j                  «       }t        j                  j                  |«      r)dt        j                  d<   t        j                  |«       y	 y# t         j                  $ r Y yw xY w)Nz-print-file-name=r\   rŽ  r�  TF)r;   r<   r  r  r  r�  r5   r8   r‘  rQ   r   r’  r=   )rù   r–  rf  r“  s       r   Ú_load_icx_built_in_lib_by_namez>perload_icx_libomp_win.<locals>._load_icx_built_in_lib_by_name�  s§   € ð	ð”Z×,Ñ,ØÐ!2°8°*Ð=Ð>Ü!×)Ñ)ô÷ ‰fÔ,ð.ˆFð —}‘}“ˆHÜ�w‰w�~‰~˜hÔ'Ø5;”—
‘
Ð1Ñ2Ü× Ñ  Ô*Øð (ð øô ×)Ñ)ò 	ØØð	ús   ‚BB ÂB-Â,B-)zlibiomp5md.dllzsvml_dispmd.dllz
libmmd.dll)r�   rÀ   )rù   r˜  Úpreload_listr–  s       r   Úperload_icx_libomp_winrš  ›  sC   € ð´Sð ÄCð ÌDó ðò€Lð !ò ?ˆÙ& |°XÕ>ñ?r    c                 ó´  — g }g }g }g }g }g }t         j                  j                  dk(  r||||||fS t        �r{|j	                  d«       |j	                  d«       t        | «       }t        j                  d«      }|�¼t        j                  j                  |dd«      }	t        j                  j                  |	«      }
|
r_|j	                  t        j                  j                  |d«      «       |j	                  t        j                  j                  |d«      «       nt        j                  d«       |xs |
}|s|j	                  d	«       t        j                  d
«      }|sÝ|�Ût        «       }|rÏt        j                  j                  |d«      }|j	                  t        j                  j                  |d«      «       |j	                  |«       t        j                  «       j                  dk(  rNt        j                  j                  t        j                  j                  |d«      «      r|j	                  d«       |�st!        «       \  }}|�rþ|j	                  t        j                  j                  |d«      «       |j	                  t        j                  j                  |d«      «       �nžt"        r™	 t%        | «      r0|j	                  d«       |j	                  d«       t'        | d«       �n\t)        | «      r/|j	                  d«       |j	                  d«       t+        | «       �n"|j	                  d«       |j	                  d«       nÿt        j,                  «       r~|j	                  t.        j0                  «       |j	                  d«       |j	                  t        j                  j3                  t.        j4                  «      «       |j	                  d	«       nmt%        | «      r#|j	                  d«       |j	                  d«       n?t)        | «      r|j	                  d«       n"|j	                  d«       |j	                  d«       ||||||fS )NrÓ   ÚXclangÚfopenmpÚ
OMP_PREFIXr@  zomp.hÚlibz-environment variable `OMP_PREFIX` is invalid.ÚompÚCONDA_PREFIXr;  zlibiomp5.dylibÚiomp5Úopenmprc  z
libomp.dllÚQiopenmpÚ
libiomp5mdzopenmp:experimentalz-Wp,-fopenmpÚgompÚfiopenmp)r
   rÖ   r×   Ú	_IS_MACOSrŽ   r  r5   r6   r8   r9   rN   rr  rs  r†  Úunamerê  r‹  rÚ   r  r”  r+  rš  rÜ   r   rC  ÚdirnameÚopenmp_lib_so)rù   ru  rv  Úinclude_dir_pathsÚlib_dir_pathsr{  ry  rŠ  Ú
omp_prefixÚheader_pathÚ	valid_envÚconda_prefixÚconda_lib_pathr‰  s                 r   Ú_get_openmp_argsr³  º  sB  € ð €FØ€GØ#%ÐØ!€MØ€DØ"$Ðä×Ñ×0Ñ0°IÒ=Ø�wÐ 1°=À$ÐHXÐXÐXÞà�‰�hÔØ�‰�iÔ ô ,¨LÓ9Ð9ˆô —Y‘Y˜|Ó,ˆ
ØÐ!ÜŸ'™'Ÿ,™, z°9¸gÓFˆKÜŸ™Ÿ™ {Ó3ˆIÙØ!×(Ñ(¬¯©¯©°jÀ)Ó)LÔMØ×$Ñ$¤R§W¡W§\¡\°*¸eÓ%DÕEä—‘ÐMÔNØ)Ò6¨YˆMáØ�K‰K˜Ôô —y‘y Ó0ˆÙ Ð!9Ü:Ó<ˆMÙÜ!#§¡§¡¨l¸EÓ!B�Ø!×(Ñ(¬¯©¯©°lÀIÓ)NÔOØ×$Ñ$ ^Ô4ä—8‘8“:×%Ñ%¨Ò1´b·g±g·n±nÜ—G‘G—L‘L Ð1AÓBô7ð —K‘K Ô(ò Ü)8Ó):Ñ&ˆM˜;ÚØ!×(Ñ(¬¯©¯©°kÀ9Ó)MÔNØ×$Ñ$¤R§W¡W§\¡\°+¸uÓ%EÖFõ 
ð	ô �\Ô"Ø�M‰M˜(Ô#Ø�K‰K˜Ô!Ü$ \°<Ö@Ü Ô-Ø�M‰M˜*Ô%Ø�K‰K˜Ô%Ü" <Ö0ð
 �M‰M˜(Ô#Ø�M‰MÐ/Õ0ä×ÑÔØ×$Ñ$¤[×%?Ñ%?Ô@à×#Ñ# NÔ3Ø× Ñ ¤§¡§¡´×1JÑ1JÓ!KÔLà�K‰K˜Õä˜Ô&à—‘˜iÔ(Ø—‘˜FÕ#Ü# LÔ1Ø—‘˜jÕ)à—‘˜iÔ(Ø—‘˜FÔ#à�7Ð-¨}¸dÐDTÐTÐTr    c                  óˆ   — g } g }t        j                  «       r't        j                  d«      g} |j	                  d«       | |fS )z‡
    For fbcode cpu case, we should link stdc++ instead assuming the binary where dlopen is executed is built with dynamic stdc++.
    r|  zstdc++)r
   rÜ   rn  r}  rŽ   )r­  r{  s     r   Ú_get_libstdcxx_argsrµ  '  sD   € ð  "€MØ€DÜ×ÑÔÜ"×1Ñ1°(Ó;Ð<ˆØ�‰�HÔà˜$ÐÐr    Úuse_mmap_weightsÚuse_mmap_weights_externalc                 óx   — g }| r|rt        d«      ‚| r|j                  d«       |S |r|j                  d«       |S )NzIOnly one of use_mmap_weights and use_mmap_weights_external should be truez USE_MMAP_SELFz USE_MMAP_EXTERNAL)r   rŽ   )r¶  r·  rZ  s      r   Úget_mmap_self_macror¹  4  sO   € ð €FáÑ5ÜØWó
ð 	
ñ Ø�‰Ð&Ô'ð €Mñ 
#Ø�‰Ð*Ô+Ø€Mr    c                  ód   — ddl m}  g }| j                  j                  r|j	                  d«       |S )Nr   )r
   z# AOT_INDUCTOR_USE_CACHING_ALLOCATOR)Útorch._inductorr
   rÖ   Úweight_use_caching_allocatorrŽ   )r
   rZ  s     r   Úget_caching_allocator_macror½  D  s+   € Ý&à€FØ×Ñ×7Ò7Ø�‰Ð;Ô<Ø€Mr    c                 ó®  — g }g }g }	g }
g }g }g }t        «       }t        «       }t        | ||«      \  }}}}t        |«      \  }}t	        ||¬«      \  }}}t        «       \  }}t        | «      \  }}}}}} t        «       }!t        ||«      }"t        «       }#||z   |z   |!z   |"z   |#z   }||z   |z   |z   }||z   }	||z   }
||z   |z   }||z   }||z   | z   }|||	|
|||fS )a3  
    This function is used to get the build args of torch related build options.
    1. Torch include_directories, libraries, libraries_directories.
    2. Python include_directories, libraries, libraries_directories.
    3. OpenMP related.
    4. Torch MACROs.
    5. MISC
    6. Return the build args
    )r^  rz  )
r4  r6  rO  r]  rj  r�  r³  r=  r¹  r½  )$rù   rP  r^  rz  râ   r¶  r·  rs  rt  ru  rv  rw  rx  ry  Útorch_cpp_wrapper_definitionsÚ'use_custom_generated_macros_definitionsÚsys_libs_cflagsÚsys_libs_include_dirsÚsys_libs_passthrough_argsÚsys_libs_ldflagsÚ
isa_macrosÚisa_ps_args_build_flagsÚtorch_include_dirsÚtorch_libraries_dirsÚtorch_librariesr~  Úpython_libraries_dirsÚ
omp_cflagsÚomp_ldflagsÚomp_include_dir_pathsÚomp_lib_dir_pathsÚomp_libÚomp_passthrough_argsÚfb_macro_passthrough_argsÚmmap_self_macrosÚcaching_allocator_macross$                                       r   Úget_cpp_torch_optionsrÔ  M  sŸ  € ð$  €KØ €LØ€FØ€GØ "€NØ€IØ"$Ðä$EÓ$GÐ!Ü.JÓ.LÐ+ô 	! ¨xÐ9JÓKñØØØ!Øô +HÈÓ*PÑ'€JÐ'ô 	 °È(ÔSñ	ØØØô 2JÓ1KÑ.ÐÐ.ô 	˜Ó&ñØØØØØØô !8Ó 9Ðä*Ð+;Ð=VÓWÐÜ:Ó<Ðð 	&Ø
1ñ	2à
ñ	ð $ñ	$ð ñ		ð
 #ñ	#ð ð 	Ø
ñ	à
ñ	ð  ñ	 ð ð ˜zÑ)€FØ Ñ,€GØ*Ð-AÑAÐDUÑU€NØ 'Ñ)€Ià!Ð$;Ñ;Ð>RÑRð ð
 	ØØØØØØðð r    c                   ó„   ‡ — e Zd ZdZedddddddddddddfdededed	ed
edededededee   dededededdfˆ fd„Z	ˆ xZ
S )ÚCppTorchOptionsaf  
    This class is inherited from CppTorchOptions, which automatic contains
    base cxx build options. And then it will maintains torch related build
    args.
    1. Torch include_directories, libraries, libraries_directories.
    2. Python include_directories, libraries, libraries_directories.
    3. OpenMP related.
    4. Torch MACROs.
    5. MISC
    FTr   r£   rP  r^  r¶  rz  r{  râ   r¶  r·  r  r!  rY   rü  r|  r}  r   Nc           
      óÞ  •— t         ‰| �  |||
|||||¬«       || _        t        | j                  ||||||¬«      \  }}}}}}}t        | j                  |«       t        | j                  |«       t        | j                  |«       t        | j                  |«       t        | j                  |«       t        | j                  |«       t        | j                  |«       | j                  «        y )N)r{  r¶  r!  râ   rY   rü  r|  r}  )rù   rP  r^  rz  râ   r¶  r·  )r*  rk   rˆ  rÔ  r  rH  r€  r�  r‚  rƒ  r„  r…  r†  r’  )rj   rP  r^  r¶  rz  r{  râ   r¶  r·  r  r!  rY   rü  r|  r}  Útorch_definitionsrÇ  Útorch_cflagsÚtorch_ldflagsrÈ  rÉ  Útorch_passthrough_argsr+  s                         €r   rk   zCppTorchOptions.__init__¶  sñ   ø€ ô" 	‰ÑØ%Ø#Ø#Ø/ØØ%Ø%Ø'ð 	ô 		
ð "ˆŒô "ØŸ™ØØ+ØØ/Ø-Ø&?ô
ñ	
ØØØØØ ØØ"ô 	�T×&Ñ&Ð(9Ô:Ü�T×'Ñ'Ð);Ô<Ü�T—\‘\ <Ô0Ü�T—]‘] MÔ2Ü�T×)Ñ)Ð+?Ô@Ü�T—_‘_ oÔ6Ü�T×+Ñ+Ð-CÔDØ×ÑÕ r    )rš   r›   rœ   rµ  r   r   rÀ   r   r�   rk   r,  r-  s   @r   rÖ  rÖ  ª  sÖ   ø„ ñ	ð *Ø %Ø ØØ"Ø"'Ø!&Ø*/ØØ%'ØØ"Ø"Ø#ñ7!àð7!ð ð7!ð ð	7!ð
 ð7!ð ð7!ð  ð7!ð ð7!ð $(ð7!ð ð7!ð ˜c‘]ð7!ð ð7!ð ð7!ð ð7!ð ð7!ð  
÷!7!ñ 7!r    rÖ  c                  óò   — t        j                  «       rct        j                  j                  €Hdt
        j                  vr5dt
        j                  vr"t        j                  t
        j                  d<   y y y y y )NÚ	CUDA_HOMEÚ	CUDA_PATH)	r
   rÜ   rì  ÚversionÚhipr5   rQ   r   Úsdk_homer   r    r   Ú_set_gpu_runtime_envrâ  ð  s^   € ä×ÑÔÜ�M‰M×ÑÐ%ØœrŸz™zÑ)ØœrŸz™zÑ)ä"-×"6Ñ"6Œ�
‰
�;Òð *ð *ð &ð 	r    é   r8   c                 ó¼   — t        t        | «      j                  d«      «      }|r|d   j                  «       j                  S d| › �}t
        j                  |«       y )Nzlibcudart_static.ar   z%"libcudart_static.a" not found under )rà   r   ÚrglobÚresolverp  rO   rP   )r8   Úlib_dirsÚlog_msgs      r   Ú_find_libcudart_staticré  ú  sS   € ä”D˜“J×$Ñ$Ð%9Ó:Ó;€HÙØ˜‰{×"Ñ"Ó$×+Ñ+Ð+Ø5°d°VÐ<€GÜ‡H�HˆWÔØr    Údll_pathÚdef_pathÚimport_lib_pathc           	      ó`  — t         j                  j                  | «      }t        |d«      5 }t	        j
                  dd| g|t        j                  d¬«       ddd«       t	        j
                  dd|d	|d
|gt        j                  d¬«       t        j                  d||«       y# 1 sw Y   ŒNxY w)zIGenerate a MinGW import library (.a) from a DLL using gendef and dlltool.rû   Úgendefú-Tr  Nzx86_64-w64-mingw32-dlltoolz-dú-lz-D©r]   rï   z)Generated MinGW import library %s from %s)	r5   r8   rL  r   r;   rñ   rV   rO   rP   )rê  rë  rì  Údll_nameÚdef_files        r   Ú_gen_mingw_import_librô    s¡   € ä�w‰w×Ñ Ó)€HÜ	ˆh˜Ó	ð 
 Ü�‰Ø�s˜HÐ%ØÜ—?‘?Øõ		
÷
ô ‡N�Nà(ØØØØØØð	
ô �‰Øõô ‡H�HÐ8¸/È8ÕT÷+
ð 
ús   ¬+B$Â$B-z§#include <stdint.h>
uint64_t __security_cookie = 0x00002B992DDFA232ULL;
void __security_check_cookie(uint64_t cookie) { (void)cookie; }
void __GSHandlerCheck(void) {}
c                 ó  — t         j                  j                  | d«      }t         j                  j                  |«      ryd}d}	 t         j                  j                  | d«      }t         j                  j                  | d«      }t	        |d«      5 }|j                  t        «       ddd«       t        j                  dd	«      }t        j                  |d
|d|gt        j                  d¬«       t        j                  dd«      }t        j                  |d||gt        j                  d¬«       t        j                  d|«       	 ||fD ]:  }|sŒt         j                  j                  |«      sŒ&t        j                  |«       Œ< y# 1 sw Y   ŒãxY w# t        t        j                   f$ r� t        j#                  dd¬«       t         j                  j                  |«      rt        j                  |«       Y ||fD ]:  }|sŒt         j                  j                  |«      sŒ&t        j                  |«       Œ< yw xY w# ||fD ]:  }|sŒt         j                  j                  |«      sŒ&t        j                  |«       Œ< w xY w)zµ
    Create a static library with MSVC GS security symbol stubs for MinGW.

    Returns the library name (without lib prefix / .a suffix) if successful,
    or None on failure.
    zlibmsvc_gs_stubs.aÚmsvc_gs_stubsr£   z_msvc_gs_stubs.cz_msvc_gs_stubs.orû   NrH   rF   rþ   rÿ   Trñ  ÚarÚrcsz!Created MSVC GS stubs library: %sz'Failed to create MSVC GS stubs library.©Úexc_info)r5   r8   r9   rN   r   r  Ú_MSVC_GS_STUBS_SOURCErØ   r(   r;   rñ   rV   rO   rP   rX  r>   rµ   Úwarning)rø   Ú	stubs_libÚsrc_pathr  r  Ú	mingw_gccÚmingw_ars          r   Ú_create_msvc_gs_stubs_libr  .  s   € ô —‘—‘˜ZÐ)=Ó>€IÜ	‡w�w‡~�~�iÔ Øà€HØ€HðÜ—7‘7—<‘< 
Ð,>Ó?ˆÜ—7‘7—<‘< 
Ð,>Ó?ˆÜ�(˜CÓ ð 	+ AØ�G‰GÔ)Ô*÷	+ô ×%Ñ% e¨UÓ3ˆ	Ü�‰Ø˜˜h¨¨hÐ7Ü—?‘?Øõ	
ô
 ×$Ñ$ U¨DÓ1ˆÜ�‰Ø�u˜i¨Ð2Ü—?‘?Øõ	
ô
 	�‰Ð4°iÔ@Øð ˜HÐ%ò 	ˆAÚ”R—W‘W—^‘^ AÕ&Ü—	‘	˜!•ñ	÷5	+ð 	+ûô" œz×<Ñ<Ð=ò Ü�‰Ø5Øð 	ô 	
ô �7‰7�>‰>˜)Ô$Ü�I‰I�iÔ Øà˜HÐ%ò 	ˆAÚ”R—W‘W—^‘^ AÕ&Ü—	‘	˜!•ñ	ðûð ˜HÐ%ò 	ˆAÚ”R—W‘W—^‘^ AÕ&Ü—	‘	˜!•ñ	úsK   ÁAF ÂF
Â(BF Æ
FÆF ÆA$H>Ç:I È=H>È>I É
JÉJÉ,Jrw  c                 ó  — ddl }t        j                  j                  d«      }|st        j                  d«       g S | D ]Y  }t        j                  j                  t        j                  j                  |d«      «      sŒAt        j                  d|«       g c S  t        j                  j                  |dd«      }t        j                  j                  |«      s t        j                  j                  |d«      }|j                  t        j                  j                  |d	«      «      }d}| D ]ˆ  }t        j                  j                  |«      sŒ#t        j                  |t        j                  «      sŒHt        j                  j                  t        j                  j                  |d
«      «      sŒ†|} n |s*t        j                  d|«       |�t        |«      }|r|gS g S |€t        j                  d| «       g S |d   }t        j                  j                  |«      }	t        j                  j                  ||	j                  dd«      «      }
t        j                  j                  |d«      }	 t!        ||
|«       g S # t"        t$        j&                  f$ rl t        j                  dd¬«       |
|fD ]7  }t        j                  j                  |«      sŒ#t        j(                  |«       Œ9 t        |«      }|r|gcY S g cY S w xY w)aé  
    Auto-generate a MinGW-compatible import library (libcudart.a)
    from the CUDA runtime DLL. This avoids linking against the hybrid cudart.lib
    which contains MSVC-compiled static objects with /GS security symbols that
    MinGW cannot resolve.

    Falls back to creating MSVC GS security stubs if the DLL is unavailable,
    and falls back gracefully to the original cudart.lib if that also fails.

    Returns a list of extra library names to link (e.g. ["msvc_gs_stubs"]).
    r   NÚWINDOWS_CUDA_HOMEzFWINDOWS_CUDA_HOME not set, skipping MinGW cudart import lib generationzlibcudart.az5libcudart.a already exists in %s, skipping generationrG   r®   zcudart64_*.dllz
cudart.libztNo cudart64_*.dll found in %s. Cannot generate MinGW import library. Will create MSVC GS security stubs as fallback.zÄNo writable directory containing cudart.lib found. Cannot generate MinGW import library. If linking fails with undefined references to __security_cookie, ensure cudart.lib is present in one of: %sz.dllz.defzNFailed to generate MinGW cudart import library. Falling back to MSVC GS stubs.Trù  )Úglobr5   rQ   rR   rO   Údebugr8   rN   r9   r³   ÚaccessÚW_OKrü  r  rL  r(   rô  r>   r;   rµ   rX  )rw  r  Úwindows_cuda_homeÚlib_dirÚbin_dirÚdll_candidatesrø   Ústub_librê  rò  rë  rì  r  s                r   Ú_ensure_mingw_cudart_import_libr  ]  sw  € ó äŸ
™
Ÿ™Ð':Ó;ÐÙÜ�	‰	ØTô	
ð ˆ	à!ò ˆÜ�7‰7�>‰>œ"Ÿ'™'Ÿ,™, w°Ó>Õ?Ü�I‰IÐMÈwÔWØŠIðô �g‰g�l‰lÐ,¨e°UÓ;€GÜ�7‰7�=‰=˜Ô!Ü—'‘'—,‘,Ð0°%Ó8ˆØ—Y‘YœrŸw™wŸ|™|¨GÐ5EÓFÓG€Nð €JØ!ò ˆÜ�7‰7�=‰=˜Õ!¤b§i¡i°¼¿¹Õ&AÜ�w‰w�~‰~œbŸg™gŸl™l¨7°LÓAÕBØ$�
Ùð	ñ Ü�‰ð>àô	
ð Ð!Ü0°Ó<ˆHÙØ �zÐ!Øˆ	àÐÜ�‰ð9ð ô	
ð ˆ	à˜aÑ €HÜ�w‰w×Ñ Ó)€Hä�w‰w�|‰|˜J¨×(8Ñ(8¸ÀÓ(HÓI€HÜ—g‘g—l‘l :¨}Ó=€OðÜ˜h¨°/ÔBØˆ	øÜœz×<Ñ<Ð=ò Ü�‰ð-àð 	ô 	
ð
 ˜OÐ,ò 	ˆAÜ�w‰w�~‰~˜aÕ Ü—	‘	˜!•ð	ô -¨ZÓ8ˆÙØ�:ÒØŠ	ðús   É4J ÊALË'LÌLÌLÚlpathsc                 ó  — t        | «      D ]‡  \  }}dt        j                  v sŒ|j                  t        j                  d   «      sŒ<t	        |«      }|€ŒJt        |«      | |<   |dz  }|j                  «       sŒn| j                  t        |«      «       Œ‰ t        j                  «       rVt        t        j                  «      dz  }|j                  «       r)t        |«      | vr| j                  t        |«      «       y y y y )NrÝ  Ústubs)Ú	enumerater5   rQ   rë  ré  r�   rN   rŽ   r
   rÜ   r   r   Úsdk_libÚis_dir)r  r”   r8   r	  Ústub_dirs        r   Ú_transform_cuda_pathsr  µ  sÔ   € ô ˜VÓ$ò -‰ˆˆ4Øœ"Ÿ*™*Ò$¨¯©¼¿¹ÀKÑ9PÕ)QÜ#9¸$Ó#?ˆGØˆØÜ˜G›ˆF�1‰IØ Ñ(ˆHØ�‰Õ Ø—‘œc (›mÕ,ð-ô ×ÑÔÜœ×+Ñ+Ó,¨wÑ6ˆØ�?‰?Ô¤ X£°fÑ!<Ø�M‰Mœ#˜h›-Õ(ð "=Ðð r    c                 óº   — t        j                  «       rGt        j                  }t        j
                  j                  |«      r|| vr| j                  |«       y y y y r   )r
   rÜ   r   r  r5   r8   r³   rŽ   )r  r  s     r   Ú_transform_rocm_pathsr  Ê  sI   € ä×ÑÔÜ×%Ñ%ˆÜ�7‰7�=‰=˜Ô! g°VÑ&;Ø�M‰M˜'Õ"ð '<Ð!ð r    Údevice_typer{  c                 óª  — g }g }g }g }g }g }g }	t        j                  «       rEdt        j                  vr3dt        j                  vr!t        j
                  t        j                  d<   t        «        ddlm}
 |
j                  | t         j                  j                  du «      }t         j                  j                  }|
j                  | |t         j                  j                  ¬«      }| dk(  rç|j                  t        j                   j"                  rdnd	«       t        j                   j"                  �@t        j                  «       s|s|d
gz  }n|dgz  }|j                  d«       t%        |«       n`t        j                  «       s|s|dgz  }n|ddgz  }t         j                  j                  dk(  rt'        |«      }|dg|z   z  }t)        |«       | dk(  r¯|j                  d«       d}t*        rkt        j,                  d«      }|€t/        |«      ‚|t        j0                  j3                  |d«      gz  }|t        j0                  j3                  |d«      gz  }n|dgz  }t5        d«      st/        |«      ‚|ddgz  }|r|dgz  }| dk(  r|j                  d«       t        j                  «       ra|j                  t        j6                  «       |r$| dk(  rt        j                   j"                  €|sdg}	| dk(  rt9        «       \  }}||z  }||z  }t         j                  j:                  r|t         j                  j:                  z  }|||||||	fS )zÚ
    This function is used to get the build args of device related build options.
    1. Device include_directories, libraries, libraries_directories.
    2. Device MACROs.
    3. MISC
    4. Return the build args
    rÝ  rÞ  r   )Úcpp_extensionN)rÇ  r×   Úcudaz	 USE_ROCMz	 USE_CUDAÚamdhip64Ú	torch_hipz __HIP_PLATFORM_AMD__Ú
torch_cudarÓ   ÚcudartÚxpuz USE_XPUz•Intel GPU driver is not properly installed, please follow the instruction in https://github.com/pytorch/pytorch?tab=readme-ov-file#intel-gpu-support.ÚLEVEL_ZERO_V1_SDK_PATHr@  rŸ  zWno-commentÚ	ze_loaderÚsyclÚ	torch_xpuÚmpsz USE_MPSz*-Wl,-Bstatic -lcudart_static -Wl,-Bdynamicrí  )r
   rÜ   r5   rQ   r   rá  râ  Útorch.utilsr  r`  rÖ   rg  Úlibrary_pathsr×   rŽ   rì  rß  rà  r  r  r  rÚ   r6   r  r8   r9   r   Úsdk_includerµ  Úcustom_op_libs)r  rz  r{  rs  rt  ru  rv  rw  rx  ry  r  rg  Ú
extra_libsÚxpu_error_stringÚze_rootÚstdcxx_lib_dir_pathsÚstdcxx_libss                    r   Úget_cpp_torch_device_optionsr/  Ò  s/  € ð  €KØ €LØ€FØ€GØ "€NØ€IØ"$Ðä×ÑÔØœrŸz™zÑ)ØœrŸz™zÑ)ä"-×"6Ñ"6Œ�
‰
�;ÑäÔÝ)à ×.Ñ.Ø”V×(Ñ(×6Ñ6¸$Ð>ó€Lô ×'Ñ'×5Ñ5€MØ"×0Ñ0ØØ(Ü$×1Ñ1×GÑGð 1ó €Nð
 �fÒØ×Ñ¬%¯-©-×*;Ò*;™;ÀÔMä�=‰=×ÑÐ(Ü×ÑÔ!©Ø˜j˜\Ñ)‘	à˜k˜]Ñ*�	Ø×ÑÐ6Ô7Ü! .Õ1ä×ÑÔ!©Ø˜f˜XÑ%‘	à˜f lÐ3Ñ3�	Ü×"Ñ"×8Ñ8¸IÒEÜ<¸^ÓL�
Ø˜h˜Z¨*Ñ4Ñ4�	Ü! .Ô1à�eÒØ×Ñ˜:Ô&ðZð 	õ Ü—i‘iÐ 8Ó9ˆGØˆÜÐ.Ó/Ð/ØœRŸW™WŸ\™\¨'°9Ó=Ð>Ñ>ˆLØœrŸw™wŸ|™|¨G°UÓ;Ð<Ñ<‰Nð �}�oÑ%ˆFÜ Ô,ÜÐ.Ó/Ð/à�k 6Ð*Ñ*ˆ	ÙØ˜+˜Ñ&ˆIà�eÒØ×Ñ˜:Ô&ä×ÑÔØ×ÑœK×3Ñ3Ô4á˜ vÒ-Ü�}‰}× Ñ Ð(Ù#à(TÐ'UÐ$à˜%Òô $Ó%ñØ$ØàÐ2Ñ2ˆNØ˜Ñ$ˆIä×Ñ×)Ò)Ø”V×(Ñ(×7Ñ7Ñ7ˆ	ð 	ØØØØØØðð r    c                   ó�   ‡ — e Zd ZdZedddddddddddddfdeded	ed
ededededededee   dededededdfˆ fd„Z	dˆ fd„Z
ˆ xZS )ÚCppTorchDeviceOptionszÎ
    This class is inherited from CppTorchOptions, which automatic contains
    base cxx build options and torch common build options. And then it will
    maintains cuda/xpu device related build args.
    Fr  Tr   r£   rP  r^  r  rz  r{  râ   r¶  r·  r  r!  rü  r|  r}  rY   r   Nc                 óØ  •— t         ‰| �  ||||||||
||||¬«       g }g }g }g }g }g }g }t        |||¬«      \  }}}}}}}t        | j                  |«       t        | j
                  |«       t        | j                  |«       t        | j                  |«       t        | j                  |«       t        | j                  |«       t        | j                  |«       | j                  «        y )N)rP  r^  rz  r{  râ   r¶  r·  r!  rü  r|  r}  rY   )r  rz  r{  )r*  rk   r/  rH  r€  r�  r‚  rƒ  r„  r…  r†  r’  )rj   rP  r^  r  rz  r{  râ   r¶  r·  r  r!  rü  r|  r}  rY   Údevice_definitionsÚdevice_include_dirsÚdevice_cflagsÚdevice_ldflagsÚdevice_libraries_dirsÚdevice_librariesÚdevice_passthrough_argsr+  s                         €r   rk   zCppTorchDeviceOptions.__init__K  s  ø€ ô" 	‰ÑØØ+ØØ%Ø/Ø-Ø&?Ø#Ø%Ø%Ø'Øð 	ô 	
ð )+ÐØ)+ÐØ#%ˆØ$&ˆØ+-ÐØ&(ÐØ-/Ðô )Ø#ØØ%ô
ñ	
ØØØØØ!ØØ#ô 	�T×&Ñ&Ð(:Ô;Ü�T×'Ñ'Ð)<Ô=Ü�T—\‘\ =Ô1Ü�T—]‘] NÔ3Ü�T×)Ñ)Ð+@ÔAÜ�T—_‘_Ð&6Ô7Ü�T×+Ñ+Ð-DÔEØ×ÑÕ r    c                 ó2  •— t         ‰| �  «        t        j                  «       rtt	        «       \  }}t        |«      dk(  s
J d|› �«       ‚|d   | j                  v r=| j                  j                  |d   «       | j                  j                  |d   «       y y y )Nr)   zPython lib dirs: r   )	r*  r’  r
   rÜ   r�  rƒ  r„  rX  rŽ   )rj   rð   Úpython_lib_dirsr+  s      €r   r’  z'CppTorchDeviceOptions._finalize_options‰  s™   ø€ Ü‰Ñ!Ô#Ü×ÑÔô ":Ó!;ÑˆAˆÜ�Ó'¨1Ò,ÐSÐ0AÀ/ÐARÐ.SÓSÐ,Ø˜qÑ! T×%9Ñ%9Ñ9Ø×$Ñ$×+Ñ+¨O¸AÑ,>Ô?Ø×$Ñ$×+Ñ+¨O¸AÑ,>Õ?ð :ð r    r™   )rš   r›   rœ   rµ  r   r   rÀ   r�   r   rk   r’  r,  r-  s   @r   r1  r1  D  sÞ   ø„ ñð *Ø %Ø!ØØ"Ø"'Ø!&Ø*/ØØ%'Ø"Ø"Ø#Øñ<!àð<!ð ð<!ð ð	<!ð
 ð<!ð ð<!ð  ð<!ð ð<!ð $(ð<!ð ð<!ð ˜c‘]ð<!ð ð<!ð ð<!ð ð<!ð ð<!ð  
õ!<!÷|	@ñ 	@r    r1  rc   c                 óÊ   — t         j                  j                  | «      }t         j                  j                  |«      \  }}t         j                  j	                  | «      }||fS )aÀ  
    This function help prepare parameters to new cpp_builder.
    Example:
        input_code: /tmp/tmpof1n5g7t/5c/c5crkkcdvhdxpktrmjxbqkqyq5hmxpqsfza4pxcf3mwk42lphygc.cpp
        name, dir = get_name_and_dir_from_output_file_path(input_code)
    Run result:
        name = c5crkkcdvhdxpktrmjxbqkqyq5hmxpqsfza4pxcf3mwk42lphygc
        dir = /tmp/tmpof1n5g7t/5c/

    put 'name' and 'dir' to CppBuilder's 'name' and 'output_dir'.
    CppBuilder --> get_target_file_path will format output path according OS:
    Linux: /tmp/tmppu87g3mm/zh/czhwiz4z7ca7ep3qkxenxerfjxy42kehw6h5cjk6ven4qu4hql4i.so
    Windows: [Windows temp path]/tmppu87g3mm/zh/czhwiz4z7ca7ep3qkxenxerfjxy42kehw6h5cjk6ven4qu4hql4i.dll
    )r5   r8   rL  Úsplitextrª  )rc   Úname_and_extr]  Ú_extÚdirs        r   Ú&get_name_and_dir_from_output_file_pathrA  •  sL   € ô" —7‘7×#Ñ# IÓ.€LÜ—‘×!Ñ! ,Ó/�J€Dˆ$Ü
�'‰'�/‰/˜)Ó
$€Cà�ˆ9Ðr    c                   óV  — e Zd ZdZedeeef   fd„«       Zedeeef   fd„«       Zedeeef   fd„«       Z	edeeef   fd„«       Z
	 ddedeee   z  d	ed
eddf
d„Zdefd„Zdefd„Zdee   dee   fd„Z	 	 dd„Zdd„Zdededdfd„Zdededdfd„Zdedee   ddfd„Zdeddfd„Zy)Ú
CppBuilderaŸ  
    CppBuilder is a cpp jit builder, and it supports both Windows, Linux and MacOS.
    Args:
        name:
            1. Build target name, the final target file will append extension type automatically.
            2. Due to the CppBuilder is supports multiple OS, it will maintains ext for OS difference.
        sources:
            Source code file list to be built.
        BuildOption:
            Build options to the builder.
        output_dir:
            1. The output_dir the target file will output to.
            2. The default value is empty string, and then the use current dir as output dir.
            3. Final target file: output_dir/name.ext
    r   c                  ó2   — t         rdnd} t         rdnd}| |fS )Nz.pydú.soz/Ferÿ   r¹  ©Ú	extensionÚoutput_flagss     r   Ú__get_python_module_flagsz$CppBuilder.__get_python_module_flags¾  s   € å)‘F¨uˆ	Ý +‘u°ˆØ˜,Ð&Ð&r    c                  ó2   — t         rdnd} t         rdnd}| |fS )Nz.objrë   z/c /Foz-c -or¹  rF  s     r   Ú__get_object_flagszCppBuilder.__get_object_flagsÄ  s   € å)‘F¨tˆ	Ý#.‘x°GˆØ˜,Ð&Ð&r    c                  óF   — t         s
t        «       sdnd} t         rdnd}| |fS )Nú.pchú.gchz/Fprÿ   )rÚ   r-  rF  s     r   Ú__get_precompiled_header_flagsz)CppBuilder.__get_precompiled_header_flagsÊ  s#   € å)´´‘F¸vˆ	Ý +‘u°ˆØ˜,Ð&Ð&r    c                  ó"   — d} t         rdnd}| |fS )Nz.iz/EP /Pz-E -P -or¹  rF  s     r   Ú__get_preprocessor_output_flagsz*CppBuilder.__get_preprocessor_output_flagsÐ  s   € àˆ	Ý#.‘x°JˆØ˜,Ð&Ð&r    r]  ÚsourcesÚBuildOptionrø   Nc                 ó^  — d| _         d| _        d| _        d| _        d| _        d| _        d| _        d| _        g | _        d| _	        d| _
        d| _        d| _        || _        t        j                  j                   xs d| _        || _        |j'                  «       | _         |j)                  «       | _        |j+                  «       | _        || _	        |j-                  «       | _        |j1                  «       | _        |j5                  «       | _        t9        | j.                  | j2                  | j6                  f«      dk  sJ ‚| j.                  xs | j2                  xs | j6                   | _        t<        r| j2                  rJ d«       ‚| j.                  r| j?                  «       \  }}nS| j2                  r| jA                  «       \  }}n3| j6                  r| jC                  «       \  }}n| jE                  «       \  }}tF        jH                  jK                  | j                  | j                  › |› �«      | _
        | j                  r)tF        jH                  jM                  | j                  «      n| j                  }t<        r | j6                  r|| _'        n|› |› �| _'        n|› d|› �| _'        tQ        |tR        «      r|g}t        jT                  «       rH| j                  r<tW        |«      | _        |D �cg c]!  }tF        jH                  jM                  |«      ‘Œ# }}| j2                  rXtY        |«      dk(  sJ ‚d|d   › �| _-        | j                  rEt]        |j'                  «       «      r,| xj                  d	z  c_        ndjK                  |«      | _-        |j_                  «       D ];  }	t<        r| xj                  d
|	› d�z  c_        Œ#| xj                  d|	› d�z  c_        Œ= |ja                  «       D ];  }
t<        r| xj                  d|
› d�z  c_        Œ#| xj                  d|
› d�z  c_        Œ= |jb                  x}rbt<        rtd        jg                  d|«       nEd|› d�| _        | j                  r.t]        |j'                  «       «      r| xj                  dz  c_        |ji                  «       D ]N  }t<        r| xj                  d|› d�z  c_        Œ#| xj                  dtk        jl                  |«      › d�z  c_        ŒP |jo                  «       D ];  }t<        r| xj                  d
|› d�z  c_        Œ#| xj                  d|› d�z  c_        Œ= |jq                  «       D ];  }t<        r| xj
                  d|› d�z  c_        Œ#| xj
                  d|› d�z  c_        Œ= |js                  «       D ];  }t<        r| xj                  d|› d�z  c_        Œ#| xj                  d|› d�z  c_        Œ= | ju                  |jw                  «       «      D ]  }| xj                  |› d�z  c_        Œ y c c}w )Nr£   FÚ
aoti_modelr)   z/Cannot currently precompile headers on Windows!rì   z-x c++-header r   z- -relocatable-pch -Xclang -fno-pch-timestamp ro  rï  z/D z-D zIPrecompiled header support for MSVC is currently unavailable; ignoring %sz	-include z -Xclang -fno-validate-pch z/I "z" z-Iz
/LIBPATH:"z-Lrý   z.lib" rð  )<r  Ú_cflags_argsÚ_definitions_argsÚ_include_dirs_argsÚ_ldflags_argsÚ_libraries_dirs_argsÚ_libraries_argsÚ_passthrough_parameters_argsÚ_orig_source_pathsÚ_output_dirÚ_target_filer‰  rˆ  Ú_namer
   rÖ   Úmodel_name_for_generated_filesÚ_target_nameÚ_build_optionr”  r¨  r¦  rª  rŠ  r¬  r‹  r®  rŒ  ÚsumÚ_do_linkrÚ   Ú_CppBuilder__get_object_flagsÚ)_CppBuilder__get_precompiled_header_flagsÚ*_CppBuilder__get_preprocessor_output_flagsÚ$_CppBuilder__get_python_module_flagsr5   r8   r9   rL  Ú_outputrÞ   r�   rÜ   rà   rƒ  Ú_sources_argsr  rœ  r—  r‡  rO   rü  r™  rd  Úquoterž  r   r¢  Ú_stage_passthrough_pathsr¤  )rj   r]  rR  rS  rø   Úfile_extrH  Úrelative_target_filer”   ÚcflagÚ
definitionr‡  Úinc_dirÚldflagr	  rŸ  Úpassthrough_args                    r   rk   zCppBuilder.__init__Ö  sØ  € ð ˆŒØˆÔØ!#ˆÔØ"$ˆÔØˆÔØ$&ˆÔ!Ø!ˆÔØ,.ˆÔ)ð #%ˆÔØˆÔØˆÔà(-ˆÔØ$ˆŒàˆŒ
ä×Ñ×>Ñ>ÒNÀ,ð 	Ôð
 )ˆÔØ$×1Ñ1Ó3ˆŒØ"-×"CÑ"CÓ"EˆÔØ$×1Ñ1Ó3ˆŒà%ˆÔà(×9Ñ9Ó;ˆÔØ(×9Ñ9Ó;ˆÔØ)×;Ñ;Ó=ˆÔä�D×&Ñ&¨×(:Ñ(:¸D×<OÑ<OÐPÓQÐUVÒVÐVÐVà×ÑÒK $×"4Ñ"4ÒK¸×8KÑ8Kð
ˆŒõ  d×&8Ò&8ð 	
Ø=ó	
Ð8ð ×ÒØ%)×%<Ñ%<Ó%>Ñ"ˆH‘lØ×ÒØ%)×%HÑ%HÓ%JÑ"ˆH‘lØ× Ò Ø%)×%IÑ%IÓ%KÑ"ˆH‘là%)×%CÑ%CÓ%EÑ"ˆH�lÜŸG™GŸL™L¨×)9Ñ)9¸d¿j¹j¸\È(ÈÐ;TÓUˆÔð ×&Ò&ô �G‰G×Ñ˜T×.Ñ.Ô/à×"Ñ"ð 	õ
 Ø×"Ò"à+�•à". Ð0DÐ/EÐF�•à*˜^¨1Ð-AÐ,BÐCˆDŒLä�gœsÔ#Ø�iˆGô ×ÑÔ $×"9Ò"9ô '+¨7£mˆDÔ#Ø4;Ö<¨q”r—w‘w×'Ñ'¨Õ*Ð<ˆGÐ<à×ÒÜ�w“< 1Ò$Ð$Ð$à#1°'¸!±*°Ð!>ˆDÔØ×&Ò&¬9°[×5MÑ5MÓ5OÔ+Pð ×!Ò!Ð%TÑTÖ!à!$§¡¨'Ó!2ˆDÔà ×+Ñ+Ó-ò 	2ˆEÝØ×!Ò! q¨¨¨q \Ñ1Ö!à×!Ò! q¨¨¨q \Ñ1Ö!ð		2ð &×5Ñ5Ó7ò 	>ˆJÝØ×&Ò&¨C°
¨|¸1Ð*=Ñ=Ö&à×&Ò&¨C°
¨|¸1Ð*=Ñ=Ö&ð		>ð "-×!?Ñ!?Ð?ÐÐ?ÝÜ—‘Ø_Ø&õð
 -6Ð6HÐ5IÈÐ*K�Ô'Ø×*Ò*¬y¸×9QÑ9QÓ9SÔ/Tð ×%Ò%Ð)FÑFÕ%à"×3Ñ3Ó5ò 	HˆGÝØ×'Ò'¨T°'°¸"Ð+=Ñ=Ö'à×'Ò'¨R´·±¸GÓ0DÐ/EÀQÐ+GÑGÖ'ð		Hð "×-Ñ-Ó/ò 	4ˆFÝØ×"Ò"¨¨&¨° mÑ3Ö"à×"Ò"¨¨&¨° mÑ3Ö"ð		4ð #×5Ñ5Ó7ò 	=ˆGÝØ×)Ò)¨z¸'¸À"Ð-EÑEÖ)à×)Ò)¨r°'°¸!¨_Ñ<Ö)ð		=ð ×,Ñ,Ó.ò 	4ˆCÝØ×$Ò$¨!¨C¨5°¨Ñ7Ö$à×$Ò$¨"¨S¨E°¨Ñ3Ö$ð		4ð  $×<Ñ<Ø×,Ñ,Ó.ó 
ò 	GˆOð ×-Ò-°OÐ3DÀAÐ1FÑFÖ-ñ	GùòE =s   Ë4&X*c                 ó„  ‡ — dt         dt         dt         dt         dt         dt         dt         dt         d	t         d
t         dt         fˆ fd„} |‰ j                  ‰ j                  ‰ j                  ‰ j                  ‰ j
                  ‰ j                  ‰ j                  ‰ j                  ‰ j                  ‰ j                  ¬«
      }|S )NrY   rR  Úinclude_dirs_argsÚdefinitions_argsÚcflags_argsÚldflags_argsÚlibraries_argsÚlibraries_dirs_argsry  rf  r   c
                 óî   •— t         r=| › d|› d|› d|› d|› d|› d|	› �}
‰j                  r|
d|› d|› d|› �z  }
t        |
«      }
|
S | › d|› d|› d|› d|› d|› d|	› �}
‰j                  r|
d|› d|› d|› �z  }
|
S )Nrì   z /LD /link )rÚ   re  rÛ   )rY   rR  rv  rw  rx  ry  rz  r{  ry  rf  r·   rj   s              €r   Úformat_build_commandz9CppBuilder.get_command_line.<locals>.format_build_commands	  sê   ø€ õ ð  �j Ð"3Ð!4°AÐ6FÐ5GÀqÈÈÐUVØ�i˜qÐ!1Ð 2°!°F°8ð=ð ð —=’=Ø˜[Ð)<Ð(=¸Q¸~Ð>NÈaÐP\È~Ð^Ñ^�CÜ.¨sÓ3�ð ˆJð  �j  ' ¨!Ð,<Ð+=¸Q¸{¸mÈ1Ø(Ð)¨Ð+;Ð*<¸A¸f¸XðGð ð —=’=Ø˜Q˜|˜n¨A¨nÐ-=¸QÐ?RÐ>SÐTÑT�CØˆJr    )
rY   rR  rv  rw  rx  ry  rz  r{  ry  rf  )r�   r  rk  rX  rW  rV  rY  r[  rZ  r\  rj  )rj   r}  Úcommand_lines   `  r   Úget_command_linezCppBuilder.get_command_liner	  sÜ   ø€ ð	Üð	äð	ô  #ð	ô "ð		ô
 ð	ô ð	ô  ð	ô "%ð	ô "ð	ô ð	ô õ	ñ> ,Ø—^‘^Ø×&Ñ&Ø"×5Ñ5Ø!×3Ñ3Ø×)Ñ)Ø×+Ñ+Ø×/Ñ/Ø $× 9Ñ 9Ø!×>Ñ>Ø—<‘<ô
ˆð Ðr    c                 ó,   — t        | j                  «      S r   )rÛ   r_  r{   s    r   Úget_target_file_pathzCppBuilder.get_target_file_path 	  s   € Ü'¨×(9Ñ(9Ó:Ð:r    r   c                 ó  — t        j                  «       r| j                  s|S g }|D ]à  }t        j                  |«      }g }|D ]›  }t
        j                  j                  |«      rit
        j                  j                  |«      rJ| j                  j                  |«       |j                  t
        j                  j                  |«      «       Œ‹|j                  |«       Œ� |j                  dj                  d„ |D «       «      «       Œâ |S )a·  For fbcode remote builds, treat any absolute file path that appears
        as a passthrough arg (e.g. precompiled .so kernels passed in via
        ``extra_flags``) the same way as a source: stage the file into the
        remote build sandbox and rewrite the command to reference it by
        basename. Without this the linker is handed a path that only exists on
        the submitting host and the remote build fails to find the file.rì   c              3   óF   K  — | ]  }t        j                  |«      –— Œ y ­wr   )rd  rl  )rC  Úts     r   rE  z6CppBuilder._stage_passthrough_paths.<locals>.<genexpr>¶	  s   è ø€ Ò%I¸¤e§k¡k°!§nÑ%IùrF  )r
   rÜ   r‰  rd  rÌ   r5   r8   Úisabsr‘  r]  rŽ   rL  r9   )rj   r   Ú	rewrittenÚargÚtokensÚ
new_tokensÚtoks          r   rm  z#CppBuilder._stage_passthrough_paths£	  sÚ   € ô × Ñ Ô" t×'>Ò'>ØˆKØˆ	Øò 		KˆCÜ—[‘[ Ó%ˆFØˆJØò +�Ü—7‘7—=‘= Ô%¬"¯'©'¯.©.¸Ô*=Ø×+Ñ+×2Ñ2°3Ô7Ø×%Ñ%¤b§g¡g×&6Ñ&6°sÓ&;Õ<à×%Ñ% cÕ*ð+ð ×Ñ˜SŸX™XÑ%I¸jÔ%IÓIÕJð		Kð Ðr    c                 ó–  — t        d«      5  t        j                  | j                  «       «      }	 | j                  }t
        j                  j                  t        d«      }t        j                  «       5 }t        j                  t        t
        j                  j                  |d«      «       | j                  D ]S  }t        j                  |t
        j                  j                  |t
        j                  j                  |«      «      «       ŒU t
        j                  j                  |d«      }t        j                   ||«       | j"                  j$                  }|r÷t
        j                  j'                  |«      rØt(        s
t+        «       sdnd}||z   }	t
        j                  j                  |«      }
t        j                  |t
        j                  j                  ||
«      «       t
        j                  j'                  |	«      r7t        j                  |	t
        j                  j                  ||
|z   «      «       |D �cg c]  }||k(  r|
n|‘Œ }}| j,                  s!|r&t
        j                  j'                  |«      rddg|dd t/        ||t
        j                  j                  |«      t0        ¬	«      }t
        j                  j3                  |«      rt        j4                  |«       t        j                  ||«       |j7                  d
«      rt        j8                  |d«       n'|j7                  d«      rt        j8                  |d«       d d d «       d d d «       y c c}w # 1 sw Y   ŒxY w# t:        j<                  $ r5}t?        j@                  ||jB                  jE                  d«      «      |‚d }~ww xY w# 1 sw Y   y xY w)Nrk  r@  z	script.ldrM  rN  z	-isysrootr}   r)   )Úexception_classrë   i¤  rE  ií  r¦   )#r	   rd  rÌ   r  r_  r5   r8   r9   Ú_TORCH_PATHÚtempfileÚTemporaryDirectoryrS   r;  rK  r]  rL  Úcopytreerc  r‡  r‘  rÚ   r-  r‹  r   r   rN   rX  ÚendswithÚchmodr;   rµ   r   re  rf  r  )rj   r…  Úoutput_pathÚtorch_includes_pathÚtmp_dirÚsrcÚdest_include_pathÚ
pch_headerÚpch_extÚpch_compiledÚpch_basenamer‡  Útmp_output_pathr_   s                 r   Úbuild_fbcode_rezCppBuilder.build_fbcode_re¹	  sÝ  € ô ˜.Ó)ñ >	TÜ—k‘k $×"7Ñ"7Ó"9Ó:ˆGð<TØ"×/Ñ/�ô ')§g¡g§l¡l´;À	Ó&JÐ#Ü×0Ñ0Ó2ð 45°gä—K‘K¤´·±·±¸WÀkÓ0RÔSØ#×6Ñ6ò W˜ÜŸ™ C¬¯©¯©°g¼r¿w¹w×?OÑ?OÐPSÓ?TÓ)UÕVðWä(*¯©¯©°W¸iÓ(HÐ%Ü—O‘OÐ$7Ð9JÔKð
 "&×!3Ñ!3×!FÑ!F�JÙ!¤b§g¡g§n¡n°ZÔ&@Ý,7¼v¼x¡&ÈV˜Ø'1°GÑ';˜Ü')§w¡w×'7Ñ'7¸
Ó'C˜ÜŸ™ J´·±·±¸WÀlÓ0SÔTÜŸ7™7Ÿ>™>¨,Ô7Ü"ŸK™KØ ,Ü "§¡§¡¨W°lÀWÑ6LÓ Môð (/ö#à #ð -0°:Ò,=™LÀ3ÑFð#˜ð #ð ×)Ò)Ù"¤r§w¡w§~¡~°jÔ'Aà(3°SÐ'9˜  !˜ô
 '9ØØÜŸ™×(Ñ(¨Ó5Ü(4ô	'�Oô —w‘w—~‘~ kÔ2ÜŸ	™	 +Ô.Ü—K‘K °Ô=Ø"×+Ñ+¨DÔ1ÜŸ™ ¨eÕ4Ø$×-Ñ-¨eÔ4ÜŸ™ ¨eÔ4÷i45÷>	Tð >	Tùò<#÷-45ð 45ûôj ×0Ñ0ò TÜ×)Ñ)¨'°1·8±8·?±?À7Ó3KÓLÐRSÐSûðTú÷{>	Tð >	TúsU   Œ$N?±AM4Á5GM(ÉM#ÉC?M(ÍM4Í#M(Í(M1	Í-M4Í4N<Î0N7Î7N<Î<N?Î?Oc                 óF  — | j                   r| j                  «       S t        | j                  «       t        j
                  j                  | j                  | j                  › dt        › �«      }t        |«       | j                  «       }t        ||¬«       t        |«       y)z«
        It is must need a temporary directory to store object files in Windows.
        After build completed, delete the temporary directory to save disk space.
        rð   ©ra  N)r‰  r�  rT  r^  r5   r8   r9   r`  Ú_BUILD_TEMP_DIRr  rl  r_  )rj   Ú_build_tmp_dirÚ	build_cmds      r   ÚbuildzCppBuilder.buildü	  s�   € ð
 ×"Ò"à×'Ñ'Ó)Ð)Ü  ×!1Ñ!1Ô2ÜŸ™Ÿ™Ø×Ñ §¡ ¨A¬oÐ->Ð?ó
ˆô 	! Ô0à×)Ñ)Ó+ˆ	Ü˜	 ~Õ6Ü�NÕ#r    Ú
cmake_pathr  c                 óB  — dj                  | j                  j                  «       «      }t        j                  j
                  sdnd}t        j                  d| j                  › d| j                  › d|› d�«      }t        j                  j                  st        j                  j                  rv|t        j                  d«      z  }|t        j                  d| j                  › d	|› d
| j                  › d	| j                  › d| j                  › d	| j                  › d�«      z  }n3|t        j                  d| j                  › d| j                  › d�«      z  }|dk(  rtt        j                  j                   €Zddlm}  |«       }|t        j                  d| j                  › d| j                  › d| j                  › d|› d|› d|› d|› d�«      z  }n|dk(  r|t        j                  d«      z  }t'        |d«      5 }|j)                  |«       ddd«       y# 1 sw Y   yxY w)z—
        Save global cmake settings here, e.g. compiler options.
        If targeting CUDA, also emit a custom function to embed CUDA kernels.
        rì   ÚSTATICÚSHAREDzR
            cmake_minimum_required(VERSION 3.27 FATAL_ERROR)
            project(zs LANGUAGES CXX)
            set(CMAKE_CXX_STANDARD 20)

            # Set a library target
            add_library(z)

            z‘
                # May need to point CMAKE_PREFIX_PATH to the right torch location
                find_package(Torch REQUIRED)

                zT
                # Add macro definitions
                target_compile_definitions(ú	 PRIVATE zN)

                # Add compile flags
                target_compile_options(zS)

                # Backend-specific flags
                target_compile_options(z -c)

                zµ
                find_package(TorchStandalone REQUIRED)
                # Set up include directories to find headers at the correct paths
                target_include_directories(zU PRIVATE ${TorchStandalone_INCLUDE_DIRS})
                target_include_directories(zF PRIVATE ${TorchStandalone_INCLUDE_DIRS}/standalone)

                r  Nr   )Ú_nvcc_arch_as_compile_optionz±
                enable_language(CUDA)
                set(CMAKE_CUDA_STANDARD 17)
                find_package(CUDAToolkit REQUIRED)
                target_include_directories(zQ PRIVATE ${CUDAToolkit_INCLUDE_DIRS})
                target_compile_definitions(z9 PRIVATE USE_CUDA)
                target_link_libraries(ab   PRIVATE cuda CUDA::cudart_static)

                find_program(OBJCOPY_EXECUTABLE objcopy)
                if(NOT OBJCOPY_EXECUTABLE)
                    message(FATAL_ERROR "objcopy not found. Cannot embed fatbin as object file")
                endif()

                set(KERNEL_TARGETS "")
                set(KERNEL_OBJECT_FILES "")
                # Function to embed a single kernel
                function(embed_gpu_kernel KERNEL_NAME PTX_FILE)
                    set(FATBIN_BASENAME ${KERNEL_NAME}.fatbin)
                    set(FATBIN_FILE ${CMAKE_CURRENT_BINARY_DIR}/${FATBIN_BASENAME})
                    set(OBJECT_BASENAME ${KERNEL_NAME}.fatbin.o)
                    set(OBJECT_FILE ${CMAKE_CURRENT_BINARY_DIR}/${OBJECT_BASENAME})

                    # --- Define UNIQUE C symbol names ---
                    set(SYMBOL_START __${KERNEL_NAME}_start)
                    set(SYMBOL_END __${KERNEL_NAME}_end)
                    set(SYMBOL_SIZE __${KERNEL_NAME}_size)
                    string(REGEX REPLACE "[^a-zA-Z0-9]" "_" MANGLED_BASENAME ${FATBIN_FILE})
                    set(OBJCOPY_START_SYM _binary_${MANGLED_BASENAME}_start)
                    set(OBJCOPY_END_SYM _binary_${MANGLED_BASENAME}_end)
                    set(OBJCOPY_SIZE_SYM _binary_${MANGLED_BASENAME}_size)

                    # --- PTX to FATBIN Command & Target ---
                    add_custom_command(
                        OUTPUT ${FATBIN_FILE}
                        COMMAND ${CUDAToolkit_NVCC_EXECUTABLE} --fatbin ${PTX_FILE} -o ${FATBIN_FILE} ${NVCC_GENCODE_FLAGS}
                                -gencode arch=compute_z,code=compute_z7
                                -gencode arch=compute_z	,code=sm_a'  
                        DEPENDS ${PTX_FILE}
                    )

                    # --- FATBIN to Object File (.o) Command ---
                    add_custom_command(
                        OUTPUT ${OBJECT_FILE}
                        COMMAND ${CMAKE_LINKER} -r -b binary -z noexecstack -o ${OBJECT_FILE} ${FATBIN_FILE}
                        COMMAND ${OBJCOPY_EXECUTABLE} --rename-section .data=.rodata,alloc,load,readonly,data,contents
                                ${OBJECT_FILE}
                        COMMAND ${OBJCOPY_EXECUTABLE}
                                --redefine-sym ${OBJCOPY_START_SYM}=${SYMBOL_START}
                                --redefine-sym ${OBJCOPY_END_SYM}=${SYMBOL_END}
                                --redefine-sym ${OBJCOPY_SIZE_SYM}=${SYMBOL_SIZE}
                                ${OBJECT_FILE}
                        DEPENDS ${FATBIN_FILE}
                    )
                    add_custom_target(build_kernel_object_${KERNEL_NAME} DEPENDS ${OBJECT_FILE})

                    # --- Add to a list for linking later ---
                    set(KERNEL_TARGETS ${KERNEL_TARGETS} build_kernel_object_${KERNEL_NAME} PARENT_SCOPE)
                    set(KERNEL_OBJECT_FILES ${KERNEL_OBJECT_FILES} ${OBJECT_FILE} PARENT_SCOPE)
                endfunction()

                r   a=	  
                find_program(OBJCOPY_EXECUTABLE objcopy)
                if(NOT OBJCOPY_EXECUTABLE)
                    message(FATAL_ERROR "objcopy not found. Cannot embed spv as object file")
                endif()

                set(KERNEL_TARGETS "")
                set(KERNEL_OBJECT_FILES "")
                # Function to embed a single kernel
                function(embed_gpu_kernel KERNEL_NAME SPV_FILE)
                    set(OBJECT_BASENAME ${KERNEL_NAME}.spv.o)
                    set(OBJECT_FILE ${CMAKE_CURRENT_BINARY_DIR}/${OBJECT_BASENAME})

                    # --- Define UNIQUE C symbol names ---
                    set(SYMBOL_START __${KERNEL_NAME}_start)
                    set(SYMBOL_END __${KERNEL_NAME}_end)
                    set(SYMBOL_SIZE __${KERNEL_NAME}_size)
                    string(REGEX REPLACE "[^a-zA-Z0-9]" "_" MANGLED_BASENAME ${SPV_FILE})
                    set(OBJCOPY_START_SYM _binary_${MANGLED_BASENAME}_start)
                    set(OBJCOPY_END_SYM _binary_${MANGLED_BASENAME}_end)
                    set(OBJCOPY_SIZE_SYM _binary_${MANGLED_BASENAME}_size)

                    # --- SPV_FILE to Object File (.o) Command ---
                    add_custom_command(
                        OUTPUT ${OBJECT_FILE}
                        COMMAND ${CMAKE_LINKER} -r -b binary -z noexecstack -o ${OBJECT_FILE} ${SPV_FILE}
                        COMMAND ${OBJCOPY_EXECUTABLE} --rename-section .data=.rodata,alloc,load,readonly,data,contents
                                ${OBJECT_FILE}
                        COMMAND ${OBJCOPY_EXECUTABLE}
                                --redefine-sym ${OBJCOPY_START_SYM}=${SYMBOL_START}
                                --redefine-sym ${OBJCOPY_END_SYM}=${SYMBOL_END}
                                --redefine-sym ${OBJCOPY_SIZE_SYM}=${SYMBOL_SIZE}
                                ${OBJECT_FILE}
                        DEPENDS ${SPV_FILE}
                    )
                    add_custom_target(build_kernel_object_${KERNEL_NAME} DEPENDS ${OBJECT_FILE})

                    # --- Add to a list for linking later ---
                    set(KERNEL_TARGETS ${KERNEL_TARGETS} build_kernel_object_${KERNEL_NAME} PARENT_SCOPE)
                    set(KERNEL_OBJECT_FILES ${KERNEL_OBJECT_FILES} ${OBJECT_FILE} PARENT_SCOPE)
                endfunction()

                rû   )r9   rc  r—  r
   rÖ   Údynamic_linkageÚtextwrapÚdedentrb  rg  Útest_configsÚuse_libtorchrV  r\  rì  rß  rà  Ú*torch._inductor.codegen.cuda.compile_utilsr©  r   r  )	rj   r¤  r  rs  Útarget_library_typeÚcontentsr©  Úcurrent_archr  s	            r   Úsave_compile_cmd_to_cmakez$CppBuilder.save_compile_cmd_to_cmake
  st  € ð —h‘h˜t×1Ñ1×AÑAÓCÓDˆä"×/Ñ/×?Ò?‰HÀXð 	ô —?‘?ðà×&Ñ&Ð'ð (ð ×*Ñ*Ð+¨1Ð-@Ð,Að Bðó

ˆô ×Ñ×,Ò,´×0CÑ0C×0PÒ0Pð œŸ™ðóñ ˆHð œŸ™ð,à,0×,=Ñ,=Ð+>¸iÈÀ}ð U(ð )-×(9Ñ(9Ð':¸)ÀD×DUÑDUÐCVð W(ð )-×(9Ñ(9Ð':¸)ÀD×DeÑDeÐCfð gð
óñ ‰Hð œŸ™ð,ð -1×,=Ñ,=Ð+>ð ?,Ø,0×,=Ñ,=Ð+>ð ?ð	óñ ˆHð ˜&Ò ¤U§]¡]×%6Ñ%6Ð%>õñ 8Ó9ˆLØœŸ™ð,ð -1×,=Ñ,=Ð+>ð ?,Ø,0×,=Ñ,=Ð+>ð ?'Ø'+×'8Ñ'8Ð&9ð :7ð: 8D°nÀNÐS_ÐR`ð a7Ø7C°nÀIÈlÈ^ð \ðI<ó>ñ >‰Hð~ ˜EÒ!ØœŸ™ð*ó,ñ ,ˆHô\ �*˜cÓ"ð 	 aØ�G‰G�HÔ÷	÷ 	ñ 	ús   Ç:HÈHrþ  c                 óº   — dt        |«      j                  z   }t        |d«      5 }|j                  d| j                  › d|› d�«       d d d «       y # 1 sw Y   y xY w)Nú${CMAKE_CURRENT_SOURCE_DIR}/Úaztarget_sources(r¨  z)
)r   r]  r   r  rb  )rj   r¤  rþ  r  s       r   Úsave_src_to_cmakezCppBuilder.save_src_to_cmakeÇ
  s]   € à1´D¸³N×4GÑ4GÑGˆÜ�*˜cÓ"ð 	Q aØ�G‰G�o d×&7Ñ&7Ð%8¸	À(ÀÈ3ÐOÔP÷	Q÷ 	Qñ 	Qús   ¥#AÁAÚ	asm_filesc           	      ó¬  — t        |d«      5 }|D ]n  }t        |«      j                  j                  d«      d   }dt        |«      j                  › �}t	        j
                  d|› d|› d�«      }|j                  |«       Œp |r>|j                  d| j                  › d	�«       |j                  d
| j                  › d�«       d d d «       y # 1 sw Y   y xY w)Nr¶  r}   r   rµ  z&
                    embed_gpu_kernel(rì   z)
                    zadd_dependencies(z ${KERNEL_TARGETS})
ztarget_link_libraries(z! PRIVATE ${KERNEL_OBJECT_FILES})
)r   r   r]  rÌ   r«  r¬  r  rb  )rj   r¤  r¸  r  Úasm_fileré   r±  s          r   Úsave_kernel_asm_to_cmakez#CppBuilder.save_kernel_asm_to_cmakeÍ
  sá   € ä�*˜cÓ"ð 	 aØ%ò "�Ü" 8›n×1Ñ1×7Ñ7¸Ó<¸QÑ?�Ø;¼DÀ»N×<OÑ<OÐ;PÐQ�Ü#Ÿ?™?ð&Ø&1 ]°!°H°:ð >ðó�ð
 —‘˜Õ!ð"ñ Ø—‘Ð+¨D×,=Ñ,=Ð+>Ð>UÐVÔWØ—‘Ø,¨T×->Ñ->Ð,?Ð?cÐdô÷	÷ 	ñ 	ús   �B4C
Ã
Cc                 óÌ  — dj                  | j                  j                  «       «      }dj                  | j                  j                  «       «      }t	        j
                  d| j                  › d|› d| j                  › d|› d�	«      }t        j                  j                  |«      sJ d|› d�«       ‚t        |d«      5 }|j                  |«       d d d «       y # 1 sw Y   y xY w)	Nrì   z@
            # Add linker flags
            target_link_options(r¨  zA)

            # Add libraries
            target_link_libraries(z)
         z#save_link_cmd_to_cmakefile expects z to already existr¶  )r9   rc  rž  r¢  r«  r¬  rb  r5   r8   rN   r   r  )rj   r¤  Úlflagsr{  r±  r  s         r   Úsave_link_cmd_to_cmakez!CppBuilder.save_link_cmd_to_cmakeß
  sá   € Ø—‘˜$×,Ñ,×8Ñ8Ó:Ó;ˆØ�x‰x˜×*Ñ*×8Ñ8Ó:Ó;ˆÜ—?‘?ð!à!%×!2Ñ!2Ð 3°9¸V¸Hð E#ð $(×#4Ñ#4Ð"5°Y¸t¸fð E
ðó
ˆô �w‰w�~‰~˜jÔ)ð 	
Ø1°*°Ð=NÐOó	
Ð)ô �*˜cÓ"ð 	 aØ�G‰G�HÔ÷	÷ 	ñ 	ús   Â?CÃC#)r£   r™   )rš   r›   rœ   rµ  Ústaticmethodr¿   r�   ri  rf  rg  rh  rà   rr  rk   r  r�  rm  r�  r£  r³  r·  r»  r¾  r   r    r   rC  rC  ­  s£  „ ñð  ð' u¨S°#¨X¡ò 'ó ð'ð
 ð'  c¨3 h¡ò 'ó ð'ð
 ð'¨E°#°s°(©Oò 'ó ð'ð
 ð'¨U°3¸°8©_ò 'ó ð'ð ñZGàðZGð �t˜C‘y‘ðZGð &ð	ZGð
 ðZGð 
óZGðx, #ó ,ð\; có ;ð¨T°#©Yð ¸4À¹9ó ð,ATà	óATóF$ð$wàðwð ðwð 
ó	wðrQ¨Cð Q¸3ð QÀ4ó Qð°3ð À4ÈÁ9ð ÐQUó ð$°ð ¸ô r    rC  r–  Útargetc                 óÄ   — dt         fd„}dt         dt         dt         dt         fd„} |«       } ||t        | «      t        |«      ¬«      }t        |t        |«      ¬«       y )	Nr   c                  óH   — t         rd} | S t        «       } t        | «      rd} | S )NÚml64rF   )rÚ   rá   r+  )ÚASM_CCs    r   Úget_asm_compilerz.run_asm_build_object.<locals>.get_asm_compilerô
  s-   € ÝØˆFð ˆô	 &Ó'ˆFä! &Ô)Ø�Øˆr    Úasm_ccr–  rÀ  c                 ó>   — t         r| › d|› d|› �}|S | › d|› d|› �}|S )Nrì   z /c /Fo z -c z -o r¹  )rÆ  r–  rÀ  r·   s       r   r  z.run_asm_build_object.<locals>.get_command_lineþ
  sA   € Ýð �H˜A˜c˜U (¨6¨(Ð3ˆCð ˆ
ð �H˜D   T¨&¨Ð2ˆCàˆ
r    )rÆ  r–  rÀ  rŸ  )r�   rÛ   rl  )r–  rÀ  ra  rÅ  r  rÆ  r·   s          r   Úrun_asm_build_objectrÈ  ó
  sh   € ðœcó ð¤ð ¬3ð ¼ð Äó ñ Ó€FÙ
ØÜ$ SÓ)Ü'¨Ó/ô€Cô
 �CÔ5°cÓ:Ö;r    )rF   )T)r½  )F)Tr   Fr™   )FF)˜r;  re   rR  Ú	functoolsr±  ÚlocaleÚloggingr5   r4   rò   rd  rS   r;   r3   rn  rŽ  r«  rr  Úcollections.abcr   r   r   Úctypes.utilr   Úpathlibr   Útypingr   rì  Útorch._dynamo.utilsr	   r»  r
   r   Útorch._inductor.cpu_vec_isar   r   Ú%torch._inductor.runtime.runtime_utilsr   Útorch.torch_versionr   Útorch.utils._ordered_setr   rÜ   Útriton.fb.buildr   r   Útorch._inductor.fb.utilsr   r   r   r   rÀ   r   r8   r  Ú__file__Ú_HERErª  r�  r9   rK  rë  Ú	_IS_LINUXr¨  rÚ   rØ   Úgetpreferredencodingr  Ú	getLoggerrš   rO   Ú	lru_cacher�   rD   r:   Úcacher`   rb   rÄ   rÑ   rá   r¿   rç   rö   rà   r  r  r  r  rŒ   r  rÁ   r+  r-  r/  r(  r2  r4  r<  rH  rL  rT  r_  ri  rl  rÛ   rr  rº  r¾  rÎ  rÓ  rØ  rÞ  rð  rõ  rû  r  r   r&  r(  r4  r6  r=  rO  r]  rj  rv  r�  r†  r‹  r”  rš  r³  rµ  r¹  r½  rÔ  rÖ  râ  ré  rô  rû  r  r  r  r  r/  r1  rA  rC  rÈ  r   r    r   ú<module>rÞ     sz  ðó Û Û Û Û Û Û Û 	Û Û 	Û Û Û Û 
Û Û Û Û Ý $ß !Ý $Ý Ý ã Ý ,ß 'ß ?Ý ;Ý ,Ý /ð €6×ÑÔß?÷ô ð sð °cð ¸dó ð cð °Sð ¸Tó ð Sð °Cð ¸Dó ð˜dó ð
 €Ø
�‰�‰˜Ó!€Ø�g‰g�o‰o˜bŸg™gŸo™o¨eÓ4Ó5€Ø—‘—‘˜kÐ+@ÓA€ð �L‰L×#Ñ# GÓ,€	Ø�L‰L×#Ñ# HÓ-€	Ø�l‰l˜gÑ%€à$€	ñ 3>Ð €V× Ñ Ó" IÑ.À2ð ð €g×Ñ˜Ó!€ð €×Ñ�QÓð! ð !¨ò !ó ð!ð8˜só ð4 ‡�ð
¨3ð 
°4ò 
ó ð
÷Jñ JðZ ‡�ðl
¨ð l
°ò l
ó ðl
ð^ ‡�ð sð ¨sò ó ðð>˜#ó ð6¨$ð °5¸¸c¸±?ó ð"Øðàðð 	ðð ð	ð
 	óð< ñ/Ø��s˜C�x‘Ñ!ð/àð/ð ð/ð 	ó	/ðd ‡�ð5 #ð 5¨$ò 5ó ð5ð
 ‡�ð?˜Cð ? Dò ?ó ð?ð ‡�ðC˜#ð C $ò Có ðCð ‡�ðL¨Cð L¸ð LÀò Ló ðLð. ‡�ð˜cð  dò ó ðð* ‡�ð) Sð )¨Tò )ó ð)ðX ‡�ð'�ò 'ó ð'ð ‡�ð)�$ò )ó ð)ð ‡�ð2˜4ò 2ó ð2ð ‡�ð/˜ò /ó ð/ð ‡�ð+�Dò +ó ð+ð ‡�ð¨ð °ò ó ðð*?˜D ™Ið ?°°c±ð ?¸tó ?ð¨4°©9ð ¸¸c¹ó ðO sð O¨tó Oð	˜#ð 	 $ó 	ð6˜sð 6¨ð 6°ó 6ð.(˜cð (¨ð (°ó (ð
¨ð °ó ÷u ñ u ñp¨ð ¸¸S¹	ó ñ" ð "°$°s±)ó "ð!¨Sð !°T¸#±Yó !ðH°#ð ¸$¸s¹)ó ð˜t C™yó ð@¨5°°c±¸DÀ¹IÐ1EÑ+Fó ð$ ‡�ð j°¡oò ó ðð& ‡�ð
¨sð 
°sò 
ó ð
ð sð ¨t°C©yó ð> -2ñ=Øð=Ø%)ð=à
ˆ4�‰9�d˜3‘iÐÑ ó=ð@ ð ¨¨c©ó ð* Ø!#Øñ.Øð.àð.ð ð.ð ˜#‘ð	.ð
 ð.ð ˆ4�‰9�d˜3‘i  c¡¨D°©I°t¸C±yÀ$ÀsÁ)ÈTÐRUÉYÐVÑWó.ôb5!Ð!ô 5!ðp¨4°©9ó ð2 d¨3¡ió 2ð  c¡ó ð((;Øð(;àð(;ð ð(;ð ˆ4�‰9�d˜3‘i  c¡¨D°©IÐ5Ñ6ó	(;ðV¨6ð °e¸DÀ¹IÀtÈCÁyÐ<PÑ6Qó ð((3Øð(3Ø%)ð(3à
ˆ4�‰9�d˜3‘i  c¡Ð*Ñ+ó(3ðV
 $ s¡)ó 
ð0 %¨¨S©	°4¸±9Ð(<Ñ"=ó 0ð2 ‡�ð¨ò ó ðð ‡�ð˜˜t S˜yÑ)ò ó ðð( ‡�ð
¨3ð 
¸#ð 
À$ò 
ó ð
ð ‡�ð?¨ð ?°ò ?ó ð?ð<jUØðjUà
ˆ4�‰9�d˜3‘i  c¡¨D°©I°t¸C±yÀ$ÀsÁ)ÐKÑLójUðZ
˜U 4¨¡9¨d°3©iÐ#7Ñ8ó 
ðØðØ7;ðà	ˆ#�Yóð  T¨#¡Yó ðZØðZàðZð ðZð ð	Zð
 ðZð ðZð  $ðZð ˆ4�‰9�d˜3‘i  c¡¨D°©I°t¸C±yÀ$ÀsÁ)ÈTÐRUÉYÐVÑWóZôzC!�jô C!óL7ð €×Ñ�QÓð ð ¨°©ò ó ððU Cð U°3ð UÈð UÐQUó UðDÐ ð,¨#ð ,°#¸±*ó ,ð^U°D¸±Ið UÀ$ÀsÁ)ó Uðp) $ s¡)ð )°ó )ð*# $ s¡)ð #°ó #ð ØñoØðoàðoð ðoð ˆ4�‰9�d˜3‘i  c¡¨D°©I°t¸C±yÀ$ÀsÁ)ÈTÐRUÉYÐVÑWó	oôdN@˜Oô N@ðbØðà
ˆ3�ˆ8�_ó÷0C	ñ C	ðL<˜cð <¨3ð <°Sð <¸Tô <r    