§
    H�’jc¢ ã                   óF  — 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 j+        ¦   «         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j6         7                    e8¦  «        Z9ej6         :                    ej6         :                    e9¦  «        ¦  «        Z;ej6         <                    e;d¦  «        Z=ej         >                    d¦  «        Z?ej         >                    d¦  «        Z@ej        dk    ZAdZBeAr ejC        ¦   «         dfndZD ejE        eF¦  «        ZG ejH        d¦  «        deIdeIfd „¦   «         ZJdeIfd!„ZKejL        d"eIddfd#„¦   «         ZM G d$„ d%¦  «        ZNejL        d"eIddfd&„¦   «         ZOejL        d"eIdeIfd'„¦   «         ZPdeIfd(„ZQd)e4deReIeIf         fd*„ZSd+eId,eId-eId.eIdeIf
d/„ZT	 dœd1eUeReIeIf                  d2eId3eIdeIfd4„ZVejL        d3eIde4fd5„¦   «         ZWejL        d3eIde4fd6„¦   «         ZXejL        d3eIde4fd7„¦   «         ZYejL        d3eId8eZde4fd9„¦   «         Z[ejL        d3eIde4fd:„¦   «         Z\ejL        d3eIde4fd;„¦   «         Z]ejL        de4fd<„¦   «         Z^ejL        de4fd=„¦   «         Z_ejL        de4fd>„¦   «         Z`ejL        de4fd?„¦   «         ZaejL        de4fd@„¦   «         ZbejL        d"eIdeIfdA„¦   «         ZcdBeUeI         dCeUeI         ddfdD„ZddEeUeI         deUeI         fdF„ZedGeIddfdH„ZfdGeIddfdI„ZgdJeIdKeIddfdL„ZhdJeIdKeIddfdM„ZidNeIdeIfdO„Zj G dP„ dQ¦  «        Zkd�dSe4deUeI         fdT„ZldždVeIdeUeI         fdW„Zmd3eIdeUeI         fdX„Znd3eIdeUeI         fdY„ZodeUeI         fdZ„ZpdeReUeI         eUeI         f         fd[„ZqejL        de*eI         fd\„¦   «         ZrejL        d3eIdeIfd]„¦   «         Zsd3eIdeUeI         fd^„Zt	 dŸd3eId`e4deReUeI         eUeI         f         fda„Zudbe4deUeI         fdc„Zv	 	 	 d d3eIdbe4dSe4ddeeI         d`e4deReUeI         eUeI         eUeI         eUeI         eUeI         eUeI         eUeI         f         fde„Zw G df„ dgek¦  «        ZxdeUeI         fdh„ZydeUeI         fdi„ZzdeUeI         fdj„Z{d3eIdke4d)e4deReUeI         eUeI         eUeI         eUeI         f         fdl„Z|dme$deReUeI         eUeI         f         fdn„Z}doe4dke4deReUeI         eUeI         eUeI         f         fdp„Z~deUeI         fdq„ZdeReUeI         eUeI         f         fdr„Z€ejL        de4fds„¦   «         Z�ejL        deRe4eIf         fdt„¦   «         Z‚ejL        d3eIdueIddfdv„¦   «         ZƒejL        d3eIddfdw„¦   «         Z„d3eIdeReUeI         eUeI         eUeI         eUeI         eUeI         eUeI         f         fdx„Z…deReUeI         eUeI         f         fdy„Z†dze4d{e4deUeI         fd|„Z‡deUeI         fd}„Zˆd3eIdme$doe4dke4d)e4dze4d{e4deReUeI         eUeI         eUeI         eUeI         eUeI         eUeI         eUeI         f         fd~„Z‰ G d„ d€ex¦  «        ZŠd¡d�„Z‹ ejH        d‚¦  «        dƒeIdedz  fd„„¦   «         ZŒd…eId†eId‡eIddfdˆ„Z�d‰ZŽd2eId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�eIdke4d‘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šeIdKeIddfd›„Z—dS )£é    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                  ó   — d S ©N© ©r   r   s     úIC:\Projects\DSCons\.venv\Lib\site-packages\torch\_inductor\cpp_builder.pyr   r   0   ó   € Øˆó    c                  ó   — d S r   r   r   s     r   r   r   3   r   r    c                  ó   — d S r   r   r   s     r   r   r   6   r   r    c                  ó   — dS )NFr   r   r    r   r   r   9   s   € Øˆur    ÚCxxBuildz_inductor/script.ldÚlinuxÚdarwinÚwin32zx86_64-w64-mingw32-g++Úreplacer   é   Úsearchc                 óÂ  — ddl m}m} | D ]É}	 |€‰t          j        dk    rŒt          j        d¦  «        sŒ+ddlm}  |¦   «         } |t
          j	         
                    |d¦  «        |¬¦  «        }|5  t          ¦   «         }d d d ¦  «         n# 1 swxY w Y   t          j        |dg¦  «         |c S # t          j        t          t           f$ r Y ŒÆw xY wt"          j        ‚)	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ÐDÐDÐDÐDÐDÐDÐDàð ð ˆð	Øˆ{õ ”< 7Ò*Ð*Øå”yÐ!=Ñ>Ô>ð ØØ:Ð:Ð:Ð:Ð:Ð:à'˜<™>œ>�Ø�xÝ”G—L’L ¨:Ñ6Ô6Àðñ ô �ð ð 2ð 2Ý/Ñ1Ô1�Cð2ð 2ð 2ñ 2ô 2ð 2ð 2ð 2ð 2ð 2ð 2øøøð 2ð 2ð 2ð 2åÔ# S¨+Ð$6Ñ7Ô7Ð7ØˆJˆJˆJøÝÔ*Õ,=½{ÐKð 	ð 	ð 	ØˆHð	øøøå
Ô
 Ð s?   ŽB3¡B3¶=B3Á3BÂB3ÂB	ÂB3ÂB	ÂB3Â3CÃCc            
      óØ  — t           j                             t          ¦   «         d¦  «        } t           j                             | dd¦  «        }t           j                             |¦  «        s}t
                               d¦  «         t           j                             dd¦  «        }|€t          j
        d¦  «        }|�+t          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ÚcondaNÚ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�\Š\�)™+œ+ uÑ-Ô-€FÝŒw�|Š|˜F E¨5Ñ1Ô1€HÝŒ7�>Š>˜(Ñ#Ô#ð Ý�ŠÐ,Ñ-Ô-Ð-Ý”
—’˜{¨GÑ4Ô4ˆØˆ=Ý”L Ñ)Ô)ˆEØÐÝÔ!àØØ( Ð(Ð(Ø+ØØØ Øð	õ "”ðñ ô ð ð €Or    Úcompilerc                 ó¼   — 	 t          j        | dgt           j        ¬¦  «         dS # t          $ r}t	          j        | ¦  «        |‚d}~wt           j        $ r Y dS 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`   ‰   sy   € ð
ÝÔ ¨7Ð 3½JÔ<MÐNÑNÔNÐNÐNÐNøÝð 6ð 6ð 6ÝÔ$ XÑ.Ô.°AÐ5øøøøÝÔ%ð ð ð àˆˆðøøøs   ‚"& ¦
A°AÁAÁAc                   ó:   — e Zd Zdeddfd„Zdd„Zdd„Zdefd„ZdS )	ÚWinPeFileVersionInfoÚ	file_pathr   Nc                 ó–   — || _         t          j        d¦  «        | _        |                      ¦   «          |                      ¦   «          d S )Nzversion.dll)rc   ÚctypesÚWinDLLÚversion_dllÚ_setup_functionsÚ_get_version_info)Úselfrc   s     r   Ú__init__zWinPeFileVersionInfo.__init__˜   sE   € Ø"ˆŒÝ!œ=¨Ñ7Ô7ˆÔØ×ÒÑÔÐØ×ÒÑ Ô Ð Ð Ð r    c                 ó2  — 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        _        d S 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Ô9õ <D¼>ˆÔÔ0Ô8õ ÔÝŒNÝŒNÝŒOð	9
ˆÔÔ,Ô5õ 8@´}ˆÔÔ,Ô4õ ÔÝÔÝŒN�6œ?Ñ+Ô+ÝŒN�8œ=Ñ)Ô)ð	4
ˆÔÔ'Ô0õ 3;´-ˆÔÔ'Ô/Ð/Ð/r    c                 ó€  — t          j        ¦   «         }| j                             | j        t          j        |¦  «        ¦  «        }|dk    rt          d| j        › d�¦  «        ‚t          j        |¦  «        | _	        | j         
                    | j        d|| j	        ¦  «        }|st          d| j        › d�¦  «        ‚d S )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�FœL¨Ñ/Ô/ñ
ô 
ˆð �1Š9ˆ9ÝÐRÀÄÐRÐRÐRÑSÔSÐSå"Ô7¸Ñ=Ô=ˆÔØÔ"×6Ò6ØŒN˜A˜t TÔ%6ñ
ô 
ˆð ð 	OÝÐM¸D¼NÐMÐMÐMÑNÔNÐNð	Oð 	Or    c                 ód  — t          j        ¦   «         }t          j        ¦   «         }| j                             | j        dt          j        |¦  «        t          j        |¦  «        ¦  «        }|r|j        dk    rdS g }d}|j        �št          |j        dz  ¦  «        D ]�}|dz  }t          j
        |j        |z   d¦  «        }t                               |d d…         d¦  «        }t                               |dd…         d¦  «        }	|                     ||	f¦  «         Œ‚n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Ñ%Ô%ˆ	Ý”‘”ˆàÔ"×1Ò1ØÔØ'ÝŒL˜Ñ#Ô#ÝŒL˜ÑÔñ	
ô 
ˆð ð 	˜%œ+¨Ò*Ð*Ø�1àˆØˆØŒ?Ð&Ý˜5œ;¨!Ñ+Ñ,Ô,ð :ð :�Ø˜Q™�ÝÔ'¨	¬¸&Ñ(@À!ÑDÔD�ÝŸ.š.¨¨b¨q¨b¬°8Ñ<Ô<�ÝŸNšN¨4°°!°¬9°hÑ?Ô?�	Ø×#Ò# W¨iÐ$8Ñ9Ô9Ð9Ð9ð:õ Ð"Ñ#Ô#Ð#àˆr    ©r   N)	Ú__name__Ú
__module__Ú__qualname__Ústrrk   rh   ri   rŒ   r˜   r   r    r   rb   rb   —   s�   € € € € € ð! #ð !¨$ð !ð !ð !ð !ð@ð @ð @ð @ð.Oð Oð Oð Oð" ð ð ð ð ð ð r    rb   c                 ó<  — dt           t          t          f         fd„}t          | ¦  «        sdS t          j                             | ¦  «        r| }n |¦   «         \  }}|du rdS t          |¦  «        }|                     ¦   «         }|dk    rt          d¦  «        ‚dS )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            	      óN  ‡— t           j                             t           j                             dd¦  «        ddd¦  «        } t           j                             | ¦  «        sat           j                             t           j                             dd¦  «        ddd¦  «        } t           j                             | ¦  «        sdS 	 | d	d
ddddddg	}t          j        |dd¬¦  «                             ¦   «         }|sdS t           j                             |ddd¦  «        Št           j                             ‰¦  «        sdS ˆfd„t          j	        ‰¦  «        D ¦   «         }|sdS t          |d¬¦  «        d         }t           j                             ‰|dddd¦  «        }t           j                             |¦  «        rd|fS t           j                             ‰|dddd¦  «        }t           j                             |¦  «        rd|fS n# t          j        t          f$ r Y dS w xY wdS ) 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ÚMSVCc                 óŽ   •— g | ]A}t           j                             t           j                             ‰|¦  «        ¦  «        ¯?|‘ŒBS r   )r5   r8   Úisdirr9   )Ú.0ÚdÚmsvc_tools_paths     €r   ú
<listcomp>zGcheck_msvc_cl_language_id.<locals>.get_msvc_cl_path.<locals>.<listcomp>  sM   ø€ ð  ð  ð  àÝ”7—=’=¥¤§¢¨o¸qÑ!AÔ!AÑBÔBð Øð ð  ð  r    )Úreverser   rG   ÚHostX64Úx64zcl.exeÚHostX86Úx86)r5   r8   r9   rQ   rR   rN   r;   r<   ÚstripÚlistdirÚsortedÚCalledProcessErrorr>   )Úvswhere_pathÚcmdÚvs_install_pathÚtoolset_versionsÚlatest_toolset_versionÚcl_pathr°   s         @r   Úget_msvc_cl_pathz3check_msvc_cl_language_id.<locals>.get_msvc_cl_pathë   sc  ø€ õ ”w—|’|ÝŒJ�NŠNÐ.Ð0IÑJÔJØ%ØØñ	
ô 
ˆõ Œw�~Š~˜lÑ+Ô+ð 	!Ýœ7Ÿ<š<Ý”
—’˜~Ð/BÑCÔCØ)ØØñ	ô ˆLõ ”7—>’> ,Ñ/Ô/ð !Ø �yð<	ð ØØØØØØCØØ"ð
ˆCõ )Ô5Ø˜$¨ðñ ô çŠe‰gŒgð ð #ð !Ø �yõ !œgŸlšl¨?¸DÀ'È6ÑRÔRˆOÝ”7—>’> /Ñ2Ô2ð !Ø �yð ð  ð  ð  åœ OÑ4Ô4ð ñ  ô  Ðð
 $ð !Ø �yÝ%+Ð,<ÀdÐ%KÑ%KÔ%KÈAÔ%NÐ"õ ”g—l’lØØ&ØØØØñô ˆGõ Œw�~Š~˜gÑ&Ô&ð )Ø˜W�}Ð$õ œ'Ÿ,š,Ø#Ø*ØØØØñô �õ ”7—>’> 'Ñ*Ô*ð )Ø ˜=Ð(ð)øõ Ô-Õ/@ÐAð 	ð 	ð 	Ø�9�9ð	øøøð ˆys-   Ã6H Ã;AH Ä>"H Å"AH Ç AH ÈH"È!H"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ð Rð Rð Rõh �xÑ Ô ð Øˆå	„w‡~‚~�hÑÔð àˆˆà-Ð-Ñ/Ô/Ñˆˆ{Ø�Eˆ>ˆ>ØˆFå'¨Ñ4Ô4€LØ×*Ò*Ñ,Ô,€GØ�$‚€åð=ñ
ô 
ð 	
ð €r    c                 óú  — 	 t          j        | dgt           j        d¬¦  «        }nG# t          $ r}t	          d| › d�¦  «        |‚d}~wt
          $ r}t	          d| › d�¦  «        |‚d}~ww xY wd}|                     ¦   «         D ]F}d	|v r@|                     d
