
    <h                    "   S SK Jr  S SKrS SKrS SKrS SKrSSKJrJ	r	  SSK
Jr  SSKJr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   " S S5      r " S S\R2                  S9r\R                   (       a  \r\rO\=rr " S S\5      r " S S\\5      r " S S\\5      r  " S S\\5      r! " S S\!5      r" " S S\\5      r# " S S\5      r$ " S  S!\5      r% " S" S#\5      r& " S$ S%\5      r' " S& S'\5      r( " S( S)\(5      r) " S* S+\(5      r* " S, S-\\5      r+ " S. S/\5      r, " S0 S1\,5      r- " S2 S3\,5      r. " S4 S5\5      r/SS6 jr0SS7 jr1SS8 jr2 " S9 S:\5      r3 " S; S<\5      r4 " S= S>\3\5      r5 " S? S@\55      r6 " SA SB\4\3\5      r7 " SC SD\75      r8 " SE SF\75      r9 " SG SH\75      r: " SI SJ\4\3\5      r; " SK SL\;5      r< " SM SN\4\3\5      r= " SO SP\5      r> " SQ SR\5      r? " SS ST\5      r@ " SU SV\5      rA " SW SX\A5      rB " SY SZ\A5      rC " S[ S\\3\5      rD " S] S^\D5      rE " S_ S`\;5      rF " Sa Sb\4\3\5      rG " Sc Sd\3\5      rH " Se Sf\3\5      rI\IrJ " Sg Sh\5      rK\KrL " Si Sj\5      rM " Sk Sl\M\5      rN " Sm Sn\M\5      rO " So Sp\M\5      rP " Sq Sr\3\5      rQ " Ss St\3\5      rR " Su Sv\M\5      rS " Sw Sx\3\5      rT " Sy Sz\5      rU " S{ S|\U5      rV " S} S~\U5      rW " S S\5      rXg)    )annotationsN   )ArLikeLinkerRSPFileSyntax   )mesonlib)EnvironmentExceptionMesonExceptionCompilerArgs)Environment)MachineChoice)BuildTarget)Compilerc                  8   \ rS rSr% S\S'   SS jrSS jrSS jrSS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"S jr S     S&S jjrS'S jrS(S jrSS)S jjr\S*S j5       r\S*S j5       rS+S jrS,S jrS"S jrS"S jrS-S jrSrg).StaticLinker   stridc                    Xl         g Nexelist)selfr   s     {/mnt/mint/home/seanl/mnt/public/Repos/ladybird/Build/vcpkg/downloads/tools/meson-1.9.0-d1fcc2/mesonbuild/linkers/linkers.py__init__StaticLinker.__init__           c                    U R                   $ r   r   r   s    r   get_idStaticLinker.get_id       wwr   c                     U R                   S   $ Nr   r   r"   s    r   get_exeStaticLinker.get_exe"       ||Ar   Nc                    [        X5      $ r   r   r   argss     r   compiler_argsStaticLinker.compiler_args%   s    D''r   c                ,    [         R                  " 5       $ )zK
Determines whether the linker can accept arguments using the @rsp syntax.
r   
is_windowsr"   s    r   can_linker_accept_rsp"StaticLinker.can_linker_accept_rsp(   s     ""$$r   c                    / $ )z=Like compilers.get_base_link_args, but for the static linker. )r   targetlinkerenvs       r   get_base_link_argsStaticLinker.get_base_link_args.   	    
 	r   c                6    U R                   R                  5       $ r   r   copyr"   s    r   get_exelistStaticLinker.get_exelist5       ||  ""r   c                    / $ r   r6   r   r9   is_thins      r   get_std_link_argsStaticLinker.get_std_link_args8       	r   c                    / $ r   r6   )r   optimization_levels     r   get_optimization_link_args'StaticLinker.get_optimization_link_args;   rH   r   c                    / $ r   r6   r   r7   s     r   get_output_argsStaticLinker.get_output_args>   rH   r   c                    / $ r   r6   r"   s    r   get_coverage_link_args#StaticLinker.get_coverage_link_argsA   rH   r   c                    / [        5       4$ r   setr   r9   	build_dirfrom_dirr7   extra_pathss         r   build_rpath_argsStaticLinker.build_rpath_argsD       CE{r   c                    / $ r   r6   r   r9   s     r   thread_link_flagsStaticLinker.thread_link_flagsH   rH   r   c                    / $ r   r6   r_   s     r   openmp_flagsStaticLinker.openmp_flagsK   rH   r   c                    / $ r   r6   r   r7   r9   
subprojects       r   get_option_link_args!StaticLinker.get_option_link_argsN   rH   r   c                    US S  $ r   r6   clsr-   s     r   unix_args_to_native StaticLinker.unix_args_to_nativeQ       Awr   c                    US S  $ r   r6   rk   s     r   native_args_to_unix StaticLinker.native_args_to_unixU   ro   r   c                    g r   r6   r   
targetfiles     r   get_link_debugfile_name$StaticLinker.get_link_debugfile_nameY       r   c                    / $ r   r6   rt   s     r   get_link_debugfile_args$StaticLinker.get_link_debugfile_args\       	r   c                    / $ r   r6   r"   s    r   get_always_argsStaticLinker.get_always_args`   rH   r   c                    / $ r   r6   r"   s    r   get_linker_always_args#StaticLinker.get_linker_always_argsc   rH   r   c                    U R                  5       (       a   U R                   S35       e[        U R                   S35      e)The format of the RSP file that this compiler supports.

