o
    8} i/                     @  s   d dl mZ d dlZd dlZd dlZd dlmZ d dlmZ ddlm	Z	m
Z
 ddlmZmZmZ ee jjZejedZd$ddZd%ddZd&ddZd'ddZd(ddZd)d"d#ZdS )*    )annotationsN)glob)Path   )CMake	USE_NINJA)check_negative_env_flagIS_64BIT
IS_WINDOWSthird_partyvc_archstrreturndict[str, str]c                 C  sD   zddl m} |j| W S  ty!   ddlm} ||  Y S w )Nr   )	distutils)_msvccompiler)
setuptoolsr   r   _get_vc_envAttributeErrorZsetuptools._distutils)r   r   r    r   :/home/app/PyTorch/test/pytorch/tools/build_pytorch_libs.pyr      s   r   envc                 C  s   t rdnd}t dkr,d}d}tdd t dD }||k r,d	}td
 td t|}dd | D }|  D ]\}}|	 }||vrM|||< q=|S )Nx64x86ZARM64Z	x64_arm64)
   r   iU  c                 s  s    | ]}t |V  qd S )N)int).0version_partr   r   r   	<genexpr>%   s    
z*_overlay_windows_vcvars.<locals>.<genexpr>.	x86_arm64zmWarning: 32-bit toolchain will be used, but 64-bit linker is recommended to avoid out-of-memory linker error!zLWarning: Please consider upgrading to Win11, where x64 emulation is enabled!c                 S  s   i | ]	\}}|  |qS r   )upper)r   kvr   r   r   
<dictcomp>8   s    z+_overlay_windows_vcvars.<locals>.<dictcomp>)
r	   platformmachinetupleversionsplitprintr   itemsr!   )r   r   Zwin11_1st_versionZcurrent_win_versionZvc_envr"   r#   ukr   r   r   _overlay_windows_vcvars   s.   r-   c                  C  sp   t j } d| v r| d | d< ntr"td}t|dkr"|d | d< tr6tr6t| } | dd | dd | S )NZ	CUDA_HOMEZCUDA_BIN_PATHz7C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v*.*r   CCZclCXX)	osenvironcopyr
   r   lenr   r-   
setdefault)my_envZcuda_winr   r   r   _create_build_env@   s   
r6   c                  C  sx   d} t dddst dddrd} t jtddd	| }t|}|  W  d    S 1 s5w   Y  d S )
Nznccl-cu12.txtZDESIRED_CUDA Z11ZCUDA_VERSIONznccl-cu11.txtz.ciZdockerZci_commit_pins)	r0   getenv
startswithpathjoin	repo_rootopenreadstrip)Z	nccl_fileZnccl_pin_pathfr   r   r   read_nccl_pinX   s   


$rA   Nonec                  C  s\   t  } td|   tjtd}tj|s,tjg dtd tjdd| g|d d S d S )Nz-- Checkout nccl release tag: nccl)gitclonez"https://github.com/NVIDIA/nccl.gitrC   )cwdrD   Zcheckout)	rA   r*   r0   r:   r;   third_party_pathexists
subprocess
check_call)Zrelease_tagZnccl_basedirr   r   r   checkout_nccle   s   rK   r(   
str | Nonecmake_python_librarybuild_pythonboolrerun_cmake
cmake_onlycmaker   c                 C  s@   t  }t  td }|| ||||| |rd S || d S )NZ
BUILD_TEST)r6   rK   r   Zgeneratebuild)r(   rM   rN   rP   rQ   rR   r5   Z
build_testr   r   r   build_pytorchq   s   
rT   )r   r   r   r   )r   r   r   r   )r   r   )r   r   )r   rB   )r(   rL   rM   rL   rN   rO   rP   rO   rQ   rO   rR   r   r   rB   )Z
__future__r   r0   r%   rI   r   pathlibr   Zsetup_helpers.cmaker   r   Zsetup_helpers.envr   r	   r
   __file__absoluteparentr<   r:   r;   rG   r   r-   r6   rA   rK   rT   r   r   r   r   <module>   s     


$