d¦  «        d                              ¦   «          	                    ¦   «         }ŒG|€t	          d| › d| › d�¦  «        ‚|dvrt	          d| › d|› �¦  «        ‚|S )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  sk  € ð
BÝÔ%Ø�tÐ¥ZÔ%6¸Tð
ñ 
ô 
ˆˆøõ ð Ið Ið IÝÐ@¨Ð@Ð@Ð@ÑAÔAÀqÐHøøøøÝð Bð Bð BÝÐ9¨HÐ9Ð9Ð9Ñ:Ô:ÀÐAøøøøðBøøøð €FØ—’Ñ Ô ð <ð <ˆØ˜TÐ!Ð!Ø—Z’Z  QÑ'Ô'¨Ô+×1Ò1Ñ3Ô3×9Ò9Ñ;Ô;ˆFøà€~ÝØq¨hÐqÐqÐdlÐqÐqÐqñ
ô 
ð 	
ð Ð'Ð'Ð'ÝØ]¨hÐ]Ð]ÐU[Ð]Ð]ñ
ô 
ð 	
ð €Ms    ‚#& ¦
A*°AÁA*ÁA%Á%A*c                  ó`  — t           j        j        dk    r9t          j        dk    r)t
          } t           j        j        st          | ¦  «         | S t          rNt          j
                             dd¦  «        } t          | ¦  «        } t          | ¦  «         t          | ¦  «         nŠ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°YÒ>Ð>ÝŒL˜GÒ#Ð#õ ˆÝÔ"Ô3ð 	/Ý$ XÑ.Ô.Ð.Øˆåð /Ý”:—>’> %¨Ñ.Ô.ˆÝ+¨HÑ5Ô5ˆÝ$ XÑ.Ô.Ð.Ý! (Ñ+Ô+Ð+Ð+åÔÑÔð 	"Ý”>Ð!Ý•f”j”n¥t­U mÑ4Ô4ð 	'Ý�6œ:œ>Ñ*Ô*ˆFˆFå”j”nÐ&ˆFÝ& vÑ.Ô.ˆØ€Or    Úuse_relative_pathc                 ó²   — t           rt          d¦  «        ‚t          j        ¦   «         r't          j        }| rt          j        nt          j        }n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ð %ð)•Ô,Ð,å Ô(ð ˆGð ˆBØˆGØˆwˆ;Ðr    Ú
cubin_fileÚkernel_namerç   rè   c                 ó   — | dz   }|› d|› d| › �}t          j        |                     ¦   «         ddd¬¦  «         |› d|› �}t          j        |                     ¦   «         ddd¬¦  «         t          j        dd| ¦  «        }|d	|› d
|› d�z   d|› d|› d�z   d|› d|› d�z   |z   }t          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àÐ
HÐ
H°Ð
HÐ
H¸JÐ
HÐ
H€CÝ„N�3—9’9‘;”;¨t¸$ÀdÐKÑKÔKÐKàÐ
bÐ
bÐX`Ð
bÐ
b€CÝ„N�3—9’9‘;”;¨t¸$ÀdÐKÑKÔKÐKõ ”�w  ZÑ0Ô0€IàØ
M YÐ
MÐ
M¸Ð
MÐ
MÐ
Mñ	Nà
J IÐ
JÐ
J°{Ð
JÐ
JÐ
Jñ	Kð I IÐ
HÐ
H°kÐ
HÐ
HÐ
Hñ	Ið ñ		ð õ „N�3—9’9‘;”;¨t¸$ÀdÐKÑKÔKÐKØ€Or    rF   ÚcubinsÚ
output_dirÚcpp_compilerc                 ó@  — t           j                             |d¦  «        }t           j                             |d¦  «        }t          |d¦  «        5 }|                     d¦  «         | D ]\  }}t           j                             |¦  «        }|                     dd¦  «                             dd¦  «        }	|                     d	|› d
|› d|› d|	› d|› d|› d|› d|› d|› d�¦  «         Œ€	 ddd¦  «         n# 1 swxY w Y   t          j        |d|d|gddd¬¦  «         |S )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  »  së  € õ( Œw�|Š|˜JÐ(;Ñ<Ô<€HÝŒw�|Š|˜JÐ(;Ñ<Ô<€Hå	ˆh˜Ñ	Ô	ð  Ø	�ŠÐ$Ñ%Ô%Ð%Ø'-ð 	ð 	Ñ#ˆJ˜åœŸš¨
Ñ3Ô3ˆIØ$×,Ò,¨T°6Ñ:Ô:×BÒBÀ3ÈÑNÔNˆLØ�GŠGðAØ(ðAð Aà(ðAð Að !ðAð Að )ð	Að Að
 !ðAð Að )ðAð Að &ðAð Að !ðAð Að ,7ðAð Að Añ
ô 
ð 
ð 
ð		ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð õ$ „NØ	�t˜X t¨XÐ6ØØØð	ñ ô ð ð €Os   ÁBC6Ã6C:Ã=C:c                 óŒ   — t          j        | dg¦  «                             d¦  «        }d|                     ¦   «         d         v S )Nr1   Úutf8ÚAppler   )r;   r<   ÚdecoderÎ   )rü   Úversion_strings     r   Ú_is_apple_clangr  í  sB   € åÔ,¨l¸KÐ-HÑIÔI×PÒPÐQWÑXÔX€NØ�n×/Ò/Ñ1Ô1°!Ô4Ð4Ð4r    c                 ó  — t           j        dk    rt          | ¦  «        S t          rFt	          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  ó  sˆ   € õ „|�xÒÐÝ˜|Ñ,Ô,Ð,Ý	ð <åŒ9Ð/°Ñ>Ô>ð 	ÝØoñô ð õ •B”I˜m¨\Ñ:Ô:Ñ;Ô;Ð;Ý•”	Ð.°Ñ=Ô=Ñ>Ô>Ð>r    c                 óh   — t          | ¦  «        rdS t          t          j        d| ¦  «        ¦  «        S )NFz(gcc|g\+\+|gnu-c\+\+))r  rÃ   rõ   r*   r  s    r   Ú_is_gccr    s4   € õ �ÑÔð ØˆuÝ•”	Ð2°LÑAÔAÑBÔBÐBr    Úmajorc                 ó˜  — t          | ¦  «        sdS 	  t          j        | ddgt          j        ¬¦  «                             ¦   «         j        t          Ž }n# t          t          j        f$ r Y dS w xY wt          j
        d|¦  «        }|€dS t          |                     d¦  «        ¦  «        t          t          |¦  «        ¦  «        k     S )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Ý   € å�<Ñ Ô ð Øˆuð
ð�JÔ#ØÐ1°>ÐBÝ!Ô)ðñ ô ÷ ŠU‰WŒWÜÕ+ð-ð 	ˆ
øõ �zÔ9Ð:ð ð ð Øˆuˆuðøøøõ ”YÐ/°Ñ<Ô<€NØÐØˆuå˜×,Ò,¨QÑ/Ô/Ñ0Ô0µ<ÅÀEÁ
Ä
Ñ3KÔ3KÒKÐKs   “AA ÁA0Á/A0c                 ó:  — t           sdS 	 t          j        | dgt          j        t          j        d¬¦  «        } |j                             ¦   «         j        t          Ž }| 	                    ¦   «         }t          |¦  «        o	d|d         v S # t          $ r Y dS 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­   € åð ØˆuðÝ”Ø˜7Ð#Ý”?ÝÔ$Øð	
ñ 
ô 
ˆð 2�V”]×(Ò(Ñ*Ô*Ô1Õ3IÐJˆ
Ø×%Ò%Ñ'Ô'ˆå�E‰{Œ{Ð6˜{¨e°A¬hÐ6Ð6øåð ð ð Øˆuˆuðøøøs   ‹B B Â
BÂBc                 ó  — dt           dd fd„}	  t          j        | dgt          j        ¬¦  «                             ¦   «         j        t          Ž }d|                     ¦   «         d         v }|rot          r$t          j
        d| ¦  «        rt          d	¦  «        ‚t          j
        d
|¦  «        }|�-|                     d¦  «        } |t          |¦  «        ¦  «         |S # t          $ r Y dS t          j        $ r Y dS w xY w)NÚcompiler_versionr   c                 óh   — t           rdnd}| t          |¦  «        k     rt          d|› d�¦  «        ‚dS )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:  sM   € õ %0Ð<�j�j°WˆØ�l¨;Ñ7Ô7Ò7Ð7ÝØQÀ;ÐQÐQÐQñô ð ð 8Ð7r    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  sL  € ðµð À$ð ð ð ð ðð�JÔ#Ø˜{Ð+µJÔ4Fðñ ô ÷ ŠU‰WŒWÜÕ+ð	-ð 	ð $ z×'<Ò'<Ñ'>Ô'>¸qÔ'AÐAÐØð 	>Ýð Ý”9Ð2°LÑAÔAð Ý&Øuñô ð õ
  œYÐ'AÀ:ÑNÔNˆNØÐ)Ø(×.Ò.¨qÑ1Ô1�Ø&Ð&¥|°GÑ'<Ô'<Ñ=Ô=Ð=à Ð øÝð ð ð ØˆuˆuÝÔ%ð ð ð àˆuˆuðøøøs   �CC Ã
C>Ã,C>Ã=C>c                  ó8   — t          t          ¦   «         ¦  «        S r   )r  rä   r   r    r   Úis_gccr0  e  s   € åÕ#Ñ%Ô%Ñ&Ô&Ð&r    c                  ó8   — t          t          ¦   «         ¦  «        S r   )r  rä   r   r    r   Úis_clangr2  j  s   € åÕ%Ñ'Ô'Ñ(Ô(Ð(r    c                  ó8   — t          t          ¦   «         ¦  «        S r   )r.  rä   r   r    r   r+  r+  o  s   € åÕ.Ñ0Ô0Ñ1Ô1Ð1r    c                  ó8   — t          t          ¦   «         ¦  «        S r   )r  rä   r   r    r   Úis_apple_clangr5  t  s   € åÕ+Ñ-Ô-Ñ.Ô.Ð.r    c                  ó8   — t          t          ¦   «         ¦  «        S r   )rÄ   rä   r   r    r   Ú
is_msvc_clr7  y  s   € åÕ'Ñ)Ô)Ñ*Ô*Ð*r    c                 ó°  — t           j                             ¦   «         }d|d<   	  t          j        | dgt          j        |¬¦  «        j        t          Ž }nT# t          $ rG 	  t          j        | dgt          j        |¬¦  «        j        t          Ž }n# t          $ r Y Y dS w xY wY nw xY w| 	                    dd¦  «        }| 	                    d	d¦  «        }|S )
NÚCÚLC_ALLrÉ   )r]   Úenvr1   r£   úró   ú
)
r5   rQ   Úcopyr;   r<   r^   r  r  rÍ   r(   )rY   r;  r  s      r   Úget_compiler_version_infor?  ~  s  € å
Œ*�/Š/Ñ
Ô
€CØ€Cˆ�Mð
ð�Ô0Ø�tÐ¥ZÔ%6¸Cð
ñ 
ô 
ä
Õ(ð*ˆˆøõ ð ð ð ð	ð�ZÔ4Ø˜;Ð'µ
Ô0AÀsðñ ô äÕ,ð.ˆNˆNøõ ð 	ð 	ð 	Ø�2�2�2ð	øøøð ˆNðøøøð $×+Ò+¨D°#Ñ6Ô6€NØ#×+Ò+¨D°#Ñ6Ô6€NØÐs5   ¥0A Á
B'Á!0BÂB'Â
B!ÂB'Â B!Â!B'Â&B'Ú	dest_listÚsrc_listc                 óD   — |                       d„ |D ¦   «         ¦  «         d S )Nc              3   ó>   K  — | ]}t          j        |¦  «        V — Œd S r   ©r>  Údeepcopy)r®   Úitems     r   ú	<genexpr>z_append_list.<locals>.<genexpr>•  s,   è è € Ð>Ð>¨T•T”] 4Ñ(Ô(Ð>Ð>Ð>Ð>Ð>Ð>r    )Úextend)r@  rA  s     r   Ú_append_listrI  ”  s+   € Ø×ÒÐ>Ð>°XÐ>Ñ>Ô>Ñ>Ô>Ð>Ð>Ð>r    Ú	orig_listc                 óF   — g }| D ]}||vr|                      |¦  «         Œ|S r   )rŽ   )rJ  Únew_listrF  s      r   Ú_remove_duplication_in_listrM  ˜  s9   € Ø€HØð "ð "ˆØ�xÐÐØ�OŠO˜DÑ!Ô!Ð!øØ€Or    Úpath_dirc                 ó  — t           j                             | ¦  «        sg	 t          | ¦  «                             dd¬¦  «         d S # t
          $ r3}|j        t          j        k    rt          d| › �¦  «        |‚Y d }~d S d }~ww xY wd S )NT)ÚparentsÚexist_okzFail to create path )	r5   r8   rN   r   Úmkdirr"  ÚerrnoÚEEXISTr   )rN  r   s     r   Ú_create_if_dir_not_existrU     s¯   € ÝŒ7�>Š>˜(Ñ#Ô#ð Oð	OÝ�‰NŒN× Ò ¨¸Ð Ñ=Ô=Ð=Ð=Ð=øÝð 	Oð 	Oð 	OØŒy�EœLÒ(Ð(Ý"Ð#D¸(Ð#DÐ#DÑEÔEÈ3ÐNð )Ð(Ð(Ð(Ð(Ð(øøøøð	OøøøðOð Os   ¡$A Á
