
    eU                       d dl m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 dd	lmZ dd
l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  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+ ddl,m-Z- ddl.m/Z/ ddl.m0Z0m1Z1 ddl2m3Z3m4Z4m5Z5 ejl                  r5ddlm7Z7m8Z8 ddl9m:Z: ddl;m<Z< ddl=m>Z> ddl?m@Z@ ddl	mAZA dd lBmCZC dd!l2mDZD e5ZEneFZEg d"ZGeGeGD  cg c]
  } d#| dd   c} z  ZGeGg d$z  ZG G d% d&ee5      ZH G d' d(eE      ZI G d) d*eIe'eH      ZJ G d+ d,eJ      ZK G d- d.eJ      ZL G d/ d0e-eJ      ZM G d1 d2eeH      ZN G d3 d4e eH      ZO G d5 d6e+eH      ZP G d7 d8e+eH      ZQ G d9 d:e)eH      ZR G d; d<e$eH      ZS G d= d>eJ      ZT G d? d@eE      ZU G dA dBeeUeH      ZV G dC dDeIeeUeH      ZW G dE dFe%eUeH      ZX G dG dHeX      ZY G dI dJeeH      ZZ G dK dLeeH      Z[ G dM dNeeH      Z\ G dO dPeeH      Z] G dQ dReeH      Z^ G dS dTe^      Z_ G dU dVe/eH      Z` G dW dXe/eH      Zayc c} w )Y    )annotationsN   )coredata)mlog)MesonExceptionversion_compare	OptionKey   )C_FUNC_ATTRIBUTES)CLikeCompiler)CcrxCompiler)Xc16Compiler)CompCertCompiler)
TICompiler)ArmCompilerArmclangCompiler)MSVCCompilerClangClCompiler)GnuCompiler)gnu_common_warning_argsgnu_c_warning_args)IntelGnuLikeCompilerIntelVisualStudioLikeCompiler)ClangCompiler)ElbrusCompiler)PGICompiler)EmscriptenMixin)MetrowerksCompiler)mwccarm_instruction_set_argsmwcceppc_instruction_set_args)gnu_winlibsmsvc_winlibsCompiler)MutableKeyedOptionDictTypeKeyedOptionDictType)
Dependency)MachineInfo)Environment)DynamicLinker)MachineChoice)ExternalProgram)CompileCheckMode)	c89c9xc90c99c1xc11c17c18c2xgnu)iso9899:1990iso9899:199409iso9899:1999iso9899:2011iso9899:2017iso9899:2018c                  x     e Zd Zd
dZdZ	 	 	 d	 	 	 	 	 	 	 ddZddZddZddd	 	 	 	 	 	 	 ddZd fd	Z	 xZ
S )	CCompilerc                N    	 t         |   S # t        $ r t        d| d      w xY w)NzUnknown function attribute "")r   KeyErrorr   )selfnames     8/usr/lib/python3/dist-packages/mesonbuild/compilers/c.pyattribute_check_funczCCompiler.attribute_check_funcA   s9    	I$T** 	I #?vQ!GHH	Is    $cNc
                l    t        j                  | |||||||	|	       t        j                  | |       y )N)is_crossfull_versionlinker)r#   __init__r   
rB   ccacheexelistversionfor_machinerH   infoexe_wrapperrJ   rI   s
             rD   rK   zCCompiler.__init__I   s6    
 	$+t#+,v	Wt[1    c                    dgS )Nz	-nostdinc rB   s    rD   get_no_stdinc_argszCCompiler.get_no_stdinc_argsR   s
    }rS   c                .    d}| j                  ||d|      S )Nz.int main(void) { int class=0; return class; }
zsanitycheckc.c)_sanity_check_impl)rB   work_direnvironmentcodes       rD   sanity_checkzCCompiler.sanity_checkU   s     @&&x>NPTUUrS   
extra_argsdependenciesc               \    |||d}d}| j                   |j                  di ||||      S )N)prefixheadersymbolz{prefix}
        #include <{header}>
        int main(void) {{
            /* If it's not defined as a macro, try to use as a symbol */
            #ifndef {symbol}
                {symbol};
            #endif
            return 0;
        }}r^   rU   )compilesformat)	rB   hnamerd   rb   envr_   r`   fargsts	            rD   has_header_symbolzCCompiler.has_header_symbolY   sF     "UfE }}XQXX..
*6  8 	8rS   c                    t         |          }t        d| j                  | j                        }|j                  |t        j                  dt              i       |S )NstdmachinelangC)	superget_optionsr	   rP   languageupdater   UserStdOption	_ALL_STDS)rB   optskey	__class__s      rD   rs   zCCompiler.get_optionsj   sR    w"$t'7'7dmmL''Y7
 	 rS   )rC   strreturnr{   NNNrM   T.List[str]rN   r   rO   r{   rP   r*   rH   boolrQ   'MachineInfo'rR   T.Optional['ExternalProgram']rJ   T.Optional['DynamicLinker']rI   T.Optional[str]r|   r   )rZ   r{   r[   'Environment'r|   None)rg   r{   rd   r{   rb   r{   rh   r   r_   zIT.Union[None, T.List[str], T.Callable[['CompileCheckMode'], T.List[str]]]r`    T.Optional[T.List['Dependency']]r|   T.Tuple[bool, bool]r|   z'MutableKeyedOptionDictType')__name__