If `self.can_linker_accept_rsp()` returns True, then this needs to
be implemented
zI linker accepts RSP, but doesn' provide a supported format, this is a bugz8 does not implement rsp format, this shouldn't be called)r3   r   r	   r"   s    r   rsp_file_syntaxStaticLinker.rsp_file_syntaxf   sM     --//  	HDGG9  =G  2H  	H/"dggY.g#hiir   r   r   T.List[str]returnr   r   )r-   zT.Optional[T.Iterable[str]]r   r   r   bool)r7   'BuildTarget'r8   z
'Compiler'r9   'Environment'r   r   r   r   r9   r   rE   r   r   r   rJ   r   r   r   r7   r   r   r   r9   r   rX   r   rY   r   r7   r   rZ   T.Optional[T.List[str]]r   z"T.Tuple[T.List[str], T.Set[bytes]]r9   r   r   r   )r9   r   r   r   r7   r   r9   r   rg   T.Optional[str]r   r   r-   r   r   r   ru   r   r   r   ru   r   r   r   r   r   )__name__
__module____qualname____firstlineno____annotations__r   r#   r(   r.   r3   r:   r@   rF   rK   rO   rR   r[   r`   rc   rh   classmethodrm   rq   rv   rz   r~   r   r   __static_attributes__r6   r   r   r   r      s    G(%#0#- !. 3># VZ!,;R _A    jr   r   c                  z   \ rS rSr% Sr/ / / / / / / S.rS\S'   \R                  S5S j5       r	S6S jr
SS	S
.         S7S jjrS5S jrS5S jrS5S jrS5S jrS8S jrS9S jrS:S jrS8S jrS5S jrS;S<S jjrS;S<S jjrS=S jrS>S jrS?S jrS@S jrS8S jrSAS jrS8S jrS8S jrSBS  jrSCS! jr S8S" jr!SDS# jr"S8S$ jr#\RH                  SES% j5       r%S8S& jr&\RH                  SFS' j5       r'SGS( jr(SHS) jr)SGS* jr*S8S+ jr+S8S, jr,S8S- jr-SIS. jr.S8S/ jr/ S;     SJS0 jjr0        SKS1 jr1SLS2 jr2S8S3 jr3S4r4g)MDynamicLinkerp   zBase class for dynamic linkers.plain0g123sT.Dict[str, T.List[str]]_OPTIMIZATION_ARGSc                    g r   r6   r"   s    r   r   DynamicLinker.id~       r   c                   [        U[        5      (       a  U/OUnU R                  c  U$ [        U R                  [        5      (       a  U Vs/ s H  oR                  U-   PM     sn$ / nU H  nX0R                  U/-   -  nM     U$ s  snf r   )
isinstancer   
prefix_arg)r   argr-   rets       r   _apply_prefixDynamicLinker._apply_prefix   s    "3,,u#??"K--59:TcOOc)T::C??cU**C 
	 ;s   Bunknown systemunknown versionsystemversionc               Z    Xl         X l        XPl        X`l        X0l        X@l        S U l        g r   )r   for_machiner   r   r   always_argsmachine)r   r   r   r   r   r   r   s          r   r   DynamicLinker.__init__   s+     &$&(,r   c                    SR                  [        U 5      R                  U R                  SR	                  U R
                  5      5      $ )Nz<{}: v{} `{}`> )formattyper   r   joinr   r"   s    r   __repr__DynamicLinker.__repr__   s5    &&tDz':':DLL#((SWS_S_J`aar   c                    U R                   $ r   r!   r"   s    r   r#   DynamicLinker.get_id   r%   r   c                     U R                   S   $ r'   r   r"   s    r   r(   DynamicLinker.get_exe   r*   r   c                <    SU R                    SU R                   S3$ )N(r   ))r   r   r"   s    r   get_version_string DynamicLinker.get_version_string   s    477)1T\\N!,,r   c                6    U R                   R                  5       $ r   r>   r"   s    r   r@   DynamicLinker.get_exelist   rB   r   c                ,    [         R                  " 5       $ r   r1   r"   s    r   get_accepts_rspDynamicLinker.get_accepts_rsp   s     ""$$r   c                "    [         R                  $ )r   r   GCCr"   s    r   r   DynamicLinker.rsp_file_syntax   s        r   c                6    U R                   R                  5       $ r   r   r?   r"   s    r   r~   DynamicLinker.get_always_args       $$&&r   c                    gN r6   r"   s    r   get_lib_prefixDynamicLinker.get_lib_prefix       r   Nc                    / $ r   r6   rf   s       r   get_option_argsDynamicLinker.get_option_args   rH   r   c                    / $ r   r6   rf   s       r   rh   "DynamicLinker.get_option_link_args   rH   r   c                4    [        SU R                   S35      e)Nz	Language z+ does not support has_multi_link_arguments.r	   r   )r   r-   r9   s      r   has_multi_arguments!DynamicLinker.has_multi_arguments   s    "Ytwwi7b#cddr   c                    g)z*Name of debug file written out (see below)Nr6   rt   s     r   get_debugfile_name DynamicLinker.get_debugfile_name   s    r   c                    / $ )zSome compilers (MSVC) write debug into a separate file.

This method takes the target object path and returns a list of
commands to append to the linker invocation to control where that
file is written.
r6   rt   s     r   get_debugfile_args DynamicLinker.get_debugfile_args   s	     	r   c                    [         R                  " U R                  U    Vs/ s H  o R                  U5      PM     sn5      $ s  snf r   )r   listifyr   r   )r   rJ   as      r   rK   (DynamicLinker.get_optimization_link_args   s>     @W@WXj@k l@k1!3!3A!6@k lmm ls   Ac                    / $ r   r6   r"   s    r   get_std_shared_lib_args%DynamicLinker.get_std_shared_lib_args   rH   r   c                "    U R                  5       $ r   )r   )r   Targets     r   get_std_shared_module_args(DynamicLinker.get_std_shared_module_args   s    ++--r   c                4    [        SU R                   S35      e)NLinker z1 does not support position-independent executabler   r"   s    r   get_pie_argsDynamicLinker.get_pie_args   s     #WTWWI5f#ghhr   c                    / $ r   r6   r"   s    r   get_lto_argsDynamicLinker.get_lto_args   rH   r   c                    / $ r   r6   r   paths     r   get_thinlto_cache_args$DynamicLinker.get_thinlto_cache_args   rH   r   c                    / $ r   r6   r   values     r   sanitizer_argsDynamicLinker.sanitizer_args   rH   r   c                    / $ r   r6   r"   s    r   get_asneeded_argsDynamicLinker.get_asneeded_args   rH   r   c                4    [        SU R                   S35      e)Nr  z does not support link_wholer   r,   s     r   get_link_whole_for DynamicLinker.get_link_whole_for   s     "dggY:;= 	=r   c                4    [        SU R                   S35      e)Nr  z! does not support allow undefinedr   r"   s    r   get_allow_undefined_args&DynamicLinker.get_allow_undefined_args   s"    "dggY?@B 	Br   c                    g r   r6   r   
outputnames     r   rO   DynamicLinker.get_output_args   r   r   c                4    [        SU R                   S35      e)Nr  z, doesn't implement coverage data generation.r   r"   s    r   get_coverage_argsDynamicLinker.get_coverage_args   s    "WTWWI5a#bccr   c                    g r   r6   r   dirnames     r   get_search_argsDynamicLinker.get_search_args   r   r   c                    / $ r   r6   r_   s     r   export_dynamic_args!DynamicLinker.export_dynamic_args  rH   r   c                    / $ )ztThe name of the outputted import library.

This implementation is used only on Windows by compilers that use GNU ld
r6   r   
implibnames     r   import_library_args!DynamicLinker.import_library_args  r<   r   c                    / $ r   r6   r_   s     r   thread_flagsDynamicLinker.thread_flags  rH   r   c                    / $ )zArguments to error if there are any undefined symbols at link time.

This is the inverse of get_allow_undefined_args().

TODO: A future cleanup might merge this and
      get_allow_undefined_args() into a single method taking a
      boolean
r6   r"   s    r   no_undefined_argsDynamicLinker.no_undefined_args  	     	r   c                    / $ )&Arguments to make all warnings errors.r6   r"   s    r   fatal_warningsDynamicLinker.fatal_warnings  r|   r   c                    / $ r   r6   r"   s    r   headerpad_argsDynamicLinker.headerpad_args  r|   r   c                    / $ r   r6   r  s     r   get_win_subsystem_args$DynamicLinker.get_win_subsystem_args#  s	     	r   c                    [        S5      e)Nz,This linker does not support bitcode bundlesr
   r"   s    r   bitcode_argsDynamicLinker.bitcode_args(  s    KLLr   c                    / [        5       4$ r   rU   rW   s         r   r[   DynamicLinker.build_rpath_args+  r]   r   c                    / $ r   r6   r   r9   prefix
shlib_namesuffix	soversiondarwin_versionss          r   get_soname_argsDynamicLinker.get_soname_args/  r|   r   c                    [        5       $ r   )r   r   filenames     r   get_archive_nameDynamicLinker.get_archive_name3  s	    ur   c                    / $ r   r6   r"   s    r   get_command_to_archive_shlib*DynamicLinker.get_command_to_archive_shlib7  r|   r   )r   r   r   r   r   r   r   r   r   T.Union[str, T.List[str]]r   r   r   r   r   mesonlib.MachineChoicer   rX  r   r   r   r   r   r   r   r   r   r   r   )r-   r   r9   r   r   zT.Tuple[bool, bool]r   r   r   )r   r   r   r   r
  r   r   r   r  r   r   r   r   r  r   r   r   r$  r   r   r   r   r,  r   r   r   r  r   r   r   r   r9   r   rH  r   rI  r   rJ  r   rK  r   rL  zT.Tuple[str, str]r   r   rQ  r   r   r   )5r   r   r   r   __doc__r   r   abcabstractpropertyr   r   r   r   r#   r(   r   r@   r   r   r~   r   r   rh   r   r   r   rK   r   r   r  r  r  r  r  r  r  abstractmethodrO   r   r%  r(  r-  r0  r3  r8  r;  r>  rB  r[   rM  rR  rU  r   r6   r   r   r   r   p   s   ) 40  	 	 =M 1
