
    <hP                       % 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	  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  O\rS/S/S/S/S/S/S/S/SS.	rS\S'   S/S/S/S/S/S/S/S/S/SS.
rS\S'   / S// S/S/SS/SS/S.rS\S'   / S/S.rS \S!'    " S" S#\\R<                  S$9r " S% S&\5      r  " S' S(\5      r!g))    )annotationsN   )arglist)mesonlib)mlog)CompileCheckMode)	OptionKey)ClangClDynamicLinker)Environment)
Dependency   )CLikeCompilerz	/arch:SSEz
/arch:SSE2z	/arch:AVXz
/arch:AVX2)	mmxssesse2sse3sse41sse42avxavx2neonz$T.Dict[str, T.Optional[T.List[str]]]vs32_instruction_set_args)
r   r   r   r   ssse3r   r   r   r   r   vs64_instruction_set_args/Odz/O1/O2/Gw)plain0g123sT.Dict[str, T.List[str]]msvc_optimization_argsz/Zi)FTzT.Dict[bool, T.List[str]]msvc_debug_argsc                  8   \ rS rSr% SrS/rS/r\R                  S/-   r	/ r
S\S'   / S/S	/S
/S/S.rS\S'   / SQr/ S/S/S/S/S.rS\S'   SrS=S jrS>S jrS?S jrS@S jrSAS jrSBS jrS>S jrS>S jrS>S jrS>S jrSCS  jrSDS! jrSES" jrSFS# jrSGS$ jrS>S% jrSHS& jr SIS' jr!SJS( jr"SJS) jr#SKS* jr$\%SGS+ j5       r&\%SGS, j5       r'S>S- jr(SLS. jr)SMS/ jr*SNS0 jr+SOSPS1 jjr,SQS2 jr-SRS3 jr.SSS4 jr/S>S5 jr0STS6 jr1SUS7 jr2\3S?S8 j5       r4SVS9 jr5S>S: jr6S;r7g<)WVisualStudioLikeCompilerK   a  A common interface for all compilers implementing an MSVC-style
interface.