__module____qualname__rE   rt   rK   rW   r]   rk   rs   __classcell__rz   s   @rD   r>   r>   @   s    I H TX7;152$23P242  /2V swKO8,8&o8 )I8 Uh8" rS   r>   c                  0     e Zd ZdZdZdZdZd fdZ xZS )_ClangCStdszMixin class for clang based compilers for setting C standards.

    This is used by both ClangCCompiler and ClangClCompiler, as they share
    the same versions
    z>=6.0.0>=8.0.0>=9.0.0c                   t         |          }g d}t        | j                  | j                        r|dgz  }t        | j                  | j
                        r|dgz  }t        | j                  | j                        r|dgz  }|t        d| j                  | j                           }t        |t        j                        sJ d       |j                  |d	       |S )
Nr-   r0   r2   r3   r4   r5   rm   rn   for mypyTr6   )rr   rs   r   rO   _C17_VERSION_C18_VERSION_C2X_VERSIONr	   rP   rt   
isinstancer   rv   set_versionsrB   rx   stdsstd_optrz   s       rD   rs   z_ClangCStds.get_options   s    w"$$ 4<<):):;UGOD4<<):):;UGOD4<<):):;UGODy0@0@t}}UV'8#9#9:FJF:Tt,rS   r   )	r   r   r   __doc__r   r   r   rs   r   r   s   @rD   r   r   s   s#     LLL rS   r   c                  T     e Zd Z	 	 	 	 d	 	 	 	 	 	 	 	 	 ddZd fdZddZddZ xZS )	ClangCCompilerc                    t         j                  | |||||||||

       t        j                  | |	       ddg}g ||dgz   |ddgz   dgd| _        y NrJ   rI   -Wall-Winvalid-pch-Wextra
-Wpedanticz-Weverything0123
everything)r>   rK   r   	warn_argsrB   rM   rN   rO   rP   rH   rQ   rR   rJ   definesrI   default_warn_argss               rD   rK   zClangCCompiler.__init__   sy    
 	4';RVXclr  BN  	OtW-$o6!00I;>0I|3LL)7(8	:rS   c                "   t         |          }| j                  j                         s| j                  j	                         rK|j                  t        d| j                  | j                        t        j                  dt              i       |S )Nwinlibsrn   &Standard Win libraries to link against)rr   rs   rQ   
is_windows	is_cygwinru   r	   rP   rt   r   UserArrayOptionr!   rB   rx   rz   s     rD   rs   zClangCCompiler.get_options   sr    w"$99!TYY%8%8%:KK)T-=-=DMMRT\TlTl<U  rS   c                    g }|t        d| j                  | j                           }|j                  dk7  r|j	                  d|j                  z          |S Nrm   rn   none-std=r	   rP   rt   valueappendrB   optionsargsrm   s       rD   get_option_compile_argsz&ClangCCompiler.get_option_compile_args   J    it/?/?dmmTU99KK#))+,rS   c                B   | j                   j                         s| j                   j                         rj|t        d| j                  | j
                           j                  j                         }t        |t              sJ |D ]  }t        |t              rJ  |S g S Nr   rn   )rQ   r   r   r	   rP   rt   r   copyr   listr{   rB   r   libsls       rD   get_option_link_argsz#ClangCCompiler.get_option_link_args   s    99!TYY%8%8%:9Y8H8Ht}}]^ddiikDdD))) *!!S)))*K	rS   NNNNrM   r   rN   r   rO   r{   rP   r*   rH   r   rQ   r   rR   r   rJ   r   r   zT.Optional[T.Dict[str, str]]rI   r   r   r   z'KeyedOptionDictType'r|   r   )r   r   r   rK   rs   r   r   r   r   s   @rD   r   r      sS     TX7;9=15	:$:3P:4: 7:  /	:	rS   r   c                      e Zd ZdZy)ArmLtdClangCCompilerarmltdclangNr   r   r   idrU   rS   rD   r   r      s    	BrS   r   c                      e Zd ZdZdZdZdZy)AppleClangCCompilerzHandle the differences between Apple Clang and Vanilla Clang.

    Right now this just handles the differences between the versions that new
    C standards were added.
    z>=10.0.0z>=11.0.0N)r   r   r   r   r   r   r   rU   rS   rD   r   r      s     LLLrS   r   c                  4    e Zd ZdZ	 	 	 	 d	 	 	 	 	 	 	 	 	 ddZy)EmscriptenCCompiler