BÁ(A?Á?Bc                 óŽ  — t           j                             | ¦  «        r¥t          j        | d¬¦  «        D ]x\  }}}|D ]6}t           j                             ||¦  «        }t          j        |¦  «         Œ7|D ]6}t           j                             ||¦  «        }t          j        |¦  «         Œ7Œyt          j        | ¦  «         d S d S )NF)Útopdown)r5   r8   rN   Úwalkr9   ÚremoveÚrmdir)rN  ÚrootÚdirsÚfilesÚnamerc   Údir_paths          r   Ú_remove_dirr`  ©  sÒ   € Ý	„w‡~‚~�hÑÔð Ý!#¤¨¸5Ð!AÑ!AÔ!Að 	#ð 	#ÑˆD�$˜Øð %ð %�ÝœGŸLšL¨¨tÑ4Ô4�	Ý”	˜)Ñ$Ô$Ð$Ð$Øð #ð #�Ýœ7Ÿ<š<¨¨dÑ3Ô3�Ý”˜Ñ"Ô"Ð"Ð"ð#õ 	Œ�ÑÔÐÐÐðð r    Úcmd_lineÚcwdc                 óN  — t          j        | ¦  «        }	 t          j        ||dt          j        t          j        ¬¦  «         d S # t          j        $ rP} |j        j        t          Ž }d|v pd|v }|rt          j        dk    rd}||z  }t          j        ||¦  «        |‚d }~ww xY w)NT)rb  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)ra  rb  r¼   r_   ÚoutputÚopenmp_problemÚinstructions          r   Ú_run_compile_cmdrj  µ  sÑ   € Ý
Œ+�hÑ
Ô
€Cð6ÝŒØ�S ­Z¬_ÅZÔEVð	
ñ 	
ô 	
ð 	
ð 	
ð 	
øõ Ô(ð 6ð 6ð 6Ø �””Õ"8Ð9ˆØ1°VÐ;ÐQ¸xÈ6Ð?QˆØð 
	"�cœl¨hÒ6Ð6ð2ð ð �kÑ!ˆFÝÔ! # vÑ.Ô.°AÐ5øøøøð6øøøs   –-A ÁB$ÁABÂB$c                 óv   — t          d¦  «        5  t          | |¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )NÚcompile_file)r	   rj  )ra  rb  s     r   Úrun_compile_cmdrm  Ì  s„   € Ý	�nÑ	%Ô	%ð (ð (Ý˜ 3Ñ'Ô'Ð'ð(ð (ð (ñ (ô (ð (ð (ð (ð (ð (ð (ð (øøøð (ð (ð (ð (ð (ð (s   �.®2µ2Ú	orig_pathc                 óT   — t           r |                      t          j        d¦  «        S | S )Nú/)rÝ   r(   r5   Úsep)rn  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dS )(Ú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.
    r£   NFrY   ÚdefinitionsÚinclude_dirsÚcflagsÚldflagsÚlibraries_dirsÚ	librariesÚpassthrough_argsÚaot_moderå   Úcompile_onlyÚprecompilingÚpreprocessingr   c                 óæ   — || _         |pg | _        |pg | _        |pg | _        |pg | _        |pg | _        |pg | _        |pg | _        d | _        |	| _	        |
| _
        || _        || _        || _        d S 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   rt  ru  rv  rw  rx  ry  rz  r{  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                 ó^   — | j         s| j        s| j        rg | _        g | _        g | _        d S d S r   )r‹  rŒ  r�  r…  r†  r„  r{   s    r   Ú_process_compile_only_optionsz.BuildOptionsBase._process_compile_only_options  sE   € ØÔð 	 Ô!3ð 	°tÔ7Jð 	Ø#%ˆDÔ Ø ˆDŒOØˆDŒMˆMˆMð	ð 	r    c                 ód  — t          | j        ¦  «        | _        t          | j        ¦  «        | _        t          | j        ¦  «        | _        t          | j        ¦  «        | _        t          | j        ¦  «        | _        t          | j        ¦  «        | _        t          | j        ¦  «        | _        d S r   )rM  r�  r‚  rƒ  r„  r…  r†  r‡  r{   s    r   Ú_remove_duplicate_optionsz*BuildOptionsBase._remove_duplicate_options  s‡   € Ý7¸Ô8IÑJÔJˆÔÝ8¸Ô9KÑLÔLˆÔÝ2°4´<Ñ@Ô@ˆŒÝ3°D´MÑBÔBˆŒÝ:¸4Ô;OÑPÔPˆÔÝ5°d´oÑFÔFˆŒÝ!<¸TÔ=SÑ!TÔ!TˆÔÐÐr    c                 óV   — |                       ¦   «          |                      ¦   «          d S 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                 ó*  — |                       ¦   «         |                      ¦   «         |                      ¦   «         |                      ¦   «         |                      ¦   «         |                      ¦   «         |                      ¦   «         |                      ¦   «         |                      ¦   «         |  	                    ¦   «         |  
                    ¦   «         dœ}t          |d¦  «        5 }t          j        ||¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )N)rY   rt  ru  rv  rw  rx  ry  rz  r{  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<  s4  € à×)Ò)Ñ+Ô+Ø×/Ò/Ñ1Ô1Ø ×1Ò1Ñ3Ô3Ø—o’oÑ'Ô'Ø×'Ò'Ñ)Ô)Ø"×5Ò5Ñ7Ô7Ø×+Ò+Ñ-Ô-Ø $× 9Ò 9Ñ ;Ô ;Ø×)Ò)Ñ+Ô+Ø!%×!;Ò!;Ñ!=Ô!=Ø ×1Ò1Ñ3Ô3ð
ð 
ˆõ �$˜‰_Œ_ð 	  ÝŒI�e˜QÑÔÐð	 ð 	 ð 	 ñ 	 ô 	 ð 	 ð 	 ð 	 ð 	 ð 	 ð 	 ð 	 øøøð 	 ð 	 ð 	 ð 	 ð 	 ð 	 s   Ã%DÄDÄD)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   rs  rs  ×  s  € € € € € ðð ð Ø(,Ø)-Ø#'Ø$(Ø+/Ø&*Ø-1ØØ"'Ø"Ø"Ø#ð"2ð "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ð "2ð "2ð "2ðHð ð ð ðUð Uð Uð Uð)ð )ð )ð )ð˜cð ð ð ð ð!  c¤ð !ð !ð !ð !ð" $ s¤)ð "ð "ð "ð "ð˜D œIð ð ð ð ð˜T #œYð ð ð ð ð$ D¨¤Ið $ð $ð $ð $ð˜t Cœyð ð ð ð ð& d¨3¤ið &ð &ð &ð &ð˜dð ð ð ð ð' tð 'ð 'ð 'ð 'ð" $ð "ð "ð "ð "ð" $ð "ð "ð "ð "ð# 4ð #ð #ð #ð #ð  sð  ¨tð  ð  ð  ð  ð  ð  r    rs  TÚwarning_allc                 ó"   — t           s| rdgng S g S )NÚWall©rÝ   )r·  s    r   Ú_get_warning_all_cflagr»  O  s    € Ýð Ø&Ð.�ˆxˆx¨BÐ.àˆ	r    úc++20Ústd_numc                 ó.   — t           r		 d} d| › �gS d| › �gS )Nr¼  zstd:zstd=rº  )r½  s    r   Ú_get_cpp_std_cflagr¿  V  s8   € Ýð "ð	ð ˆØ �wÐ Ð Ð!Ð!à �wÐ Ð Ð!Ð!r    c                 óà   — t           rg d¢}naddg}t          | ¦  «        r*t          j        j        rdnd}|                     |¦  «         t          | ¦  «        r|                     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ü   rv  Úignored_optimization_arguments      r   Ú_get_os_related_cpp_cflagsrÏ  e  s–   € Ýð &ð
ð 
ð 
ˆˆð& (Ð)>Ð?ˆÝ�\Ñ"Ô"ð 	9õ Ô&ÔJð9Ð6Ð6à8ð *ð
 �MŠMÐ7Ñ8Ô8Ð8Ý�<Ñ Ô ð 	&ð �MŠM˜*Ñ%Ô%Ð%Ø€Mr    c                 óB   — g }t           r|                     d¦  «         |S )NÚNOMINMAX©rÝ   rŽ   )rü   Úos_definitionss     r   Ú_get_os_related_cpp_definitionsrÔ  ‰  s+   € Ø "€NÝð *ð 	×Ò˜jÑ)Ô)Ð)ØÐr    c                  óV  — t           rg } nžg d¢} |                      d¦  «         t          j        j        s|                      d¦  «         |                      d¦  «         |                      dt          j        j        › �¦  «         t          ¦   «         r|                      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_flagr0  )Úflagss    r   Ú_get_ffast_math_flagsrÙ  ’  s¯   € Ýð 3Øˆˆð
ð 
ð 
ˆð 	�ŠÐ+Ñ,Ô,Ð,ÝŒzÔ5ð 	:Ø�LŠLÐ8Ñ9Ô9Ð9ð 	�Š�]Ñ#Ô#Ð#Ø�ŠÐU¥V¤ZÔ%SÐUÐUÑVÔVÐVå‰8Œ8ð 	3Ø�LŠLÐ1Ñ2Ô2Ð2à€Lr    c                  ó\   — g } g }t           r	ddg} g d¢}n|                      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Ò  )rv  rw  s     r   Ú!_get_inductor_debug_symbol_cflagsrß  ²  sI   € ð €FØ€Gåð Ø˜Ð!ˆØCÐCÐCˆˆà�Š�cÑÔÐà�7ˆ?Ðr    c                  ó  ‡— t          ¦   «         } t          j        ¦   «         dvr| S t          j                             d¦  «        s| S t
          j                             ¦   «         Š|                      ˆfd„dD ¦   «         ¦  «         | S )N©Úaarch64Úarm64r%   c              3   óH   •K  — | ]}‰                      |d ¦  «        ¯|V — ŒdS )FN)rR   )r®   Ú
capabilityÚcapabilitiess     €r   rG  z/_get_linux_aarch64_cpu_flags.<locals>.<genexpr>Ï  sM   øè è € ð ð àØ×Ò˜J¨Ñ.Ô.ðØðð ð ð ð ð r    ©Úbf16ÚsveÚsve2)	r   r4   Úmachiner3   Ú
startswithÚtorchÚcpuÚget_capabilitiesÚupdate)rØ  ræ  s    @r   Ú_get_linux_aarch64_cpu_flagsrñ  Ä  s™   ø€ å'™\œ\€EåÔÑÔÐ!5Ð5Ð5ØˆåŒ<×"Ò" 7Ñ+Ô+ð Øˆå”9×-Ò-Ñ/Ô/€LØ	‡L‚Lð ð ð ð à1ðñ ô ñ ô ð ð €Lr    c                 óø   — t          ¦   «         }t          | ¦  «        r\t          | d¦  «        rLt          g d¢¦  «                             |¦  «        rdS t          ddg¦  «                             |¦  «        rdS dS )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ö  Ø  s‡   € å(Ñ*Ô*€Eåˆ|ÑÔð .Õ!:¸<ÈÑ!LÔ!Lð .ÝÐ-Ð-Ð-Ñ.Ô.×7Ò7¸Ñ>Ô>ð 	3Ø2Ð2å�v˜u�oÑ&Ô&×/Ò/°Ñ6Ô6ð 	.Ø-Ð-àˆ>r    c                 ó8  — t          j        ¦   «         rg S t           j        j        }|dk    rg S t          j        dk    r|€g S t          j        ¦   «         }|€2|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Ô€EØ�‚{€{Øˆ	õ „|�xÒÐ E MØˆ	åÔÑ Ô €GØ€}Ø�iÒÐØ!�?Ð"Ø�iÒÐØ"Ð#Ð#Ø�iÒÐØ"Ð#Ð#ØÐ*Ð*Ð*Ý0°Ñ>Ô>Ð?Ð?ØÐÐà�)ÒÐØ˜��Ð Ð Ø�UÐÐÐÐr    FÚmin_optimizec                 ój  — g }g }t           j        j        p#t          j                             dd¦  «        dk     }t           j        j        pXt           j        j        pGt          j                             dd¦  «        dk    p#t          j                             dd¦  «        dk    }|r-t          r||rdndgz  }n0||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
        r2t          r|                     d¦  «         n|                     d¦  «         t           j        j        rC|sAt          s:t          | ¦  «        r|                     d¦  «         n|                     d¦  «         |t          ¦   «         z  }t          rn{t          j        dk    r$t#          | ¦  «        r|                     d¦  «         |t%          | ¦  «        z  }t           j        j        r$t          | ¦  «        r|                     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ý  rv  rw  Úshould_use_optimized_flagsÚshould_add_debug_symbol_flagsÚdebug_cflagsÚdebug_ldflagss           r   Ú_get_optimization_cflagsr    sq  € ð €FØ€Gõ 	ÔÔ)ð 	EÝŒ:�>Š>Ð7¸Ñ=Ô=ÀÒDð"Ðõ
 	ÔÔ)ð 	DÝÔÔ,ð	DåŒ:�>Š>Ð7¸Ñ=Ô=ÀÒDð	Dõ Œ:�>Š>Ð6¸Ñ<Ô<ÀÒCð	 "ð "ð Ýð 	Ø˜|Ð5�t�t°Ð6Ñ6ˆFˆFàØAMÐW•Ô#Ô=Ð=ÐSWØðñ ˆFˆFõ
 ð 	ØÐ*Ð*Ð*Ñ*ˆFˆFà�t�fÑˆFà$ð !Ý&GÑ&IÔ&IÑ#ˆ�mØ�,ÑˆØ�=Ñ ˆåÔÔ/ð 4Ýð 	4Ø�MŠM˜%Ñ Ô Ð Ð à�MŠMÐ2Ñ3Ô3Ð3åÔÔ-ð $Ð6Sð $Ýð 	$Ý˜Ñ&Ô&ð $Ø—’Ð1Ñ2Ô2Ð2Ð2à—’˜dÑ#Ô#Ð#à
Õ#Ñ%Ô%Ñ%€Fåð 	'Øõ Œ<˜8Ò#Ð#­°Ñ(=Ô(=Ð#Ø�MŠMÐ3Ñ4Ô4Ð4ØÕ& |Ñ4Ô4Ñ4ˆåÔÔ)ð 	'­i¸Ñ.EÔ.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|                     d¦  «         |                     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Ô4FÐ)FÐ)Fà=Ð=Ð=Ð=Ø€EØð Ø�Š�XÑÔÐà	‡L‚L�ÑÔÐØ€Lr    Úextra_flagsc                 ó¦  — g }g }g }g }g }	g }
g }t          | |¦  «        \  }}|t          |¦  «        z   t          |¦  «        z   t          ¦   «         z   t	          | ¦  «        z   }|t          | ¦  «        z  }t          sJt          j        j	        r9t          | ¦  «        r*|                     d¦  «         |                     d¦  «         |                     d                     |¦  «        ¦  «         t          j        j        dk    rD|                     ddg¦  «         t          t           ¦  «        dk    r|                     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Ú   rH  rÔ   rÛ   )rü   r  r·  r"  rý  rt  ru  rv  rw  rx  ry  rz  Ú
opt_cflagsÚopt_ldflagss                 r   Úget_cpp_optionsr'  V  s  € ð  €KØ €LØ€FØ€GØ "€NØ€IØ"$Ðå6°|À\ÑRÔRÑ€J�ð 	Ý
˜WÑ
%Ô
%ñ	&å
  Ñ
-Ô
-ñ	.õ Ñ
Ô
ñ	õ % \Ñ
2Ô
2ñ		3ð ð Õ2°<Ñ@Ô@Ñ@€Kåð $�6Ô.Ô9ð $½iÈÑ>UÔ>Uð $Ø�Š�}Ñ%Ô%Ð%Ø�Š�{Ñ#Ô#Ð#à×Ò˜CŸHšH [Ñ1Ô1Ñ2Ô2Ð2åÔÔ0°IÒ=Ð=Ø×ÒÐ!4Ð6FÐ GÑHÔHÐHÝ#¥IÑ.Ô.°'Ò9Ð9Ø×#Ò#Ð$MÑNÔNÐNð 	ØØØ�+ÑØØØðð r    c                   óf   ‡ — 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.
    FTr   r£   r|  r·  r"  rå   rY   rý  r}  r~  r   Nc	                 ó  •— t          ¦   «                              ||||¬¦  «         |r|nt          ¦   «         | _        t	          | j        |p|p| |||¬¦  «        \  }	}
}}}}}t          | j        |	¦  «         t          | j        |
¦  «         t          | j        |¦  «         t          | j	        |¦  «         t          | j
        |¦  «         t          | j        |¦  «         t          | j        |¦  «         |                      ¦   «          d S )N)r|  rå   r}  r~  )rü   r  r"  r·  rý  )Úsuperrk   rä   r€  r'  rI  r�  r‚  rƒ  r„  r…  r†  r‡  r“  )rj   r|  r·  r"  rå   rY   rý  r}  r~  rt  ru  rv  rw  rx  ry  rz  Ú	__class__s                   €r   rk   zCppOptions.__init__’  s4  ø€ õ 	‰Œ×ÒØ%Ø/Ø%Ø'ð	 	ñ 	
ô 	
ð 	
ð &.ÐE˜˜Õ3CÑ3EÔ3EˆŒõ ØœØ%ÐF¨ÐF¸ÐGØ#Ø#Ø%ð
ñ 
ô 
ñ	
ØØØØØØØõ 	�TÔ&¨Ñ4Ô4Ð4Ý�TÔ'¨Ñ6Ô6Ð6Ý�T”\ 6Ñ*Ô*Ð*Ý�T”] GÑ,Ô,Ð,Ý�TÔ)¨>Ñ:Ô:Ð:Ý�T”_ iÑ0Ô0Ð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|                      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_definitionr5  ¿  s0   € Ø(Ð*CÐD€DÝÔ*ð 9Ø�ŠÐ7Ñ8Ô8Ð8Ø€Kr    c                  ó   — dgS )Nz" C10_USING_CUSTOM_GENERATED_MACROSr   r   r    r   Ú_use_custom_generated_macrosr7  Æ  s   € Ø0Ð1Ð1r    c                  ó†   — t           s9t          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>  Ê  sk   € Ýð ÝÔÑÔð 	ð"ð "ð "Ðõ
 ÔÑ!Ô! XÒ-Ð-Ø"Ø/Ø2ð'ñ Ð"ð &Ð%àˆIàˆ	r    r{  c                 ól  — g }g }g }g }t           r||||fS t          j        ¦   «         �r|                     d¦  «         |                     t          j        ¦  «         |                     t          j        ¦  «         |                     t          j        ¦  «         |                     t          j        ¦  «         |                     t          j	        ¦  «         |                     t          j
        ¦  «         |                     t          j        ¦  «         |                     t          j        ¦  «         |                     t          j        ¦  «         |                     d¦  «         |r
|st          }n$t          j                             t          ¦  «        }t%          | ¦  «        r†|                     d¦  «         |                     dt          j        z   ¦  «         |                     d¦  «         |                     d|› �¦  «         |                     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ü   r{  rå   rv  ru  rz  rw  Úlinker_scripts           r   Ú_setup_standard_sys_libsrP  Þ  sý  € ð
 €FØ €LØ"$ÐØ€GÝð ?Ø�|Ð%5°wÐ>Ð>åÔÑÔñ 8à�Š�jÑ!Ô!Ð!ð 	×Ò�KÔ5Ñ6Ô6Ð6Ø×Ò�KÔ6Ñ7Ô7Ð7Ø×Ò�KÔ6Ñ7Ô7Ð7Ø×Ò�KÔ2Ñ3Ô3Ð3Ø×Ò�KÔ6Ñ7Ô7Ð7Ø×Ò�KÔ;Ñ<Ô<Ð<Ø×Ò�KÔ?Ñ@Ô@Ð@Ø×Ò�KÔ5Ñ6Ô6Ð6Ø×Ò�KÔ<Ñ=Ô=Ð=Ø×Ò˜IÑ&Ô&Ð&àð 	=Ð-ð 	=Ý*ˆMˆMåœG×,Ò,­^Ñ<Ô<ˆMå�\Ñ"Ô"ð 	8Ø×#Ò#Ð$:Ñ;Ô;Ð;Ø×#Ò# E­KÔ,AÑ$AÑBÔBÐBØ�NŠN˜=Ñ)Ô)Ð)Ø�NŠNÐ9¨-Ð9Ð9Ñ:Ô:Ð:Ø�NŠN˜3¥Ô!6Ñ6Ñ7Ô7Ð7à�<Ð!1°7Ð:Ð:r    Úvec_isac                 ó:  — g }g }| t           k    r‰|                     d„ |                      ¦   «         D ¦   «         ¦  «         |                      ¦   «         g}t	          j        ¦   «         r0t          | ¦  «                             ¦   «         }d|› �d|› �d|› d�g}||fS )Nc              3   ó>   K  — | ]}t          j        |¦  «        V — Œd S r   rD  )r®   Úxs     r   rG  z0_get_build_args_of_chosen_isa.<locals>.<genexpr>  s,   è è € ÐFÐF¨1•d”m AÑ&Ô&ÐFÐFÐFÐFÐFÐFr    zCPU_CAPABILITY=ÚCPU_CAPABILITY_ÚHAVE_Ú_CPU_DEFINITION)r   rH  Úbuild_macroÚbuild_arch_flagsr
   rß   r�   Úupper)rQ  ÚmacrosÚbuild_flagsÚcaps       r   Ú_get_build_args_of_chosen_isar^  	  s¸   € Ø€FØ€KØ•/Ò!Ð!à�ŠÐFÐF°×0CÒ0CÑ0EÔ0EÐFÑFÔFÑFÔFÐFà×/Ò/Ñ1Ô1Ð2ˆåÔÑÔð 	Ý�g‘,”,×$Ò$Ñ&Ô&ˆCà' #Ð'Ð'Ø' #Ð'Ð'Ø,˜Ð,Ð,Ð,ðˆFð �;ÐÐr    Úinclude_pytorchc                 ó.  — ddl m}m} g } |¦   «         }t          j        j        rq|g}t          j        dk    r]t          j        ¦   «         sJ| 	                    ddg¦  «         t          r|                     d¦  «         |s|                     d¦  «         n‹g }t          j        j        dk    rtt          j        j        }|s
J d	¦   «         ‚t          |t          ¦  «        r|                     |¦  «         n,t          |t           ¦  «        sJ ‚| 	                    |¦  «         t          j        j        dk    r?t          j        j        s
J d
¦   «         ‚|                     t          j        j        ¦  «         t          r|                     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_extensionra  rb  r
   rÙ   Úlink_libtorchr3   r4   rß   rH  rÝ   rŽ   rÚ   Úaoti_shim_libraryrá   r�   rã   Úaoti_shim_library_path)r_  r{  ra  rb  ry  ru  rx  ri  s           r   Ú_get_torch_related_argsrk    sÃ  € ð HÐGÐGÐGÐGÐGÐGÐGà€IØ �=‘?”?€LåÔÔ(ð 4Ø(Ð)ˆÝŒ<˜8Ò#Ð#­FÔ,<Ñ,>Ô,>Ð#Ø×Ò˜g {Ð3Ñ4Ô4Ð4Ýð (Ø× Ò  Ñ'Ô'Ð'Øð 1Ø× Ò  Ñ0Ô0Ð0øàˆÝÔÔ4¸	ÒAÐAÝ &Ô 3Ô EÐà$ð ð Øpñô Ð$õ Ð+­SÑ1Ô1ð 4Ø× Ò Ð!2Ñ3Ô3Ð3Ð3å!Ð"3µTÑ:Ô:Ð:Ð:Ð:Ø× Ò Ð!2Ñ3Ô3Ð3åÔÔ0°IÒ=Ð=ÝÔ"Ô9ð 	
ð 	
ð <
ñ 	
ô 	
Ð9ð 	×Ò�fÔ1ÔHÑIÔIÐIåð "Ø×Ò˜Ñ!Ô!Ð!à˜¨Ð2Ð2r    c                  ó´  — t          t          j        d¦  «        ¦  «        } |                      ¦   «         sYt	          j        ¦   «         dk    rBt          t          j        d¦  «        ¦  «        }|j        j        dz                       ¦   «         } | dz                       ¦   «         s$t          j	        dt          | ¦  «        › �¦  «         t          | ¦  «        gS )NrA  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_dirsrw  H  sÂ   € Ý•yÔ)¨)Ñ4Ô4Ñ5Ô5€Kð ×ÒÑÔð E¥H¤OÑ$5Ô$5¸Ò$AÐ$AÝ•yÔ)¨(Ñ3Ô3Ñ4Ô4ˆØ”~Ô,¨yÑ8×BÒBÑDÔDˆØ˜*Ñ$×,Ò,Ñ.Ô.ð DÝŒÐBµ°KÑ0@Ô0@ÐBÐBÑCÔCÐCÝ�ÑÔÐÐr    c                  óÆ  — t          ¦   «         } t          j        dt          rdnd¬¦  «        }|�|                      |¦  «         t          rLt          t          t          j        dd¬¦  «        ¦  «        j        dz                       ¦   «         ¦  «        g}nt          j	        d¦  «        g}t          j        ¦   «         r|                      t          j        ¦  «         | |fS )NrA  ÚntÚposix_prefix)ÚschemeÚlibsÚLIBDIR)rw  ro  rp  rÝ   rŽ   r�   r   rq  rr  Úget_config_varr
   rß   r   rE  )Úpython_include_dirsÚpython_include_pathÚpython_lib_paths      r   Ú_get_python_related_argsr‚  U  sã   € Ý2Ñ4Ô4ÐÝ#Ô,Ø¥+ÐA˜$˜$°>ðñ ô Ðð Ð&Ø×"Ò"Ð#6Ñ7Ô7Ð7åð 	?åå�Ô+¨I¸dÐCÑCÔCÑDÔDÔKÈfÑTß’(‘*”*ñô ð
ˆˆõ %Ô3°HÑ=Ô=Ð>ˆåÔÑÔð ?Ø×"Ò"¥;Ô#=Ñ>Ô>Ð>à Ð/Ð/r    c                  óþ   — 	 d} t          j        |                      ¦   «         ¦  «                             d¦  «        }t	          t          j        |¦  «        ¦  «        dk    S # t           j        t          f$ r Y dS w xY w)Nzconda list llvm-openmp --jsonr  r   F)	r;   r<   rÏ   r  Úlenr²  Úloadsr=   r>   )Úcommandrg  s     r   Úis_conda_llvm_openmp_installedr‡  n  sz   € ðØ1ˆÝÔ(¨¯ª©¬Ñ9Ô9×@Ò@ÀÑHÔHˆÝ•4”:˜fÑ%Ô%Ñ&Ô&¨Ò*Ð*øÝÔ&Õ(9Ð:ð ð ð Øˆuˆuðøøøs   ‚AA" Á"A<Á;A<c                  ó  — 	 t          j        d¦  «        €dS t          j        g d¢¦  «                             d¦  «                             ¦   «         } t          j                             | ¦  «        }|| fS # t          j	        $ r Y dS w xY w)NÚbrewr¢   )r‰  z--prefixrd  r  )
rS   rT   r;   r<   r  r·   r5   r8   rN   r=   )Úlibomp_pathÚomp_availables     r   Úhomebrew_libomprŒ  x  s‘   € ðåŒ<˜ÑÔÐ'Ø�9õ
 Ô#Ð$BÐ$BÐ$BÑCÔCßŠV�F‰^Œ^ßŠU‰WŒWð 	õ œŸš {Ñ3Ô3ˆØ˜kÐ)Ð)øÝÔ%ð ð ð Øˆyˆyðøøøs   ‚A6 ˜AA6 Á6B	ÂB	Úomp_namec                 ór  — 	 t          j        | dg¦  «                             d¦  «        }t          j                             |                     ¦   «         |¦  «        }t          j                             |¦  «        r%dt          j        d<   t          j
        |¦  «         d S d S # t           j        $ r Y d S 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�  rg  Úomp_paths       r   Úperload_clang_libomp_winr•  �  sº   € ð	ÝÔ(¨,Ð8NÐ)OÑPÔP×WÒWØñ
ô 
ˆõ ”7—<’< §¢¡¤°Ñ:Ô:ˆÝŒ7�>Š>˜(Ñ#Ô#ð 	'Ø17�BŒJÐ-Ñ.ÝÔ˜XÑ&Ô&Ð&Ð&Ð&ð	'ð 	'øõ Ô%ð ð ð Øˆˆðøøøs   ‚BB# Â#B6Â5B6c                 ód   — dt           dt           dt          fd„}	 g d¢}|D ]} || |¦  «         Œd S )Nrü   Úlib_namer   c                 óH  — 	  t          j        | d|› �gt           j        ¬¦  «        j        t          Ž }|                     ¦   «         }t          j                             |¦  «        r%dt          j	        d<   t          j        |¦  «         dS n# t           j        $ r Y nw xY wdS )Nz-print-file-name=r\   r�  r�  TF)r;   r<   r  r  r  r‘  r5   r8   r’  rQ   r   r“  r=   )rü   r—  rg  r”  s       r   Ú_load_icx_built_in_lib_by_namez>perload_icx_libomp_win.<locals>._load_icx_built_in_lib_by_name�  s½   € ð	ð•ZÔ,ØÐ=°8Ð=Ð=Ð>Ý!Ô)ðñ ô ô Õ,ð.ˆFð —}’}‘”ˆHÝŒw�~Š~˜hÑ'Ô'ð Ø5;•”
Ð1Ñ2ÝÔ  Ñ*Ô*Ð*Ø�tðøõ Ô)ð 	ð 	ð 	ØˆDð	øøøàˆus   ‚BB ÂBÂB)zlibiomp5md.dllzsvml_dispmd.dllz
libmmd.dll)r�   rÃ   )rü   r™  Úpreload_listr—  s       r   Úperload_icx_libomp_winr›  ›  sr   € ðµSð ÅCð ÍDð ð ð ð ððð ð €Lð !ð ?ð ?ˆØ&Ð& |°XÑ>Ô>Ð>Ð>ð?ð ?r    c                 ó�	  — g }g }g }g }g }g }t           j        j        dk    r||||||fS t          �r£|                     d¦  «         |                     d¦  «         t          | ¦  «         }t          j        d¦  «        }|�Át          j         	                    |dd¦  «        }	t          j         
                    |	¦  «        }
|
rg|                     t          j         	                    |d¦  «        ¦  «         |                     t          j         	                    |d¦  «        ¦  «         nt          j        d¦  «         |p|
}|s|                     d	¦  «         t          j        d
¦  «        }|sè|�æt          ¦   «         }|rÖt          j         	                    |d¦  «        }|                     t          j         	                    |d¦  «        ¦  «         |                     |¦  «         t          j        ¦   «         j        dk    rRt          j         
                    t          j         	                    |d¦  «        ¦  «        r|                     d¦  «         |syt!          ¦   «         \  }}|rf|                     t          j         	                    |d¦  «        ¦  «         |                     t          j         	                    |d¦  «        ¦  «         �nët"          rÂ	 t%          | ¦  «        r<|                     d¦  «         |                     d¦  «         t'          | d¦  «         �n˜t)          | ¦  «        r;|                     d¦  «         |                     d¦  «         t+          | ¦  «         �nN|                     d¦  «         |                     d¦  «         �n"t          j        ¦   «         r†|                     t.          j        ¦  «         |                     d¦  «         |                     t          j                             t.          j        ¦  «        ¦  «         |                     d	¦  «         n‰t%          | ¦  «        r+|                     d¦  «         |                     d¦  «         nOt)          | ¦  «        r|                     d¦  «         n*|                     d¦  «         |                     d¦  «         ||||||fS )NrÖ   ÚXclangÚfopenmpÚ
OMP_PREFIXrA  zomp.hÚlibz-environment variable `OMP_PREFIX` is invalid.ÚompÚCONDA_PREFIXr<  zlibiomp5.dylibÚiomp5Úopenmprd  z
libomp.dllÚQiopenmpÚ
libiomp5mdzopenmp:experimentalz-Wp,-fopenmpÚgompÚfiopenmp)r
   rÙ   rÚ   Ú	_IS_MACOSrŽ   r  r5   r6   r8   r9   rN   rs  rt  r‡  Úunamerë  rŒ  rÝ   r  r•  r.  r›  rß   r   rD  ÚdirnameÚopenmp_lib_so)rü   rv  rw  Úinclude_dir_pathsÚlib_dir_pathsr|  rz  r‹  Ú
omp_prefixÚheader_pathÚ	valid_envÚconda_prefixÚconda_lib_pathrŠ  s                 r   Ú_get_openmp_argsr´  º  sa  € ð €FØ€GØ#%ÐØ!€MØ€DØ"$ÐåÔÔ0°IÒ=Ð=Ø�wÐ 1°=À$ÐHXÐXÐXÝñ \$à�Š�hÑÔÐØ�Š�iÑ Ô Ð õ ,¨LÑ9Ô9Ð9ˆõ ”Y˜|Ñ,Ô,ˆ
ØÐ!Ýœ'Ÿ,š, z°9¸gÑFÔFˆKÝœŸš {Ñ3Ô3ˆIØð OØ!×(Ò(­¬¯ª°jÀ)Ñ)LÔ)LÑMÔMÐMØ×$Ò$¥R¤W§\¢\°*¸eÑ%DÔ%DÑEÔEÐEÐEå”ÐMÑNÔNÐNØ)Ð6¨YˆMàð 	Ø�KŠK˜ÑÔÐõ ”y Ñ0Ô0ˆØð 
	) Ð!9Ý:Ñ<Ô<ˆMØð )Ý!#¤§¢¨l¸EÑ!BÔ!B�Ø!×(Ò(­¬¯ª°lÀIÑ)NÔ)NÑOÔOÐOØ×$Ò$ ^Ñ4Ô4Ð4å”8‘:”:Ô%¨Ò1Ð1µb´g·n²nÝ”G—L’L Ð1AÑBÔBñ7ô 7Ð1ð —K’K Ñ(Ô(Ð(ð ð 	GÝ)8Ñ):Ô):Ñ&ˆM˜;Øð GØ!×(Ò(­¬¯ª°kÀ9Ñ)MÔ)MÑNÔNÐNØ×$Ò$¥R¤W§\¢\°+¸uÑ%EÔ%EÑFÔFÐFùõ 
ð .$ð	õ �\Ñ"Ô"ð 	1Ø�MŠM˜(Ñ#Ô#Ð#Ø�KŠK˜Ñ!Ô!Ð!Ý$ \°<Ñ@Ô@Ð@Ñ@Ý Ñ-Ô-ð 		1Ø�MŠM˜*Ñ%Ô%Ð%Ø�KŠK˜Ñ%Ô%Ð%Ý" <Ñ0Ô0Ð0Ñ0ð
 �MŠM˜(Ñ#Ô#Ð#Ø�MŠMÐ/Ñ0Ô0Ð0Ñ0åÔÑÔð 	$Ø×$Ò$¥[Ô%?Ñ@Ô@Ð@à×#Ò# NÑ3Ô3Ð3Ø× Ò ¥¤§¢µÔ1JÑ!KÔ!KÑLÔLÐLà�KŠK˜ÑÔÐÐå˜Ñ&Ô&ð $à—’˜iÑ(Ô(Ð(Ø—’˜FÑ#Ô#Ð#Ð#Ý# LÑ1Ô1ð $Ø—’˜jÑ)Ô)Ð)Ð)à—’˜iÑ(Ô(Ð(Ø—’˜FÑ#Ô#Ð#à�7Ð-¨}¸dÐDTÐTÐTr    c                  óŒ   — g } g }t          j        ¦   «         r*t          j        d¦  «        g} |                     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ß   ro  r~  rŽ   )r®  r|  s     r   Ú_get_libstdcxx_argsr¶  '  sO   € ð  "€MØ€DÝÔÑÔð Ý"Ô1°(Ñ;Ô;Ð<ˆØ�Š�HÑÔÐà˜$ÐÐr    Úuse_mmap_weightsÚuse_mmap_weights_externalc                 óŽ   — g }| r|rt          d¦  «        ‚| r|                     d¦  «         n|r|                     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¸  r[  s      r   Úget_mmap_self_macrorº  4  sn   € ð €Fàð 
Ð5ð 
ÝØWñ
ô 
ð 	
ð ð ,Ø�ŠÐ&Ñ'Ô'Ð'Ð'Ø	"ð ,Ø�ŠÐ*Ñ+Ô+Ð+Ø€Mr    c                  óX   — ddl m}  g }| j        j        r|                     d¦  «         |S )Nr   )r
   z# AOT_INDUCTOR_USE_CACHING_ALLOCATOR)Útorch._inductorr
   rÙ   Úweight_use_caching_allocatorrŽ   )r
   r[  s     r   Úget_caching_allocator_macror¾  D  s?   € Ø&Ð&Ð&Ð&Ð&Ð&à€FØÔÔ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_  r{  )
r5  r7  rP  r^  rk  r‚  r´  r>  rº  r¾  )$rü   rQ  r_  r{  rå   r·  r¸  rt  ru  rv  rw  rx  ry  rz  Ú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Ô$GÐ!Ý.JÑ.LÔ.LÐ+õ 	! ¨xÐ9JÑKÔKñØØØ!Øõ +HÈÑ*PÔ*PÑ'€JÐ'õ 	 °È(ÐSÑSÔSñ	ØØØõ 2JÑ1KÔ1KÑ.ÐÐ.õ 	˜Ñ&Ô&ñØØØØØØõ !8Ñ 9Ô 9Ðå*Ð+;Ð=VÑWÔ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£   rQ  r_  r·  r{  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        |¦  «         |                      ¦   «          d S )N)r|  r·  r"  rå   rY   rý  r}  r~  )rü   rQ  r_  r{  rå   r·  r¸  )r+  rk   r‰  rÕ  r€  rI  r�  r‚  rƒ  r„  r…  r†  r‡  r“  )rj   rQ  r_  r·  r{  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Ô0Ð0Ý�T”] MÑ2Ô2Ð2Ý�TÔ)Ð+?Ñ@Ô@Ð@Ý�T”_ oÑ6Ô6Ð6Ý�TÔ+Ð-CÑDÔDÐ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!ð ð7!ð ˜c”]ð7!ð ð7!ð ð7!ð ð7!ð ð7!ð  
ð!7!ð 7!ð 7!ð 7!ð 7!ð 7!ð 7!ð 7!ð 7!ð 7!r    r×  c                  óÈ   — t          j        ¦   «         rHt          j        j        €9dt
          j        vr-dt
          j        vr!t          j        t
          j        d<   d S d S d S d S d S )NÚ	CUDA_HOMEÚ	CUDA_PATH)	r
   rß   rí  ÚversionÚhipr5   rQ   r   Úsdk_homer   r    r   Ú_set_gpu_runtime_envrã  ð  si   € åÔÑÔð7åŒMÔÐ%Ø�rœzÐ)Ð)Ø�rœzÐ)Ð)å"-Ô"6�Œ
�;ÑÐÐð7ð 7à%Ð%Ø)Ð)Ø)Ð)r    é   r8   c                 óä   — t          t          | ¦  «                             d¦  «        ¦  «        }|r|d                              ¦   «         j        S d| › �}t
                               |¦  «         d S )Nzlibcudart_static.ar   z%"libcudart_static.a" not found under )rã   r   ÚrglobÚresolverq  rO   rP   )r8   Úlib_dirsÚlog_msgs      r   Ú_find_libcudart_staticrê  ú  si   € å•D˜‘J”J×$Ò$Ð%9Ñ:Ô:Ñ;Ô;€HØð ,Ø˜Œ{×"Ò"Ñ$Ô$Ô+Ð+Ø<°dÐ<Ð<€GÝ‡H‚HˆWÑÔÐØˆ4r    Údll_pathÚdef_pathÚimport_lib_pathc           	      óf  — t           j                             | ¦  «        }t          |d¦  «        5 }t	          j        dd| g|t          j        d¬¦  «         ddd¦  «         n# 1 swxY w Y   t	          j        dd|d	|d
|gt          j        d¬¦  «         t                               d||¦  «         dS )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   rM  r  r;   rô   rV   rO   rP   )rë  rì  rí  Údll_nameÚdef_files        r   Ú_gen_mingw_import_librõ    s  € åŒw×Ò Ñ)Ô)€HÝ	ˆh˜Ñ	Ô	ð 
 ÝŒØ�s˜HÐ%ØÝ”?Øð		
ñ 	
ô 	
ð 	
ð
ð 
ð 
ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
øøøð 
ð 
ð 
ð 
õ „Nà(ØØØØØØð	
õ ŒØðñ ô ð õ ‡H‚HÐ8¸/È8ÑTÔTÐTÐTÐTs   °&A"Á"A&Á)A&z§#include <stdint.h>
uint64_t __security_cookie = 0x00002B992DDFA232ULL;
void __security_check_cookie(uint64_t cookie) { (void)cookie; }
void __GSHandlerCheck(void) {}
c                 ó  — t           j                             | d¦  «        }t           j                             |¦  «        rdS d}d}	 t           j                             | d¦  «        }t           j                             | d¦  «        }t	          |d¦  «        5 }|                     t          ¦  «         ddd¦  «         n# 1 swxY w Y   t                               dd	¦  «        }t          j
        |d
|d|gt          j        d¬¦  «         t                               dd¦  «        }t          j
        |d||gt          j        d¬¦  «         t                               d|¦  «         	 ||fD ]7}|r3t           j                             |¦  «        rt          j        |¦  «         Œ8dS # t          t          j        f$ r� t                               dd¬¦  «         t           j                             |¦  «        rt          j        |¦  «         Y ||fD ]7}|r3t           j                             |¦  «        rt          j        |¦  «         Œ8dS w xY w# ||fD ]7}|r3t           j                             |¦  «        rt          j        |¦  «         Œ8w 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   rY  r>   rº   Úwarning)rû   Ú	stubs_libÚsrc_pathr  r  Ú	mingw_gccÚmingw_ars          r   Ú_create_msvc_gs_stubs_libr  .  sØ  € õ ”—’˜ZÐ)=Ñ>Ô>€IÝ	„w‡~‚~�iÑ Ô ð Øˆà€HØ€HðÝ”7—<’< 
Ð,>Ñ?Ô?ˆÝ”7—<’< 
Ð,>Ñ?Ô?ˆÝ�(˜CÑ Ô ð 	+ AØ�GŠGÕ)Ñ*Ô*Ð*ð	+ð 	+ð 	+ñ 	+ô 	+ð 	+ð 	+ð 	+ð 	+ð 	+ð 	+øøøð 	+ð 	+ð 	+ð 	+õ ×%Ò% e¨UÑ3Ô3ˆ	ÝŒØ˜˜h¨¨hÐ7Ý”?Øð	
ñ 	
ô 	
ð 	
õ
 ×$Ò$ U¨DÑ1Ô1ˆÝŒØ�u˜i¨Ð2Ý”?Øð	
ñ 	
ô 	
ð 	
õ
 	�ŠÐ4°iÑ@Ô@Ð@Øð ˜HÐ%ð 	ð 	ˆAØð •R”W—^’^ AÑ&Ô&ð Ý”	˜!‘”�øð	ð 	øõ �zÔ<Ð=ð ð ð Ý�ŠØ5Øð 	ñ 	
ô 	
ð 	
õ Œ7�>Š>˜)Ñ$Ô$ð 	!ÝŒI�iÑ Ô Ð Øà˜HÐ%ð 	ð 	ˆAØð •R”W—^’^ AÑ&Ô&ð Ý”	˜!‘”�øð	ð 	ðøøøøð ˜HÐ%ð 	ð 	ˆAØð •R”W—^’^ AÑ&Ô&ð Ý”	˜!‘”�øð	øøøsK   ÁAF$ ÂB>Â2F$ Â>CÃF$ ÃCÃBF$ Æ$A%I	È	I ÉI	É	I É>J
rx  c                 óR  — ddl }t          j                             d¦  «        }|st                               d¦  «         g S | D ]^}t          j                             t          j                             |d¦  «        ¦  «        rt                               d|¦  «         g c S Œ_t          j                             |dd¦  «        }t          j         	                    |¦  «        s t          j                             |d¦  «        }|                      t          j                             |d	¦  «        ¦  «        }d}| D ]�}t          j         	                    |¦  «        r`t          j
        |t          j        ¦  «        rAt          j                             t          j                             |d
