
    <h(.                    z   % S SK Jr   S SKrS SKrS SKrSSKJr  SSKJr  SSK	J
r
JrJrJrJrJr  SSKJr  SS	KJr  S
SKJr  \R*                  (       a  SSKJr  SSKJr  SSKJr  SSKJr  \rO\rS/S/S/S.rS\S'   / S/S/S/S/S/S/S.r S\S'   SSS S!S".r! " S# S$\5      r" " S% S&\5      r# " S' S(\5      r$g))    )annotationsN   )mesonlib)options)AppleDynamicLinkerClangClDynamicLinkerLLVMDynamicLinkerGnuGoldDynamicLinkerMoldDynamicLinkerMSVCDynamicLinker)	OptionKey   )CompileCheckMode   )GnuLikeCompiler)MutableKeyedOptionDictType)Environment)
Dependency)Compilerz-fdiagnostics-color=autoz-fdiagnostics-color=alwaysz-fdiagnostics-color=never)autoalwaysneverzT.Dict[str, T.List[str]]clang_color_argsz-O0z-Ogz-O1z-O2z-O3z-Oz)plain0g123sclang_optimization_argsczc++zobjective-czobjective-c++)r"   cppobjcobjcppc                  (  ^  \ rS rSrSrSU 4S jjrSS jrSS jrSS jrSS jr	S S jr
S!S	 jrS"U 4S
 jjrSSS.     S#U 4S jjjrS$S jrS%U 4S jjr\S&U 4S jj5       rS'S jrS(S jrSSS.S)U 4S jjjrS*S jrSSSS.   S+S jjrSrU =r$ ),ClangCompiler5   clangc           	        > [         TU ]  5         U=(       d    0 U l        U R                  R	                  [        S5      [        S5      [        S5      [        S5      [        S5      15        [        U R                  [        5      (       a%  U R                  R                  [        S5      5        OC[        U R                  [        5      (       a$  U R                  R                  [        S5      5        U R                  R                  S5        g )	N
b_coloroutb_lto_threads
b_lto_modeb_thinlto_cacheb_thinlto_cache_dir	b_bitcodeb_vscrtll)super__init__definesbase_optionsupdater   
isinstancelinkerr   addr   can_compile_suffixes)selfr5   	__class__s     ڂ/mnt/mint/home/seanl/mnt/public/Repos/ladybird/Build/vcpkg/downloads/tools/meson-1.9.0-d1fcc2/mesonbuild/compilers/mixins/clang.pyr4   ClangCompiler.__init__9   s    }"  |$i&@)LBY[dev[w,-/	0 dkk#566!!)K"89%677!!)I"67!!%%d+    c                    [         U   S S  $ N)r   )r<   	colortypes     r>   get_colorout_argsClangCompiler.get_colorout_argsI   s    	*1--r@   c                    XR                   ;   $ rB   r5   r<   defines     r>   has_builtin_define ClangCompiler.has_builtin_defineL   s    %%r@   c                8    U R                   R                  U5      $ rB   )r5   getrH   s     r>   get_builtin_define ClangCompiler.get_builtin_defineO   s    ||''r@   c                    [         U   $ rB   )r!   )r<   optimization_levels     r>   get_optimization_args#ClangCompiler.get_optimization_argsR   s    &'9::r@   c                    g)Npch r<   s    r>   get_pch_suffixClangCompiler.get_pch_suffixU   s    r@   c                b    S[         R                  R                  XR                  U5      5      /$ )Nz-include-pch)ospathjoinget_pch_name)r<   pch_dirheaders      r>   get_pch_use_argsClangCompiler.get_pch_use_argsX   s'     W6G6G6O PQQr@   c                   > S/nU[         R                  L aJ  UR                  SS/5        [        R                  " U R
                  S5      (       a  UR                  S5        [        TU ]!  U5      U-   $ )Nz%-Werror=implicit-function-declarationz-Werror=unknown-warning-optionz$-Werror=unused-command-line-argumentz>=3.6.0z%-Werror=ignored-optimization-argument)	r   COMPILEextendr   version_compareversionappendr3   get_compiler_check_args)r<   modemyargsr=   s      r>   ri   %ClangCompiler.get_compiler_check_args^   si    &  GG#+++MM;=cde''i@@EFw.t4v==r@   N