emscriptenNc                    |st        d      t        |d      st        d      t        j                  | |||||||||	|
       y )Nz;Emscripten compiler can only be used for cross compilation.z	>=1.39.19z$Meson requires Emscripten >= 1.39.19)rR   rJ   r   rI   )r   r   r   rK   rB   rM   rN   rO   rP   rH   rQ   rR   rJ   r   rI   s              rD   rK   zEmscriptenCCompiler.__init__   sU    
  !^__w4 !GHHfgwX $+f(/l 	  	LrS   r   r   r   r   r   r   rK   rU   rS   rD   r   r      sN    	B TX7;9=15	L$L3PL4L 7L  /	LrS   r   c                  F    e Zd ZdZ	 	 	 d	 	 	 	 	 	 	 ddZd	dZd
dZd
dZy)ArmclangCCompilerz
    Keil armclang
    Nc
                    t         j                  | |||||||||	
       t        j                  |        ddg}
g |
|
dgz   |
ddgz   dgd| _        y r   )r>   rK   r   r   rB   rM   rN   rO   rP   rH   rQ   rR   rJ   rI   r   s              rD   rK   zArmclangCCompiler.__init__   sr     	4';V, 	 	X!!$'$o6!00I;>0I|3LL)7(8	:rS   c                    t         j                  |       }|t        d| j                  | j                           }t        |t        j                        sJ d       |j                  g dd       |S )Nrm   rn   r   )r/   r0   r2   Tr   	r>   rs   r	   rP   rt   r   r   rv   r   rB   rx   r   s      rD   rs   zArmclangCCompiler.get_options   sc    $$T*y0@0@t}}UV'8#9#9:FJF:2=rS   c                    g }|t        d| j                  | j                           }|j                  dk7  r|j	                  d|j                  z          |S r   r   r   s       rD   r   z)ArmclangCCompiler.get_option_compile_args   r   rS   c                    g S NrU   rB   r   s     rD   r   z&ArmclangCCompiler.get_option_link_args      	rS   r}   r~   r   r   )r   r   r   r   rK   rs   r   r   rU   rS   rD   r   r      sJ    
 TX7;15:$:3P:4:  /:rS   r   c                  \    e Zd ZdZdZdZ	 	 	 	 d
	 	 	 	 	 	 	 	 	 ddZddZddZddZ	dd	Z
y)GnuCCompilerr   r   z>=3.4.0Nc                N   t         j                  | |||||||||

       t        j                  | |	       dg}t        | j                  | j
                        r|dgz  }g ||dgz   |ddgz   |ddgz   | j                  t              z   | j                  t              z   d| _	        y )Nr   r   r   r   r   r   )
r>   rK   r   r   rO   _INVALID_PCH_VERSIONsupported_warn_argsr   r   r   r   s               rD   rK   zGnuCCompiler.__init__  s    
 	4';RVXclr  BN  	OT7+$I4<<)B)BC/!22!00I;>0I|3LL):i=V)V)-)A)ABY)Z*[)-)A)ABT)U*V	XrS   c                d   t         j                  |       }g d}t        | j                  | j                        r|ddgz  }t        | j                  | j
                        r|dgz  }t        d| j                  | j                        }||   }t        |t        j                        sJ d       |j                  |d	       | j                  j                         s| j                  j                         r:|j!                  |j#                  d
      t        j$                  dt&              i       |S )Nr   r3   r4   r5   rm   rn   r   Tr   r   r   )r>   rs   r   rO   r   r   r	   rP   rt   r   r   rv   r   rQ   r   r   ru   evolver   r!   )rB   rx   r   ry   r   s        rD   rs   zGnuCCompiler.get_options  s    $$T*$4<<):):;UEN"D4<<):):;UGODt'7'7dmmLs)'8#9#9:FJF:Tt,99!TYY%8%8%:KK