¦  «        ¦  «        r|} nŒ‚|s3t                               d|¦  «         |�t          |¦  «        }|r|gS g S |€t                               d| ¦  «         g S |d         }t          j                             |¦  «        }	t          j                             ||	                     dd¦  «        ¦  «        }
t          j                             |d¦  «        }	 t!          ||
|¦  «         g S # t"          t$          j        f$ rq t                               dd¬¦  «         |
|fD ]5}t          j                             |¦  «        rt          j        |¦  «         Œ6t          |¦  «        }|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  rM  r(   rõ  r>   r;   rº   rY  )rx  r  Úwindows_cuda_homeÚlib_dirÚbin_dirÚdll_candidatesrû   Ústub_librë  ró  rì  rí  r  s                r   Ú_ensure_mingw_cudart_import_libr  ]  s  € ð €K€K€Kåœ
ŸšÐ':Ñ;Ô;ÐØð Ý�	Š	ØTñ	
ô 	
ð 	
ð ˆ	à!ð ð ˆÝŒ7�>Š>�"œ'Ÿ,š, w°Ñ>Ô>Ñ?Ô?ð 	Ý�IŠIÐMÈwÑWÔWÐWØˆIˆIˆIð	õ
 Œg�lŠlÐ,¨e°UÑ;Ô;€GÝŒ7�=Š=˜Ñ!Ô!ð 9Ý”'—,’,Ð0°%Ñ8Ô8ˆØ—Y’Y�rœwŸ|š|¨GÐ5EÑFÔFÑGÔG€Nð €JØ!ð ð ˆÝŒ7�=Š=˜Ñ!Ô!ð 	¥b¤i°½¼Ñ&AÔ&Að 	ÝŒw�~Š~�bœgŸlšl¨7°LÑAÔAÑBÔBð Ø$�
Ø�øàð Ý�Šð>àñ	
ô 	
ð 	
ð Ð!Ý0°Ñ<Ô<ˆHØð "Ø �zÐ!Øˆ	àÐÝ�Šð9ð ñ	
ô 	
ð 	
ð ˆ	à˜aÔ €HÝŒw×Ò Ñ)Ô)€HåŒw�|Š|˜J¨×(8Ò(8¸ÀÑ(HÔ(HÑIÔI€HÝ”g—l’l :¨}Ñ=Ô=€OðÝ˜h¨°/ÑBÔBÐBØˆ	øÝ�zÔ<Ð=ð ð ð Ý�Šð-àð 	ñ 	
ô 	
ð 	
ð
 ˜OÐ,ð 	ð 	ˆAÝŒw�~Š~˜aÑ Ô ð Ý”	˜!‘”�øå,¨ZÑ8Ô8ˆØð 	Ø�:ÐÐÐØˆ	ˆ	ˆ	ðøøøs   ÊJ ÊB L&Ì!L&Ì%L&Úlpathsc                 óL  — t          | ¦  «        D ]—\  }}dt          j        v r„|                     t          j        d         ¦  «        r_t	          |¦  «        }|€ŒJt          |¦  «        | |<   |dz  }|                     ¦   «         r"|                      t          |¦  «        ¦  «         Œ˜t          j	        ¦   «         ret          t          j        ¦  «        dz  }|                     ¦   «         r7t          |¦  «        | vr(|                      t          |¦  «        ¦  «         d S d S d S d S )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Ô)QÐ$Ý#9¸$Ñ#?Ô#?ˆGØˆØÝ˜G™œˆF�1‰IØ Ñ(ˆHØ�ŠÑ Ô ð -Ø—’�c (™mœmÑ,Ô,Ð,øõ ÔÑÔð )Ý�Ô+Ñ,Ô,¨wÑ6ˆØ�?Š?ÑÔð 	)¥ X¡¤°fÐ!<Ð!<Ø�MŠM�#˜h™-œ-Ñ(Ô(Ð(Ð(Ð(ð)ð )ð	)ð 	)Ð!<Ð!<r    c                 óÀ   — t          j        ¦   «         rFt          j        }t          j                             |¦  «        r|| vr|                      |¦  «         d S d S d S d S r   )r
   rß   r   r  r5   r8   r­   rŽ   )r  r  s     r   Ú_transform_rocm_pathsr  Ê  sm   € åÔÑÔð #ÝÔ%ˆÝŒ7�=Š=˜Ñ!Ô!ð 	# g°VÐ&;Ð&;Ø�MŠM˜'Ñ"Ô"Ð"Ð"Ð"ð#ð #ð	#ð 	#Ð&;Ð&;r    Údevice_typer|  c                 ó\  — g }g }g }g }g }g }g }	t          j        ¦   «         r5dt          j        vr'dt          j        vrt          j        t          j        d<   t          ¦   «          ddlm}
 |
 	                    | t           j
        j        du ¦  «        }t           j
        j        }|
                     | |t           j
        j        ¬¦  «        }| dk    rß|                     t          j        j        rdnd	¦  «         t          j        j        �Gt          j        ¦   «         s|s|d
