§
    ƒnóc   ã                  óì   — 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	m
Z
mZmZmZ ddlmZ ddlmZ d	d
lmZ ej        rddlmZ ddlmZ dgdgdgdœZg dgdgdgdgdgdgdœZ G d„ de¦  «        ZdS )é    )ÚannotationsNé   )Úmesonlib)ÚAppleDynamicLinkerÚClangClDynamicLinkerÚLLVMDynamicLinkerÚGnuGoldDynamicLinkerÚMoldDynamicLinker)Ú	OptionKeyé   )ÚCompileCheckModeé   )ÚGnuLikeCompiler)ÚEnvironment)Ú
Dependencyz-fcolor-diagnosticsz-fno-color-diagnostics)ÚautoÚalwaysÚneverz-O0z-Ogz-O1z-O2z-O3z-Oz)ÚplainÚ0ÚgÚ1Ú2Ú3Úsc                  óÎ   ‡ — e Zd ZdZd4ˆ fd„Zd5d	„Zd6d„Zd7d„Zd8d„Zd9d„Z	d:d„Z
d;ˆ fd„Zdddœd<ˆ fd#„Zd=d$„Zed>ˆ fd'„¦   «         Zd?d)„Zd=d*„Zd+d,d-œd@ˆ fd0„Zd+d,dd1œdAd3„Zˆ xZS )BÚClangCompilerÚclangÚdefinesúT.Optional[T.Dict[str, str]]c           	     óÐ  •— t          ¦   «                              ¦   «          |pi | _        | j                             t          d¦  «        t          d¦  «        t          d¦  «        t          d¦  «        t          d¦  «        h¦  «         t          | j        t          ¦  «        r'| j         	                    t          d¦  «        ¦  «         | j
         	                    d¦  «         d S )NÚ
b_coloroutÚb_lto_threadsÚ
b_lto_modeÚb_thinlto_cacheÚb_thinlto_cache_dirÚ	b_bitcodeÚll)ÚsuperÚ__init__r   Úbase_optionsÚupdater   Ú
isinstanceÚlinkerr   ÚaddÚcan_compile_suffixes)Úselfr   Ú	__class__s     €úC/usr/lib/python3/dist-packages/mesonbuild/compilers/mixins/clang.pyr*   zClangCompiler.__init__5   sÎ   ø€ Ý‰Œ×ÒÑÔÐØ�} "ˆŒØÔ× Ò Ý�|Ñ$Ô$¥i°Ñ&@Ô&@Å)ÈLÑBYÔBYÕ[dÐevÑ[wÔ[wÝÐ,Ñ-Ô-ð/ñ	0ô 	0ð 	0õ �d”kÕ#5Ñ6Ô6ð 	:ØÔ×!Ò!¥)¨KÑ"8Ô"8Ñ9Ô9Ð9àÔ!×%Ò% dÑ+Ô+Ð+Ð+Ð+ó    Ú	colortypeÚstrÚreturnúT.List[str]c                ó,   — t           |         d d …         S ©N)Úclang_color_args)r1   r5   s     r3   Úget_colorout_argszClangCompiler.get_colorout_argsC   s   € Ý 	Ô*¨1¨1¨1Ô-Ð-r4   ÚdefineÚboolc                ó   — || j         v S r:   )r   ©r1   r=   s     r3   Úhas_builtin_definez ClangCompiler.has_builtin_defineF   s   € Ø˜œÐ%Ð%r4   úT.Optional[str]c                ó6   — | j                              |¦  «        S r:   )r   Úgetr@   s     r3   Úget_builtin_definez ClangCompiler.get_builtin_defineI   s   € ØŒ|×Ò Ñ'Ô'Ð'r4   Úoptimization_levelc                ó   — t           |         S r:   )Úclang_optimization_args)r1   rF   s     r3   Úget_optimization_argsz#ClangCompiler.get_optimization_argsL   s   € Ý&Ð'9Ô:Ð:r4   c                ó   — dS )NÚpch© ©r1   s    r3   Úget_pch_suffixzClangCompiler.get_pch_suffixO   s   € Øˆur4   Úpch_dirÚheaderc                ól   — dt           j                             ||                      |¦  «        ¦  «        gS )Nz-include-pch)ÚosÚpathÚjoinÚget_pch_name)r1   rO   rP   s      r3   Úget_pch_use_argszClangCompiler.get_pch_use_argsR   s-   € ð ¥¤§¢¨W°d×6GÒ6GÈÑ6OÔ6OÑ PÔ PÐQÐQr4   Úmoder   c                óú   •— dg}|t           j        u rF|                     ddg¦  «         t          j        | j        d¦  «        r|                     d¦  «         t          ¦   «                              |¦  «        |z   S )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Úappendr)   Úget_compiler_check_args)r1   rW   Úmyargsr2   s      €r3   r^   z%ClangCompiler.get_compiler_check_argsX   s~   ø€ ð
  GÐGˆØÕ#Ô+Ð+Ð+Ø�MŠMÐ;Ð=cÐdÑeÔeÐeÝÔ'¨¬°iÑ@Ô@ð GØ—’ÐEÑFÔFÐFÝ‰wŒw×.Ò.¨tÑ4Ô4°vÑ=Ð=r4   N©Ú