9%x'?'?<(  rS   c                    g }|t        d| j                  | j                           }|j                  dk7  r|j	                  d|j                  z          |S )Nrm   rp   ro   r   r   )r	   rt   rP   r   r   r   s       rD   r   z$GnuCCompiler.get_option_compile_args2  sJ    iDMM4CSCSTU99KK#))+,rS   c                B   | j                   j                         s| j                   j                         rj|t        d| j                  | j
                           j                  j                         }t        |t              sJ |D ]  }t        |t              rJ  |S g S )Nr   r   )rQ   r   r   r	   rt   rP   r   r   r   r   r{   r   s       rD   r   z!GnuCCompiler.get_option_link_args9  s    99!TYY%8%8%: '	)$--Y]YiYi(j k q q v v xDdD))) *!!S)))*K	rS   c                F    ddt         j                  j                  |      gS )Nz-fpch-preprocessz-include)ospathbasename)rB   pch_dirrc   s      rD   get_pch_use_argszGnuCCompiler.get_pch_use_argsC  s    "J0@0@0HIIrS   r   r   r   r   )r   r{   rc   r{   r|   r   )r   r   r   r   r   r   rK   rs   r   r   r   rU   rS   rD   r   r     sn    LL$ TX7;9=15	X$X3PX4X 7X  /	X$(JrS   r   c                  *    e Zd Z	 	 	 d	 	 	 	 	 	 	 ddZy)PGICCompilerNc
                l    t         j                  | |||||||||	
       t        j                  |        y Nr   r>   rK   r   rL   s
             rD   rK   zPGICCompiler.__init__H  ;     	4';V, 	 	XT"rS   r}   r~   )r   r   r   rK   rU   rS   rD   r   r   G  s2    SW7;15#$#3P#4#  /#rS   r   c                  .    e Zd ZdZ	 	 	 d	 	 	 	 	 	 	 ddZy)NvidiaHPC_CCompiler
nvidia_hpcNc
                l    t         j                  | |||||||||	
       t        j                  |        y r   r   rL   s
             rD   rK   zNvidiaHPC_CCompiler.__init__U  r   rS   r}   r~   r   rU   rS   rD   r  r  Q  s;    	B TX7;15#$#3P#4#  /#rS   r  c                  ^     e Zd Z	 	 	 	 d	 	 	 	 	 	 	 	 	 ddZddZddd	 	 	 	 	 d	 fdZ xZS )
ElbrusCCompilerNc                l    t         j                  | |||||||||

       t        j                  |        y r   )r>   rK   r   r   s              rD   rK   zElbrusCCompiler.__init___  s;    
 	4';V, 	 	X%rS   c                   t         j                  |       }g d}|g dz  }t        | j                  d      r|ddgz  }t        | j                  d      rt        | j                  d      r|g dz  }t        | j                  d	      r|g dz  }t        | j                  d
      r|g dz  }|t	        d| j
                  | j                           }t        |t        j                        sJ d       |j                  |       |S )N)r-   r.   r0   gnu89gnu9xgnu99)r7   r8   r9   z	>=1.20.00r2   gnu11z	>=1.21.00z<1.22.00)r/   r1   gnu90gnu1xr:   z	>=1.23.00z	>=1.26.00)r3   r4   r;   r<   gnu17gnu18rm   rn   r   r>   rs   r   rO   r	   rP   rt   r   r   rv   r   rB   rx   r   r   s       rD   rs   zElbrusCCompiler.get_optionsh  s    $$T*?BB4<<5UG$$D4<<5/$,,Xb:cDDD4<<5DDD4<<5TTDy0@0@t}}UV'8#9#9:FJF:T"rS   r^   c               8    |dk(  ryt         |   |||||      S )Nlchmod)FFr^   )rr   has_function)rB   funcnamerb   rh   r_   r`   rz   s         rD   r  zElbrusCCompiler.has_function{  s5     x7'&#3=5A ( C CrS   r   r   r   )r  r{   rb   r{   rh   r   r_   T.Optional[T.List[str]]r`   r   r|   r   )r   r   r   rK   rs   r  r   r   s   @rD   r  r  ^  su    SW7;9=15	&$&3P&4& 7&  /	&( <@FJC!8C#CCObC CrS   r  c                  :    e Zd Z	 	 	 d	 	 	 	 	 	 	 ddZddZddZy)	IntelCCompilerNc
                    t         j                  | |||||||||	
       t        j                  |        d| _        ddg}
g |
dgz   |
ddgz   |
ddgz   |
dgz   d| _        y )Nr   zc-headerr   z-w3z-diag-disable:remarkr   r   )r>   rK   r   lang_headerr   r   s              rD   rK   zIntelCCompiler.__init__  s     	4';V, 	 	X%%d+%$e,!04J3KK0I?U3VV0I?U3VV(9YK(G	IrS   c                "   t         j                  |       }ddg}t        | j                  d      r|dgz  }|t	        d| j
                  | j                           }t        |t        j                        sJ d       |j                  |d	       |S )