gz  }n|dgz  }|                     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¿|                     d¦  «         d}t*          rnt          j        d¦  «        }|€t/          |¦  «        ‚|t          j                             |d¦  «        gz  }|t          j                             |d¦  «        gz  }n$|dgz  }t5          d¦  «        st/          |¦  «        ‚|ddgz  }|r|dgz  }| dk    r|                     d¦  «         t          j        ¦   «         r^|                     t          j        ¦  «         |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_PATHrA  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  ra  rÙ   rh  Úlibrary_pathsrÚ   rŽ   rí  rà  rá  r  r  r  rÝ   r6   r"  r8   r9   r   Úsdk_includer¶  Úcustom_op_libs)r  r{  r|  rt  ru  rv  rw  rx  ry  rz  r  rh  Ú
extra_libsÚxpu_error_stringÚze_rootÚstdcxx_lib_dir_pathsÚstdcxx_libss                    r   Úget_cpp_torch_device_optionsr0  Ò  s¯  € ð  €KØ €LØ€FØ€GØ "€NØ€IØ"$ÐåÔÑÔð7à�rœzÐ)Ð)Ø�rœzÐ)Ð)å"-Ô"6�Œ
�;ÑåÑÔÐØ)Ð)Ð)Ð)Ð)Ð)à ×.Ò.Ø•VÔ(Ô6¸$Ð>ñô €Lõ Ô'Ô5€MØ"×0Ò0ØØ(Ý$Ô1ÔGð 1ñ ô €Nð
 �fÒÐØ×Ò­%¬-Ô*;ÐL˜;˜;ÀÑMÔMÐMåŒ=ÔÐ(ÝÔÑ!Ô!ð +¨ð +Ø˜j˜\Ñ)�	�	à˜k˜]Ñ*�	Ø×ÒÐ6Ñ7Ô7Ð7Ý! .Ñ1Ô1Ð1Ð1åÔÑ!Ô!ð 4¨ð 4Ø˜f˜XÑ%�	�	à˜f lÐ3Ñ3�	ÝÔ"Ô8¸IÒEÐEÝ<¸^ÑLÔL�
Ø˜h˜Z¨*Ñ4Ñ4�	Ý! .Ñ1Ô1Ð1à�eÒÐØ×Ò˜:Ñ&Ô&Ð&ðZð 	õ ð 
	0Ý”iÐ 8Ñ9Ô9ˆGØˆÝÐ.Ñ/Ô/Ð/Ø�RœWŸ\š\¨'°9Ñ=Ô=Ð>Ñ>ˆLØ�rœwŸ|š|¨G°UÑ;Ô;Ð<Ñ<ˆNˆNð �}�oÑ%ˆFÝ Ñ,Ô,ð 0ÝÐ.Ñ/Ô/Ð/à�k 6Ð*Ñ*ˆ	Øð 	'Ø˜+˜Ñ&ˆIà�eÒÐØ×Ò˜:Ñ&Ô&Ð&åÔÑÔð %Ø×Ò�KÔ3Ñ4Ô4Ð4àð 	V˜ vÒ-Ð-ÝŒ}Ô Ð(Ø#ð Và(TÐ'UÐ$à˜%ÒÐõ $Ñ%Ô%ñØ$ØàÐ2Ñ2ˆNØ˜Ñ$ˆIåÔÔ)ð 8Ø•VÔ(Ô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£   rQ  r_  r  r{  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
        |¦  «         |                      ¦   «          d S )N)rQ  r_  r{  r|  rå   r·  r¸  r"  rý  r}  r~  rY   )r  r{  r|  )r+  rk   r0  rI  r�  r‚  rƒ  r„  r…  r†  r‡  r“  )rj   rQ  r_  r  r{  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  sL  ø€ õ" 	‰Œ×ÒØØ+ØØ%Ø/Ø-Ø&?Ø#Ø%Ø%Ø'Øð 	ñ 	
ô 	
ð 	
ð )+ÐØ)+ÐØ#%ˆØ$&ˆØ+-ÐØ&(ÐØ-/Ðõ )Ø#ØØ%ð
ñ 
ô 
ñ	
ØØØØØ!ØØ#õ 	�TÔ&Ð(:Ñ;Ô;Ð;Ý�TÔ'Ð)<Ñ=Ô=Ð=Ý�T”\ =Ñ1Ô1Ð1Ý�T”] NÑ3Ô3Ð3Ý�TÔ)Ð+@ÑAÔAÐAÝ�T”_Ð&6Ñ7Ô7Ð7Ý�TÔ+Ð-DÑEÔEÐEØ×ÒÑ Ô Ð Ð Ð r    c                 óv  •— t          ¦   «                              ¦   «          t          j        ¦   «         r‚t	          ¦   «         \  }}t          |¦  «        dk    sJ d|› �¦   «         ‚|d         | j        v rD| j                             |d         ¦  «         | j                             |d         ¦  «         d S d S d S )Nr)   zPython lib dirs: r   )	r+  r“  r
   rß   r‚  r„  r…  rY  rŽ   )rj   ró   Úpython_lib_dirsr,  s      €r   r“  z'CppTorchDeviceOptions._finalize_options‰  sÌ   ø€ Ý‰Œ×!Ò!Ñ#Ô#Ð#ÝÔÑÔð 	@õ ":Ñ!;Ô!;ÑˆAˆÝ�Ñ'Ô'¨1Ò,Ð,Ð,Ð.SÀ/Ð.SÐ.SÑ,Ô,Ð,Ø˜qÔ! TÔ%9Ð9Ð9ØÔ$×+Ò+¨O¸AÔ,>Ñ?Ô?Ð?ØÔ$×+Ò+¨O¸AÔ,>Ñ?Ô?Ð?Ð?Ð?ð	@ð 	@ð
 :Ð9r    r™   )rš   r›   rœ   r¶  r   r   rÃ   r�   r   rk   r“  r-  r.  s   @r   r2  r2  D  s9  ø€ € € € € ðð ð *Ø %Ø!ØØ"Ø"'Ø!&Ø*/ØØ%'Ø"Ø"Ø#Øð<!ð <!àð<!ð ð<!ð ð	<!ð
 ð<!ð ð<!ð  ð<!ð ð<!ð $(ð<!ð ð<!ð ˜c”]ð<!ð ð<!ð ð<!ð ð<!ð ð<!ð  
ð!<!ð <!ð <!ð <!ð <!ð <!ð|	@ð 	@ð 	@ð 	@ð 	@ð 	@ð 	@ð 	@ð 	@ð 	@r    r2  rc   c                 óÊ   — t           j                             | ¦  «        }t           j                             |¦  «        \  }}t           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   rM  Úsplitextr«  )rc   Úname_and_extr^  Ú_extÚdirs        r   Ú&get_name_and_dir_from_output_file_pathrB  •  sO   € õ" ”7×#Ò# IÑ.Ô.€LÝ”×!Ò! ,Ñ/Ô/�J€Dˆ$Ý
Œ'�/Š/˜)Ñ
$Ô
$€Cà�ˆ9Ðr    c                   ó   — 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dS )Ú
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                  ó6   — 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)   € å)Ð4�F�F¨uˆ	Ý +Ð5�u�u°ˆØ˜,Ð&Ð&r    c                  ó6   — t           rdnd} t           rdnd}| |fS )Nz.objrî   z/c /Foz-c -orº  rG  s     r   Ú__get_object_flagszCppBuilder.__get_object_flagsÄ  s)   € å)Ð3�F�F¨tˆ	Ý#.Ð;�x�x°GˆØ˜,Ð&Ð&r    c                  óR   — t           st          ¦   «         sdnd} t           rdnd}| |fS )Nú.pchú.gchz/Fpr  )rÝ   r0  rG  s     r   Ú__get_precompiled_header_flagsz)CppBuilder.__get_precompiled_header_flagsÊ  s2   € å)ÐEµ±´ÐE�F�F¸vˆ	Ý +Ð5�u�u°ˆØ˜,Ð&Ð&r    c                  ó$   — d} t           rdnd}| |fS )Nz.iz/EP /Pz-E -P -orº  rG  s     r   Ú__get_preprocessor_output_flagsz*CppBuilder.__get_preprocessor_output_flagsÐ  s    € àˆ	Ý#.Ð>�x�x°JˆØ˜,Ð&Ð&r    r£   r^  ÚsourcesÚBuildOptionrû   Nc                 óv  — d| _         d| _        d| _        d| _        d| _        d| _        d| _        d| _        g | _        d| _	        d| _
        d| _        d| _        || _        t          j        j        pd| _        || _        |                     ¦   «         | _         |                     ¦   «         | _        |                     ¦   «         | _        || _	        |                     ¦   «         | _        |                     ¦   «         | _        |                     ¦   «         | _        t9          | j        | j        | j        f¦  «        dk    sJ ‚| j        p| j        p| j         | _        t<          r| j        r
J d¦   «         ‚| j        r|                      ¦   «         \  }}nU| j        r|                       ¦   «         \  }}n6| j        r|  !                    ¦   «         \  }}n|  "                    ¦   «         \  }}tF          j$         %                    | j	        | j        › |› �¦  «        | _
        | j        r$tF          j$         &                    | j
        ¦  «        n| j
        }t<          r| j        r|| _'        n|› |› �| _'        n|› d|› �| _'        tQ          |tR          ¦  «        r|g}t          j*        ¦   «         r'| j        r tW          |¦  «        | _        d„ |D ¦   «         }| j        r^tY          |¦  «        dk    sJ ‚d|d	         › �| _-        | j        r1t]          |                     ¦   «         ¦  «        r| xj        d
z  c_        nd %                    |¦  «        | _-        | /                    ¦   «         D ]2}t<          r| xj        d|› d�z  c_        Œ| xj        d|› d�z  c_        Œ3| 0                    ¦   «         D ]2}	t<          r| xj        d|	› d�z  c_        Œ| xj        d|	› d�z  c_        Œ3|j1        x}
rft<          rtd           3                    d|
¦  «         nCd|
› d�| _        | j        r1t]          |                     ¦   «         ¦  «        r| xj        dz  c_        | 4                    ¦   «         D ]D}t<          r| xj        d|› d�z  c_        Œ| xj        dtk          j6        |¦  «        › d�z  c_        ŒE| 7                    ¦   «         D ]2}t<          r| xj        d|› d�z  c_        Œ| xj        d|› d�z  c_        Œ3| 8                    ¦   «         D ]2}t<          r| xj        d|› d�z  c_        Œ| xj        d|› d�z  c_        Œ3| 9                    ¦   «         D ]2}t<          r| xj        d|› d�z  c_        Œ| xj        d|› d�z  c_        Œ3|  :                    | ;                    ¦   «         ¦  «        D ]}| xj        |› d�z  c_        Œd S )Nr£   FÚ
aoti_modelr)   z/Cannot currently precompile headers on Windows!rï   c                 óL   — g | ]!}t           j                             |¦  «        ‘Œ"S r   )r5   r8   rM  )r®   r”   s     r   r±   z'CppBuilder.__init__.<locals>.<listcomp>+	  s(   € Ð<Ð<Ð<¨q•r”w×'Ò'¨Ñ*Ô*Ð<Ð<Ð<r    z-x c++-header r   z- -relocatable-pch -Xclang -fno-pch-timestamp rp  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   rM  Ú_outputrá   r�   rß   rã   r„  Ú_sources_argsr  r�  r˜  rˆ  rO   rý  rš  re  ÚquoterŸ  r¡  r£  Ú_stage_passthrough_pathsr¥  )rj   r^  rS  rT  rû   Úfile_extrI  Úrelative_target_fileÚcflagÚ
definitionrˆ  Úinc_dirÚldflagr
  r   Úpassthrough_args                   r   rk   zCppBuilder.__init__Ö  sä  € ð ˆŒØˆÔØ!#ˆÔØ"$ˆÔØˆÔØ$&ˆÔ!Ø!ˆÔØ,.ˆÔ)ð #%ˆÔØˆÔØˆÔà(-ˆÔØ$ˆŒàˆŒ
