o
    Wªodí›  ã                   @  s  d dl mZ d dlZd dlZd dlZd dlZddlm	Z	 ddlm
Z
 ddlmZmZmZ ddlmZ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 ddlmZmZ ddlm Z m!Z! ddl"m#Z#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. ddl/m0Z0 ej1rÂddlm2Z2 ddl	m3Z3m4Z4 ddl5m6Z6 ddl7m8Z8 ddl9m:Z: ddl;m<Z< ddlm=Z= ddl>m?Z? eZ@neAZ@dQd#d$„ZBG d%d&„ d&eeƒZCG d'd(„ d(e*eCƒZDG d)d*„ d*eDƒZEG d+d,„ d,eDƒZFG d-d.„ d.e0eDƒZGG d/d0„ d0eeCƒZHG d1d2„ d2e#eCƒZIG d3d4„ d4e.eCƒZJG d5d6„ d6e.eCƒZKG d7d8„ d8e,eCƒZLG d9d:„ d:e'eCƒZMG d;d<„ d<eDƒZNG d=d>„ d>e@ƒZOG d?d@„ d@e@ƒZPG dAdB„ dBePeOe eCƒZQG dCdD„ dDePeOe!eCƒZRG dEdF„ dFeOe(eCƒZSG dGdH„ dHeSƒZTG dIdJ„ dJeeCƒZUG dKdL„ dLeeCƒZVG dMdN„ dNeeCƒZWG dOdP„ dPeWƒZXdS )Ré    )ÚannotationsNé   )Úcoredata)Úmlog)ÚMesonExceptionÚversion_compareÚ	OptionKeyé   )Úgnu_winlibsÚmsvc_winlibsÚCompiler)ÚCXX_FUNC_ATTRIBUTESÚC_FUNC_ATTRIBUTES)ÚCLikeCompiler)ÚCcrxCompiler)Ú
TICompiler)ÚArmCompilerÚArmclangCompiler)ÚMSVCCompilerÚClangClCompiler)ÚGnuCompilerÚgnu_common_warning_argsÚgnu_cpp_warning_args)ÚIntelGnuLikeCompilerÚIntelVisualStudioLikeCompiler)ÚClangCompiler)ÚElbrusCompiler)ÚPGICompiler)ÚEmscriptenMixin)ÚCompileCheckMode)ÚMutableKeyedOptionDictTypeÚKeyedOptionDictType)Ú
Dependency)ÚMachineInfo)ÚEnvironment)ÚDynamicLinker)ÚMachineChoice)ÚExternalProgramÚehÚstrÚargsúT.List[str]ÚreturnÚNonec                 C  s<   | dkr|  d¡ d S | dv rtjd| › ddd d S d S )NÚnoneú-fno-exceptions>   ÚsÚcz"non-MSVC compilers do not support z9 exception handling. You may want to set eh to 'default'.F©Úfatal)Úappendr   Úwarning)r(   r*   © r6   úwhome/ych/rk3568/buildroot/output/rockchip_rk3568_recovery/host/lib/python3.10/site-packages/mesonbuild/compilers/cpp.pyÚnon_msvc_eh_options9   s   
ÿÿr8   c                      s    e Zd Zd=dd„ZdZ			d>d?dd„Zed@dd„ƒZdAdd„ZdBd"d#„Z	dC‡ fd&d'„Z
ddd(œdD‡ fd2d3„ZdEd5d6„Ze ¡ dFd8d9„ƒZdG‡ fd;d<„Z‡  ZS )HÚCPPCompilerÚnamer)   r,   c                 C  s2   z	t  |t| ¡W S  ty   td|› dƒ‚w )NzUnknown function attribute "ú")r   Úgetr   ÚKeyErrorr   )Úselfr:   r6   r6   r7   Úattribute_check_funcA   s
   ÿz CPPCompiler.attribute_check_funcÚcppNÚccacher+   ÚexelistÚversionÚfor_machiner&   Úis_crossÚboolÚinfoú'MachineInfo'Úexe_wrapperúT.Optional['ExternalProgram']ÚlinkerúT.Optional['DynamicLinker']Úfull_versionúT.Optional[str]c
           
      C  s,   t j| ||||||||	d	 t | |¡ d S )N)rE   rK   rM   )r   Ú__init__r   ©
r>   rA   rB   rC   rD   rE   rG   rI   rK   rM   r6   r6   r7   rO   I   s
   þzCPPCompiler.__init__c                   C  s   dS )NzC++r6   r6   r6   r6   r7   Úget_display_languageS   s   z CPPCompiler.get_display_languagec                 C  s   dgS )Nz-nostdinc++r6   ©r>   r6   r6   r7   Úget_no_stdinc_argsW   s   zCPPCompiler.get_no_stdinc_argsÚwork_dirÚenvironmentú'Environment'r-   c                 C  s   d}|   ||d|¡S )Nz2class breakCCompiler;int main(void) { return 0; }