extra_argsÚdependenciesÚfuncnameÚprefixÚenvú'Environment'ra   úT.Optional[T.List[str]]rb   ú T.Optional[T.List['Dependency']]úT.Tuple[bool, bool]c               óê   •— |€g }t          | j        t          ¦  «        r/t          j        | j        d¦  «        r|                     d¦  «         t          ¦   «                              |||||¬¦  «        S )Nz>=8.0z-Wl,-no_weak_importsr`   )	r-   r.   r   r   r[   r\   r]   r)   Úhas_function)r1   rc   rd   re   ra   rb   r2   s         €r3   rk   zClangCompiler.has_functiond   s�   ø€ ð ÐØˆJõ �d”kÕ#5Ñ6Ô6ð 	6½8Ô;SÐTXÔT`ÐbiÑ;jÔ;jð 	6Ø×ÒÐ4Ñ5Ô5Ð5Ý‰wŒw×#Ò# H¨f°cÀjØ1=ð $ñ ?ô ?ð 	?r4   c                óz   — t          j        | j        d¦  «        rdgS t          j        | j        d¦  «        rdgS g S )Nz>=3.8.0z-fopenmpz>=3.7.0z-fopenmp=libomp)r   r[   r\   rM   s    r3   Úopenmp_flagszClangCompiler.openmp_flagss   sH   € ÝÔ# D¤L°)Ñ<Ô<ð 	Ø�<ÐÝÔ% d¤l°IÑ>Ô>ð 	Ø%Ð&Ð&ð ˆIr4   r.   r\   c                óø   •— |dk    rdgS |dk    rdgS t          j        |¦  «        r2t          j        |¦  «        st          j        d|› d�¦  «        ‚d|› �gS t	          ¦   «                              ||¦  «        S )NÚqcldz-fuse-ld=qcldÚmoldz-fuse-ld=moldzCannot find linker ú.z	-fuse-ld=)ÚshutilÚwhichr   ÚMesonExceptionr)   Úuse_linker_args)Úclsr.   r\   r2   s      €r3   ru   zClangCompiler.use_linker_args|   sŸ   ø€ ð �VÒÐØ#Ð$Ð$Ø�VÒÐØ#Ð$Ð$åŒ<˜ÑÔð 	*Ý”< Ñ'Ô'ð 5ÝÔ-Ø3¨&Ð3Ð3Ð3ñ5ô 5ð 5à( Ð(Ð(Ð)Ð)Ý‰wŒw×&Ò& v¨wÑ7Ô7Ð7r4   Únamec                ó   — dgS )Nz-Werror=attributesrL   )r1   rw   s     r3   Ú!get_has_func_attribute_extra_argsz/ClangCompiler.get_has_func_attribute_extra_args�   s   € ð %Ð%Ð%r4   c                ó   — dgS )Nz
--coveragerL   rM   s    r3   Úget_coverage_link_argsz$ClangCompiler.get_coverage_link_args•   s
   € Øˆ~Ðr4   r   Údefault©ÚthreadsrW   r~   Úintc               ó  •— g }|dk    rµt          | j        t          ¦  «        r4t          j        | j        j        d¦  «        st          j        d¦  «        ‚nNt          | j        t          t          t          t          f¦  «        s!t          j        d| j        j        › �¦  «        ‚|                     d|› �¦  «         nE|dk    s