Nr-   r0   z>=16.0.0r2   rm   rn   r   Tr   r  r  s       rD   rs   zIntelCCompiler.get_options  s    $$T*u~4<<4UGODy0@0@t}}UV'8#9#9:FJF:Tt,rS   c                    g }|t        d| j                  | j                           }|j                  dk7  r|j	                  d|j                  z          |S r   r   r   s       rD   r   z&IntelCCompiler.get_option_compile_args  r   rS   r}   r~   r   r   r   r   r   rK   rs   r   rU   rS   rD   r  r    sA    SW7;15I$I3PI4I  /IrS   r  c                      e Zd ZdZy)IntelLLVMCCompilerz
intel-llvmNr   rU   rS   rD   r   r     s    	BrS   r   c                  ,     e Zd ZdZd fdZddZ xZS )VisualStudioLikeCCompilerMixinz3Shared methods that apply to MSVC-like C compilers.c                    t         |          }|j                  t        d| j                  | j
                        t        j                  dt              i       |S )Nr   rn   zWindows libs to link against.)	rr   rs   ru   r	   rP   rt   r   r   r"   r   s     rD   rs   z*VisualStudioLikeCCompilerMixin.get_options  sS    w"$i)9)9NPXPhPh/Q
 	 rS   c                    t        d| j                  | j                        }||   j                  j	                         }t        |t              sJ |D ]  }t        |t              rJ  |S r   )r	   rP   rt   r   r   r   r   r{   )rB   r   ry   r   r   s        rD   r   z3VisualStudioLikeCCompilerMixin.get_option_link_args  sf    	4+;+;$--Ps|!!&&($%%% 	&Aa%%%	&rS   r   r   )r   r   r   r   rs   r   r   r   s   @rD   r"  r"    s    =rS   r"  c                  V     e Zd ZdZdZ	 	 	 d	 	 	 	 	 	 	 	 	 	 	 ddZd fdZddZ xZS )	VisualStudioCCompilerz>=19.28c                n    t         j                  | ||||||||	|

       t        j                  | |       y r   )r>   rK   r   )rB   rM   rN   rO   rP   rH   rQ   targetrR   rJ   rI   s              rD   rK   zVisualStudioCCompiler.__init__  s?    
 	4';V(4 	 	6 	dF+rS   c                z   t         |          }ddg}t        | j                  | j                        r|dgz  }t        | j                  | j
                        r|ddgz  }|t        d| j                  | j                           }t        |t        j                        sJ d       |j                  |d	d	
       |S )Nr-   r0   r2   r3   r4   rm   rn   r   T)r6   gnu_deprecated)rr   rs   r   rO   _C11_VERSIONr   r	   rP   rt   r   r   rv   r   r   s       rD   rs   z!VisualStudioCCompiler.get_options  s    w"$u~4<<):):;UGOD4<<):):;UEN"Dy0@0@t}}UV'8#9#9:FJF:TtDArS   c                    g }|t        d| j                  | j                           }|j                  dv r|j	                  d       |S |j                  dv r|j	                  d       |S )Nrm   rn   >   r2   z/std:c11>   r3   r4   z/std:c17r   r   s       rD   r   z-VisualStudioCCompiler.get_option_compile_args  sb    it/?/?dmmTU99KK
#  YY.(KK
#rS   r}   )rM   r   rN   r   rO   r{   rP   r*   rH   r   rQ   r   r(  r{   rR   r   rJ   r   rI   r   r   r   )	r   r   r   r+  r   rK   rs   r   r   r   s   @rD   r&  r&    s\    LL ?C7;15	,,'4,>A,;, 5,  /	,
rS   r&  c                  :    e Zd Z	 	 	 d	 	 	 	 	 	 	 	 	 	 	 ddZddZy)ClangClCCompilerNc
                n    t         j                  | g ||||||||	
       t        j                  | |       y r   )r>   rK   r   