extra_argsdependenciesc                  > Uc  / n[        U R                  [        5      (       a7  [        R                  " U R
                  S5      (       a  UR                  S5        [        TU ]!  XX4US9$ )Nz>=8.0z-Wl,-no_weak_importsrm   )	r8   r9   r   r   rf   rg   rh   r3   has_function)r<   funcnameprefixenvrn   ro   r=   s         r>   rq   ClangCompiler.has_functionx   sk     J dkk#5668;S;STXT`T`bi;j;j45w#Hc1= $ ? 	?r@   c                    [         R                  " U R                  S5      (       a  S/$ [         R                  " U R                  S5      (       a  S/$ / $ )Nz>=3.8.0z-fopenmpz>=3.7.0z-fopenmp=libomp)r   rf   rg   )r<   rt   s     r>   openmp_flagsClangCompiler.openmp_flags   sH    ##DLL)<<<%%dllI>>%&& Ir@   c                x   > [        U R                  [        [        45      (       a  SU-   /$ [        TU ]  U5      $ )Nz	-Wl,/DEF:)r8   r9   r   r   r3   gen_vs_module_defs_args)r<   defsfiler=   s     r>   rz   %ClangCompiler.gen_vs_module_defs_args   s;    dkk$8:K#LMM  (*++w.x88r@   c                  > US:X  a  S/$ US:X  a  S/$ US:X  a  S/$ [         R                  " U5      (       a;  [         R                  " U5      (       d  [        R                  " SU S35      eS	U 3/$ [        TU ]  X5      $ )
Neldz-fuse-ld=eldqcldz-fuse-ld=qcldmoldz-fuse-ld=moldzCannot find linker .	-fuse-ld=)shutilwhichr   MesonExceptionr3   use_linker_args)clsr9   rg   r=   s      r>   r   ClangCompiler.use_linker_args   s     U?"##V#$$V#$$<<<<''--)&35 5x())w&v77r@   c                    S/$ )Nz-Werror=attributesrV   )r<   names     r>   !get_has_func_attribute_extra_args/ClangCompiler.get_has_func_attribute_extra_args   s     %%%r@   c                    S/$ )Nz
--coveragerV   rW   s    r>   get_coverage_link_args$ClangCompiler.get_coverage_link_args   s
    ~r@   r   defaultthreadsrj   c                 > / nUS:X  a  [        U R                  [        5      (       aG  [        R                  " U R                  R
                  S5      (       d  [        R                  " S5      eO\[        U R                  [        [        [        [        45      (       d-  [        R                  " SU R                  R                   35      eUR                  SU 35        U$ US:X  d   S5       eUR                  [        TU ]=  US95        U$ )	Nthinz>=1.1z!LLVM's ThinLTO requires mold 1.1+zFLLVM's ThinLTO only works with gold, lld, lld-link, ld64 or mold, not z-flto=r   z#someone forgot to wire something up)r   )r8   r9   r   r   rf   rg   r   r   r   r	   r
   idrh   re   r3   get_lto_compile_args)r<   r   rj   argsr=   s       r>   r   "ClangCompiler.get_lto_compile_args   s   6>$++(9;;//0C0CWMM"112UVV N.@BVXik  .A  B  B--0vw{  xC  xC  xF  xF  wG  /H  I  IKK&(  9$K&KK$KK4W4EFr@   c                    [        U R                  [        [        45      (       aC  U Vs/ s H5  o"R	                  S5      (       d  UR	                  S5      (       a  UOSU 3PM7     sn$ U$ s  snf )Nz-Wl,r   )r8   r9   r   r   
startswith)r<   r   flags      r>   linker_to_compiler_args%ClangCompiler.linker_to_compiler_args   sf    dkk$8:K#LMMswxswkoOOF33t{7S7SD[_`d_eYffswxxK ys   <A+)r   rj   thinlto_cache_dirc               6   U R                  XS9nUS:X  a-  Ub*  UR                  U R                  R                  U5      5        US:  aP  [        R
                  " U R                  S5      (       d  [        R                  " S5      eUR                  SU 35        U$ )Nr   r   r   z>=4.0.0z2clang support for LTO threads requires clang >=4.0z-flto-jobs=)	r   re   r9   get_thinlto_cache_argsr   rf   rg   r   rh   )r<   r   rj   r   r   s        r>   get_lto_link_argsClangCompiler.get_lto_link_args   s    (((D6>/; KK::;LMNQ;++DLL)DD--.bccKK+gY/0r@   rG   )r5   zT.Optional[T.Dict[str, str]])rC   strreturnT.List[str])rI   r   r   bool)rI   r   r   T.Optional[str])rQ   r   r   r   )r   r   )r_   r   r`   r   r   r   )rj   r   r   r   )rr   r   rs   r   rt   z'Environment'rn   zT.Optional[T.List[str]]ro   z T.Optional[T.List['Dependency']]r   zT.Tuple[bool, bool])rt   r   r   r   )r{   r   r   r   )r9   r   rg   r   r   r   )r   r   r   r   )r   r   )r   intrj   r   r   r   )r   r   r   r   )r   r   rj   r   r   r   r   r   )__name__
__module____qualname____firstlineno__r   r4   rD   rJ   rN   rR   rX   ra   ri   rq   rw   rz   classmethodr   r   r   r   r   r   __static_attributes____classcell__r=   s   @r>   r'   r'   5   s    	B, .&(;R>6 <@FJ?!8?#C?Ob? ?9 8 8,&
 67I    34?C-<HS r@   r'   c                  D   ^  \ rS rSrSrSrSrSrSrSr	S
U 4S jjr
S	rU =r$ )
ClangCStds   zMixin 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.0z>=8.0.0z>=9.0.0z>=18.0.0z>=19.0.0c                  > [         TU ]  5       n/ SQn[        R                  " U R                  U R
                  5      (       a  US/-  n[        R                  " U R                  U R                  5      (       a  US/-  n[        R                  " U R                  U R                  5      (       a  US/-  n[        R                  " U R                  U R                  5      (       a  US/-  n[        R                  " U R                  U R                  5      (       a  US/-  nU R                  S5      nX   n[        U[        R                  5      (       d   S5       eUR                  US	S
9  U$ )N)c89c99c11c17c18c2xc23c2ystdfor mypyTgnu)r3   get_optionsr   rf   rg   _C17_VERSION_C18_VERSION_C2X_VERSION_C23_VERSION_C2Y_VERSIONform_compileropt_keyr8   r   UserStdOptionset_versionsr<   optsstdskeystd_optr=   s        r>   r   ClangCStds.get_options   s,   w"$$ ##DLL$2C2CDDUGOD##DLL$2C2CDDUGOD##DLL$2C2CDDUGOD##DLL$2C2CDDUGOD##DLL$2C2CDDUGOD''.)'7#8#899E:E9Tt,r@   rV   r   r   )r   r   r   r   __doc__r   r   r   r   r   r   r   r   r   s   @r>   r   r      s-     LLLLL r@   r   c                  8   ^  \ rS rSrSrSrSrSU 4S jjrSrU =r	$ )ClangCPPStds   zgMixin class for clang based compilers for setting C++ standards.

This is used by the ClangCPPCompiler
z>=12.0.0z>=17.0.0c                  > [         TU ]  5       n/ SQn[        R                  " U R                  U R
                  5      (       a  UR                  S5        [        R                  " U R                  U R                  5      (       a  UR                  S5        U R                  S5      nX   n[        U[        R                  5      (       d   S5       eUR                  USS9  U$ )N)zc++98zc++03zc++11zc++14zc++17zc++1zzc++2azc++20zc++23zc++26r   r   Tr   )r3   r   r   rf   rg   _CPP23_VERSIONrh   _CPP26_VERSIONr   r8   r   r   r   r   s        r>   r   ClangCPPStds.get_options	  s    w"$
 ##DLL$2E2EFFKK ##DLL$2E2EFFKK ''.)'7#8#899E:E9Tt,r@   rV   r   )
r   r   r   r   r   r   r   r   r   r   r   s   @r>   r   r      s    
  NN r@   r   )%
__future__r   r[   r   typingT r   r   linkers.linkersr   r   r	   r
   r   r   r   	compilersr   r   r   TYPE_CHECKINGr   environmentr   ro   r   r   CompilerMixinBaseobjectr   __annotations__r!   clang_lang_mapr'   r   r   rV   r@   r>   <module>r      s    # 6 	    ) )   (  ??5**$  ((+,)*. *  





5 1  
	cO cL!" !H$ r@   