-4
-B[
-)
-69
- 
-b-#%
!'
en
.i=B 	 d 	 	
M VZ!,;R _A #03FW\gr   r   )	metaclassc                  t    \ rS rSrS/rSS jrSS jrSS jrSS jr\	SS j5       r
\	SS j5       rSS	 jrS
rg)VisualStudioLikeLinkeriC  z/NOLOGOc                    Xl         g r   r   )r   r   s     r   r   VisualStudioLikeLinker.__init__F  r   r   c                6    U R                   R                  5       $ r   r   r"   s    r   r~   &VisualStudioLikeLinker.get_always_argsI  r   r   c                6    U R                   R                  5       $ r   r   r"   s    r   r   -VisualStudioLikeLinker.get_linker_always_argsL  r   r   c                d    / nU R                   (       a  USU R                   -   /-  nUSU-   /-  nU$ Nz	/MACHINE:/OUT:rk  )r   r7   r-   s      r   rO   &VisualStudioLikeLinker.get_output_argsO  s;    <<[4<</00D6!""r   c                0    SSK Jn  UR                  U5      $ Nr   )VisualStudioCCompiler)compilers.crw  rm   rl   r-   rw  s      r   rm   *VisualStudioLikeLinker.unix_args_to_nativeV      7$88>>r   c                0    SSK Jn  UR                  U5      $ rv  )rx  rw  rq   ry  s      r   rq   *VisualStudioLikeLinker.native_args_to_unix[  r{  r   c                "    [         R                  $ r   )r   MSVCr"   s    r   r   &VisualStudioLikeLinker.rsp_file_syntax`  s    !!!r   rk  N)r   r   r   r   r   r   )r   r   r   r   r   r   r~   r   rO   r   rm   rq   r   r   r6   r   r   ri  ri  C  sJ    +K'' ? ? ? ?"r   ri  c                  &    \ rS rSrSrSrSS jrSrg)VisualStudioLinkerid  zMicrosoft's lib static linker.libc                X    [         R                  X5        [        R                  X5        g r   r   r   ri  r   r   r   s      r   r   VisualStudioLinker.__init__j      d,''6r   r6   Nr   r   r   r   r   r   r   r   rc  r   r   r   r6   r   r   r  r  d  s    (	B7r   r  c                  &    \ rS rSrSrSrSS jrSrg)IntelVisualStudioLinkerio  zIntel's xilib static linker.xilibc                X    [         R                  X5        [        R                  X5        g r   r  r  s      r   r    IntelVisualStudioLinker.__init__u  r  r   r6   Nr  r  r6   r   r   r  r  o  s    &	B7r   r  c                  D   ^  \ rS rSrSrSU 4S jjrSS jrS	S jrSrU =r	$ )
ArLinkeriz  arc                   > [         TU ]  U5        [        R                  " U R                  S/-   5      S   nSnSnSU;   a  US-  nSU;   a  SnU/U l        XE-   /U l        S	U;   U l        Xl        g )
Nz-hr   csrr   z[D]Dz[T]Tz@<)	superr   r   
Popen_safer   std_argsstd_thin_argscan_rspr   )r   r   r   stdostdargsthinargs	__class__s         r   r   ArLinker.__init__}  s~    !""4<<4&#89!<D=sNGD=H 	%01t|&r   c                    U R                   $ r   )r  r"   s    r   r3   ArLinker.can_linker_accept_rsp  s    ||r   c                    U(       ad  UR                   U R                     R                  5       (       d8  UR                   U R                     R                  5       (       d  U R                  $ U R
                  $ r   )machinesr   	is_darwinis_sunosr  r  rD   s      r   rF   ArLinker.get_std_link_args  sX    
 3<<(8(89CCEE,,t//099;;%%%== r   )r  r   r  r  )r   rZ  r   r   r   r   )
r   r   r   r   r   r   r3   rF   r   __classcell__r  s   @r   r  r  z  s    	B'	! 	!r   r  c                      \ rS rSrSrSrg)AppleArLinkeri  applearr6   Nr   r   r   r   r   r   r6   r   r   r  r    s	     
Br   r  c                      \ rS rSrSrSrg)ArmarLinkeri  armarr6   Nr  r6   r   r   r  r    s    	Br   r  c                  p   ^  \ rS rSr\R
                  S.S	U 4S jjjrS
S jrSS jrSS jr	SS jr
SrU =r$ )DLinkeri  
rsp_syntaxc               P   > [         TU ]  U5        US   U l        X l        X0l        g r'   )r  r   r   arch_DLinker__rsp_syntax)r   r   r  r  r  s       r   r   DLinker.__init__  s&    !!*	&r   c                    S/$ )Nz-libr6   rD   s      r   rF   DLinker.get_std_link_args  	    xr   c                    SU-   /$ )Nz-of=r6   rN   s     r   rO   DLinker.get_output_args  s      r   c                    [         R                  " 5       (       a9  U R                  S:X  a  S/$ U R                  S:X  a  U R                  S:X  a  S/$ S/$ / $ )Nx86_64z-m64
x86_mscoffdmdz
-m32mscoffz-m32)r   r2   r  r   r"   s    r   r   DLinker.get_linker_always_args  sO      yyH$xl*tww%/?$~%8O	r   c                    U R                   $ r   )r  r"   s    r   r   DLinker.rsp_file_syntax  s       r   )__rsp_syntaxr  r   )r   r   r  r   r  r   r   r   r   r   )r   r   r   r   r   r   r   rF   rO   r   r   r   r  r  s   @r   r  r    s/    WdWhWh ' '!! !r   r  c                  J   ^  \ 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rU =r	$ )
CcrxLinkeri  c                2   > [         TU ]  U5        SU l        g )Nrlinkr  r   r   r   r   r  s     r   r   CcrxLinker.__init__      !r   c                    gNFr6   r"   s    r   r3    CcrxLinker.can_linker_accept_rsp      r   c                    SU 3/$ Nz-output=r6   rN   s     r   rO   CcrxLinker.get_output_args  s    6(#$$r   c                
    SS/$ )Nz-nologoz-form=libraryr6   r"   s    r   r   !CcrxLinker.get_linker_always_args  s    ?++r   r!   r   r   r   r   
r   r   r   r   r   r3   rO   r   r   r  r  s   @r   r  r    s    %, ,r   r  c                  J   ^  \ 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rU =r	$ )
Xc16Linkeri  c                2   > [         TU ]  U5        SU l        g )Nzxc16-arr  r  s     r   r   Xc16Linker.__init__  s    !r   c                    gr  r6   r"   s    r   r3    Xc16Linker.can_linker_accept_rsp  r  r   c                
    U /$ r   r6   rN   s     r   rO   Xc16Linker.get_output_args      (}r   c                    S/$ )Nrcsr6   r"   s    r   r   !Xc16Linker.get_linker_always_args  	    wr   r!   r   r   r   r   r  r  s   @r   r  r    s     r   r  c                  @   ^  \ rS rSrSU 4S jjrSS jrSS jrSrU =r$ )	CompCertLinkeri  c                2   > [         TU ]  U5        SU l        g )Nccompr  r  s     r   r   CompCertLinker.__init__  r  r   c                    gr  r6   r"   s    r   r3   $CompCertLinker.can_linker_accept_rsp  r  r   c                    SU 3/$ Nz-or6   rN   s     r   rO   CompCertLinker.get_output_args  s    VHr   r!   r   r   r   )	r   r   r   r   r   r3   rO   r   r  r  s   @r   r  r    s     r   r  c                  J   ^  \ 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rU =r	$ )TILinkeri  c                2   > [         TU ]  U5        SU l        g )Nzti-arr  r  s     r   r   TILinker.__init__  r  r   c                    gr  r6   r"   s    r   r3   TILinker.can_linker_accept_rsp  r  r   c                
    U /$ r   r6   rN   s     r   rO   TILinker.get_output_args  r  r   c                    S/$ N-rr6   r"   s    r   r   TILinker.get_linker_always_args  	    vr   r!   r   r   r   r   r  r  s   @r   r  r    s     r   r  c                      \ rS rSrSrSrg)C2000Linkeri  ar2000r6   Nr  r6   r   r   r  r        	Br   r  c                      \ rS rSrSrSrg)C6000Linkeri   ar6000r6   Nr  r6   r   r   r  r         	Br   r  c                       \ rS rSrSrSS/rSrg)AIXArLinkeri  aixarz-csrz-Xanyr6   N)r   r   r   r   r   r  r   r6   r   r   r  r    s    	B Hr   r  c                  <    \ rS rSrSS jrS	S jrS
S jrSS jrSrg)MetrowerksStaticLinkeri	  c                    gNTr6   r"   s    r   r3   ,MetrowerksStaticLinker.can_linker_accept_rsp  rx   r   c                    S/$ )Nz-libraryr6   r"   s    r   r   -MetrowerksStaticLinker.get_linker_always_args  
    |r   c                
    SU/$ r  r6   rN   s     r   rO   &MetrowerksStaticLinker.get_output_args      f~r   c                "    [         R                  $ r   r   r"   s    r   r   &MetrowerksStaticLinker.rsp_file_syntax  s       r   r6   Nr   r   r   r   )	r   r   r   r   r3   r   rO   r   r   r6   r   r   r  r  	  s    !r   r  c                      \ rS rSrSrSrg)MetrowerksStaticLinkerARMi  mwldarmr6   Nr  r6   r   r   r  r        	Br   r  c                      \ rS rSrSrSrg)%MetrowerksStaticLinkerEmbeddedPowerPCi  mwldeppcr6   Nr  r6   r   r   r  r        	Br   r  c                  X   ^  \ 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r
U =r$ )TaskingStaticLinkeri  taskingc                $   > [         TU ]  U5        g r   r  r   r  s     r   r   TaskingStaticLinker.__init__"  s    !r   c                    gr
  r6   r"   s    r   r3   )TaskingStaticLinker.can_linker_accept_rsp%  rx   r   c                "    [         R                  $ r   r   TASKINGr"   s    r   r   #TaskingStaticLinker.rsp_file_syntax(      $$$r   c                
    SU/$ )Nz-nr6   rN   s     r   rO   #TaskingStaticLinker.get_output_args+  r  r   c                    S/$ r  r6   r"   s    r   r   *TaskingStaticLinker.get_linker_always_args.  r  r   r6   r   r   r   r   r   )r   r   r   r   r   r   r3   r   rO   r   r   r  r  s   @r   r  r    s&    	B"% r   r  c                ^    U  Vs/ s H  n[        X1U5      PM     nn[        U5      nU$ s  snf r   )evaluate_rpathorder_rpaths)
raw_rpathsrX   rY   pinternal_format_rpathsordered_rpathss         r   prepare_rpathsr4  1  s9     OYYjnQ8DjY!"89N Zs   *c                F    [        U [        R                  R                  S9$ )N)key)sortedosr
  isabs)
rpath_lists    r   r/  r/  :  s     *"''--00r   c                   X:X  a  g[         R                  R                  U 5      (       a  U $ [         R                  R                  [         R                  R	                  X5      [         R                  R	                  X5      5      $ r   )r8  r
  r9  relpathr   )r1  rX   rY   s      r   r.  r.  F  sQ    }	q		wwrww||I9277<<	;\]]r   c                  @    \ rS rSrSrS	S jrS
S jrSS jrSS jrSr	g)PosixDynamicLinkerMixiniO  zMixin class for POSIX-ish linkers.

This is obviously a pretty small subset of the linker interface, but
enough dynamic linkers that meson supports are POSIX-like but not
GNU-like that it makes sense to split this out.
c                
    SU/$ r  r6   r  s     r   rO   'PosixDynamicLinkerMixin.get_output_argsX      j!!r   c                    S/$ )N-sharedr6   r"   s    r   r   /PosixDynamicLinkerMixin.get_std_shared_lib_args[  s
    {r   c                    SU-   /$ Nz-Lr6   r#  s     r   r%  'PosixDynamicLinkerMixin.get_search_args^  s    wr   c                    / $ r   r6   r  s     r   r  &PosixDynamicLinkerMixin.sanitizer_argsa  rH   r   r6   Nr]  r   r^  r\  )
r   r   r   r   rc  rO   r   r%  r  r   r6   r   r   r>  r>  O  s    " r   r>  c            
      `   \ rS rSr% Sr\R                  (       a  \R                  r	S&S jr
/ / / / / S// S.rS\S'   SS	S
SSSSSSS.	rS\S'   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*S 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-S! jr S.     S/S# jjrS0S$ jrS%rg")1GnuLikeDynamicLinkerMixinie  zMixin class for dynamic linkers that provides gnu-like interface.

This acts as a base for the GNU linkers (bfd and gold), LLVM's lld, and
other linkers like GNU-ld.
c                    g r   r6   r   r   s     r   r   'GnuLikeDynamicLinkerMixin._apply_prefixo      PSr   -O1r   r   r   r   windowsconsole71011121316)	nativerQ  rR  posixefi_applicationefi_boot_service_driverefi_runtime_driverefi_romboot_applicationzT.Dict[str, str]_SUBSYSTEMSc                    gr
  r6   r"   s    r   r   )GnuLikeDynamicLinkerMixin.get_accepts_rsp  rx   r   c                    S/$ )Nz-pier6   r"   s    r   r  &GnuLikeDynamicLinkerMixin.get_pie_args  r  r   c                $    U R                  S5      $ N--as-neededr   r"   s    r   r  +GnuLikeDynamicLinkerMixin.get_asneeded_args  s    !!-00r   c                `    U(       d  U$ U R                  S5      U-   U R                  S5      -   $ Nz--whole-archivez--no-whole-archiverh  r,   s     r   r  ,GnuLikeDynamicLinkerMixin.get_link_whole_for  2    K!!"34t;d>P>PQe>fffr   c                $    U R                  S5      $ N--allow-shlib-undefinedrh  r"   s    r   r  2GnuLikeDynamicLinkerMixin.get_allow_undefined_args  s    !!";<<r   c                    S/$ )Nz-fltor6   r"   s    r   r  &GnuLikeDynamicLinkerMixin.get_lto_args  s
    yr   c                >    U(       d  U$ SSR                  U5       3/$ Nz-fsanitize=,r   r  s     r   r  (GnuLikeDynamicLinkerMixin.sanitizer_args  #    Lchhuo./00r   c                    S/$ Nz
--coverager6   r"   s    r   r   +GnuLikeDynamicLinkerMixin.get_coverage_args  
    ~r   c                    UR                   U R                     nUR                  5       (       d  UR                  5       (       a  U R	                  S5      $ U R	                  S5      $ )Nz--export-all-symbolsz-export-dynamicr  r   r2   	is_cygwinr   )r   r9   ms      r   r(  -GnuLikeDynamicLinkerMixin.export_dynamic_args  sO    LL))*<<>>Q[[]]%%&<==!!"344r   c                *    U R                  SU-   5      $ )Nz--out-implib=rh  r+  s     r   r-  -GnuLikeDynamicLinkerMixin.import_library_args  s    !!/J">??r   c                d    UR                   U R                     R                  5       (       a  / $ S/$ Nz-pthread)r  r   is_haikur_   s     r   r0  &GnuLikeDynamicLinkerMixin.thread_flags  s-    <<(()2244I|r   c                $    U R                  S5      $ N--no-undefinedrh  r"   s    r   r3  +GnuLikeDynamicLinkerMixin.no_undefined_args  s    !!"233r   c                $    U R                  S5      $ )Nz--fatal-warningsrh  r"   s    r   r8  (GnuLikeDynamicLinkerMixin.fatal_warnings  s    !!"455r   c                    UR                   U R                     nUR                  5       (       d  UR                  5       (       a  / $ Uc  SOSU-   nU R	                  SU U SU U 35      $ Nr   .z-soname,r  )	r   r9   rH  rI  rJ  rK  rL  r  sostrs	            r   rM  )GnuLikeDynamicLinkerMixin.get_soname_args  sf    LL))*<<>>Q[[]]I'S9_!!HVHZL&%"QRRr   Nc           
        UR                   U R                     nUR                  5       (       d  UR                  5       (       a  / [	        5       4$ UR                  5       nU(       d5  UR                  (       d$  UR                  (       d  U(       d  / [	        5       4$ / nSn	[        XrU5      n
[        R                  " U
 Vs/ s H"  n[        R                  R                  X5      PM$     sn5      n[	        5       nU H#  nUR                  UR                  S5      5        M%     UR                  S:w  a]  UR                  UR                  5        UR                  R!                  S5       H#  nUR                  UR                  S5      5        M%     U(       a  UR#                  U5        [        R$                  " 5       (       d  [        R&                  " 5       (       a   UR)                  U R+                  S5      5        SR                  U5      n[-        UR                  S5      5      n[-        UR                  R                  S5      5      nUU:  a  SUU-
  -  nU(       d  UnOUS-   U-   nUR)                  U R+                  SU-   5      5        [        R.                  " 5       (       d  U R0                  S	:X  a  X4$ U R0                  S
;   ao  [        R2                  " U R4                  S5      (       aI  U HC  nUR)                  U R+                  S[        R                  R                  X+5      -   5      5        ME     X4$ s  snf )N$ORIGINutf8r   :z	-z,originutf-8X-rpath,ld.zigcc>   ld.bfdld.goldz<2.28z-rpath-link,)r  r   r2   r  rV   determine_rpath_dirsinstall_rpathbuild_rpathr4  r   
OrderedSetr8  r
  r   addencodesplitupdateis_dragonflybsd
is_openbsdextendr   lenr  r   version_comparer   )r   r9   rX   rY   r7   rZ   r  rpath_pathsr-   origin_placeholderprocessed_rpathsr1  	all_pathsrpath_dirs_to_removepathspaths_lengthinstall_rpath_lengthpaddings                     r   r[   *GnuLikeDynamicLinkerMixin.build_rpath_args  s   LL))*<<>>Q[[]];1136#7#7@R@R[f;&)+(K ''Vf(gVfQR6H)LVf(gh	-0UA $$QXXf%56  #MM&,,-''--c2$((&)9: 3[) ##%%)<)<)>)> KK**;78 #5<<01"6#7#7#>#>w#GH..1L@AGg-D&&y5'89:
 $''Z"7//, 77++0H0HW^0_0_ D..~Y@Z/Z[\ ! ++A )hs    )L=c                    S nSU;   a  UR                  SS5      u  pU R                  R                  U5      nUb  Ub  USU 3-  nSU 3/nO[        R                  " SU< S35      eU R                  U5      $ )Nrv  r   r  --subsystem,win_subsystem: z: not handled in MinGW linker. This should not be possible.)r  r`  getr   MesonBugExceptionr   )r   r  versionsuffixnewvaluer-   s        r   r>  0GnuLikeDynamicLinkerMixin.get_win_subsystem_args  s     %<#(;;sA#6 E##''.(a//"8*-.D,,ui  HB  .C  D  D!!$''r   r6   rW  r   r   r   r\  r   r_  ra  r   r   r`  )r   r   r   r   rc  r  TYPE_CHECKINGr   HOSTr   r   r   r   r`  r   r  r  r  r  r  r  r   r(  r-  r0  r3  r8  rM  r[   r>  r   r6   r   r   rK  rK  e  s    	#((S W40  #'" 
%K! 
1g
=1
5@
46S #S03SFWS\gS VZN,!,N,;RN, _AN,`(r   rK  c                      \ rS rSrSrS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S
 jrSS jrSS jrSS jrSS jr        SS jr S     SS jjrSS jrSS jrSrg)AppleDynamicLinkeri$  zApple's ld implementation.ld64c                $    U R                  S5      $ )Nz-dead_strip_dylibsrh  r"   s    r   r  $AppleDynamicLinker.get_asneeded_args*  s    !!"677r   c                H    U R                   S:X  a  / $ U R                  S5      $ )Niosz-undefined,dynamic_lookup)r   r   r"   s    r   r  +AppleDynamicLinker.get_allow_undefined_args-  s%    ;;%I%%&ABBr   c                P    U R                   S:X  a  S/$ S/U R                  5       -   $ )Nr  z-dynamiclibz-bundle)r   r  rN   s     r   r   -AppleDynamicLinker.get_std_shared_module_args4  s,    ;;%!?";!>!>!@@@r   c                    / $ r   r6   r"   s    r   r  AppleDynamicLinker.get_pie_args:  rH   r   c                ~    / nU H4  nUR                  U R                  S5      5        UR                  U5        M6     U$ )Nz-force_load)r  r   append)r   r-   resultr   s       r   r  %AppleDynamicLinker.get_link_whole_for=  s;     AMM$,,];<MM!  r   c                    S/$ r{  r6   r"   s    r   r   $AppleDynamicLinker.get_coverage_argsD  r}  r   c                >    U(       d  U$ SSR                  U5       3/$ ru  rw  r  s     r   r  !AppleDynamicLinker.sanitizer_argsG  ry  r   c                    / $ r   r6   r"   s    r   r3  $AppleDynamicLinker.no_undefined_argsL  r5  r   c                $    U R                  S5      $ )Nz-headerpad_max_install_namesrh  r"   s    r   r;  !AppleDynamicLinker.headerpad_argsW  s    !!"@AAr   c                $    U R                  S5      $ )Nz-bitcode_bundlerh  r"   s    r   rB  AppleDynamicLinker.bitcode_argsZ      !!"344r   c                $    U R                  S5      $ )Nz-fatal_warningsrh  r"   s    r   r8  !AppleDynamicLinker.fatal_warnings]  r  r   c                    SX#/nUb  UR                  SU-   5        UR                  SU-   5        SSR                  U5      /nU(       a  UR                  SUS   SUS   /5        U$ )	Nz@rpath/r  z-install_namer   z-compatibility_versionr   z-current_versionr   )r  r   r  )	r   r9   rH  rI  rJ  rK  rL  install_namer-   s	            r   rM  "AppleDynamicLinker.get_soname_args`  sx    !66 i0C&L)!67KK1?13E+_Q-?A Br   Nc           	        UR                  5       nU(       d5  UR                  (       d$  UR                  (       d  U(       d  / [        5       4$ / n[        5       nSn	[	        XbU5      n
[
        R                  " U
 Vs/ s H"  n[        R                  R                  X5      PM$     sn5      nUR                  S:w  a*  UR                  UR                  R                  S5      5        U(       a  UR                  U5        U HF  nUR                  UR                  S5      5        UR                  U R                  SU-   5      5        MH     Xx4$ s  snf )Nz@loader_pathr   r  r  r  )r  r  r  rV   r4  r   r  r8  r
  r   r  r  r  r  r  r   )r   r9   rX   rY   r7   rZ   r  r-   r  r  r  r1  r  rps                 r   r[   #AppleDynamicLinker.build_rpath_argsl  s   1136#7#7@R@R[f;-0U ,)+(K''Vf(gVfQR6H)LVf(gh	#V//55c:;[)B $$RYYv%67KK**9r>:;  ++ )hs   ;)Ec                    SU-   /$ )Nz-Wl,-cache_path_lto,r6   r	  s     r   r  )AppleDynamicLinker.get_thinlto_cache_args  s    &-..r   c                t    [         R                  " U R                  S5      (       a  U R                  S5      $ / $ )Nz>=224.1z-export_dynamic)r   r  r   r   r_   s     r   r(  &AppleDynamicLinker.export_dynamic_args  s0    ##DLL)<<%%&788	r   r6   r   )r7   r   r   r   r   r\  ra  r   r   r[  r   )r   r   r   r   rc  r   r  r  r   r  r  r   r  r3  r;  rB  r8  rM  r[   r  r(  r   r6   r   r   r  r  $  s    $	B8CA1
	B55
 #
03
FW
\g
 VZ,!,,;R, _A,,/r   r  c                      \ rS rSrSrSrg)LLVMLD64DynamicLinkeri  zld64.lldr6   Nr  r6   r   r   r  r    s    	Br   r  c                      \ rS rSrSrSrg)GnuDynamicLinkeri  z)Representation of GNU ld.bfd and ld.gold.r6   N)r   r   r   r   rc  r   r6   r   r   r  r    s    3r   r  c                  "    \ rS rSrSrSS jrSrg)GnuGoldDynamicLinkeri  r  c                    SU-   /$ )Nz-Wl,-plugin-opt,cache-dir=r6   r	  s     r   r  +GnuGoldDynamicLinker.get_thinlto_cache_args  s    ,t344r   r6   Nr[  r   r   r   r   r   r  r   r6   r   r   r  r    s    	B5r   r  c                      \ rS rSrSrSrg)GnuBFDDynamicLinkeri  r  r6   Nr  r6   r   r   r  r    r  r   r  c                  "    \ rS rSrSrSS jrSrg)MoldDynamicLinkeri  zld.moldc                    SU-   /$ Nz-Wl,--thinlto-cache-dir=r6   r	  s     r   r  (MoldDynamicLinker.get_thinlto_cache_args      *T122r   r6   Nr[  r  r6   r   r   r  r    s    	B3r   r  c                     ^  \ rS rSrSrSrSSS.         SU 4S j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rU =r$ )LLVMDynamicLinkeri  zxRepresentation of LLVM's ld.lld linker.

This is only the gnu-like linker, not the apple like or link.exe like
linkers.
zld.lldr   r   r   c          	        > [         TU ]  XX4XVS9  U R                  SU5      U l        U R                  SU5      U l        U R                  SU5      U l        g )Nr   rp  rg  r  )r  r   _supports_flaghas_allow_shlib_undefinedhas_as_neededhas_no_undefined)r   r   r   r   r   r   r   r  s          r   r   LLVMDynamicLinker.__init__  s]     	zvg *.)<)<=VXc)d&!00L $ 3 34Dk Rr   c                    [         R                  " U R                  U-   U R                  U5      -   5      u    p4SU 3U;  =(       a    SU S3U;  =(       a    SU 3U;  $ )Nzunknown argument: zunknown argument: ''zinvalid option:  )r   r  r   r   )r   flagr   _es        r   r   LLVMDynamicLinker._supports_flag  sr    %%dll[&@4CUCUVZC[&[\1 "$(1 2"4&*!32 !'q0	
r   c                J    U R                   (       a  U R                  S5      $ / $ ro  )r  r   r"   s    r   r  *LLVMDynamicLinker.get_allow_undefined_args  s"    ))%%&?@@	r   c                J    U R                   (       a  U R                  S5      $ / $ rf  )r  r   r"   s    r   r  #LLVMDynamicLinker.get_asneeded_args  s!    %%m44	r   c                J    U R                   (       a  U R                  S5      $ / $ r  )r  r   r"   s    r   r3  #LLVMDynamicLinker.no_undefined_args  s"      %%&677	r   c                    SU-   /$ r  r6   r	  s     r   r  (LLVMDynamicLinker.get_thinlto_cache_args  r  r   c                    S nSU;   a  UR                  SS5      u  pXR                  ;   a   Ub  USU 3-  nU R                  SU 3/5      $ [        R                  " SU S35      e)Nrv  r   r  r  r  z8 not handled in lld linker. This should not be possible.)r  r`  r   r   r  )r   r  r   s      r   r>  (LLVMDynamicLinker.get_win_subsystem_args  sx    %<"[[a0NE$$$"1WI&%%eW'=&>??,,ugE}-~r   )r  r  r  rY  )r  r   r   r   r   r   r   r[  r`  )r   r   r   r   rc  r   r   r  r  r  r3  r  r>  r   r  r  s   @r   r  r    sx     
B =M 1
S4
SB[
S)
S69
S 
S 
S