rB   rN   rO   rP   rH   rQ   r(  rR   rJ   rI   s
             rD   rK   zClangClCCompiler.__init__  s?    
 	4Wg{HV(4 	 	6 	  v.rS   c                ~    t        d| j                  | j                        }||   j                  }|dk7  rd| gS g S )Nrm   rn   r   z/clang:-std=)r	   rP   rt   r   )rB   r   ry   rm   s       rD   r   z(ClangClCCompiler.get_option_compile_args  sE    t'7'7dmmLcl  &="3%())	rS   r}   rN   r   rO   r{   rP   r*   rH   r   rQ   r   r(  r{   rR   r   rJ   r   rI   r   r   )r   r   r   rK   r   rU   rS   rD   r.  r.    sL     ?C7;15	//'4/>A/;/ 5/  /	/rS   r.  c                  R     e Zd ZdZ	 	 	 d	 	 	 	 	 	 	 	 	 	 	 ddZd fdZddZ xZS )	IntelClCCompilerz!Intel "ICL" compiler abstraction.c
                n    t         j                  | g ||||||||	
       t        j                  | |       y r   )r>   rK   r   r0  s
             rD   rK   zIntelClCCompiler.__init__  s?    
 	4Wg{HV(4 	 	6 	&..tV<rS   c                    t         |          }|t        d| j                  | j                           }t        |t        j                        sJ d       |j                  g d       |S Nrm   rn   r   r   )	rr   rs   r	   rP   rt   r   r   rv   r   )rB   rx   r   rz   s      rD   rs   zIntelClCCompiler.get_options  s\    w"$y0@0@t}}UV'8#9#9:FJF:23rS   c                   g }t        d| j                  | j                        }||   }|j                  dk(  rt	        j
                  dd       |S |j                  dk7  r|j                  d|j                  z          |S )	Nrm   rn   r-   zUICL doesn't explicitly implement c89, setting the standard to 'none', which is close.T)oncer   z/Qstd:)r	   rP   rt   r   r   logr   rB   r   r   ry   rm   s        rD   r   z(IntelClCCompiler.get_option_compile_args  ss    t'7'7dmmLcl99HHlswx  YY& KK399,-rS   r}   r2  r   r   )r   r   r   r   rK   rs   r   r   r   s   @rD   r4  r4    sU    + ?C7;15	=='4=>A=;= 5=  /	=rS   r4  c                      e Zd ZdZy)IntelLLVMClCCompilerzintel-llvm-clNr   rU   rS   rD   r=  r=    s    	BrS   r=  c                  >    e Zd Z	 	 	 d	 	 	 	 	 	 	 	 	 ddZddZddZy)	ArmCCompilerNc
                l    t         j                  | |||||||||	
       t        j                  |        y r   )r>   rK   r   rL   s
             rD   rK   zArmCCompiler.__init__$  s=    
 	4';V(4 	 	6 	T"rS   c                    t         j                  |       }|t        d| j                  | j                           }t        |t        j                        sJ d       |j                  g d       |S r7  r   r   s      rD   rs   zArmCCompiler.get_options.  ^    $$T*y0@0@t}}UV'8#9#9:FJF:23rS   c                    g }t        d| j                  | j                        }||   }|j                  dk7  r|j	                  d|j                  z          |S Nrm   rn   r   z--r   r;  s        rD   r   z$ArmCCompiler.get_option_compile_args5  N    t'7'7dmmLcl99KKsyy()rS   r}   r~   r   r   r  rU   rS   rD   r?  r?  #  sI     ?C7;15	##'4#;# 5#  /	#rS   r?  c                  v    e Zd Z	 	 	 d	 	 	 	 	 	 	 	 	 ddZddZddZddZddZddZddZ	dd	Z