zsanitycheckcpp.cc)Z_sanity_check_impl)r>   rT   rU   Úcoder6   r6   r7   Úsanity_checkZ   s   zCPPCompiler.sanity_checkÚmoder   c                   s   t ƒ  |¡dg S )Nz-fpermissive)ÚsuperÚget_compiler_check_args©r>   rY   ©Ú	__class__r6   r7   r[   ^   s   z#CPPCompiler.get_compiler_check_args©Ú
extra_argsÚdependenciesÚhnameÚsymbolÚprefixÚenvr`   úGT.Union[None, T.List[str], T.Callable[[CompileCheckMode], T.List[str]]]ra   ú T.Optional[T.List['Dependency']]úT.Tuple[bool, bool]c          
        s\   t ƒ j||||||d\}}|rd|fS |d u rg }|› d|› d|› d}	| j|	|||dS )Nr_   Tz
        #include <z>
        using z&;
        int main(void) { return 0; })rZ   Úhas_header_symbolZcompiles)
r>   rb   rc   rd   re   r`   ra   ÚfoundÚcachedÚtr]   r6   r7   ri   d   s    
þÿþ
ÿzCPPCompiler.has_header_symbolÚcpp_std_valuec                 C  s   |  d¡sJ ‚d}| j||gdd,}|jdkr+t d|› dd¡ 	 W d   ƒ d	S t d|› dd
¡ 	 W d   ƒ dS 1 sAw   Y  d S )Nú-std=zint i = static_cast<int>(0);Úcompile)r`   rY   r   zCompiler accepts ú:ZYESTZNOF)Ú
startswithro   Ú
returncoder   Údebug)r>   rm   ZCPP_TESTÚpr6   r6   r7   Ú_test_cpp_std_argx   s   
ý$úzCPPCompiler._test_cpp_std_argÚcpp_stdc              	   C  sv   ddddddddd	œ}| j tg d
¢ƒv sJ ‚||vrd| S ||| fD ]}d| }|  |¡r3|  S q$td|› ƒ‚)Núc++0xúgnu++0xúc++1yúgnu++1yúc++1zúgnu++1zúc++2aúgnu++2a)úc++11úgnu++11úc++14úgnu++14úc++17úgnu++17úc++20úgnu++20)ZclangZlccZgccÚ
emscriptenÚarmltdclangú
intel-llvmrn   z#C++ Compiler does not support -std=)ÚidÚ	frozensetru   r   )r>   rv   ZCPP_FALLBACKSÚirm   r6   r6   r7   Ú_find_best_cpp_stdŠ   s$   	ø
ÿzCPPCompiler._find_best_cpp_stdú'MutableKeyedOptionDictType'c                   s:   t ƒ  ¡ }td| j| jd}| |t ddgd¡i¡ |S )NÚstd©ÚmachineÚlangzC++ language standard to user.   )rZ   Úget_optionsr   rD   ÚlanguageÚupdater   ÚUserComboOption©r>   ÚoptsÚkeyr]   r6   r7   r“   «   s   
ýÿzCPPCompiler.get_options)r:   r)   r,   r)   ©NNN©rA   r+   rB   r+   rC   r)   rD   r&   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   )r,   r)   ©r,   r+   )rT   r)   rU   rV   r,   r-   ©rY   r   r,   r+   )rb   r)   rc   r)   rd   r)   re   rV   r`   rf   ra   rg   r,   rh   )rm   r)   r,   rF   )rv   r)   r,   r)   ©r,   rŽ   )Ú__name__Ú
__module__Ú__qualname__r?   r”   rO   ÚstaticmethodrQ   rS   rX   r[   ri   ru   Ú	functoolsÚ	lru_cacher   r“   Ú__classcell__r6   r6   r]   r7   r9   @   s&    
ý


ý
 r9   c                   @  sH   e Zd Z				d%d&dd„Zd'dd„Zd(dd„Zd(dd „Zd)d#d$„ZdS )*ÚClangCPPCompilerNrA   r+   rB   rC   r)   rD   r&   rE   rF   rG   rH   rI   rJ   rK   rL   ÚdefinesúT.Optional[T.Dict[str, str]]rM   rN   c                 C  sX   t j| |||||||||
d
 t | |	¡ ddg}g ||dg |ddg dgdœ| _d S ©N©rK   rM   ú-Wallú-Winvalid-pchú-Wextraú