3
@ 
@r   r  c                  "    \ rS rSrSrSS jrSrg)ZigCCDynamicLinkeri  r  c                    / $ r   r6   r	  s     r   r  )ZigCCDynamicLinker.get_thinlto_cache_args  rH   r   r6   Nr[  r  r6   r   r   r  r    s    	Br   r  c                  n    \ rS rSrSrSrSS jrSS jr        SS jrSS jr	 S     SS	 jjr
S
rg)WASMDynamicLinkeri  zEmscripten's wasm-ld.zld.wasmc                    S/$ )Nz-sERROR_ON_UNDEFINED_SYMBOLS=0r6   r"   s    r   r  *WASMDynamicLinker.get_allow_undefined_args      011r   c                    S/$ )Nz-sERROR_ON_UNDEFINED_SYMBOLS=1r6   r"   s    r   r3  #WASMDynamicLinker.no_undefined_args  r  r   c                2    [        U R                   S35      eNz# does not support shared libraries.r
   r   rG  s          r   rM  !WASMDynamicLinker.get_soname_args      y(KLMMr   c                    / $ r   r6   r"   s    r   r  #WASMDynamicLinker.get_asneeded_args   rH   r   Nc                    / [        5       4$ r   rU   rW   s         r   r[   "WASMDynamicLinker.build_rpath_args  r]   r   r6   r   ra  r   r   )r   r   r   r   rc  r   r  r3  rM  r  r[   r   r6   r   r   r  r    sp    	B22N #N03NFWN\gN VZ!,;R _A r   r  c                     ^  \ rS rSrSrSrSS. SU 4S j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S jrSrU =r$ )CcrxDynamicLinkeri  z!Linker for Renesas CCrx compiler.r  r   r   c               *   > [         TU ]  S/US/ US9  g )Nz	rlink.exer   r%  r   r   r   r   r  s      r   r   CcrxDynamicLinker.__init__  s"    +R!( 	 	*r   c                    gr  r6   r"   s    r   r   !CcrxDynamicLinker.get_accepts_rsp  r  r   c                    g)Nz-lib=r6   r"   s    r   r    CcrxDynamicLinker.get_lib_prefix  s    r   c                    / $ r   r6   r"   s    r   r   )CcrxDynamicLinker.get_std_shared_lib_args  rH   r   c                    SU 3/$ r  r6   r  s     r   rO   !CcrxDynamicLinker.get_output_args  s    :,'((r   c                    [        S5      e)Nz-rlink.exe does not have a search dir argumentOSErrorr#  s     r   r%  !CcrxDynamicLinker.get_search_args  s    EFFr   c                    / $ r   r6   r"   s    r   r  *CcrxDynamicLinker.get_allow_undefined_args"  rH   r   c                    / $ r   r6   rG  s          r   rM  !CcrxDynamicLinker.get_soname_args%  r|   r   r6   r   rZ  r   r   r   r   r   r]  r$  r   r   'T.NoReturn'ra  )r   r   r   r   rc  r   r   r   r   r   rO   r%  r  rM  r   r  r  s   @r   r$  r$    sk    +	B $5* * *
)G #03FW\g r   r$  c                     ^  \ rS rSrSrSrSS. SU 4S j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S jr        SS jr S     SS jjrSrU =r$ )Xc16DynamicLinkeri*  z#Linker for Microchip XC16 compiler.xc16-gccr   r%  c               *   > [         TU ]  S/US/ US9  g )Nr>  r   r%  r   r'  s      r   r   Xc16DynamicLinker.__init__0  s"    *{B!( 	 	*r   c                p    [        U5      S:  a  U$ U R                  S5      U-   U R                  S5      -   $ Nr   z--start-groupz--end-groupr  r   r,   s     r   r  $Xc16DynamicLinker.get_link_whole_for5  8    t9q=K!!/2T9D<N<N}<]]]r   c                    gr  r6   r"   s    r   r   !Xc16DynamicLinker.get_accepts_rsp:  r  r   c                    gr   r6   r"   s    r   r    Xc16DynamicLinker.get_lib_prefix=  r   r   c                    / $ r   r6   r"   s    r   r   )Xc16DynamicLinker.get_std_shared_lib_args@  rH   r   c                    SU 3/$ r  r6   r  s     r   rO   !Xc16DynamicLinker.get_output_argsC      ZL!""r   c                    [        S5      e)Nz,xc16-gcc does not have a search dir argumentr2  r#  s     r   r%  !Xc16DynamicLinker.get_search_argsF  s    DEEr   c                    / $ r   r6   r"   s    r   r  *Xc16DynamicLinker.get_allow_undefined_argsI  rH   r   c                    / $ r   r6   rG  s          r   rM  !Xc16DynamicLinker.get_soname_argsL  r|   r   c                    / [        5       4$ r   rU   rW   s         r   r[   "Xc16DynamicLinker.build_rpath_argsP  r]   r   r6   r9  r   r   r   r   r]  r:  ra  r   r   r   r   r   r   rc  r   r   r  r   r   r   rO   r%  r  rM  r[   r   r  r  s   @r   r=  r=  *  s    -	B $5* * *
^
#F #03FW\g
 VZ!,;R _A r   r=  c                     ^  \ rS rSrSrSrSS. SU 4S j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S jr        SS jr S     SS jjrSrU =r$ )CompCertDynamicLinkeriT  zLinker for CompCert C compiler.r  r   r%  c               *   > [         TU ]  S/US/ US9  g )Nr  r   r%  r   r'  s      r   r   CompCertDynamicLinker.__init__Z  s"    'KR!( 	 	*r   c                `    U(       d  U$ U R                  S5      U-   U R                  S5      -   $ )Nz-Wl,--whole-archivez-Wl,--no-whole-archiverh  r,   s     r   r  (CompCertDynamicLinker.get_link_whole_for_  s2    K!!"784?$BTBTUmBnnnr   c                    gr  r6   r"   s    r   r   %CompCertDynamicLinker.get_accepts_rspd  r  r   c                    gr   r6   r"   s    r   r   $CompCertDynamicLinker.get_lib_prefixg  r   r   c                    / $ r   r6   r"   s    r   r   -CompCertDynamicLinker.get_std_shared_lib_argsj  rH   r   c                    SU 3/$ r  r6   r  s     r   rO   %CompCertDynamicLinker.get_output_argsm  rN  r   c                    SU 3/$ rF  r6   r#  s     r   r%  %CompCertDynamicLinker.get_search_argsp  s    WIr   c                    / $ r   r6   r"   s    r   r  .CompCertDynamicLinker.get_allow_undefined_argss  rH   r   c                2    [        U R                   S35      er  r  rG  s          r   rM  %CompCertDynamicLinker.get_soname_argsv  r  r   c                    / [        5       4$ r   rU   rW   s         r   r[   &CompCertDynamicLinker.build_rpath_argsz  r]   r   r6   r9  r   r   r   r   r]  r^  ra  r   r   rW  r  s   @r   rY  rY  T  s    )	B $5* * *
o
# N #N03NFWN\gN
 VZ!,;R _A r   rY  c                     ^  \ rS rSrSrSrSS. SU 4S j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S jrSS jrSrU =r$ )TIDynamicLinkeri~  z-Linker for Texas Instruments compiler family.tir   r%  c               &   > [         TU ]  XS/ US9  g Nr   r%  r   r   r   r   r   r  s       r   r   TIDynamicLinker.__init__      r2!( 	 	*r   c                p    [        U5      S:  a  U$ U R                  S5      U-   U R                  S5      -   $ rB  rC  r,   s     r   r  "TIDynamicLinker.get_link_whole_for  rE  r   c                    gr  r6   r"   s    r   r   TIDynamicLinker.get_accepts_rsp  r  r   c                    g)Nz-l=r6   r"   s    r   r   TIDynamicLinker.get_lib_prefix  r  r   c                    / $ r   r6   r"   s    r   r   'TIDynamicLinker.get_std_shared_lib_args  rH   r   c                    SSU 3/$ )N-zz--output_file=r6   r  s     r   rO   TIDynamicLinker.get_output_args  s    zl344r   c                    [        S5      e)Nz.TI compilers do not have a search dir argumentr2  r#  s     r   r%  TIDynamicLinker.get_search_args  s    FGGr   c                    / $ r   r6   r"   s    r   r  (TIDynamicLinker.get_allow_undefined_args  rH   r   c                    / $ r   r6   r"   s    r   r~   TIDynamicLinker.get_always_args  rH   r   r6   r   r   r   rZ  r   r   r   r   r   r   r]  r:  )r   r   r   r   rc  r   r   r  r   r   r   rO   r%  r  r~   r   r  r  s   @r   ro  ro  ~  sQ    7	B $5* * *
^
5H r   ro  c                      \ rS rSrSrSrg)C2000DynamicLinkeri  cl2000r6   Nr  r6   r   r   r  r    r  r   r  c                      \ rS rSrSrSrg)C6000DynamicLinkeri  cl6000r6   Nr  r6   r   r   r  r    r  r   r  c                  \   ^  \ rS rSrSrSrSS. SU 4S jjjrSS jrSS jrSS	 jr	S
r
U =r$ )ArmDynamicLinkeri  zLinker for the ARM compiler.armlinkr   r%  c               *   > [         TU ]  S/US/ US9  g )Nr  r   r%  r   r'  s      r   r   ArmDynamicLinker.__init__  s"    )k2r!( 	 	*r   c                    gr  r6   r"   s    r   r    ArmDynamicLinker.get_accepts_rsp  r  r   c                    [        S5      e)Nz/The Arm Linkers do not support shared librariesrA  r"   s    r   r   (ArmDynamicLinker.get_std_shared_lib_args  s    NOOr   c                    / $ r   r6   r"   s    r   r  )ArmDynamicLinker.get_allow_undefined_args  rH   r   r6   r9  r   )r   r;  r   )r   r   r   r   rc  r   r   r   r   r  r   r  r  s   @r   r  r    s7    &	B $5* * *
P r   r  c                  ,    \ rS rSrSrSS jrSS jrSrg)	ArmClangDynamicLinkeri  zLinker used with ARM's clang fork.

The interface is similar enough to the old ARM ld that it inherits and
extends a few things as needed.
c                    S/$ )Nz--export_dynamicr6   r_   s     r   r(  )ArmClangDynamicLinker.export_dynamic_args  s    "##r   c                    SU-   /$ )Nz
--symdefs=r6   r+  s     r   r-  )ArmClangDynamicLinker.import_library_args  s    z)**r   r6   Nr   r_  )r   r   r   r   rc  r(  r-  r   r6   r   r   r  r    s    $+r   r  c                      \ rS rSrSrSrSrg)QualcommLLVMDynamicLinkeri  z-ARM Linker from Snapdragon LLVM ARM Compiler.zld.qcldr6   Nr   r   r   r   rc  r   r   r6   r   r   r  r    s
    7	Br   r  c                      \ rS rSrSrSrSrg)ELDDynamicLinkeri  z%Qualcomm's opensource embedded linkerzld.eldr6   Nr  r6   r   r   r  r    s
    /	Br   r  c                  J    \ rS rSrSrSr S	     S
S jjrSS jrSS jrSr	g)NAGDynamicLinkeri  a#  NAG Fortran linker, ld via gcc indirection.

Using nagfor -Wl,foo passes option foo to a backend gcc invocation.
(This linking gathers the correct objects needed from the nagfor runtime
system.)
To pass gcc -Wl,foo options (i.e., to ld) one must apply indirection
again: nagfor -Wl,-Wl,,foo
nagNc           	     B   UR                  5       nU(       d5  UR                  (       d$  UR                  (       d  U(       d  / [        5       4$ / nSn[	        XbU5      n	[
        R                  " U	 V
s/ s H"  n
[        R                  R                  X5      PM$     sn
5      nUR                  S:w  a  UR                  UR                  5        U(       a  UR                  U5        U H&  nUR                  U R                  SU-   5      5        M(     U[        5       4$ s  sn
f )Nr  r   z-Wl,-Wl,,-rpath,,)r  r  r  rV   r4  r   r  r8  r
  r   r  r  r  r   )r   r9   rX   rY   r7   rZ   r  r-   r  r  r1  r  r  s                r   r[   !NAGDynamicLinker.build_rpath_args  s    1136#7#7@R@R[f;&)+(K''Vf(gVfQR6H)LVf(gh	#MM&,,-[)BKK**+>+CDE  ce} )hs   1)Dc                    / $ r   r6   r"   s    r   r  )NAGDynamicLinker.get_allow_undefined_args  rH   r   c                L    SSK Jn  UR                  U R                  5      S/-   $ )Nr   )NAGFortranCompilerz-Wl,-shared)compilers.fortranr  get_nagfor_quietr   )r   r  s     r   r   (NAGDynamicLinker.get_std_shared_lib_args  s!    :!224<<@M?RRr   r6   r   r   r   )
r   r   r   r   rc  r   r[   r  r   r   r6   r   r   r  r    sA     
B VZ!,;R _A$Sr   r  c                  d    \ rS rSrSrSrS
S jr        SS jrS
S jr S     SS jjr	S	r
g)PGIDynamicLinkeri  zPGI linker.pgic                    / $ r   r6   r"   s    r   r  )PGIDynamicLinker.get_allow_undefined_args	  rH   r   c                    / $ r   r6   rG  s          r   rM   PGIDynamicLinker.get_soname_args  r|   r   c                |    [         R                  " 5       (       a  SS/$ [         R                  " 5       (       a  S/$ / $ )Nz	-Bdynamicz	-MmakedllrC  )r   r2   is_linuxr"   s    r   r   (PGIDynamicLinker.get_std_shared_lib_args  s8      --  ;	r   Nc                   UR                   U R                     R                  5       (       dM  UR                  5       nU Vs/ s H%  nS[        R
                  R                  X'5      -   PM'     sn[        5       4$ / [        5       4$ s  snf )Nz-R)r  r   r2   r  r8  r
  r   rV   )r   r9   rX   rY   r7   rZ   r  r1  s           r   r[   !PGIDynamicLinker.build_rpath_args  sn    ||D,,-88:: 557K@KL1TBGGLL66LceTTCE{ Ms   ,Br6   r   ra  r   r   )r   r   r   r   rc  r   r  rM  r   r[   r   r6   r   r   r  r    sf    	B #03FW\g VZ!,;R _A r   r  c                  @   ^  \ rS rSrSU 4S jjrSS jrSS jrSrU =r$ )	PGIStaticLinkeri"  c                B   > [         TU ]  U5        SU l        S/U l        g )Nr  r  )r  r   r   r  r  s     r   r   PGIStaticLinker.__init__#  s     !r   c                    U R                   $ r   )r  rD   s      r   rF   !PGIStaticLinker.get_std_link_args(  s    }}r   c                    U/$ r   r6   rN   s     r   rO   PGIStaticLinker.get_output_args+  r  r   )r   r  r   r   r   )	r   r   r   r   r   rF   rO   r   r  r  s   @r   r  r  "  s    
 r   r  c                  j  ^  \ rS rSr% Sr\R                  (       a  \R                  r	SS jr
/ / / / / S/SS/S.rS\S'   S	S
S\R                  S.           SU 4S jjjrSS jrSS j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%S jrS&S jrS'S jrS S jrSrU =r$ )(VisualStudioLikeLinkerMixini1  zCMixin class for dynamic linkers that act like Microsoft's link.exe.c                    g r   r6   rM  s     r   r   )VisualStudioLikeLinkerMixin._apply_prefix7  rO  r   z/OPT:REFz/INCREMENTAL:NOr   r   r   r   Tx86)r   directr   r  c               H   > [         T	U ]  XX4US9  Xpl        X`l        Xl        g )Nr%  )r  r   r   r  r  )
r   r   r   r   r   r   r  r   r  r  s
            r   r   $VisualStudioLikeLinkerMixin.__init__E  s)    
 	zPWX$r   c                $    U R                   (       + $ r   )r  r"   s    r   invoked_by_compiler/VisualStudioLikeLinkerMixin.invoked_by_compilerO  s    ;;r   c                H    U R                  SU R                  -   SU-   /5      $ rr  )r   r   r  s     r   rO   +VisualStudioLikeLinkerMixin.get_output_argsR  s&    !!;#=w?S"TUUr   c                H   > [         TU ]  5       nU R                  S5      U-   $ )Nz/nologo)r  r~   r   )r   parentr  s     r   r~   +VisualStudioLikeLinkerMixin.get_always_argsU  s&    (*!!),v55r   c                *    U R                  SU-   5      $ )Nz	/LIBPATH:rh  r#  s     r   r%  +VisualStudioLikeLinkerMixin.get_search_argsY  s    !!+"788r   c                $    U R                  S5      $ )Nz/DLLrh  r"   s    r   r   3VisualStudioLikeLinkerMixin.get_std_shared_lib_args\  s    !!&))r   c                    U$ r   r6   rt   s     r   r   .VisualStudioLikeLinkerMixin.get_debugfile_name_  s    r   c                L    U R                  SSU R                  U5      -   /5      $ )Nz/DEBUGz/PDB:)r   r   rt   s     r   r   .VisualStudioLikeLinkerMixin.get_debugfile_argsb  s(    !!8Wt7N7Nz7Z-Z"[\\r   c                    [         R                  " U5      n/ nU H&  nUR                  U R                  SU-   5      5        M(     U$ )Nz/WHOLEARCHIVE:r   r   r  r   r   r-   lr   s       r   r  .VisualStudioLikeLinkerMixin.get_link_whole_fore  sC    %AHHT''(81(<=> r   c                    / $ r   r6   r"   s    r   r  4VisualStudioLikeLinkerMixin.get_allow_undefined_argsm  rH   r   c                    / $ r   r6   rG  s          r   rM  +VisualStudioLikeLinkerMixin.get_soname_argsp  r|   r   c                ,    U R                  SU-   /5      $ )z+The command to generate the import library.z/IMPLIB:rh  r+  s     r   r-  /VisualStudioLikeLinkerMixin.import_library_argst  s    !!:
#:";<<r   c                    U R                   $ r   r  r"   s    r   r   +VisualStudioLikeLinkerMixin.rsp_file_syntaxx  s    r   c                    / $ r   r6   r"   s    r   r  (VisualStudioLikeLinkerMixin.get_pie_args{  rH   r   )r  r   r  rW  )r   r   r   rZ  r   rX  r   r   r   r   r  r   r   r   r  r   r   r]  r   r^  )ru   r   r   r   r   r   ra  r_  r   )r   r   r   r   rc  r  r  r   r  r   r   r   r   r   r  r   r  rO   r~   r%  r   r   r   r  r  rM  r-  r   r  r   r  r  s   @r   r  r  1  s   M#((S  \,
40 
 !2$W\-:-?-?%6%EP%%;?%QT% +% %V69*] #03FW\g= r   r  c                     ^  \ rS rSrSrSrSSSSS\R                  S	.           SU 4S
 jjjrSU 4S jjr	SS jr
SS jrSrU =r$ )MSVCDynamicLinkeri  zMicrosoft's Link.exe.linkNr   r  r   Tr   rH  r   r   r  r  c               >   > [         T	U ]  U=(       d    S/UXBXVUUS9  g )Nzlink.exer   r   r  r  r   
r   r   r   r   rH  r   r   r  r  r  s
            r   r   MSVCDynamicLinker.__init__  s-    
 	0ZL+gW]$. 	 	0r   c                F   > U R                  S/5      [        TU ]	  5       -   $ )Nz/releaser   r  r~   r   r  s    r   r~   !MSVCDynamicLinker.get_always_args  s#    !!:,/%'2I2KKKr   c                H    U R                  SUR                  5        3/5      $ Nz/SUBSYSTEM:r   upperr  s     r   r>  (MSVCDynamicLinker.get_win_subsystem_args  #    !![#@"ABBr   c                    S/$ Nz-WXr6   r"   s    r   r8   MSVCDynamicLinker.fatal_warnings  r  r   r6   r   rZ  r   r   r   r   rH  rX  r   r   r   r   r  r   r  r   r   r`  )r   r   r   r   rc  r   r   r  r   r~   r>  r8  r   r  r  s   @r   r  r    s}    	B 5957 %6G $-BTBT	01020 0 140 	0 3@	0 0LC r   r  c                     ^  \ rS rSrSrSrSSSSS\R                  S	.           SU 4S
 jjjrSU 4S jjr	SS jr