åÔÔ>ÐNÀ,ð 	Ôð
 )ˆÔØ$×1Ò1Ñ3Ô3ˆŒØ"-×"CÒ"CÑ"EÔ"EˆÔØ$×1Ò1Ñ3Ô3ˆŒà%ˆÔà(×9Ò9Ñ;Ô;ˆÔØ(×9Ò9Ñ;Ô;ˆÔØ)×;Ò;Ñ=Ô=ˆÔå�DÔ&¨Ô(:¸DÔ<OÐPÑQÔQÐUVÒVÐVÐVÐVàÔÐK $Ô"4ÐK¸Ô8Kð
ˆŒõ ð 	
 dÔ&8ð 	
ð 	
Ø=ñ	
ô 	
Ð8ð Ôð 	FØ%)×%<Ò%<Ñ%>Ô%>Ñ"ˆH�l�lØÔð 	FØ%)×%HÒ%HÑ%JÔ%JÑ"ˆH�l�lØÔ ð 	FØ%)×%IÒ%IÑ%KÔ%KÑ"ˆH�l�là%)×%CÒ%CÑ%EÔ%EÑ"ˆH�lÝœGŸLšL¨Ô)9¸d¼jÐ;TÈ(Ð;TÐ;TÑUÔUˆÔð Ô&ð#�BŒG×Ò˜TÔ.Ñ/Ô/Ð/àÔ"ð 	õ
 ð 	DØÔ"ð Gà+�”�à".ÐFÐ0DÐFÐF�”�à*ÐCÐCÐ-AÐCÐCˆDŒLå�g�sÑ#Ô#ð 	 Ø�iˆGõ ÔÑÔð 	= $Ô"9ð 	=õ '+¨7¡m¤mˆDÔ#Ø<Ð<°GÐ<Ñ<Ô<ˆGàÔð 
	3Ý�w‘<”< 1Ò$Ð$Ð$Ð$à!>°'¸!´*Ð!>Ð!>ˆDÔØÔ&ð U­9°[×5MÒ5MÑ5OÔ5OÑ+PÔ+Pð Uð Ð!Ô!Ð%TÑTÐ!Ô!øà!$§¢¨'Ñ!2Ô!2ˆDÔà ×+Ò+Ñ-Ô-ð 	2ð 	2ˆEÝð 2ØÐ!Ô! \¨ \ \ \Ñ1Ð!Ô!Ð!àÐ!Ô! \¨ \ \ \Ñ1Ð!Ô!Ð!à%×5Ò5Ñ7Ô7ð 	>ð 	>ˆJÝð >ØÐ&Ô&Ð*=°
Ð*=Ð*=Ð*=Ñ=Ð&Ô&Ð&àÐ&Ô&Ð*=°
Ð*=Ð*=Ð*=Ñ=Ð&Ô&Ð&à!,Ô!?Ð?Ðð 	GÝð GÝ—’Ø_Ø&ñô ð ð ð
 +LÐ6HÐ*KÐ*KÐ*K�Ô'ØÔ*ð G­y¸×9QÒ9QÑ9SÔ9SÑ/TÔ/Tð Gð Ð%Ô%Ð)FÑFÐ%Ô%à"×3Ò3Ñ5Ô5ð 	Hð 	HˆGÝð HØÐ'Ô'Ð+=°'Ð+=Ð+=Ð+=Ñ=Ð'Ô'Ð'àÐ'Ô'Ð+Gµ´¸GÑ0DÔ0DÐ+GÐ+GÐ+GÑGÐ'Ô'Ð'à!×-Ò-Ñ/Ô/ð 	4ð 	4ˆFÝð 4ØÐ"Ô" m¨& m m mÑ3Ð"Ô"Ð"àÐ"Ô" m¨& m m mÑ3Ð"Ô"Ð"à"×5Ò5Ñ7Ô7ð 	=ð 	=ˆGÝð =ØÐ)Ô)Ð-E¸'Ð-EÐ-EÐ-EÑEÐ)Ô)Ð)àÐ)Ô)¨_°'¨_¨_¨_Ñ<Ð)Ô)Ð)à×,Ò,Ñ.Ô.ð 	4ð 	4ˆCÝð 4ØÐ$Ô$¨¨C¨¨¨Ñ7Ð$Ô$Ð$àÐ$Ô$¨¨S¨¨¨Ñ3Ð$Ô$Ð$à#×<Ò<Ø×,Ò,Ñ.Ô.ñ 
ô  
ð 	Gð 	GˆOð Ð-Ô-°OÐ1FÐ1FÐ1FÑFÐ-Ô-Ð-ð	Gð 	Gr    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   rS  Úinclude_dirs_argsÚdefinitions_argsÚcflags_argsÚldflags_argsÚlibraries_argsÚlibraries_dirs_argsrz  rg  r   c
                 óâ   •— t           r;| › d|› d|› d|› d|› d|› d|	› �}
‰j        r|
d|› d|› d|› �z  }
t          |
¦  «        }
n+| › d|› d|› d|› d|› d|› d|	› �}
‰j        r|
d|› d|› d|› �z  }
|
S )Nrï   z /LD /link )rÝ   rg  rÞ   )rY   rS  rx  ry  rz  r{  r|  r}  rz  rg  r¼   rj   s              €r   Úformat_build_commandz9CppBuilder.get_command_line.<locals>.format_build_commands	  sT  ø€ õ ð Uð  ð =ð =Ð"3ð =ð =Ð6Fð =ð =Èð =ð =Øð=ð =Ø!1ð=ð =Ø4:ð=ð =ð ð ”=ð _ØÐ^Ð)<Ð^Ð^¸~Ð^Ð^ÐP\Ð^Ð^Ñ^�CÝ.¨sÑ3Ô3��ð  ð Gð G 'ð Gð GÐ,<ð Gð G¸{ð Gð GØ(ðGð GØ+;ðGð GØ>DðGð Gð ð ”=ð UØÐT˜|ÐTÐT¨nÐTÐTÐ?RÐTÐTÑT�CØˆJr    )
rY   rS  rx  ry  rz  r{  r|  r}  rz  rg  )r�   r€  rm  rZ  rY  rX  r[  r]  r\  r^  rl  )rj   r  Úcommand_lines   `  r   Úget_command_linezCppBuilder.get_command_liner	  sæ   ø€ ð	Ýð	åð	õ  #ð	õ "ð		õ
 ð	õ ð	õ  ð	õ "%ð	õ "ð	õ ð	õ ð	ð 	ð 	ð 	ð 	ð 	ð> ,Ð+Ø”^ØÔ&Ø"Ô5Ø!Ô3ØÔ)ØÔ+ØÔ/Ø $Ô 9Ø!Ô>Ø”<ð
ñ 
ô 
ˆð Ðr    c                 ó*   — t          | j        ¦  «        S r   )rÞ   ra  r{   s    r   Úget_target_file_pathzCppBuilder.get_target_file_path 	  s   € Ý'¨Ô(9Ñ:Ô:Ð:r    r   c                 ó&  — t          j        ¦   «         r| j        s|S g }|D ]ï}t          j        |¦  «        }g }|D ]¢}t
          j                             |¦  «        rlt
          j                             |¦  «        rM| j	         
                    |¦  «         | 
                    t
          j                             |¦  «        ¦  «         Œ�| 
                    |¦  «         Œ£| 
                    d                     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   ó>   K  — | ]}t          j        |¦  «        V — Œd S r   )re  rn  )r®   Úts     r   rG  z6CppBuilder._stage_passthrough_paths.<locals>.<genexpr>¶	  s*   è è € Ð%IÐ%I¸¥e¤k°!¡n¤nÐ%IÐ%IÐ%IÐ%IÐ%IÐ%Ir    )r
   rß   rŠ  re  rÏ   r5   r8   Úisabsr’  r_  rŽ   rM  r9   )rj   r   Ú	rewrittenÚargÚtokensÚ
new_tokensÚtoks          r   ro  z#CppBuilder._stage_passthrough_paths£	  s  € õ Ô Ñ"Ô"ð 	 tÔ'>ð 	ØˆKØˆ	Øð 		Kð 		KˆCÝ”[ Ñ%Ô%ˆFØˆJØð +ð +�Ý”7—=’= Ñ%Ô%ð +­"¬'¯.ª.¸Ñ*=Ô*=ð +ØÔ+×2Ò2°3Ñ7Ô7Ð7Ø×%Ò%¥b¤g×&6Ò&6°sÑ&;Ô&;Ñ<Ô<Ð<Ð<à×%Ò% cÑ*Ô*Ð*Ð*Ø×Ò˜SŸXšXÐ%IÐ%I¸jÐ%IÑ%IÔ%IÑIÔIÑJÔJÐJÐJØÐr    c                 óx  ‡‡— t          d¦  «        5  t          j        |                      ¦   «         ¦  «        }	 | j        }t
          j                             t          d¦  «        }t          j
        ¦   «         5 }t          j        t          t
          j                             |d¦  «        ¦  «         | j        D ]R}t          j        |t
          j                             |t
          j                             |¦  «        ¦  «        ¦  «         ŒSt
          j                             |d¦  «        }t          j        ||¦  «         | j        j        Š‰rót
          j                             ‰¦  «        rÔt(          st+          ¦   «         sdnd}‰|z   }t
          j                             ‰¦  «        Št          j        ‰t
          j                             |‰¦  «        ¦  «         t
          j                             |¦  «        r6t          j        |t
          j                             |‰|z   ¦  «        ¦  «         ˆˆfd„|D ¦   «         }| j        s!‰r(t
          j                             ‰¦  «        r	ddg|d	d	…<   t/          ||t
          j                             |¦  «        t0          ¬
¦  «        }	t
          j                             |¦  «        rt          j        |¦  «         t          j        |	|¦  «         |                     d¦  «        rt          j        |d¦  «         n*|                     d¦  «        rt          j        |d¦  «         d d d ¦  «         n# 1 swxY w Y   nE# t:          j        $ r3}
t?          j         ||
j!         "                    d¦  «        ¦  «        |
‚d }
~
ww xY wd d d ¦  «         d S # 1 swxY w Y   d S )Nrl  rA  z	script.ldrN  rO  c                 ó$   •— g | ]}|‰k    r‰n|‘ŒS r   r   )r®   r‰  Úpch_basenameÚ
pch_headers     €€r   r±   z.CppBuilder.build_fbcode_re.<locals>.<listcomp>Ú	  s7   ø€ ð #ð #ð #à #ð -0°:Ò,=Ð,=˜L˜LÀ3ð#ð #ð #r    z	-isysrootr}   r)   )Úexception_classrî   i¤  rF  ií  r¦   )#r	   re  rÏ   r�  ra  r5   r8   r9   Ú_TORCH_PATHÚtempfileÚTemporaryDirectoryrS   r>  rL  r_  rM  Úcopytreere  rˆ  r’  rÝ   r0  rŒ  r   r   rN   rY  ÚendswithÚchmodr;   rº   r   rf  rg  r  )rj   r†  Úoutput_pathÚtorch_includes_pathÚtmp_dirÚsrcÚdest_include_pathÚpch_extÚpch_compiledÚtmp_output_pathr_   r�  r�  s              @@r   Úbuild_fbcode_rezCppBuilder.build_fbcode_re¹	  s  øø€ õ ˜.Ñ)Ô)ð >	Tð >	TÝ”k $×"7Ò"7Ñ"9Ô"9Ñ:Ô:ˆGð<TØ"Ô/�õ ')¤g§l¢lµ;À	Ñ&JÔ&JÐ#ÝÔ0Ñ2Ô2ð 45°gå”K¥µ´·²¸WÀkÑ0RÔ0RÑSÔSÐSØ#Ô6ð Wð W˜Ýœ C­¬¯ª°g½r¼w×?OÒ?OÐPSÑ?TÔ?TÑ)UÔ)UÑVÔVÐVÐVÝ(*¬¯ª°W¸iÑ(HÔ(HÐ%Ý”OÐ$7Ð9JÑKÔKÐKð
 "&Ô!3Ô!F�JØ!ð ¥b¤g§n¢n°ZÑ&@Ô&@ð Ý,7Ð"S½v¹x¼xÐ"S & &ÈV˜Ø'1°GÑ';˜Ý')¤w×'7Ò'7¸
Ñ'CÔ'C˜Ýœ Jµ´·²¸WÀlÑ0SÔ0SÑTÔTÐTÝœ7Ÿ>š>¨,Ñ7Ô7ð Ý"œKØ ,Ý "¤§¢¨W°lÀWÑ6LÑ MÔ Mñô ð ð#ð #ð #ð #ð #à'.ð#ñ #ô #˜ð Ô)ð :Ø"ð:Ý')¤w§~¢~°jÑ'AÔ'Að:ð )4°SÐ'9˜  ! ™õ
 '9ØØÝœ×(Ò(¨Ñ5Ô5Ý(4ð	'ñ 'ô '�Oõ ”w—~’~ kÑ2Ô2ð /Ýœ	 +Ñ.Ô.Ð.Ý”K °Ñ=Ô=Ð=Ø"×+Ò+¨DÑ1Ô1ð 5Ýœ ¨eÑ4Ô4Ð4Ð4Ø$×-Ò-¨eÑ4Ô4ð 5Ýœ ¨eÑ4Ô4Ð4ði45ð 45ð 45ñ 45ô 45ð 45ð 45ð 45ð 45ð 45ð 45øøøð 45ð 45ð 45ð 45øøõj Ô0ð Tð Tð TÝÔ)¨'°1´8·?²?À7Ñ3KÔ3KÑLÔLÐRSÐSøøøøðTøøøð{>	Tð >	Tð >	Tñ >	Tô >	Tð >	Tð >	Tð >	Tð >	Tð >	Tð >	Tð >	Tøøøð >	Tð >	Tð >	Tð >	Tð >	Tð >	TsY   ’'N/º?MÁ9KMÍMÍM	ÍMÍM	ÍMÍN/ÍNÍ,.NÎNÎN/Î/N3Î6N3c                 óR  — | j         r|                      ¦   «         S t          | j        ¦  «         t          j                             | j        | j        › dt          › �¦  «        }t          |¦  «         |  	                    ¦   «         }t          ||¬¦  «         t          |¦  «         dS )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ó   ©rb  N)rŠ  r   rU  r`  r5   r8   r9   rb  Ú_BUILD_TEMP_DIRr�  rm  r`  )rj   Ú_build_tmp_dirÚ	build_cmds      r   ÚbuildzCppBuilder.buildü	  s§   € ð
 Ô"ð 	*à×'Ò'Ñ)Ô)Ð)Ý  Ô!1Ñ2Ô2Ð2ÝœŸšØÔ ¤Ð?Ð?­oÐ?Ð?ñ
ô 
ˆõ 	! Ñ0Ô0Ð0à×)Ò)Ñ+Ô+ˆ	Ý˜	 ~Ð6Ñ6Ô6Ð6Ý�NÑ#Ô#Ð#Ð#Ð#r    Ú
cmake_pathr  c                 ó   — d                      | j                             ¦   «         ¦  «        }t          j        j        sdnd}t          j        d| j        › d| j        › d|› d�¦  «        }t          j        j	        st          j
        j        r[|t          j        d¦  «        z  }|t          j        d| j        › d	|› d
| j        › d	| j        › d| j        › d	| j        › d�¦  «        z  }n(|t          j        d| j        › d| j        › d�¦  «        z  }|dk    r^t          j        j        €Md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 }|                     |¦  «         ddd¦  «         dS # 1 swxY w Y   dS )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   re  r˜  r
   rÙ   Údynamic_linkageÚtextwrapÚdedentrd  rh  Útest_configsÚuse_libtorchrX  r^  rí  rà  rá  Ú*torch._inductor.codegen.cuda.compile_utilsr¬  r  r  )	rj   r§  r  rt  Útarget_library_typeÚcontentsr¬  Úcurrent_archr  s	            r   Úsave_compile_cmd_to_cmakez$CppBuilder.save_compile_cmd_to_cmake
  s7  € ð —h’h˜tÔ1×AÒAÑCÔCÑDÔDˆå"Ô/Ô?ÐMˆHˆHÀXð 	õ ”?ðàÔ&ðð ð Ô*ðð ð .Aðð ð ñ

ô 

ˆõ ÔÔ,ð %	µÔ0CÔ0Pð %	ð �œðñô ñ ˆHð �œð
à,0Ô,=ð
ð 
àHSð
ð 
ð
 )-Ô(9ð
ð 
ð
 EIÔDUð
ð 
ð )-Ô(9ð
ð 
ð EIÔDeð
ð 
ð 
ñô ñ ˆHˆHð �œðð -1Ô,=ðð ð -1Ô,=ð	ð ð ñô ñ ˆHð ˜&Ò Ð ¥U¤]Ô%6Ð%>ðð ð ð ð ð ð 8Ð7Ñ9Ô9ˆLØ�œð<ð -1Ô,=ð	<ð <ð
 -1Ô,=ð<ð <ð (,Ô'8ð<ð <ðF 8DðG<ð <ðF T`ðG<ð <ðH 8DðI<ð <ðH O[ðI<ð <ð <ñ>ô >ñ >ˆHˆHð~ ˜EÒ!Ð!Ø�œð*ñ,ô ,ñ ,ˆHõ\ �*˜cÑ"Ô"ð 	 aØ�GŠG�HÑÔÐð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s   Æ GÇGÇ
Grÿ  c                 óÈ   — dt          |¦  «        j        z   }t          |d¦  «        5 }|                     d| j        › d|› d�¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Nú${CMAKE_CURRENT_SOURCE_DIR}/Úaztarget_sources(r«  z)
)r   r^  r  r  rd  )rj   r§  rÿ  r  s       r   Úsave_src_to_cmakezCppBuilder.save_src_to_cmakeÇ
  sÂ   € à1µD¸±N´NÔ4GÑGˆÝ�*˜cÑ"Ô"ð 	Q aØ�GŠGÐO dÔ&7ÐOÐOÀ(ÐOÐOÐOÑPÔPÐPð	Qð 	Qð 	Qñ 	Qô 	Qð 	Qð 	Qð 	Qð 	Qð 	Qð 	Qð 	Qøøøð 	Qð 	Qð 	Qð 	Qð 	Qð 	Qs   ¨"AÁAÁAÚ	asm_filesc           	      óÆ  — t          |d¦  «        5 }|D ]v}t          |¦  «        j                             d¦  «        d         }dt          |¦  «        j        › �}t	          j        d|› d|› d�¦  «        }|                     |¦  «         Œw|r<|                     d| j        › d	�¦  «         |                     d
| j        › d�¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )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  rd  )rj   r§  r»  r  Úasm_filerì   r´  s          r   Úsave_kernel_asm_to_cmakez#CppBuilder.save_kernel_asm_to_cmakeÍ
  sU  € å�*˜cÑ"Ô"ð 	 aØ%ð "ð "�Ý" 8™nœnÔ1×7Ò7¸Ñ<Ô<¸QÔ?�ØQ½DÀ¹N¼NÔ<OÐQÐQ�Ý#œ?ðØ&1ðð Ø4<ðð ð ñô �ð
 —’˜Ñ!Ô!Ð!Ð!Øð Ø—’ÐV¨DÔ,=ÐVÐVÐVÑWÔWÐWØ—’Ød¨TÔ->ÐdÐdÐdñô ð ð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s   ‘B8CÃCÃCc                 óâ  — d                      | j                             ¦   «         ¦  «        }d                      | j                             ¦   «         ¦  «        }t	          j        d| j        › d|› d| j        › d|› d�	¦  «        }t          j         	                    |¦  «        sJ d|› d�¦   «         ‚t          |d¦  «        5 }|                     |¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )	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   re  rŸ  r£  r®  r¯  rd  r5   r8   rN   r  r  )rj   r§  Úlflagsr|  r´  r  s         r   Úsave_link_cmd_to_cmakez!CppBuilder.save_link_cmd_to_cmakeß
  sZ  € Ø—’˜$Ô,×8Ò8Ñ:Ô:Ñ;Ô;ˆØ�xŠx˜Ô*×8Ò8Ñ:Ô:Ñ;Ô;ˆÝ”?ðà!%Ô!2ðð à=Cðð ð
 $(Ô#4ðð ð
 @Dðð ð ñ
ô 
ˆõ Œw�~Š~˜jÑ)Ô)ð 	
ð 	
ØO°*ÐOÐOÐOñ	
ô 	
Ð)õ �*˜cÑ"Ô"ð 	 aØ�GŠG�HÑÔÐð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s   ÃC$Ã$C(Ã+C()r£   r™   )rš   r›   rœ   r¶  ÚstaticmethodrÂ   r�   rk  rh  ri  rj  rã   rs  rk   r�  rƒ  ro  r   r¦  r¶  rº  r¾  rÁ  r   r    r   rD  rD  ­  s™  € € € € € ðð ð  ð' u¨S°#¨X¤ð 'ð 'ð 'ñ „\ð'ð
 ð'  c¨3 h¤ð 'ð 'ð 'ñ „\ð'ð
 ð'¨E°#°s°(¬Oð 'ð 'ð 'ñ „\ð'ð
 ð'¨U°3¸°8¬_ð 'ð 'ð 'ñ „\ð'ð ðZGð ZGàðZGð �t˜C”y‘ðZGð &ð	ZGð
 ðZGð 