-Wpedanticz-Weverything©Ú0Ú1Ú2Ú3Z
everything)r9   rO   r   Ú	warn_args©r>   rA   rB   rC   rD   rE   rG   rI   rK   r§   rM   Údefault_warn_argsr6   r6   r7   rO   ¹   s   ÿ
üzClangCPPCompiler.__init__r,   rŽ   c              	   C  s˜   t  | ¡}td| j| jd}| | d¡t dg d¢d¡| d¡t 	dd	¡i¡ g d
¢|| d¡ _
| j ¡ s<| j ¡ rJ| | d¡t dt¡i¡ |S )Nr™   r   r(   úC++ exception handling type.©r.   ÚdefaultÚar0   Zscr¹   ÚrttiúEnable RTTIT)r.   úc++98úc++03r   r   rƒ   r{   r}   r…   r€   r‚   r„   r|   r~   r†   r   Úwinlibsú&Standard Win libraries to link against)r9   r“   r   rD   r”   r•   Úevolver   r–   ÚUserBooleanOptionÚchoicesrG   Ú
is_windowsÚ	is_cygwinÚUserArrayOptionr
   r—   r6   r6   r7   r“   È   s&   
ýúþÿzClangCPPCompiler.get_optionsÚoptionsú'KeyedOptionDictType'c                 C  sn   g }t d| j| jd}|| }|jdkr| |  |j¡¡ t|| d¡ j|ƒ || d¡ js5| d¡ |S )Nr   r   r.   r(   r»   ú	-fno-rtti©r   rD   r”   Úvaluer4   r   r8   rÁ   ©r>   rÇ   r*   r™   r   r6   r6   r7   Úget_option_compile_argsá   s   

z(ClangCPPCompiler.get_option_compile_argsc                 C  ób   | j  ¡ s
| j  ¡ r/td| j| jd}|| j ¡ }t|t	ƒs!J ‚|D ]	}t|t
ƒs,J ‚q#|S g S ©Nr¿   r   ©rG   rÄ   rÅ   r   rD   r”   rË   ÚcopyÚ
isinstanceÚlistr)   ©r>   rÇ   r™   ZlibsÚlr6   r6   r7   Úget_option_link_argsï   ó   z%ClangCPPCompiler.get_option_link_argsre   rV   c                 C  ó0   g }|   |d¡D ]
}| d|› ¡ q|dg S ©NÚ	librariesú-Lz-lstdc++©Zget_compiler_dirsr4   ©r>   re   Zsearch_dirsÚdr6   r6   r7   Úlanguage_stdlib_only_link_flagsú   ó   
z0ClangCPPCompiler.language_stdlib_only_link_flags©NNNN©rA   r+   rB   r+   rC   r)   rD   r&   rE   rF   rG   rH   rI   rJ   rK   rL   r§   r¨   rM   rN   rž   ©rÇ   rÈ   r,   r+   ©re   rV   r,   r+   )rŸ   r    r¡   rO   r“   rÍ   rÖ   rß   r6   r6   r6   r7   r¦   ¸   s    ü


r¦   c                   @  ó   e Zd ZdZdS )ÚArmLtdClangCPPCompilerrˆ   N©rŸ   r    r¡   rŠ   r6   r6   r6   r7   ræ     ó    ræ   c                   @  s   e Zd Zddd„ZdS )	ÚAppleClangCPPCompilerre   rV   r,   r+   c                 C  rØ   )NrÚ   rÛ   z-lc++rÜ   rÝ   r6   r6   r7   rß     rà   z5AppleClangCPPCompiler.language_stdlib_only_link_flagsNrä   )rŸ   r    r¡   rß   r6   r6   r6   r7   ré   
  s    ré   c                   @  s.   e Zd ZdZ				dddd„Zddd„ZdS ) ÚEmscriptenCPPCompilerr‡   NrA   r+   rB   rC   r)   rD   r&   rE   rF   rG   rH   rI   rJ   rK   rL   r§   r¨   rM   rN   c                 C  sB   |st dƒ‚t|dƒst dƒ‚tj| |||||||||	|
d d S )Nz;Emscripten compiler can only be used for cross compilation.z	>=1.39.19z$Meson requires Emscripten >= 1.39.19)rI   rK   r§   rM   )r   r   r¦   rO   ©r>   rA   rB   rC   rD   rE   rG   rI   rK   r§   rM   r6   r6   r7   rO     s   

þzEmscriptenCPPCompiler.__init__rÇ   rÈ   r,   c                 C  s>   g }t d| j| jd}|| }|jdkr| |  |j¡¡ |S )Nr   r   r.   )r   rD   r”   rË   r4   r   rÌ   r6   r6   r7   rÍ   '  s   
z-EmscriptenCPPCompiler.get_option_compile_argsrá   râ   rã   )rŸ   r    r¡   rŠ   rO   rÍ   r6   r6   r6   r7   rê     s    ürê   c                   @  s@   e Zd ZdZ			d d!dd„Zd"dd„Zd#dd„Zd#dd„ZdS )$ÚArmclangCPPCompilerz
    Keil armclang
    NrA   r+   rB   rC   r)   rD   r&   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   c
                 C  sV   t j| |||||||||	d
 t | ¡ ddg}