SS jrSS jrSrU =r$ )ClangClDynamicLinkeri  zClang's lld-link.exe.zlld-linkNr   r  r   Tr  c               >   > [         T	U ]  U=(       d    S/UXBXVUUS9  g )Nzlld-link.exer  r   r  s
            r   r   ClangClDynamicLinker.__init__  s.    
 	4^$4kgW]$. 	 	0r   c                f   > U R                   c  U R                  SU 3/5      $ [        TU ]  U5      $ )Nrs  )r   r   r  rO   )r   r  r  s     r   rO   $ClangClDynamicLinker.get_output_args  s:     <<%%zl';&<==w&z22r   c                H    U R                  SUR                  5        3/5      $ r  r  r  s     r   r>  +ClangClDynamicLinker.get_win_subsystem_args  r  r   c                    SU-   /$ )Nz/lldltocache:r6   r	  s     r   r  +ClangClDynamicLinker.get_thinlto_cache_args  s    $&''r   c                    S/$ r  r6   r"   s    r   r8  #ClangClDynamicLinker.fatal_warnings  r  r   r6   r   r]  r`  r[  r   )r   r   r   r   rc  r   r   r  r   rO   r>  r  r8  r   r  r  s   @r   r  r    s    	B 5957 %6G $-BTBT	01020 0 140 	0 3@	0 03C( r   r  c                  `   ^  \ rS rSrSrSrSSSSSS	.         SU 4S
 jjjrSS jrSrU =r	$ )XilinkDynamicLinkeri  zIntel's Xilink.exe.xilinkNr   r  r   T)r   rH  r   r   r  c               (   > [         TU ]  S/USX&S9  g )Nz