A number of compilers attempt to mimic MSVC, with varying levels of
success, such as Clang-CL and ICL (the Intel C/C++ Compiler for Windows).
This class implements as much common logic as possible.
z/W3r   execinfoT.List[str]internal_libsz/MDz/MDdz/MTz/MTd)nonemdmddmtmtdr%   crt_args)z/nologoz/showIncludes/utf-8z/W2z/W4z/Wall)r   r!   r"   r#   
everything	warn_argsFc                   S Vs1 s H  n[        U5      iM     snU l        Xl        SU;   =(       d    SU;   U l        SU;   a  SU l        O0SU;   a  SU l        O"SU;   a  SU l        OSU;   a  SU l        OXl        [
        R                  " U R                  S	5      (       a$  U R                  R                  [        S
5      5        U R                  c   eU R                  U R                  l        g s  snf )N)b_pchb_ndebugb_vscrtx64x86_6486x86aarch64arm64armz>=19.28.29910
b_sanitize)
r	   base_optionstargetis_64machiner   version_compareversionaddlinker)selfrD   os      ډ/mnt/mint/home/seanl/mnt/public/Repos/ladybird/Build/vcpkg/downloads/tools/meson-1.9.0-d1fcc2/mesonbuild/compilers/mixins/visualstudio.py__init__!VisualStudioLikeCompiler.__init__s   s    3ST3SaYq\3STvo>8v+=
v DLV^ DL& "DLf_ DL!L##DLL/BB!!)L"9:{{&&&"ll# Us   C1c                6    U R                   R                  5       $ N)always_argscopyrK   s    rM   get_always_args(VisualStudioLikeCompiler.get_always_args   s    $$&&    c                    g)Npch rT   s    rM   get_pch_suffix'VisualStudioLikeCompiler.get_pch_suffix   s    rW   c                    [         R                  R                  U5      R                  S5      S S nUR	                  U R                  5       5        SR                  U5      nU$ )N.)ospathbasenamesplitappendr[   join)rK   namechoppedpchnames       rM   get_pch_name%VisualStudioLikeCompiler.get_pch_name   sP    ''""4(..s3CR8t**,-((7#rW   c                    [         erQ   )NotImplementedErrorrK   headers     rM   get_pch_base_name*VisualStudioLikeCompiler.get_pch_base_name   s    !!rW   c                    U R                  U5      nU R                  U5      nSU-   SU-   S[        R                  R	                  X5      -   /$ )Nz/FIz/Yu/Fp)ro   ri   r`   ra   re   )rK   pch_dirrn   baserh   s        rM   get_pch_use_args)VisualStudioLikeCompiler.get_pch_use_args   sI    %%f-##F+edlEBGGLL4R,RSSrW   c                    S/$ )N/EPrZ   rT   s    rM   get_preprocess_only_args1VisualStudioLikeCompiler.get_preprocess_only_args   	    wrW   c                
    SS/$ )Nrx   z/PrZ   rT   s    rM   get_preprocess_to_file_args4VisualStudioLikeCompiler.get_preprocess_to_file_args   s    t}rW   c                    S/$ )Nz/crZ   rT   s    rM   get_compile_only_args.VisualStudioLikeCompiler.get_compile_only_args   s	    vrW   c                
    SS/$ )Nr   z/Oi-rZ   rT   s    rM   get_no_optimization_args1VisualStudioLikeCompiler.get_no_optimization_args   s    vrW   c                >    U(       d  U$ SSR                  U5       3/$ )Nz/fsanitize=,)re   )rK   values     rM   sanitizer_compile_args/VisualStudioLikeCompiler.sanitizer_compile_args   s#    Lchhuo./00rW   c                r    U R                   S:X  a  SU-   /$ UR                  S5      (       a  SU-   /$ SU-   /$ )NPREPROCESSORz/Fiz.exez/Fe/Fo)modeendswith)rK   
outputnames     rM   get_output_args(VisualStudioLikeCompiler.get_output_args   sI    99&J&''v&&J&''
"##rW   c                    [         U   $ rQ   )r'   )rK   is_debugs     rM   get_debug_args'VisualStudioLikeCompiler.get_debug_args   s    x((rW   c                    [         U   n[        R                  " U R                  S5      (       a  U Vs/ s H  o3S:w  d  M
  UPM     nnU$ s  snf )Nz<18.0r   )r&   r   rG   rH   )rK   optimization_levelargsargs       rM   get_optimization_args.VisualStudioLikeCompiler.get_optimization_args   sF    %&89##DLL'::#'84C%<C4D8 9s   	AAc                    S/U-   $ )Nz/linkrZ   )rK   r   s     rM   linker_to_compiler_args0VisualStudioLikeCompiler.linker_to_compiler_args   s    y4rW   c                    / $ rQ   rZ   rT   s    rM   get_pic_args%VisualStudioLikeCompiler.get_pic_args       	rW   c                N    [        U[        5      (       d  [        S5      eSU-   /$ )Nz%Module definitions file should be strz/DEF:)