g |
|
dg |
ddg dgdœ| _d S r©   )r9   rO   r   r´   ©r>   rA   rB   rC   rD   rE   rG   rI   rK   rM   r¶   r6   r6   r7   rO   5  s   ÿ

üzArmclangCPPCompiler.__init__r,   rŽ   c                 C  sP   t  | ¡}td| j| jd}| | d¡t dg d¢d¡i¡ g d¢|| _	|S )Nr   r   r(   r·   r¸   r¹   )r.   r½   r¾   r   r   rƒ   úgnu++98úgnu++03r€   r‚   r„   )
r9   r“   r   rD   r”   r•   rÁ   r   r–   rÃ   r—   r6   r6   r7   r“   C  s   
ýÿzArmclangCPPCompiler.get_optionsrÇ   rÈ   c                 C  sR   g }t d| j| jd}|| }|jdkr| d|j ¡ t|| d¡ j|ƒ |S )Nr   r   r.   rn   r(   )r   rD   r”   rË   r4   r8   rÁ   rÌ   r6   r6   r7   rÍ   S  s   
z+ArmclangCPPCompiler.get_option_compile_argsc                 C  ó   g S ©Nr6   ©r>   rÇ   r6   r6   r7   rÖ   ^  ó   z(ArmclangCPPCompiler.get_option_link_argsrš   r›   rž   rã   )rŸ   r    r¡   Ú__doc__rO   r“   rÍ   rÖ   r6   r6   r6   r7   rì   0  s    ý

rì   c                   @  sR   e Zd Z				d)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 )/ÚGnuCPPCompilerNrA   r+   rB   rC   r)   rD   r&   rE   rF   rG   rH   rI   rJ   rK   rL   r§   r¨   rM   rN   c                 C  sr   t j| |||||||||
d
 t | |	¡ ddg}g ||dg |ddg |ddg |  t¡ |  t¡ dœ| _d S )Nrª   r«   r¬   r­   r®   r¯   )r9   rO   r   Zsupported_warn_argsr   r   r´   rµ   r6   r6   r7   rO   c  s   ÿ

ÿþüzGnuCPPCompiler.__init__r,   rŽ   c                 C  sÈ   t d| j| jd}t | ¡}| | d¡t dg d¢d¡| d¡t 	dd	¡| d
¡t 	dd¡i¡ g d¢}t
| jdƒrE| d¡ | d¡ ||| _| j ¡ sT| j ¡ rb| | d¡t dt¡i¡ |S )Nr   r   r(   r·   r¸   r¹   r»   r¼   TÚdebugstlúSTL debug modeF)r.   r½   r¾   r   r   rƒ   r{   r}   r…   rï   r€   r‚   r„   r|   r~   r†   z>=12.2.0zc++23zgnu++23r¿   rÀ   )r   rD   r”   r9   r“   r•   rÁ   r   r–   rÂ   r   rC   r4   rÃ   rG   rÄ   rÅ   rÆ   r
   )r>   r™   r˜   Zcppstd_choicesr6   r6   r7   r“   t  s6   
ýþù


þÿzGnuCPPCompiler.get_optionsrÇ   rÈ   c                 C  sˆ   g }t d| j| jd}|| }|jdkr| |  |j¡¡ t|| d¡ j|ƒ || d¡ js5| d¡ || d¡ jrB| d¡ |S )	Nr   r   r.   r(   r»   rÉ   rö   ú-D_GLIBCXX_DEBUG=1rÊ   rÌ   r6   r6   r7   rÍ   •  s   


z&GnuCPPCompiler.get_option_compile_argsc                 C  rÎ   rÏ   rÐ   rÔ   r6   r6   r7   rÖ   ¥  r×   z#GnuCPPCompiler.get_option_link_argsÚpch_dirÚheaderc                 C  s   ddt j |¡gS )Nz-fpch-preprocessz-include)ÚosÚpathÚbasename)r>   rù   rú   r6   r6   r7   Úget_pch_use_args°  s   zGnuCPPCompiler.get_pch_use_argsre   rV   c                 C  s,   g }|   |d¡D ]
}| d|› ¡ qdgS rÙ   rÜ   rÝ   r6   r6   r7   rß   ³  s   z.GnuCPPCompiler.language_stdlib_only_link_flagsrá   râ   rž   rã   )rù   r)   rú   r)   r,   r+   rä   )	rŸ   r    r¡   rO   r“   rÍ   rÖ   rþ   rß   r6   r6   r6   r7   rõ   b  s    ü

!

rõ   c                   @  s   e Zd Z			dddd„ZdS )ÚPGICPPCompilerNrA   r+   rB   rC   r)   rD   r&   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   c
           
      C  ó,   t j| |||||||||	d
 t | ¡ d S ©Nrª   ©r9   rO   r   rP   r6   r6   r7   rO   ¿  ó   ÿzPGICPPCompiler.__init__rš   r›   )rŸ   r    r¡   rO   r6   r6   r6   r7   rÿ   ¾  s
    ýrÿ   c                   @  s"   e Zd ZdZ			dddd„ZdS )ÚNvidiaHPC_CPPCompilerZ