xilink.exer   r%  r   )	r   r   r   r   rH  r   r   r  r  s	           r   r   XilinkDynamicLinker.__init__  s    
 	,b+Wr   c                H    U R                  SUR                  5        3/5      $ r  r  r  s     r   r>  *XilinkDynamicLinker.get_win_subsystem_args  r  r   r6   )r   rZ  r   r   r   r   rH  rX  r   r   r   r   r  r   r`  )
r   r   r   r   rc  r   r   r>  r   r  r  s   @r   r  r    sg    	B 5957 %6G $	X1X2X X 14X 	X XC Cr   r  c                      \ rS rSrSrS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     SS jjr        SS jrSrg
)SolarisDynamicLinkeri  z5Sys-V derived linker used on Solaris and OpenSolaris.z
ld.solarisc                `    U(       d  U$ U R                  S5      U-   U R                  S5      -   $ rk  rh  r,   s     r   r  'SolarisDynamicLinker.get_link_whole_for  rm  r   c                    [         R                  " U R                  U R                  S5      -   5      u  pnX#-   R	                  S5       H  nSU;   d  M  SU;   a  SS/s  $   / $    / $ )Nz-zhelp
z-z typepier  ztype=pie)r   r  r   r   r  )r   pcr  stdelines        r   r  !SolarisDynamicLinker.get_pie_args  sj    !,,T\\D<N<Nx<X-XY$[''-DD D= *--	 .
 	r   c                (    U R                  SS/5      $ )Nr  ignorerh  r"   s    r   r  &SolarisDynamicLinker.get_asneeded_args  s    !!4"233r   c                
    SS/$ )Nr  defsr6   r"   s    r   r3  &SolarisDynamicLinker.no_undefined_args  r  r   c                
    SS/$ )Nr  nodefsr6   r"   s    r   r  -SolarisDynamicLinker.get_allow_undefined_args  s    hr   c                
    SS/$ )Nr  zfatal-warningsr6   r"   s    r   r8  #SolarisDynamicLinker.fatal_warnings  s    &''r   Nc           	        UR                  5       nU(       d5  UR                  (       d$  UR                  (       d  U(       d  / [        5       4$ [	        XbU5      n[
        R                  " U Vs/ s H#  n[        R                  R                  SU5      PM%     sn5      n	[        5       n