isinstancestrRuntimeError)rK   defsfiles     rM   gen_vs_module_defs_args0VisualStudioLikeCompiler.gen_vs_module_defs_args   s+    (C((FGG ("##rW   c                l    [         R                  R                  U5      S   S-   nUSU-   SU-   SU-   /4$ )Nr   z.objz/Ycrr   r   )r`   ra   splitext)rK   rn   sourcerh   objnames        rM   gen_pch_args%VisualStudioLikeCompiler.gen_pch_args   s>    ''""6*1-6%'/JJJrW   c                    S/$ )Nz/openmprZ   rK   envs     rM   openmp_flags%VisualStudioLikeCompiler.openmp_flags   s
    {rW   c                    / $ rQ   rZ   r   s     rM   openmp_link_flags*VisualStudioLikeCompiler.openmp_link_flags   r   rW   c                    / $ rQ   rZ   r   s     rM   thread_flags%VisualStudioLikeCompiler.thread_flags   r   rW   c                   / nU GHW  nUS;   a  M  UR                  S5      (       a
  SUSS  -   nGOUR                  S5      (       a	  SUSS  -   nOUR                  S5      (       a  USS  nX@R                  ;   a  Mw  US-   nOUR                  S	5      (       a(  UR                  S
5      (       a	  SUSS  -   nOSUSS  -   nOUR                  S5      (       a(  UR                  S5      (       a	  SUSS  -   nOVSUSS  -   nOMUS:X  a  GM  UR                  S5      (       d  UR                  S5      (       d  US:X  a   UR                  S5        UR	                  U5        GMZ     U$ ! [         a     N$f = f)N>   -pthread-mms-bitfields	-LIBPATH:	/LIBPATH:	   -L   -l.lib-isystemz	-isystem=/I   z
-idirafterz-idirafter=   
   r   z/source-charset:z/execution-charset:z/validate-charset-r4   )
startswithignore_libsremove
ValueErrorrd   )clsr   resultirf   s        rM   unix_args_to_native,VisualStudioLikeCompiler.unix_args_to_native   sx    A 22||K((!AB%'d##!AB%'d##u??* vAj))<<,,quAquAl++<<..qvAqvAj ,,122||$9::00MM(+ MM!U V  " s   :E##
E0/E0c                <   / nU H  nUR                  S5      (       a  UR                  SUSS  -   5        M2  UR                  S5      (       a:  [        R                  R                  U5      (       d  UR                  SU-   5        M  UR                  U5        M     U$ )N)r   r   r   r   )z.ar   r   )r   rd   r   r`   ra   isabs)r   r   r   r   s       rM   native_args_to_unix,VisualStudioLikeCompiler.native_args_to_unix
  s{     C~~899dSWn-n--bggmmC6H6HdSj)c"  rW   c                    S/$ )Nz/WXrZ   rT   s    rM   get_werror_args(VisualStudioLikeCompiler.get_werror_args  r{   rW   c                    US:X  a  SnSU-   /$ )N r^   -IrZ   rK   ra   	is_systems      rM   get_include_args)VisualStudioLikeCompiler.get_include_args  s    2:Dt}rW   c           
        [        U5       H  u  p4US S S:X  d	  US S S:X  aI  US S [        R                  R                  [        R                  R	                  X$SS  5      5      -   X'   M`  US S S:X  d  Mk  US S [        R                  R                  [        R                  R	                  X$SS  5      5      -   X'   M     U$ )Nr   r   r   r   r   )	enumerater`   ra   normpathre   )rK   parameter_list	build_diridxr   s        rM   &compute_parameters_with_absolute_paths?VisualStudioLikeCompiler.compute_parameters_with_absolute_paths  s    /FC!u}"1&'ebgg.>.>rww||IYZY[W\?].^&^#2A+%&'ebgg.>.>rww||IYZY[W\?].^&^#	 0 rW   c                >   U[         R                  :X  a  SOSnU R                  X2XS9 nUR                  S:w  a  SUR                  4sS S S 5        $ XVR
                  ;   =(       d    XVR                  ;   (       + UR                  4sS S S 5        $ ! , (       d  f       g = f)N40449002)
extra_argsr   r   F)r   LINK_build_wrapper
returncodecachedstderrstdout)rK   r   r   coder   warning_textps          rM   has_arguments&VisualStudioLikeCompiler.has_arguments+  s}    !%)9)>)>!>vF  t G1||q ahh HG %0LLHH4LMqxxW HGGs   B3B
Bc                d    UR                  S5      S S nUS/-  nSSR                  U5      -   /nU$ )Nr^   r_   pdbz/Fd)rc   re   )rK   rel_objrY   pdbarrr   s        rM   get_compile_debugfile_args3VisualStudioLikeCompiler.get_compile_debugfile_args2  s>    s#CR(5'(()rW   c                |    U R                   (       a  [        R                  US 5      $ [        R                  US 5      $ rQ   )rE   r   getr   )rK   instruction_sets     rM   get_instruction_set_args1VisualStudioLikeCompiler.get_instruction_set_args8  s/    ::,00$GG(,,_dCCrW   c                    US:  a  gUS:  a  gUS:  a  gUS:  a  gUS	:  a  g
US:  a  gUS:  a  gUS:  a  gUS:  a  gUS:  a  gUS:  a  gUS:  a  g[         R                  " SU R                  < 35        g )Ni  z7.0ix  z7.1i  z8.0i@  z9.0i  z10.0i  z11.0il  z12.0iv  z14.0i  14.1i  z14.2i  z14.3i  z14.4z#Could not find toolset for version )r   warningrH   rK   rH   s     rM   _calculate_toolset_version3VisualStudioLikeCompiler._calculate_toolset_version=  s    T>t^t^t^t^t^t^t^t^t^t^t^:4<<:JKLrW   c                     [        SR                  U R                  R                  S5      SS 5      5      nU R                  U5      $ ! [         a     g f = f)Nr   r^   r   r   )intre   rH   rc   r   r  r  s     rM   get_toolset_version,VisualStudioLikeCompiler.get_toolset_versionY  sW    	"''$,,"4"4S"9!A">?@G ..w77  		s   6A	 	
AAc                    S[         R                  ;  a  / $ [         R                  S   R                  [         R                  5      $ )NINCLUDE)r`   environrc   pathseprT   s    rM   get_default_include_dirs1VisualStudioLikeCompiler.get_default_include_dirsa  s1    BJJ&Izz)$**2::66rW   c                B    U R                  X5      nU R                  U   $ rQ   )get_crt_valr3   )rK   crt_val	buildtypes      rM   get_crt_compile_args-VisualStudioLikeCompiler.get_crt_compile_argsf  s!    ""76}}W%%rW   c                    US;   S4$ )N>   	dllexport	dllimportFrZ   )rK   rf   r   s      rM   has_func_attribute+VisualStudioLikeCompiler.has_func_attributej  s     11588rW   c                     g)NmsvcrZ   rZ   rW   rM   get_argument_syntax,VisualStudioLikeCompiler.get_argument_syntaxo      rW   c                P    U R                  U5      nUb  U$ U R                  U5      $ )z
Check if the compiler prefixes an underscore to global C symbols.

This overrides the Clike method, as for MSVC checking the
underscore prefix based on the compiler define never works,
so do not even try.
)$_symbols_have_underscore_prefix_list)_symbols_have_underscore_prefix_searchbin)rK   r   r   s      rM   symbols_have_underscore_prefix7VisualStudioLikeCompiler.symbols_have_underscore_prefixs  s2     ::3?M ==cBBrW   c                    / $ rQ   rZ   rT   s    rM   get_pie_args%VisualStudioLikeCompiler.get_pie_args  r   rW   )rC   rE   rF   rD   NrD   r   returnr,   )r-  r   )rf   r   r-  r   rn   r   r-  r   )rs   r   rn   r   r-  r,   )r   r,   r-  r,   )r   r   r-  r,   )r   boolr-  r,   )r   r   r-  r,   r   r,   r-  r,   )r   r   r-  r,   )rn   r   r   r   rh   r   r-  zT.Tuple[str, T.List[str]]r   r   r-  r,   )r   'Environment'r-  r,   ra   r   r   r/  r-  r,   )r   r,   r   r   r-  r,   
r   r,   r   r2  r   r   r   r   r-  T.Tuple[bool, bool]Fr   r   rY   r/  r-  r,   r   r   r-  zT.Optional[T.List[str]])rH   r
  r-  T.Optional[str]r-  r9  )r  r   r  r   r-  r,   )rf   r   r   r2  r-  r5  )r   r2  r-  r/  )8__name__
__module____qualname____firstlineno____doc__std_warn_argsstd_opt_argsr   UNIXY_COMPILER_INTERNAL_LIBSr   r-   __annotations__r3   rR   r6   INVOKES_LINKERrN   rU   r[   ri   ro   ru   ry   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   classmethodr   r   r   r   r   r   r   r  r  r  r  r  r  staticmethodr   r&  r)  __static_attributes__rZ   rW   rM   r)   r)   K   s{    GM7L66*EK!#M;# gxgx*H&  9KWWWi+I'  N+*'"T
1
$) $K - -^ 	 	XD
887
&9
  C"rW   r)   )	metaclassc                  v   ^  \ rS rSrSrSrSU 4S jjrSSU 4S jjjrSS jrSU 4S jjr	SS jr
SS	 jrS
rU =r$ )MSVCCompileri  z$Specific to the Microsoft Compilers.r  c                   > [         TU ]  U5        [        R                  " U R                  S5      (       a;  SU R
                  ;   a*  U R
                   Vs/ s H  o"S:w  d  M
  UPM     snU l        g g g s  snf )Nz<19.00r4   )superrN   r   rG   rH   rR   )rK   rD   r	__class__s      rM   rN   MSVCCompiler.__init__  sf     
 ##DLL(;;DL\L\@\+/+;+;M+;aH}+;MD A];Ms   	A3"A3c                   > [         TU ]  X5      nU(       a,  [        R                  " U R                  S5      (       a  S/U-   nU$ )Nz>=18.0z/FS)rL  r   r   rG   rH   )rK   r   rY   r   rN  s       rM   r   'MSVCCompiler.get_compile_debugfile_args  s=    w1'? 8++DLL(CC7T>DrW   c                    U R                   $ rQ   rR   rT   s    rM   rU   MSVCCompiler.get_always_args  s    rW   c                t   > U R                   R                  S5      S   S:X  a  US:X  a  g [        TU ]  U5      $ )Nr^   r   16r   )rH   rc   rL  r  )rK   r   rN  s     rM   r  %MSVCCompiler.get_instruction_set_args  s;    <<c"1%-/U2J w/@@rW   c                @    [         R                  R                  U5      $ rQ   )r`   ra   rb   rm   s     rM   ro   MSVCCompiler.get_pch_base_name  s    ww''rW   c                    g)NTrZ   rT   s    rM   should_link_pch_object#MSVCCompiler.should_link_pch_object  s    rW   rS  r+  r6  r7  r,  r8  r.  )r-  r/  )r;  r<  r=  r>  r?  idrN   r   rU   r  ro   r[  rG  __classcell__rN  s   @rM   rJ  rJ    s5    .	BN
 
 A(
 rW   rJ  c                     ^  \ rS rSrSrSrSU 4S jjrSU 4S jjrSS jrSS jr	SS jr
\SU 4S	 jj5       rSU 4S
 j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SS.   SS jjrSrU =r$ ) ClangClCompileri  zSpecific to Clang-CL.zclang-clc           	     *  > [         TU ]  U5        U R                  R                  [	        S5      [	        S5      [	        S5      [	        S5      [	        S5      15        U R
                  R                  S5        U R
                  R                  S5        g )Nb_lto_threadsb_lto
b_lto_modeb_thinlto_cacheb_thinlto_cache_dirr$   sx)rL  rN   rC   updater	   can_compile_suffixesrI   )rK   rD   rN  s     rM   rN   ClangClCompiler.__init__  s{       '7);Y|=TV_`qVr,-/	0
 	!!%%c*!!%%d+rW   c                Z   > U[         R                  :w  a  USS/-   n[        TU ]  XX45      $ )Nz-Werror=unknown-argumentz-Werror=unknown-warning-option)r   r   rL  r   )rK   r   r   r   r   rN  s        rM   r   ClangClCompiler.has_arguments  s5    #(((57WXXDw$T;;rW   c                    g)Nr  rZ   rT   s    rM   r  #ClangClCompiler.get_toolset_version  r"  rW   c                    U$ rQ   rZ   rm   s     rM   ro   !ClangClCompiler.get_pch_base_name  s    rW   c                8    US:X  a  SnU(       a  SU-   /$ SU-   /$ )Nr   r^   z/clang:-isystemr   rZ   r   s      rM   r    ClangClCompiler.get_include_args  s*    2:D-6!D()ITD[MIrW   c                4   > US:X  a  S/$ [         TU ]  X5      $ )Nzlld-linkz-fuse-ld=lld-link)rL  use_linker_args)r   rJ   rH   rN  s      rM   ru  ClangClCompiler.use_linker_args  s&     Z'((w&v77rW   c           	        > [         TU ]  U R                  R                  S5      [         TU ]  U Vs/ s H  o"R                  S5      (       a  USS  OUPM!     sn5      -   $ s  snf )Nr   z-Wl,   )rL  ru  rJ   r]  r   r   )rK   r   flagrN  s      rM   r   'ClangClCompiler.linker_to_compiler_args  s     w&t{{~~r:UW=\  Y]  ^^  Y]  QUjyjy  {A  kB  kB^bcdce^f  HL  _L  Y]  ^^  >_  _  	_  ^^s   &A!
c                    UR                  5       S:X  aA  / nUR                  5        H)  nUR                  S5      (       a  USU-   /-  nM$  X#/-  nM+     U$ UR                  5       $ )Nsystemr   z/clang:)get_include_typeget_compile_argsr   )rK   dep	convertedr   s       rM   get_dependency_compile_args+ClangClCompiler.get_dependency_compile_args  sk    !X-%'I))+<<
++)a-0I$I	 ,
 ''))rW   c                   > U R                  SU/ 5      nUc  [        R                  " S5      e[        TU ]  U5      U-   $ )NlibompzCould not find libomp)find_libraryr   MesonBugExceptionrL  r   )rK   r   libsrN  s      rM   r   !ClangClCompiler.openmp_link_flags  sC      33<,,-DEEw(-44rW   r   default)threadsr   c               .  > / nUS:X  ab  [        U R                  [        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-LLVM's ThinLTO only works with lld-link, not z-flto=r  z#someone forgot to wire something up)r  )
r   rJ   r
   r   MesonExceptionr]  rd   extendrL  get_lto_compile_args)rK   r  r   r   rN  s       rM   r  $ClangClCompiler.get_lto_compile_args  s    6>dkk+?@@--0]^b^i^i^l^l]m.nooKK&(  9$K&KK$KK4W4EFrW   N)r  r   thinlto_cache_dirc                   / nUS:X  a-  Ub*  UR                  U R                  R                  U5      5        US:  a  UR                  SU 35        U$ )Nr  r   z	/threads:)r  rJ   get_thinlto_cache_argsrd   )rK   r  r   r  r   s        rM   get_lto_link_args!ClangClCompiler.get_lto_link_args  sQ    6>/;KK::;LMNQ; KK)G9-.rW   rZ   r+  r4  r:  r.  r3  )rJ   r   rH   r   r-  r,   r0  )r  z'Dependency'r-  r,   r1  )r  r
  r   r   r-  r,   )r  r
  r   r   r  r9  r-  r,   )r;  r<  r=  r>  r?  r]  rN   r   r  ro   r   rE  ru  r   r  r   r  r  rG  r^  r_  s   @rM   ra  ra    s~    	B	,<
J
 8 8_

*5 67I 
 
 34?C
-<
HS
 
rW   ra  )"
__future__r   abcr`   typingTr   r   r   r   mesonbuild.compilers.compilersr   optionsr	   mesonbuild.linkers.linkersr
   TYPE_CHECKINGenvironmentr   dependenciesr   cliker   Compilerobjectr   rC  r   r&   r'   ABCMetar)   rJ  ra  rZ   rW   rM   <module>r     sD  
 #  	     ;   ;??**0 H ==NM]]=N
C ? 
 ==MM]]]=NC ?  
	



4 0  '.* zx3;; zx	.+ .`W. WrW   