nvidia_hpcNrA   r+   rB   rC   r)   rD   r&   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   c
           
      C  r   r  r  rP   r6   r6   r7   rO   Ì  r  zNvidiaHPC_CPPCompiler.__init__rš   r›   )rŸ   r    r¡   rŠ   rO   r6   r6   r6   r7   r  È  s    ýr  c                      sN   e Zd Z				d+d,dd„Zd-dd„Zdddœd.‡ fd%d&„Zd/d)d*„Z‡  ZS )0ÚElbrusCPPCompilerNrA   r+   rB   rC   r)   rD   r&   rE   rF   rG   rH   rI   rJ   rK   rL   r§   r¨   rM   rN   c                 C  s,   t j| |||||||||
d
 t | ¡ d S r  )r9   rO   r   rë   r6   r6   r7   rO   Ö  s   ÿzElbrusCPPCompiler.__init__r,   rŽ   c              	   C  s  t  | ¡}g d¢}t| jdƒr|g d¢7 }t| jdƒr't| jdƒr'|g d¢7 }t| jdƒr3|dd	g7 }t| jd
ƒr?|ddg7 }t| jdƒrK|g d¢7 }t| jdƒrW|ddg7 }t| jdƒrc|ddg7 }td| j| jd}| | d¡t	 
dg d¢d¡| d¡t	 dd¡i¡ ||| _|S )N)r.   r½   rî   z	>=1.20.00)r¾   rw   r   rï   rx   r€   z	>=1.21.00z<1.22.00)r   r‚   ry   rz   z	>=1.22.00r   r‚   z	>=1.23.00ry   rz   z	>=1.24.00)r{   rƒ   r|   r„   z	>=1.25.00r}   r~   z	>=1.26.00r…   r†   r   r   r(   r·   r¸   r¹   rö   r÷   F©r9   r“   r   rC   r   rD   r”   r•   rÁ   r   r–   rÂ   rÃ   ©r>   r˜   Úcpp_stdsr™   r6   r6   r7   r“   ß  s<   
ýþú
zElbrusCPPCompiler.get_optionsr_   Úfuncnamerd   re   rV   r`   úT.Optional[T.List[str]]ra   rg   rh   c                  s"   |dkrdS t ƒ j|||||dS )NÚlchmod)FFr_   )rZ   Úhas_function)r>   r	  rd   re   r`   ra   r]   r6   r7   r    s   þzElbrusCPPCompiler.has_functionrÇ   rÈ   c                 C  sn   g }t d| j| jd}|| }|jdkr| |  |j¡¡ t|| d¡ j|ƒ || d¡ jr5| d¡ |S )Nr   r   r.   r(   rö   rø   rÊ   rÌ   r6   r6   r7   rÍ     s   

z)ElbrusCPPCompiler.get_option_compile_argsrá   râ   rž   )r	  r)   rd   r)   re   rV   r`   r
  ra   rg   r,   rh   rã   )rŸ   r    r¡   rO   r“   r  rÍ   r¥   r6   r6   r]   r7   r  Õ  s    ü
	%þr  c                   @  s<   e Zd Z			dd dd„Zd!dd„Zd"dd„Zd"dd„ZdS )#ÚIntelCPPCompilerNrA   r+   rB   rC   r)   rD   r&   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   c
                 C  sh   t j| |||||||||	d
 t | ¡ d| _g d¢}
g |
dg |
ddg |
ddg |
dg dœ| _d S )Nrª   z
c++-header)r«   z-w3z-Wpch-messagesz-diag-disable:remarkr­   r¯   )r9   rO   r   Zlang_headerr´   rí   r6   r6   r7   rO     s   ÿ


üzIntelCPPCompiler.__init__r,   rŽ   c                 C  sø   t  | ¡}ddg}ddg}t| jdƒr|ddg7 }|dg7 }t| jd	ƒr)|d
g7 }t| jdƒr4|dg7 }t| jdƒrD|dg7 }|dg7 }td| j| jd}| | d¡t	 
dg d¢d¡| d¡t	 dd¡| d¡t	 dd¡i¡ dg| | || _|S )Nr½   r¾   rî   rï   z>=15.0.0r   r   r€   z>=16.0.0rƒ   z>=17.0.0r‚   z>=19.1.0r}   r~   r   r   r(   r·   r¸   r¹   r»   r¼   Trö   r÷   Fr.   r  )r>   r˜   Zc_stdsZg_stdsr™   r6   r6   r7   r“   ,  s2   





ýù	zIntelCPPCompiler.get_optionsrÇ   rÈ   c                 C  s¢   g }t d| j| jd}|| }|jdkr&dddœ}| d| |j|j¡ ¡ || d¡ jdkr5| d	¡ || d
¡ jsB| d¡ || d¡ jrO| d¡ |S )Nr   r   r.   r½   rî   )r¾   rï   rn   r(   r/   r»   rÉ   rö   rø   )r   rD   r”   rË   r4   r<   rÁ   )r>   rÇ   r*   r™   r   Zremap_cpp03r6   r6   r7   rÍ   K  s   
þ


z(IntelCPPCompiler.get_option_compile_argsc                 C  rð   rñ   r6   rò   r6   r6   r7   rÖ   ]  ró   z%IntelCPPCompiler.get_option_link_argsrš   r›   rž   rã   )rŸ   r    r¡   rO   r“   rÍ   rÖ   r6   r6   r6   r7   r    s    ý

r  c                   @  rå   )ÚIntelLLVMCPPCompilerr‰   Nrç   r6   r6   r6   r7   r  a  rè   r  c                   @  sT   e Zd ZdZdddddddd	d
dddœZd dd„Zd!dd„Zd dd„Zd"dd„ZdS )#Ú VisualStudioLikeCPPCompilerMixinz?Mixin for C++ specific method overrides in MSVC-like compilers.)TN)Té   )Té   )Té   )Té   )TÚlatest)Fr  )Fr  )Fr  )Fr  )Fr  )r.   úvc++11úvc++14úvc++17úvc++20ú
vc++latestr   r   rƒ   r…   ú	c++latestrÇ   rÈ   r,   r+   c                 C  s,   t d| j| jd}t d|| jd d … ¡S )Nr¿   r   r+   )r   rD   r”   ÚTÚcastrË   ©r>   rÇ   r™   r6   r6   r7   rÖ   x  s   z5VisualStudioLikeCPPCompilerMixin.get_option_link_argsr˜   rŽ   r  c                 C  sl   t d| j| jd}| | d¡t dg d¢d¡| d¡t dd	¡| d
¡t dt	¡i¡ ||| d¡ _
|S )Nr   r   r(   r·   r¸   r¹   r»   r¼   Tr¿   zWindows libs to link against.)r   rD   r”   r•   rÁ   r   r–   rÂ   rÆ   r   rÃ   r  r6   r6   r7   Ú_get_options_impl}  s   ýþùz2VisualStudioLikeCPPCompilerMixin._get_options_implc                 C  s¸   g }t d| j| jd}|| d¡ }|jdkr| d¡ n|jdkr(| d¡ n| d|j ¡ || d	¡ js=| d
¡ | j|| j \}}|d urS| d|› ¡ |sZ| d¡ |S )Nr   r   r(   r¹   z/EHscr.   z/EHs-c-z/EHr»   z/GR-z/std:c++ú/permissive-)r   rD   r”   rÁ   rË   r4   ÚVC_VERSION_MAP)r>   rÇ   r*   r™   r(   Z
permissiveÚverr6   r6   r7   rÍ   Ž  s    



z8VisualStudioLikeCPPCompilerMixin.get_option_compile_argsrY   r   c                 C  ó   t  | |¡S rñ   )r   r[   r\   r6   r6   r7   r[   §  ó   z8VisualStudioLikeCPPCompilerMixin.get_compiler_check_argsNrã   )r˜   rŽ   r  r+   r,   rŽ   r   )	rŸ   r    r¡   rô   r   rÖ   r  rÍ   r[   r6   r6   r6   r7   r  f  s$    õ


r  c                      s"   e Zd ZdZd‡ fdd„Z‡  ZS )	ÚCPP11AsCPP14Mixinz’Mixin class for VisualStudio and ClangCl to replace C++11 std with C++14.

    This is a limitation of Clang and MSVC that ICL doesn't share.
    rÇ   rÈ   r,   r+   c                   sp   t d| j| jd}|| jdv r2tj| jddddd t |¡}|| jd	kr-d
|| _nd|| _t	ƒ  
|¡S )Nr   r   >   r  r   zdoes not support C++11;z5attempting best effort; setting the standard to C++14TF)Úoncer3   r  r  r   )r   rD   r”   rË   r   r5   rŠ   rÑ   ÚdeepcopyrZ   rÍ   r  r]   r6   r7   rÍ   ³  s   
þ

z)CPP11AsCPP14Mixin.get_option_compile_argsrã   )rŸ   r    r¡   rô   rÍ   r¥   r6   r6   r]   r7   r$  ¬  s    r$  c                      sB   e Zd ZdZ			dd dd„Zd!‡ fdd„Zd"‡ fdd„Z‡  ZS )#ÚVisualStudioCPPCompilerÚmsvcNrA   r+   rB   rC   r)   rD   r&   rE   rF   rG   rH   ÚtargetrI   rJ   rK   rL   rM   rN   c                 C  sL   t j| ||||||||	|
d
 t | |¡ t| jdƒr$| jdg | _d S d S )Nrª   z>= 19.14.26428z/Zc:__cplusplus)r9   rO   r   r   rC   Zalways_args)r>   rA   rB   rC   rD   rE   rG   r)  rI   rK   rM   r6   r6   r7   rO   Ì  s   ÿÿz VisualStudioCPPCompiler.__init__r,   rŽ   c                   sh   g d¢}t | jdƒr| g d¢¡ t | jdƒr| g d¢¡ t | jdƒr+| ddg¡ |  tƒ  ¡ |¡S )	N)r.   r   r  z>=19)r   r  r  z>=19.11)r  rƒ   r  z>=19.29r…   r  )r   rC   Úextendr  rZ   r“   ©r>   r  r]   r6   r7   r“   Û  s   z#VisualStudioCPPCompiler.get_optionsrÇ   rÈ   c                   s–   t d| j| jd}|| jdkr't| jdƒr'tjddd t |¡}d|| _t	ƒ  
|¡}t| jdƒrIz| d	¡}W n tyE   | Y S w ||= |S )
Nr   r   r.   z<19.00.24210z7This version of MSVC does not support cpp_std argumentsFr2   z<19.11r  )r   rD   r”   rË   r   rC   r   r5   rÑ   rZ   rÍ   ÚindexÚ
ValueError)r>   rÇ   r™   r*   rŒ   r]   r6   r7   rÍ   ç  s   

ÿz/VisualStudioCPPCompiler.get_option_compile_argsrš   )rA   r+   rB   r+   rC   r)   rD   r&   rE   rF   rG   rH   r)  r)   rI   rJ   rK   rL   rM   rN   rž   rã   )rŸ   r    r¡   rŠ   rO   r“   rÍ   r¥   r6   r6   r]   r7   r'  È  s    ür'  c                      s4   e Zd ZdZ			dddd„Zd‡ fdd„Z‡  ZS )ÚClangClCPPCompilerzclang-clNrB   r+   rC   r)   rD   r&   rE   rF   rG   rH   r)  rI   rJ   rK   rL   rM   rN   c
           
      C  ó.   t j| g ||||||||	d
 t | |¡ d S r  )r9   rO   r   ©
r>   rB   rC   rD   rE   rG   r)  rI   rK   rM   r6   r6   r7   rO   ü  ó   ÿzClangClCPPCompiler.__init__r,   rŽ   c                   ó   g d¢}|   tƒ  ¡ |¡S )N)
r.   r   r  r   r  rƒ   r  r…   r  r  ©r  rZ   r“   r+  r]   r6   r7   r“     s   zClangClCPPCompiler.get_optionsrš   ©rB   r+   rC   r)   rD   r&   rE   rF   rG   rH   r)  r)   rI   rJ   rK   rL   rM   rN   rž   )rŸ   r    r¡   rŠ   rO   r“   r¥   r6   r6   r]   r7   r.  ø  s    ü	r.  c                      s:   e Zd Z			dddd„Zd‡ fdd„Zd dd„Z‡  ZS )!ÚIntelClCPPCompilerNrB   r+   rC   r)   rD   r&   rE   rF   rG   rH   r)  rI   rJ   rK   rL   rM   rN   c
           
      C  r/  r  )r9   rO   r   r0  r6   r6   r7   rO     r1  zIntelClCPPCompiler.__init__r,   rŽ   c                   r2  )N)r.   r   r  r   r  rƒ   r  r  r3  r+  r]   r6   r7   r“     s   zIntelClCPPCompiler.get_optionsrY   r   c                 C  r"  rñ   )r   r[   r\   r6   r6   r7   r[     r#  z*IntelClCPPCompiler.get_compiler_check_argsrš   r4  rž   r   )rŸ   r    r¡   rO   r“   r[   r¥   r6   r6   r]   r7   r5  
  s    ü	r5  c                   @  rå   )ÚIntelLLVMClCPPCompilerzintel-llvm-clNrç   r6   r6   r6   r7   r6    rè   r6  c                   @  sF   e Zd Z			d#d$dd„Zd%dd„Zd&dd„Zd&dd„Zd'd!d"„ZdS )(ÚArmCPPCompilerNrA   r+   rB   rC   r)   rD   r&   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   c
           
      C  r   r  )r9   rO   r   rP   r6   r6   r7   rO   %  r  zArmCPPCompiler.__init__r,   rŽ   c                 C  s.   t  | ¡}td| j| jd}g d¢|| _|S )Nr   r   )r.   r¾   r   ©r9   r“   r   rD   r”   rÃ   r—   r6   r6   r7   r“   -  ó   
zArmCPPCompiler.get_optionsrÇ   rÈ   c                 C  sN   g }t d| j| jd}|| }|jdkr| d¡ |S |jdkr%| d¡ |S )Nr   r   r   z--cpp11r¾   z--cpp©r   rD   r”   rË   r4   rÌ   r6   r6   r7   rÍ   3  s   


þ
z&ArmCPPCompiler.get_option_compile_argsc                 C  rð   rñ   r6   rò   r6   r6   r7   rÖ   =  ró   z#ArmCPPCompiler.get_option_link_argsrY   r   c                 C  rð   rñ   r6   r\   r6   r6   r7   r[   @  ró   z&ArmCPPCompiler.get_compiler_check_argsrš   r›   rž   rã   r   )rŸ   r    r¡   rO   r“   rÍ   rÖ   r[   r6   r6   r6   r7   r7  $  s    ý



r7  c                   @  sZ   e Zd Z			d'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,d%d&„Z	dS )-ÚCcrxCPPCompilerNrA   r+   rB   rC   r)   rD   r&   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   c
           
      C  r   r  )r9   rO   r   rP   r6   r6   r7   rO   E  r  zCcrxCPPCompiler.__init__r,   c                 C  s   ddgS )Nz-nologoz	-lang=cppr6   rR   r6   r6   r7   Úget_always_argsN  s   zCcrxCPPCompiler.get_always_argsrÇ   rÈ   c                 C  rð   rñ   r6   rò   r6   r6   r7   rÍ   Q  ró   z'CcrxCPPCompiler.get_option_compile_argsc                 C  rð   rñ   r6   rR   r6   r6   r7   Úget_compile_only_argsT  ró   z%CcrxCPPCompiler.get_compile_only_argsr)  c                 C  s   d|› gS )Nz-output=obj=r6   )r>   r)  r6   r6   r7   Úget_output_argsW  s   zCcrxCPPCompiler.get_output_argsc                 C  rð   rñ   r6   rò   r6   r6   r7   rÖ   Z  ró   z$CcrxCPPCompiler.get_option_link_argsrY   r   c                 C  rð   rñ   r6   r\   r6   r6   r7   r[   ]  ró   z'CcrxCPPCompiler.get_compiler_check_argsrš   r›   rœ   rã   )r)  r)   r,   r+   r   )
rŸ   r    r¡   rO   r<  rÍ   r=  r>  rÖ   r[   r6   r6   r6   r7   r;  D  s    ý
	



r;  c                   @  sF   e Zd Z			d!d"dd„Zd#dd„Zd$dd„Zd%dd„Zd$dd „ZdS )&ÚTICPPCompilerNrA   r+   rB   rC   r)   rD   r&   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   c
           
      C  r   r  )r9   rO   r   rP   r6   r6   r7   rO   a  r  zTICPPCompiler.__init__r,   rŽ   c                 C  s.   t  | ¡}td| j| jd}ddg|| _|S )Nr   r   r.   r¾   r8  r—   r6   r6   r7   r“   i  r9  zTICPPCompiler.get_optionsrÇ   rÈ   c                 C  s<   g }t d| j| jd}|| }|jdkr| d|j ¡ |S )Nr   r   r.   z--r:  rÌ   r6   r6   r7   rÍ   o  s   
z%TICPPCompiler.get_option_compile_argsc                 C  rð   rñ   r6   rR   r6   r6   r7   r<  w  ró   zTICPPCompiler.get_always_argsc                 C  rð   rñ   r6   rò   r6   r6   r7   rÖ   z  ró   z"TICPPCompiler.get_option_link_argsrš   r›   rž   rã   rœ   )rŸ   r    r¡   rO   r“   rÍ   r<  rÖ   r6   r6   r6   r7   r?  `  s    ý


r?  c                   @  rå   )ÚC2000CPPCompilerZc2000Nrç   r6   r6   r6   r7   r@  }  rè   r@  )r(   r)   r*   r+   r,   r-   )YÚ
__future__r   rÑ   r£   Úos.pathrû   Útypingr  Ú r   r   Zmesonlibr   r   r   Ú	compilersr
   r   r   Zc_function_attributesr   r   Zmixins.cliker   Zmixins.ccrxr   Z	mixins.tir   Z
mixins.armr   r   Zmixins.visualstudior   r   Z
mixins.gnur   r   r   Zmixins.intelr   r   Zmixins.clangr   Zmixins.elbrusr   Z
mixins.pgir   Zmixins.emscriptenr   ÚTYPE_CHECKINGr   r    r!   ra   r"   Z	envconfigr#   rU   r$   Zlinkersr%   r&   Zprogramsr'   ZCompilerMixinBaseÚobjectr8   r9   r¦   ræ   ré   rê   rì   rõ   rÿ   r  r  r  r  r  r$  r'  r.  r5  r6  r7  r;  r?  r@  r6   r6   r6   r7   Ú<module>   sn   
xM2\
GEF0 