U	 H#  nU
R                  UR                  S5      5        M%     UR                  S:w  a]  U	R                  UR                  5        UR                  R                  S5       H#  nU
R                  UR                  S5      5        M%     U(       a  U	R                  U5        SR                  U	5      n[        UR                  S5      5      n[        UR                  R                  S5      5      nX:  a  SX-
  -  nU(       d  UnOUS-   U-   nU R                  SU 35      U
4$ s  snf )Nr  r  r   r  r  r  r  )r  r  r  rV   r4  r   r  r8  r
  r   r  r  r  r  r  r   )r   r9   rX   rY   r7   rZ   r  r  r1  r  r  r  r  r  r  s                  r   r[   %SolarisDynamicLinker.build_rpath_args  s   1136#7#7@R@R[f;)+(K''M](^M]i)CM](^_	-0UA $$QXXf%56 #MM&,,-''--c2$((&)9: 3[) #5<<01"6#7#7#>#>w#GH.1@AGg-""WUG#457KLL- )_s   -*Gc                L    Uc  SOSU-   nU R                  SU U SU U 35      $ r  rh  )r   r9   rH  rI  rJ  rK  rL  r  s           r   rM  $SolarisDynamicLinker.get_soname_args	  s8    'S9_!!HVHZL&%"QRRr   r6   r   r   r   r   ra  )r   r   r   r   rc  r   r  r  r  r3  r  r8  r[   rM  r   r6   r   r   r  r    s    ?	Bg
4 ( VZM!,M;RM _AM<S #S03SFWS\gSr   r  c                     ^  \ rS 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S
 jjrSS jrSrU =r$ )AIXDynamicLinkeri  z Sys-V derived linker used on AIXzld.aixc                H   > U R                  SS/5      [        TU ]	  5       -   $ )Nz	-bnoipathz-bbigtocr  r  s    r   r~    AIXDynamicLinker.get_always_args  s&    !!;
";<uw?V?XXXr   c                &    U R                  S/5      $ )Nz	-bernotokrh  r"   s    r   r3  "AIXDynamicLinker.no_undefined_args  s    !!;-00r   c                &    U R                  S/5      $ )Nz-berokrh  r"   s    r   r  )AIXDynamicLinker.get_allow_undefined_args  s    !!8*--r   c                V    [         R                  " SSUR                  SS5      5      nU$ )Nz$[.][a]([.]?([0-9]+))*([.]?([a-z]+))*z.az.so)resubreplacerP  s     r   rR  !AIXDynamicLinker.get_archive_name  s+     66@$HXHXY^`dHefr   c                    / SQnU$ )N)
r  r  z-sz-vz$out$inz&&rmz-fr<  r6   )r   commands     r   rU  -AIXDynamicLinker.get_command_to_archive_shlib'  s     Sr   c                    U$ r   r6   r,   s     r   r  #AIXDynamicLinker.get_link_whole_for-  s	     r   c                   [         R                  " 5       nUR                  S:w  a  UR                  UR                  5        UR                  S:w  a  UR                  UR                  5        UR                  5        H1  nUR                  [        R                  R                  X'5      5        M3     UR                  U R                  5      n[        U5      S:X  a  UR                  SS/5        O@U H:  n[        R                  R                  U5      (       d  M)  UR                  U5        M<     U(       a  UR                  U5        U R                  SSR                  U5      -   5      [        5       4$ )Nr   r   z/usr/libz/libz
-blibpath:r  )r   r  r  r  r  r  r8  r
  r   get_compiler_system_lib_dirsr   r  r  isdirr   rV   )	r   r9   rX   rY   r7   rZ   r  r1  sys_paths	            r   r[   !AIXDynamicLinker.build_rpath_args3  s   .6.A.A.C	2%MM&../#MM&,,-,,.AMM"'',,y45 / 33D4D4DEx=A j&12 77==##MM!$  [)""<#((92E#EFNNr   c                    S/$ r  r6   r_   s     r   r0  AIXDynamicLinker.thread_flagsM  r  r   r6   r   rb  r   r   r   r   )r   r   r   r   rc  r   r~   r3  r  rR  rU  r  r[   r0  r   r  r  s   @r   r/  r/    s`    *	BY1. VZO!,O;RO _AO4 r   r/  c                  \   ^  \ rS rSrSrSrSS. SU 4S jjjrSS jrSS jrSS	 jr	S
r
U =r$ )OptlinkDynamicLinkeriQ  z(Digital Mars dynamic linker for windows.optlinkr   r%  c               &   > [         TU ]  XS/ US9  g rr  r   rs  s       r   r   OptlinkDynamicLinker.__init__W  s     	r2wGr   c                    / $ r   r6   r"   s    r   r  -OptlinkDynamicLinker.get_allow_undefined_args]  rH   r   c                    / $ r   r6   rt   s     r   r   'OptlinkDynamicLinker.get_debugfile_args`  r|   r   c                    / $ r   r6   r"   s    r   r~   $OptlinkDynamicLinker.get_always_argsd  rH   r   r6   r  r   r   )r   r   r   r   rc  r   r   r  r   r~   r   r  r  s   @r   rJ  rJ  Q  s9    2	B $5H H H r   rJ  c                  r    \ rS rSrSrSr\SS j5       rSS jrSS jr	SS jr
SS jr        SS	 jrS
rg)
CudaLinkerih  zCuda linker (nvlink)nvlinkc                     SS/n  [         R                  " U 5      u  pnUR                  5       R	                  SSS9S   $ ! [         a     gf = f)NrV  z	--versionr   Vr   )maxsplit)r   r  r3  striprsplit)version_cmdr  outs      r   parse_versionCudaLinker.parse_versionm  s\    -	% ++K8IAA yy{!!#!2266  	%$	%s   A   
AAc                    gr  r6   r"   s    r   r   CudaLinker.get_accepts_rsp|  s    r   c                &    SSK Jn  UR                  $ )Nr   )CudaCompiler)compilers.cudard  LINKER_PREFIX)r   rd  s     r   r   CudaLinker.get_lib_prefix  s     	2)))r   c                    S/$ )Nz--warning-as-errorr6   r"   s    r   r8  CudaLinker.fatal_warnings  s    $%%r   c                    / $ r   r6   r"   s    r   r  #CudaLinker.get_allow_undefined_args  rH   r   c                    / $ r   r6   rG  s          r   rM  CudaLinker.get_soname_args  r|   r   r6   Nr   r   r   ra  )r   r   r   r   rc  r   staticmethodr_  r   r   r8  r  rM  r   r6   r   r   rU  rU  h  sU    	B7 7*"& #03FW\gr   rU  c                     ^  \ rS rSrSS. SU 4S j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S jr        SS jrSrU =r$ )MetrowerksLinkeri  r   r%  c               &   > [         TU ]  XS/ US9  g rr  r   rs  s       r   r   MetrowerksLinker.__init__  ru  r   c                
    SS/$ )Nz-werrorr6   r"   s    r   r8  MetrowerksLinker.fatal_warnings  s    gr   c                    / $ r   r6   r"   s    r   r  )MetrowerksLinker.get_allow_undefined_args  rH   r   c                    gr
  r6   r"   s    r   r    MetrowerksLinker.get_accepts_rsp  rx   r   c                    / $ r   r6   r"   s    r   r   'MetrowerksLinker.get_linker_always_args  rH   r   c                
    SU/$ r  r6   r  s     r   rO    MetrowerksLinker.get_output_args  rA  r   c                *    U R                  SU-   5      $ rF  rh  r#  s     r   r%   MetrowerksLinker.get_search_args      !!$.11r   c                    gr  r6   r"   s    r   r  $MetrowerksLinker.invoked_by_compiler  r  r   c                2    [        U R                   S35      er  r  rG  s          r   rM   MetrowerksLinker.get_soname_args  r  r   r6   r  r   r   r]  r^  ra  )r   r   r   r   r   r8  r  r   r   rO   r%  r  rM  r   r  r  s   @r   rp  rp    sm     $5* * *
"2N #N03NFWN\gN Nr   rp  c                      \ rS rSrSrSrg)MetrowerksLinkerARMi  r  r6   Nr  r6   r   r   r  r    r  r   r  c                      \ rS rSrSrSrg)MetrowerksLinkerEmbeddedPowerPCi  r  r6   Nr  r6   r   r   r  r    r  r   r  c                     ^  \ rS rSr% Sr/ S/S/S/S/S/S/S.rS\S	'   S
S. SU 4S j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S jrSS jrSS jrSS jrSrU =r$ ) TaskingLinkeri  r  z-O0rP  z-O2z-Osr   r   r   r   r%  c               &   > [         TU ]  XS/ US9  g rr  r   rs  s       r   r   TaskingLinker.__init__  ru  r   c                    gr
  r6   r"   s    r   r   TaskingLinker.get_accepts_rsp  rx   r   c                    gr   r6   r"   s    r   r   TaskingLinker.get_lib_prefix  r   r   c                    / $ r   r6   r"   s    r   r  &TaskingLinker.get_allow_undefined_args  rH   r   c                    gr
  r6   r"   s    r   r  !TaskingLinker.invoked_by_compiler  rx   r   c                *    U R                  SU-   5      $ rF  rh  r#  s     r   r%  TaskingLinker.get_search_args  r  r   c                
    SU/$ r  r6   r  s     r   rO   TaskingLinker.get_output_args  rA  r   c                    S/$ )Nz
--mil-linkr6   r"   s    r   r  TaskingLinker.get_lto_args  r}  r   c                "    [         R                  $ r   r%  r"   s    r   r   TaskingLinker.rsp_file_syntax  r(  r   c                $    U R                  S5      $ )r7  z--warnings-as-errorsrh  r"   s    r   r8  TaskingLinker.fatal_warnings  s    !!"899r   c                    [         R                  " U5      n/ nU H&  nUR                  U R                  SU-   5      5        M(     U$ )Nz-Wl--whole-archive=r  r  s       r   r   TaskingLinker.get_link_whole_for  sC    %AHHT''(=(ABC r   r6   r  r   r   r   r^  r]  r   r   )r   r   r   r   r   r   r   r   r   r   r  r  r%  rO   r  r   r8  r  r   r  r  s   @r   r  r    s    	B WWWWWW40  $5* * *
2"%: r   r  )r0  zT.Tuple[str, ...]rX   r   rY   r   r   r   )r:  r   r   r   )r1  r   rX   r   rY   r   r   r   )Y
__future__r   rd  r8  typingr  r7  baser   r   r   r   r	   r
   arglistr   r  environmentr   r   buildr   	compilersr   r   ABCMetar   StaticLinkerBaseDynamicLinkerBaseobjectri  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r4  r/  r.  r>  rK  r  r  r  r  r  r  r  r  r  r$  r=  rY  ro  r  r  r  r  r  r  r  r  NvidiaHPC_DynamicLinkerr  NvidiaHPC_StaticLinkerr  r  r  r  r  r/  rJ  rU  rp  r  r  r  r6   r   r   <module>r     s  
 # 
 	  	 -  ; "??)(#$Uj UjpIckk IX ??#%+11("- "B7/ 774l 7!|\ !BH , !l !4, ,  
\ 
|  ( ( !, !
!\ ! 6 ,B , $	1^/ ,|( 1 |(~d0- dN. 
402I= 4
5+ 5* 
3( 3<@13JM <@~* 13JM 0 D( (T(M (T#m #L  . *+, + 1 02I= $S. $SN. 8 + 
l 
 ) K"3 K\3] 26 BC5} C"BS2M BSJ?. ?D6 .1(- 1hN} NB* &6 3M 3r   