dd
ZddZy)CcrxCCompilerNc
                l    t         j                  | |||||||||	
       t        j                  |        y r   )r>   rK   r   rL   s
             rD   rK   zCcrxCCompiler.__init__?  ;    
 	4';V, 	 	Xd#rS   c                    dgS )Nz-nologorU   rV   s    rD   get_always_argszCcrxCCompiler.get_always_argsI  
    {rS   c                    t         j                  |       }|t        d| j                  | j                           }t        |t        j                        sJ d       |j                  ddg       |S Nrm   rn   r   r-   r0   r   r   s      rD   rs   zCcrxCCompiler.get_optionsL  a    $$T*y0@0@t}}UV'8#9#9:FJF:eU^,rS   c                    g S r   rU   rV   s    rD   rW   z CcrxCCompiler.get_no_stdinc_argsS  r   rS   c                    g }t        d| j                  | j                        }||   }|j                  dk(  r|j	                  d       |S |j                  dk(  r|j	                  d       |S )Nrm   rn   r-   z-lang=cr0   z	-lang=c99r   r;  s        rD   r   z%CcrxCCompiler.get_option_compile_argsV  sf    t'7'7dmmLcl99KK	"  YY%KK$rS   c                    g S r   rU   rV   s    rD   get_compile_only_argsz#CcrxCCompiler.get_compile_only_args`  r   rS   c                    dgS )Nz-optimize=0rU   rV   s    rD   get_no_optimization_argsz&CcrxCCompiler.get_no_optimization_argsc  s
    rS   c                    d| gS )Nz-output=obj=rU   rB   r(  s     rD   get_output_argszCcrxCCompiler.get_output_argsf  s    vh'((rS   c                    dgS Nz-change_message=errorrU   rV   s    rD   get_werror_argszCcrxCCompiler.get_werror_argsi      '((rS   c                    |dk(  rd}d|z   gS )N .z	-include=rU   rB   r   	is_systems      rD   get_include_argszCcrxCCompiler.get_include_argsl  s    2:Dd"##rS   r}   r~   r   r   r   r(  r{   r|   r   r   r{   ra  r   r|   r   )r   r   r   rK   rK  rs   rW   r   rS  rU  rX  r[  rb  rU   rS   rD   rG  rG  >  sl     ?C7;15	$$'4$;$ 5$  /	$))$rS   rG  c                  n    e Zd Z	 	 	 d	 	 	 	 	 	 	 	 	 ddZddZddZddZddZddZddZ	dd	Z
dd
Zy)Xc16CCompilerNc
                l    t         j                  | |||||||||	
       t        j                  |        y r   )r>   rK   r   rL   s
             rD   rK   zXc16CCompiler.__init__s  rI  rS   c                    t         j                  |       }|t        d| j                  | j                           }t        |t        j                        sJ d       |j                  ddgd       |S )Nrm   rn   r   r-   r0   Tr   r   r   s      rD   rs   zXc16CCompiler.get_options|  sf    $$T*y0@0@t}}UV'8#9#9:FJF:eU^6rS   c                    g S r   rU   rV   s    rD   rW   z Xc16CCompiler.get_no_stdinc_args  r   rS   c                    g }t        d| j                  | j                        }||   }|j                  dk7  r/|j	                  d       |j	                  d|j                  z          |S )Nrm   rn   r   z-ansir   r   r;  s        rD   r   z%Xc16CCompiler.get_option_compile_args  sZ    t'7'7dmmLcl99KK KK#))+,rS   c                    g S r   rU   rV   s    rD   rS  z#Xc16CCompiler.get_compile_only_args  r   rS   c                    dgS Nz-O0rU   rV   s    rD   rU  z&Xc16CCompiler.get_no_optimization_args  	    wrS   c                    d| gS Nz-orU   rW  s     rD   rX  zXc16CCompiler.get_output_args      VHrS   c                    dgS rZ  rU   rV   s    rD   r[  zXc16CCompiler.get_werror_args  r\  rS   c                    |dk(  rd}d|z   gS Nr^  r_  z-IrU   r`  s      rD   rb  zXc16CCompiler.get_include_args      2:Dt}rS   r}   r~   r   r   r   rc  rd  )r   r   r   rK   rs   rW   r   rS  rU  rX  r[  rb  rU   rS   rD   rf  rf  r  sg     ?C7;15	$$'4$;$ 5$  /	$)rS   rf  c                  ^    e Zd Z	 	 	 d		 	 	 	 	 	 	 	 	 d
