o
    ld+                     @  s8  U d dl mZ ddlmZ ddlmZmZmZmZ ddl	m
Z
mZmZmZmZmZmZmZmZmZmZmZ d dlZd dlZd dlZejr^ddl	mZmZ dd	lmZ dd
lm Z  ddlm!Z! i Z"de#d< ddge"d< dge"d< dge"d< dge"d< dge"d< dge"d< d9d#d$Z$d%d%dd&d:d4d5Z%dd6d;d7d8Z&dS )<    )annotations   )mlog)EnvironmentException
Popen_safe	join_argssearch_version   )AppleDynamicLinkerLLVMLD64DynamicLinkerGnuGoldDynamicLinkerGnuBFDDynamicLinkerMoldDynamicLinkerLLVMDynamicLinkerQualcommLLVMDynamicLinkerMSVCDynamicLinkerClangClDynamicLinkerSolarisDynamicLinkerAIXDynamicLinkerOptlinkDynamicLinkerN)DynamicLinkerGnuDynamicLinker)Environment)Compiler)MachineChoicezT.Dict[str, T.List[str]]defaultsarZgarZstatic_linkerlibZvs_static_linkerzllvm-libZclang_cl_static_linkerZnvlinkZcuda_static_linkerzgcc-arZgcc_static_linkerzllvm-arZclang_static_linkercompilerT.List[str]argsstdoutstrstderrreturn'T.NoReturn'c                 C  s   d t| | ||}t|)Nz?Unable to detect linker for compiler `{}`
stdout: {}
stderr: {})formatr   r   )r   r    r!   r#   msg r(   xhome/ych/rk3568/buildroot/output/rockchip_rk3568_recovery/host/lib/python3.10/site-packages/mesonbuild/linkers/detect.py__failed_to_detect_linker7   s   r*   T)use_linker_prefixinvoked_directly
extra_argsenv'Environment'
comp_classT.Type['Compiler']comp_versionfor_machiner   r+   boolr,   r-   T.Optional[T.List[str]]'DynamicLinker'c             	   C  sT  | j |j|||  |r|jd u rddg}n#t|jtr'|jd |jd g}nt|jtr9|jdg |j dg }|| j ||j7 }g }	| ||jd }
|
d ur^|	|
d |}	||	7 }|d urg|
| t|| \}}}d|jdddd v rd	|v rt|||j|	t|d
S |st||	||jt|dd dS |
d ur|r|
}t|| \}}}d|jdddd v rt|g |r|jng |t||dS d|v rt||t|d
S |ds|dr	|p|}td|}|rt|d}nd}t|g |||r|jng t||dS d|v r!dd l}||d }td| dt|||| d S )Nz/logo	--version_ldr   LLD
r	   maxsplitz(compatible with GNU linkers)versionF)exelistprefixr>   directmachine)r@   r?   r>   rA   ZOPTLINK	Microsoftz.*(X86|X64|ARM|ARM64).*x86)rB   r?   r@   r>   rA   zGNU coreutilsz/Found GNU link.exe instead of MSVC link.exe in zi.
This link.exe is not a linker.
You may need to reorder entries to your %PATH% variable to resolve this.)coredataadd_lang_argslanguageLINKER_PREFIX
isinstancer"   listget_external_link_argslookup_binary_entryuse_linker_argsextendr   splitr   r   r   r   
startswithresearchgroupr   shutilwhichr   r*   )r.   r   r0   r2   r3   r+   r,   r-   
check_argsoverridevaluepo_eoutmatchtargetrT   fullpathr(   r(   r)   guess_win_linker=   sp   






ra   )r-   c             
   C  s  | j |j|||  |pg }| j ||j}|||| j| 7 }t|jtr0|jd g| }n|jdg | }g }| 	||jd }	|	durS|
|	d |}||7 }td tdt||   t|| \}
}}td|
  td|  td	|  t|| }d
|jdddd v rt|jtr|| |jd g | }n|| |j dg | }td tdt|  t|\}}}td|  td	|  d|v rt}nt}||||j||d}|S d|v rd|v rt|||j||d}|S |drSt|| dg \}}}ztd|tjd}t|d }W n tttfy9   Y nw t|dg\}}}t|}t|||j||d}|S |dscd|v scd|v rt|jtru||jd g | }n
||j dg | }td tdt|  t|\}}}td|  td	|  |dD ]}d|v r|dd } n	qt|||| t|||j||d}|S d|v sd|v r|ds|drt }n|ds|drt!}nt"}||||j||d}|S d|v sd|v r8|| dD ]}d |v r(|d!d" # } nqd#}t$|||j||d}|S d$|v rqt|jtrTt||jd% g | \}}}nt||j d%g | \}}}t%|||j|t|d}|S t|||| |S )&aP  Helper for guessing what linker to use on Unix-Like OSes.

    :compiler: Invocation to use to get linker
    :comp_class: The Compiler Type (uninstantiated)
    :comp_version: The compiler version string
    :for_machine: which machine this linker targets
    :extra_args: Any additional arguments required (such as a source file)
    r7   r8   Nr   z-----zDetecting linker via: zlinker returned zlinker stdout:
zlinker stderr:
r9   r:   r	   r;   z-vzDetecting LLD linker via: zld64.lldr=   Z
SnapdragonZLLVMz
lld-link: z.*\n(.*?)\nlld-link: z(use -v to see invocation)
Zmacosx_versionzld: unknown option:zDetecting Apple linker via: z
PROJECT:ld-ZGNUzGNU goldZmoldSolarisz!ld: Software Generation Utilities:r   zunknown versionz*ld: 0706-012 The -- flag is not recognizedz-V)&rE   rF   rG   rK   Z_unix_args_to_nativeZmachinesrI   rH   r"   rL   rM   r   debugr   r   r   rO   r   r   r   rP   rQ   r^   DOTALLrS   shlexAttributeError
IndexError
ValueErrorendswithr*   r
   r   r   r   lstripr   r   )r.   r   r0   r2   r3   r-   ZldflagsrV   rW   rX   rY   rZ   r\   vcmdr[   ZnewoZnewerrZlld_clsZlinkerZ
linker_cmdlineZgnu_clsr(   r(   r)   guess_nix_linker   s   

IF3 

 


 
rp   )
r   r   r    r   r!   r"   r#   r"   r$   r%   )r.   r/   r   r   r0   r1   r2   r"   r3   r   r+   r4   r,   r4   r-   r5   r$   r6   )r.   r/   r   r   r0   r1   r2   r"   r3   r   r-   r5   r$   r6   )'
__future__r    r   Zmesonlibr   r   r   r   Zlinkersr
   r   r   r   r   r   r   r   r   r   r   r   rQ   rg   typingTTYPE_CHECKINGr   r   environmentr   	compilersr   r   r   __annotations__r*   ra   rp   r(   r(   r(   r)   <module>   s2   8





H