ðZGð ZGð ZGð ZGðx, #ð ,ð ,ð ,ð ,ð\; cð ;ð ;ð ;ð ;ð¨T°#¬Yð ¸4À¼9ð ð ð ð ð,ATà	ðATð ATð ATð ATðF$ð $ð $ð $ð$wàðwð ðwð 
ð	wð wð wð wðrQ¨Cð Q¸3ð QÀ4ð Qð Qð Qð Qð°3ð À4ÈÄ9ð ÐQUð ð ð ð ð$°ð ¸ð ð ð ð ð ð r    rD  r›  Útargetc                 óü   — dt           fd„}dt           dt           dt           dt           fd„} |¦   «         } ||t          | ¦  «        t          |¦  «        ¬¦  «        }t          |t          |¦  «        ¬¦  «         d S )	Nr   c                  óX   — t           rd} nt          ¦   «         } t          | ¦  «        rd} | S )NÚml64rF   )rÝ   rä   r.  )ÚASM_CCs    r   Úget_asm_compilerz.run_asm_build_object.<locals>.get_asm_compilerô
  s6   € Ýð 	ØˆFˆFå%Ñ'Ô'ˆFå! &Ñ)Ô)ð Ø�Øˆr    Úasm_ccr›  rÃ  c                 ó>   — t           r| › d|› d|› �}n
| › 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þ
  sI   € Ýð 	3ð Ð3Ð3˜cÐ3Ð3¨6Ð3Ð3ˆCˆCàÐ2Ð2 Ð2Ð2¨&Ð2Ð2ˆCàˆ
r    )rÉ  r›  rÃ  r¢  )r�   rÞ   rm  )r›  rÃ  rb  rÈ  r�  rÉ  r¼   s          r   Úrun_asm_build_objectrË  ó
  s±   € ð�cð ð ð ð ð¥ð ­3ð ½ð Åð ð ð ð ð ÐÑÔ€FØ
Ð
ØÝ$ SÑ)Ô)Ý'¨Ñ/Ô/ðñ ô €Cõ
 �CÕ5°cÑ:Ô:Ð;Ñ;Ô;Ð;Ð;Ð;r    )rF   )T)r¼  )F)Tr   Fr™   )FF)˜r>  re   rS  Ú	functoolsr²  ÚlocaleÚloggingr5   r4   rõ   re  rS   r;   r3   ro  r“  r®  rs  Ú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   rL  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.  r0  r2  r+  r5  r7  r?  rI  rM  rU  r`  rj  rm  rÞ   rs  r»  r¿  rÏ  rÔ  rÙ  rß  rñ  rö  rü  r  r!  r'  r)  r5  r7  r>  rP  r^  rk  rw  r‚  r‡  rŒ  r•  r›  r´  r¶  rº  r¾  rÕ  r×  rã  rê  rõ  rü  r  r  r  r  r0  r2  rB  rD  rË  r   r    r   ú<module>rá     sß  ðð €€€Ø €€€Ø €€€Ø Ð Ð Ð Ø €€€Ø €€€Ø €€€Ø 	€	€	€	Ø €€€Ø 	€	€	€	Ø €€€Ø €€€Ø Ð Ð Ð Ø 
€
€
€
Ø Ð Ð Ð Ø €€€Ø €€€Ø €€€Ø $Ð $Ð $Ð $Ð $Ð $Ø !Ð !Ð !Ð !Ð !Ð !Ð !Ð !Ø $Ð $Ð $Ð $Ð $Ð $Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à €€€Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ø ;Ð ;Ð ;Ð ;Ð ;Ð ;Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø /Ð /Ð /Ð /Ð /Ð /ð €6ÔÑÔð Ø?Ð?Ð?Ð?Ð?Ð?Ð?Ð?ðð ð ð ð ð ð ð ð ð ð ð ð ð sð °cð ¸dð ð ð ð ð cð °Sð ¸Tð ð ð ð ð Sð °Cð ¸Dð ð ð ð ð˜dð ð ð ð ð
 €Ø
Œ�Š˜Ñ!Ô!€ØŒg�oŠo˜bœgŸošo¨eÑ4Ô4Ñ5Ô5€Ø”—’˜kÐ+@ÑAÔA€ð ŒL×#Ò# GÑ,Ô,€	ØŒL×#Ò# HÑ-Ô-€	ØŒl˜gÒ%€à$€	ð 3>ÐEÐ €VÔ Ñ"Ô" IÐ.Ð.À2ð ð €gÔ˜Ñ!Ô!€ð €Ô�QÑÔð! ð !¨ð !ð !ð !ñ Ôð!ð8˜sð ð ð ð ð4 „ð
¨3ð 
°4ð 
ð 
ð 
ñ „ð
ðJð Jð Jð Jð Jñ Jô Jð JðZ „ðl
¨ð l
°ð l
ð l
ð l
ñ „ðl
ð^ „ð sð ¨sð ð ð ñ „ðð>˜#ð ð ð ð ð6¨$ð °5¸¸c¸´?ð ð ð ð ð"Øðàðð 	ðð ð	ð
 	ðð ð ð ð< ð/ð /Ø��s˜C�x”Ô!ð/àð/ð ð/ð 	ð	/ð /ð /ð /ðd „ð5 #ð 5¨$ð 5ð 5ð 5ñ „ð5ð
 „ð?˜Cð ? Dð ?ð ?ð ?ñ „ð?ð „ðC˜#ð C $ð Cð Cð Cñ „ðCð „ðL¨Cð L¸ð LÀð Lð Lð Lñ „ðLð. „ð˜cð  dð ð ð ñ „ðð* „ð) Sð )¨Tð )ð )ð )ñ „ð)ðX „ð'�ð 'ð 'ð 'ñ „ð'ð „ð)�$ð )ð )ð )ñ „ð)ð „ð2˜4ð 2ð 2ð 2ñ „ð2ð „ð/˜ð /ð /ð /ñ „ð/ð „ð+�Dð +ð +ð +ñ „ð+ð „ð¨ð °ð ð ð ñ „ðð*?˜D œIð ?°°c´ð ?¸tð ?ð ?ð ?ð ?ð¨4°¬9ð ¸¸c¼ð ð ð ð ðO sð O¨tð Oð Oð Oð Oð	˜#ð 	 $ð 	ð 	ð 	ð 	ð6˜sð 6¨ð 6°ð 6ð 6ð 6ð 6ð.(˜cð (¨ð (°ð (ð (ð (ð (ð
¨ð °ð ð ð ð ðu ð u ð u ð u ð u ñ u ô 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!ð 5!ð 5!ð 5!Ð!ñ 5!ô 5!ð 5!ðp¨4°¬9ð ð ð ð ð2 d¨3¤ið 2ð 2ð 2ð 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ð (3ð (3ð (3ðV
 $ s¤)ð 
ð 
ð 
ð 
ð0 %¨¨S¬	°4¸´9Ð(<Ô"=ð 0ð 0ð 0ð 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ð jUð jUð 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ð Zð ZðzC!ð C!ð C!ð C!ð C!�jñ C!ô C!ð C!ðL7ð 7ð 7ð 7ð €Ô�QÑÔð ð ¨°©ð ð ð ñ ÔððU Cð U°3ð UÈð UÐQUð Uð Uð Uð UðDÐ ð,¨#ð ,°#¸±*ð ,ð ,ð ,ð ,ð^U°D¸´Ið UÀ$ÀsÄ)ð Uð Uð Uð Uðp) $ s¤)ð )°ð )ð )ð )ð )ð*# $ s¤)ð #°ð #ð #ð #ð #ð Øðoð oØðoàðoð ðoð ˆ4�Œ9�d˜3”i  c¤¨D°¬I°t¸C´yÀ$ÀsÄ)ÈTÐRUÌYÐVÔWð	oð oð oð oðdN@ð N@ð N@ð N@ð N@˜Oñ N@ô N@ð N@ðbØðà
ˆ3�ˆ8„_ðð ð ð ð0C	ð C	ð C	ð C	ð C	ñ C	ô C	ð C	ðL<˜cð <¨3ð <°Sð <¸Tð <ð <ð <ð <ð <ð <r    