J d¦   «         ‚|                     t          ¦   «                              |¬¦  «        ¦  «         |S )	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~   )r-   r.   r
   r   r[   r\   rt   r   r   r   r	   Úidr]   rZ   r)   Úget_lto_compile_args)r1   r~   rW   Úargsr2   s       €r3   rƒ   z"ClangCompiler.get_lto_compile_args˜   s!  ø€ ØˆØ�6Š>ˆ>å˜$œ+Õ(9Ñ;Ô;ð IåÔ/°´Ô0CÀWÑMÔMð WÝ"Ô1Ð2UÑVÔVÐVðWå ¤Õ.@ÕBVÕXiÕkð  .Añ  Bô  Bð IÝÔ-ð  /HÐw{ô  xCô  xFð  /Hð  /Hñ  Iô  Ið  IØ�KŠK˜ ˜˜Ñ(Ô(Ð(Ð(à˜9Ò$Ð$Ð$Ð&KÑ$Ô$Ð$Ø�KŠK�™œ×4Ò4¸WÐ4ÑEÔEÑFÔFÐFØˆr4   )r~   rW   Úthinlto_cache_dirr…   c               ó6  — |                       ||¬¦  «        }|dk    r/|�-|                     | j                             |¦  «        ¦  «         |dk    rFt	          j        | j        d¦  «        st	          j        d¦  «        ‚|                     d|› �¦  «         |S )Nr}   r�   r   z>=4.0.0z2clang support for LTO threads requires clang >=4.0z-flto-jobs=)	rƒ   rZ   r.   Úget_thinlto_cache_argsr   r[   r\   rt   r]   )r1   r~   rW   r…   r„   s        r3   Úget_lto_link_argszClangCompiler.get_lto_link_args¨   s¡   € à×(Ò(°¸tÐ(ÑDÔDˆØ�6Š>ˆ>Ð/Ð;ð �KŠK˜œ×:Ò:Ð;LÑMÔMÑNÔNÐNà�QŠ;ˆ;ÝÔ+¨D¬L¸)ÑDÔDð dÝÔ-Ð.bÑcÔcÐcØ�KŠKÐ/ gÐ/Ð/Ñ0Ô0Ð0Øˆr4   )r   r    )r5   r6   r7   r8   )r=   r6   r7   r>   )r=   r6   r7   rB   )rF   r6   r7   r8   )r7   r6   )rO   r6   rP   r6   r7   r8   )rW   r   r7   r8   )rc   r6   rd   r6   re   rf   ra   rg   rb   rh   r7   ri   )r7   r8   )r.   r6   r\   r6   r7   r8   )rw   r6   r7   r8   )r~   r   rW   r6   r7   r8   )r~   r   rW   r6   r…   rB   r7   r8   )Ú__name__Ú
__module__Ú__qualname__r‚   r*   r<   rA   rE   rI   rN   rV   r^   rk   rm   Úclassmethodru   ry   r{   rƒ   rˆ   Ú__classcell__)r2   s   @r3   r   r   1   sÊ  ø€ € € € € à	€Bð,ð ,ð ,ð ,ð ,ð ,ð.ð .ð .ð .ð&ð &ð &ð &ð(ð (ð (ð (ð;ð ;ð ;ð ;ðð ð ð ðRð Rð Rð Rð
>ð 
>ð 
>ð 
>ð 
>ð 
>ð <@ØFJð?ð ?ð ?ð ?ð ?ð ?ð ?ð ?ðð ð ð ð ð8ð 8ð 8ð 8ð 8ñ „[ð8ð&&ð &ð &ð &ð
ð ð ð ð 67ÀIð ð ð ð ð ð ð ð ð  34ÀØ?Cðð ð ð ð ð ð ð ð ð r4   r   )Ú
__future__r   rR   rr   ÚtypingÚTÚ r   Úlinkersr   r   r   r	   r
   r   Ú	compilersr   Úgnur   ÚTYPE_CHECKINGÚenvironmentr   rb   r   r;   rH   r   rL   r4   r3   ú<module>r—      s…  ðð #Ð "Ð "Ð "Ð "Ð "à 6à 	€	€	€	Ø €€€Ø Ð Ð Ð à Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð ð à !Ð !Ð !Ð !Ð !Ð !Ø (Ð (Ð (Ð (Ð (Ð (Ø  Ð  Ð  Ð  Ð  Ð  à„?ð +Ø*Ð*Ð*Ð*Ð*Ð*Ø*Ð*Ð*Ð*Ð*Ð*ð #Ð#Ø$Ð%Ø&Ð'ðð Ð ð Ø
ˆØ
ˆØ
ˆØ
ˆØ
ˆØ
ˆðð Ð ðCð Cð Cð Cð C�Oñ Cô Cð Cð Cð Cr4   