dZddZddZddZddZddZddZ	y)CompCertCCompilerNc
                l    t         j                  | |||||||||	
       t        j                  |        y r   )r>   rK   r   rL   s
             rD   rK   zCompCertCCompiler.__init__  s;    
 	4';V, 	 	X!!$'rS   c                    t         j                  |       }|t        d| j                  | j                           }t        |t        j                        sJ d       |j                  ddg       |S rN  r   r   s      rD   rs   zCompCertCCompiler.get_options  rO  rS   c                    g S r   rU   r   s     rD   r   z)CompCertCCompiler.get_option_compile_args  r   rS   c                    dgS rm  rU   rV   s    rD   rU  z*CompCertCCompiler.get_no_optimization_args  rn  rS   c                    d| gS rp  rU   rW  s     rD   rX  z!CompCertCCompiler.get_output_args  rq  rS   c                    dgS )Nz-WerrorrU   rV   s    rD   r[  z!CompCertCCompiler.get_werror_args  rL  rS   c                    |dk(  rd}d|z   gS rt  rU   r`  s      rD   rb  z"CompCertCCompiler.get_include_args  ru  rS   r}   r~   r   r   r   rc  rd  )
r   r   r   rK   rs   r   rU  rX  r[  rb  rU   rS   rD   rw  rw    s]     ?C7;15	(('4(;( 5(  /	(rS   rw  c                  N    e Zd Z	 	 	 d	 	 	 	 	 	 	 	 	 ddZd	dZd
dZd	dZddZy)TICCompilerNc
                l    t         j                  | |||||||||	
       t        j                  |        y r   )r>   rK   r   rL   s
             rD   rK   zTICCompiler.__init__  s;    
 	4';V, 	 	XD!rS   c                    g S r   rU   rV   s    rD   rK  zTICCompiler.get_always_args  r   rS   c                    t         j                  |       }|t        d| j                  | j                           }t        |t        j                        sJ d       |j                  g d       |S r7  r   r   s      rD   rs   zTICCompiler.get_options  rB  rS   c                    g S r   rU   rV   s    rD   rW   zTICCompiler.get_no_stdinc_args  r   rS   c                    g }t        d| j                  | j                        }||   }|j                  dk7  r|j	                  d|j                  z          |S rD  r   r;  s        rD   r   z#TICCompiler.get_option_compile_args  rE  rS   r}   r~   r   r   r   )r   r   r   rK   rK  rs   rW   r   rU   rS   rD   r  r    sS     ?C7;15	""'4";" 5"  /	"rS   r  c                      e Zd ZdZy)C2000CCompilerc2000Nr   rU   rS   rD   r  r    s    	BrS   r  c                  J    e Zd ZdZ	 	 	 d	 	 	 	 	 	 	 	 	 ddZd	dZd
dZddZy)MetrowerksCCompilerARMmwccarmNc
                l    t         j                  | |||||||||	
       t        j                  |        y r   r>   rK   r   rL   s
             rD   rK   zMetrowerksCCompilerARM.__init__  ;    
 	4';V, 	 	X##D)rS   c                .    t        j                  |d       S r   )r   getrB   instruction_sets     rD   get_instruction_set_argsz/MetrowerksCCompilerARM.get_instruction_set_args  s    +//FFrS   c                    t         j                  |       }dg}dg|z   |t        d| j                  | j                           _        |S Nr0   r   rm   rn   r>   rs   r	   rP   rt   choicesrB   rx   c_stdss      rD   rs   z"MetrowerksCCompilerARM.get_options  G    $$T*X^W_bhWhYud&6&6T]]KLTrS   c                    g }|t        d| j                  | j                           }|j                  dk7  r,|j	                  d       |j	                  |j                         |S )Nrm   rn   r   z-langr   r   s       rD   r   z.MetrowerksCCompilerARM.get_option_compile_args  sQ    it/?/?dmmTU99KK KK		"rS   r}   r~   r  r{   r|   r  r   r   r   r   r   r   rK   r  rs   r   rU   rS   rD   r  r    sT    	B ?C7;15	**'4*;* 5*  /	*GrS   r  c                  J    e Zd ZdZ	 	 	 d	 	 	 	 	 	 	 	 	 ddZd	dZd
dZddZy)"MetrowerksCCompilerEmbeddedPowerPCmwcceppcNc
                l    t         j                  | |||||||||	
       t        j                  |        y r   r  rL   s
             rD   rK   z+MetrowerksCCompilerEmbeddedPowerPC.__init__  r  rS   c                .    t        j                  |d       S r   )r    r  r  s     rD   r  z;MetrowerksCCompilerEmbeddedPowerPC.get_instruction_set_args  s    ,00$GGrS   c                    t         j                  |       }dg}dg|z   |t        d| j                  | j                           _        |S r  r  r  s      rD   rs   z.MetrowerksCCompilerEmbeddedPowerPC.get_options  r  rS   c                    g }|t        d| j                  | j                           }|j                  dk7  r|j	                  d|j                  z          |S )Nrm   rn   r   z-lang r   r   s       rD   r   z:MetrowerksCCompilerEmbeddedPowerPC.get_option_compile_args  sJ    it/?/?dmmTU99KK399,-rS   r}   r~   r  r   r   r  rU   rS   rD   r  r    sT    	B ?C7;15	**'4*;* 5*  /	*HrS   r  )b
__future__r   os.pathr   typingTr^  r   r   mesonlibr   r   r	   c_function_attributesr   mixins.cliker   mixins.ccrxr   mixins.xc16r   mixins.compcertr   	mixins.tir   
mixins.armr   r   mixins.visualstudior   r   
mixins.gnur   r   r   mixins.intelr   r   mixins.clangr   mixins.elbrusr   
mixins.pgir   mixins.emscriptenr   mixins.metrowerksr   r   r    	compilersr!   r"   r#   TYPE_CHECKINGr$   r%   r`   r&   	envconfigr'   r[   r(   linkers.linkersr)   r*   programsr+   r,   CompilerMixinBaseobjectrw   r>   r   r   r   r   r   r   r   r   r  r  r  r   r"  r&  r.  r4  r=  r?  rG  rf  rw  r  r  r  r  )rm   s   0rD   <module>r     sE   #     A A 4 ' % % - ! 5 > # C M ' ) # . 1 Z  ??J)')/(*+ K	 	3#CG9o3 3	 	o o	0x 0f# :*[- *Z> 

. 
L/> L$"() "J>J;	 >JB#;	 #
#+y 
#%Cni %CP)9 D 
%6 0#L*H) #L{O5SU^ &46TV_ @+ 
;	 61$L) 1$h,L) ,\ ()  D*i @[ / :);Y O 4s   +H=