
    -PhX                    "   d dl mZ d dlZd dlZd dlZd dlZddlmZm	Z	 ddl
mZ ddlmZmZ ddlmZ ej        rdd	lmZ dd
lmZ ddlmZ ddlmZ  G d d          Z G d dej                  Zej        reZeZnexZZ G d de          Z G d dee          Z G d dee          Z  G d dee          Z! G d de!          Z" G d dee          Z# G d de          Z$ G d  d!e          Z% G d" d#e          Z& G d$ d%e          Z' G d& d'e          Z( G d( d)e(          Z) G d* d+e(          Z* G d, d-ee          Z+ G d. d/e          Z, G d0 d1e,          Z- G d2 d3e,          Z. G d4 d5e          Z/dd=Z0dd?Z1ddAZ2 G dB dCe          Z3 G dD dEe          Z4 G dF dGe3e          Z5 G dH dIe5          Z6 G dJ dKe4e3e          Z7 G dL dMe7          Z8 G dN dOe7          Z9 G dP dQe7          Z: G dR dSe4e3e          Z; G dT dUe;          Z< G dV dWe4e3e          Z= G dX dYe          Z> G dZ d[e          Z? G d\ d]e          Z@ G d^ d_e          ZA G d` daeA          ZB G db dceA          ZC G dd dee3e          ZD G df dgeD          ZE G dh die;          ZF G dj dke3e          ZG G dl dme3e          ZHeHZI G dn doe          ZJeJZK G dp dqe          ZL G dr dseLe          ZM G dt dueLe          ZN G dv dweLe          ZO G dx dye3e          ZP G dz d{e3e          ZQ G d| d}eLe          ZR G d~ de3e          ZS G d de          ZT G d deT          ZU G d deT          ZV G d de          ZWdS )    )annotationsN   )ArLikeLinkerRSPFileSyntax   )mesonlib)EnvironmentExceptionMesonExceptionCompilerArgs)Environment)MachineChoice)BuildTarget)Compilerc                      e Zd ZU ded<   d5dZd6dZd6dZd7d8dZd9dZd:dZ	d;dZ
d<dZd=dZd>dZd;dZd?d%Zd@d&ZdAd(Zd7dBd+ZedCd,            ZedCd-            ZdDd/ZdEd0Zd;d1Zd;d2ZdFd4Zd	S )GStaticLinkerstridexelistT.List[str]c                    || _         d S Nr   )selfr   s     Z/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/mesonbuild/linkers/linkers.py__init__zStaticLinker.__init__           returnc                    | j         S r   r   r   s    r   get_idzStaticLinker.get_id   	    wr   c                    | j         d         S Nr   r   r"   s    r   get_exezStaticLinker.get_exe"       |Ar   NargsT.Optional[T.Iterable[str]]r   c                "    t          | |          S r   r   r   r)   s     r   compiler_argszStaticLinker.compiler_args%   s    D$'''r   boolc                (    t          j                    S )z[
        Determines whether the linker can accept arguments using the @rsp syntax.
        r   
is_windowsr"   s    r   can_linker_accept_rspz"StaticLinker.can_linker_accept_rsp(   s     "$$$r   target'BuildTarget'linker
'Compiler'env'Environment'c                    g S )z=Like compilers.get_base_link_args, but for the static linker. )r   r3   r5   r7   s       r   get_base_link_argszStaticLinker.get_base_link_args.   	    
 	r   c                4    | j                                         S r   r   copyr"   s    r   get_exelistzStaticLinker.get_exelist5       |  """r   is_thinc                    g S r   r:   r   r7   rB   s      r   get_std_link_argszStaticLinker.get_std_link_args8       	r   optimization_levelc                    g S r   r:   r   rG   s     r   get_optimization_link_argsz'StaticLinker.get_optimization_link_args;   rF   r   c                    g S r   r:   r   r3   s     r   get_output_argszStaticLinker.get_output_args>   rF   r   c                    g S r   r:   r"   s    r   get_coverage_link_argsz#StaticLinker.get_coverage_link_argsA   rF   r   	build_dirfrom_dirrpath_pathsT.Tuple[str, ...]build_rpathinstall_rpath"T.Tuple[T.List[str], T.Set[bytes]]c                "    g t                      fS r   setr   r7   rP   rQ   rR   rT   rU   s          r   build_rpath_argszStaticLinker.build_rpath_argsD        CEE{r   c                    g S r   r:   r   r7   s     r   thread_link_flagszStaticLinker.thread_link_flagsI   rF   r   r   c                    g S r   r:   r^   s     r   openmp_flagszStaticLinker.openmp_flagsL   rF   r   
subprojectT.Optional[str]c                    g S r   r:   r   r3   r7   rb   s       r   get_option_link_argsz!StaticLinker.get_option_link_argsO   rF   r   c                    |d d          S r   r:   clsr)   s     r   unix_args_to_nativez StaticLinker.unix_args_to_nativeR       AAAwr   c                    |d d          S r   r:   rh   s     r   native_args_to_unixz StaticLinker.native_args_to_unixV   rk   r   
targetfilec                    d S r   r:   r   rn   s     r   get_link_debugfile_namez$StaticLinker.get_link_debugfile_nameZ       tr   c                    g S r   r:   rp   s     r   get_link_debugfile_argsz$StaticLinker.get_link_debugfile_args]       	r   c                    g S r   r:   r"   s    r   get_always_argszStaticLinker.get_always_argsa   rF   r   c                    g S r   r:   r"   s    r   get_linker_always_argsz#StaticLinker.get_linker_always_argsd   rF   r   r   c                |    |                                  rJ | j         d            t          | j         d          )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)r2   r   r	   r"   s    r   rsp_file_syntaxzStaticLinker.rsp_file_syntaxg   s`     --//  	H  	HDG  2H  2H  2H  	H  	H  	H"dg#h#h#hiiir   r   r   r   r   r   )r)   r*   r   r   r   r.   )r3   r4   r5   r6   r7   r8   r   r   r   r   r7   r8   rB   r.   r   r   rG   r   r   r   r3   r   r   r   r7   r8   rP   r   rQ   r   rR   rS   rT   r   rU   r   r   rV   r7   r8   r   r   )r7   r   r   r   r3   r4   r7   r8   rb   rc   r   r   r)   r   r   r   rn   r   r   rc   rn   r   r   r   r   r   )__name__
__module____qualname____annotations__r   r#   r'   r-   r2   r;   r@   rE   rJ   rM   rO   r[   r_   ra   rf   classmethodrj   rm   rq   rt   rw   ry   r|   r:   r   r   r   r      s        GGG         ( ( ( ( (% % % %   # # # #               
              [    [            j j j j j jr   r   c                     e Zd ZU dZg g g g g g g dZded<   ej        d_d            Zd`dZ	ddddadZ
d_dZd_dZd_dZd_dZdbdZdcdZdddZdbd Zd_d!Zdedfd)Zdedfd*Zdgd-Zdhd/Zdid0Zdjd2Zdbd3Zdkd5Zdbd6Zdbd7Zdld9Zdmd;Zdbd<Z dnd=Z!dbd>Z"ej#        dod@            Z$dbdAZ%ej#        dpdC            Z&dqdDZ'drdFZ(dqdGZ)dbdHZ*dbdIZ+dbdJZ,dsdKZ-dbdLZ.dtdTZ/dud[Z0dvd]Z1dbd^Z2d"S )wDynamicLinkerzBase class for dynamic linkers.plain0g123sT.Dict[str, T.List[str]]_OPTIMIZATION_ARGSr   r   c                    d S r   r:   r"   s    r   r   zDynamicLinker.id       r   argT.Union[str, T.List[str]]r   c                     t          |t                    r|gn|} j        |S t           j        t                    r fd|D             S g }|D ]}| j        |gz   z  }|S )Nc                $    g | ]}j         |z   S r:   )
prefix_arg).0r   r   s     r   
<listcomp>z/DynamicLinker._apply_prefix.<locals>.<listcomp>   s     :::cDOc):::r   )
isinstancer   r   )r   r   r)   rets   `   r   _apply_prefixzDynamicLinker._apply_prefix   s    "3,,5uu#?"K-- 	;::::T:::: 	+ 	+C4?cU**CC
r   unknown systemunknown versionsystemversionr   for_machinemesonlib.MachineChoicer   always_argsr   r   c               h    || _         || _        || _        || _        || _        || _        d | _        d S r   )r   r   r   r   r   r   machine)r   r   r   r   r   r   r   s          r   r   zDynamicLinker.__init__   s;     &$&(,r   c                    d                     t          |           j        | j        d                    | j                            S )Nz<{}: v{} `{}`> )formattyper   r   joinr   r"   s    r   __repr__zDynamicLinker.__repr__   s5    &&tDzz':DL#((SWS_J`J`aaar   c                    | j         S r   r!   r"   s    r   r#   zDynamicLinker.get_id   r$   r   c                    | j         d         S r&   r   r"   s    r   r'   zDynamicLinker.get_exe   r(   r   c                (    d| j          d| j         dS )N(r   ))r   r   r"   s    r   get_version_stringz DynamicLinker.get_version_string   s    ,47,,T\,,,,r   c                4    | j                                         S r   r>   r"   s    r   r@   zDynamicLinker.get_exelist   rA   r   r.   c                (    t          j                    S r   r0   r"   s    r   get_accepts_rspzDynamicLinker.get_accepts_rsp   s     "$$$r   r   c                    t           j        S )r{   r   GCCr"   s    r   r|   zDynamicLinker.rsp_file_syntax   s       r   c                4    | j                                         S r   r   r?   r"   s    r   rw   zDynamicLinker.get_always_args       $$&&&r   c                    dS N r:   r"   s    r   get_lib_prefixzDynamicLinker.get_lib_prefix       rr   Nr3   r4   r7   r8   rb   rc   c                    g S r   r:   re   s       r   get_option_argszDynamicLinker.get_option_args   rF   r   c                    g S r   r:   re   s       r   rf   z"DynamicLinker.get_option_link_args   rF   r   r)   T.Tuple[bool, bool]c                2    t          d| j         d          )Nz	Language z+ does not support has_multi_link_arguments.r	   r   )r   r)   r7   s      r   has_multi_argumentsz!DynamicLinker.has_multi_arguments   s    "#ctw#c#c#cdddr   rn   c                    dS )z*Name of debug file written out (see below)Nr:   rp   s     r   get_debugfile_namez DynamicLinker.get_debugfile_name   s    tr   c                    g S )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.
        r:   rp   s     r   get_debugfile_argsz DynamicLinker.get_debugfile_args   s	     	r   rG   c                Z     t          j         fd j        |         D                       S )Nc                :    g | ]}                     |          S r:   r   )r   ar   s     r   r   z<DynamicLinker.get_optimization_link_args.<locals>.<listcomp>   s'     l l l1!3!3A!6!6 l l lr   )r   listifyr   rI   s   ` r   rJ   z(DynamicLinker.get_optimization_link_args   s4      l l l l@WXj@k l l lmmmr   c                    g S r   r:   r"   s    r   get_std_shared_lib_argsz%DynamicLinker.get_std_shared_lib_args   rF   r   Targetc                *    |                                  S r   )r   )r   r   s     r   get_std_shared_module_argsz(DynamicLinker.get_std_shared_module_args   s    ++---r   c                2    t          d| j         d          )NLinker z1 does not support position-independent executabler   r"   s    r   get_pie_argszDynamicLinker.get_pie_args   s      ##gTW#g#g#ghhhr   c                    g S r   r:   r"   s    r   get_lto_argszDynamicLinker.get_lto_args   rF   r   pathc                    g S r   r:   r   r   s     r   get_thinlto_cache_argsz$DynamicLinker.get_thinlto_cache_args   rF   r   valuec                    g S r   r:   r   r   s     r   sanitizer_argszDynamicLinker.sanitizer_args   rF   r   c                    g S r   r:   r"   s    r   get_asneeded_argszDynamicLinker.get_asneeded_args   rF   r   c                2    t          d| j         d          )Nr   z does not support link_wholer   r,   s     r   get_link_whole_forz DynamicLinker.get_link_whole_for   s$    ";dg;;;= = 	=r   c                2    t          d| j         d          )Nr   z! does not support allow undefinedr   r"   s    r   get_allow_undefined_argsz&DynamicLinker.get_allow_undefined_args   s'    "@dg@@@B B 	Br   
outputnamec                    d S r   r:   r   r   s     r   rM   zDynamicLinker.get_output_args   r   r   c                2    t          d| j         d          )Nr   z, doesn't implement coverage data generation.r   r"   s    r   get_coverage_argszDynamicLinker.get_coverage_args   s    "#bTW#b#b#bcccr   dirnamec                    d S r   r:   r   r   s     r   get_search_argszDynamicLinker.get_search_args   r   r   c                    g S r   r:   r^   s     r   export_dynamic_argsz!DynamicLinker.export_dynamic_args  rF   r   
implibnamec                    g S )zThe name of the outputted import library.

        This implementation is used only on Windows by compilers that use GNU ld
        r:   r   r   s     r   import_library_argsz!DynamicLinker.import_library_args  r<   r   c                    g S r   r:   r^   s     r   thread_flagszDynamicLinker.thread_flags  rF   r   c                    g S )a  Arguments 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
        r:   r"   s    r   no_undefined_argszDynamicLinker.no_undefined_args  	     	r   c                    g S )&Arguments to make all warnings errors.r:   r"   s    r   fatal_warningszDynamicLinker.fatal_warnings  ru   r   c                    g S r   r:   r"   s    r   headerpad_argszDynamicLinker.headerpad_args   ru   r   c                    g S r   r:   r   s     r   get_win_subsystem_argsz$DynamicLinker.get_win_subsystem_args$  s	     	r   c                     t          d          )Nz,This linker does not support bitcode bundlesr
   r"   s    r   bitcode_argszDynamicLinker.bitcode_args)  s    KLLLr   rP   rQ   rR   rS   rT   rU   rV   c                "    g t                      fS r   rX   rZ   s          r   r[   zDynamicLinker.build_rpath_args,  r\   r   prefix
shlib_namesuffix	soversiondarwin_versionsT.Tuple[str, str]c                    g S r   r:   r   r7   r  r  r  r  r  s          r   get_soname_argszDynamicLinker.get_soname_args1  ru   r   filenamec                    t                      S r   )r   r   r  s     r   get_archive_namezDynamicLinker.get_archive_name5  s    uur   c                    g S r   r:   r"   s    r   get_command_to_archive_shlibz*DynamicLinker.get_command_to_archive_shlib9  ru   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   r7   r8   r   r   r   r   r   )r   r4   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   r7   r8   r  r   r  r   r  r   r  r   r  r  r   r   r  r   r   r   )3r   r   r   __doc__r   r   abcabstractpropertyr   r   r   r   r#   r'   r   r@   r   r|   rw   r   r   rf   r   r   r   rJ   r   r   r   r   r   r   r   r   r   abstractmethodrM   r   r   r   r  r  r  r
  r  r  r  r[   r  r  r!  r:   r   r   r   r   q   s        )) 4 4     	   	 	 	 	 =M 1
- 
- 
- 
- 
- 
-b b b b      - - - -# # # #% % % %
! ! ! !' ' ' '   
        e e e e      n n n n
   . . . .i i i i            = = = =B B B B 	   d d d d 	            	 	 	 	         
M M M M   
           r   r   )	metaclassc                  l    e Zd ZdgZddZddZddZdd
Zedd            Z	edd            Z
ddZdS )VisualStudioLikeLinkerz/NOLOGOr   r   c                    || _         d S r   r   )r   r   s     r   r   zVisualStudioLikeLinker.__init__H  r   r   r   r   c                4    | j                                         S r   r   r"   s    r   rw   z&VisualStudioLikeLinker.get_always_argsK  r   r   c                4    | j                                         S r   r   r"   s    r   ry   z-VisualStudioLikeLinker.get_linker_always_argsN  r   r   r3   c                F    g }| j         r|d| j         z   gz  }|d|z   gz  }|S Nz	/MACHINE:/OUT:r4  )r   r3   r)   s      r   rM   z&VisualStudioLikeLinker.get_output_argsQ  s<    < 	1[4</00D6!""r   r)   c                8    ddl m} |                    |          S Nr   )VisualStudioCCompiler)compilers.cr<  rj   ri   r)   r<  s      r   rj   z*VisualStudioLikeLinker.unix_args_to_nativeX  (    777777$88>>>r   c                8    ddl m} |                    |          S r;  )r=  r<  rm   r>  s      r   rm   z*VisualStudioLikeLinker.native_args_to_unix]  r?  r   r   c                    t           j        S r   )r   MSVCr"   s    r   r|   z&VisualStudioLikeLinker.rsp_file_syntaxb  s    !!r   N)r   r   r   r   r   r   )r   r   r   r   r   rw   ry   rM   r   rj   rm   r|   r:   r   r   r2  r2  E  s        +K   ' ' ' '' ' ' '    ? ? ? [? ? ? ? [?" " " " " "r   r2  c                      e Zd ZdZdZd	dZdS )
VisualStudioLinkerzMicrosoft's lib static linker.libr   r   r   r   c                r    t                               | |           t                              | |           d S r   r   r   r2  r   r   r   s      r   r   zVisualStudioLinker.__init__l  4    dG,,,''g66666r   Nr   r   r   r   r   r   r   r,  r   r   r:   r   r   rD  rD  f  s3        ((	B7 7 7 7 7 7r   rD  c                      e Zd ZdZdZd	dZdS )
IntelVisualStudioLinkerzIntel's xilib static linker.xilibr   r   r   r   c                r    t                               | |           t                              | |           d S r   rG  rH  s      r   r   z IntelVisualStudioLinker.__init__w  rI  r   NrJ  rK  r:   r   r   rM  rM  q  s3        &&	B7 7 7 7 7 7r   rM  c                  4     e Zd ZdZd fdZdd	ZddZ xZS )ArLinkerarr   r   r   r   c                    t                                          |           t          j        | j        dgz             d         }d}d}d|v r|dz  }d|v rd}|g| _        ||z   g| _        d	|v | _        || _        d S )
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   zArLinker.__init__  s    !!!"4<4&#899!<D==sNGD==H 	%01t|&r   r   r.   c                    | j         S r   )r[  r"   s    r   r2   zArLinker.can_linker_accept_rsp  s
    |r   r7   r8   rB   c                    |rO|j         | j                                                 s+|j         | j                                                 s| j        S | j        S r   )machinesr   	is_darwinis_sunosrZ  rY  rD   s      r   rE   zArLinker.get_std_link_args  sX    
  	!3<(89CCEE 	!,t/099;;	!%%= r   )r   r   r   r   r   r   )r   r   r   r   r   r2   rE   __classcell__r_  s   @r   rQ  rQ  |  sj        	B' ' ' ' ' '   	! 	! 	! 	! 	! 	! 	! 	!r   rQ  c                      e Zd ZdZdS )AppleArLinkerapplearNr   r   r   r   r:   r   r   rh  rh    s         
BBBr   rh  c                      e Zd ZdZdS )ArmarLinkerarmarNrj  r:   r   r   rl  rl    s        	BBBr   rl  c                  P     e Zd Zej        dd fdZddZddZddZddZ	 xZ
S )DLinker
rsp_syntaxr   r   archr   rq  r   c                   t                                          |           |d         | _        || _        || _        d S r&   )rW  r   r   rr  _DLinker__rsp_syntax)r   r   rr  rq  r_  s       r   r   zDLinker.__init__  s;    !!!!*	&r   r7   r8   rB   r.   r   c                    dgS )Nz-libr:   rD   s      r   rE   zDLinker.get_std_link_args  	    xr   r3   c                    d|z   gS )Nz-of=r:   rL   s     r   rM   zDLinker.get_output_args  s      r   c                    t          j                    r*| j        dk    rdgS | j        dk    r| j        dk    rdgS dgS g S )Nx86_64z-m64
x86_mscoffdmdz
-m32mscoffz-m32)r   r1   rr  r   r"   s    r   ry   zDLinker.get_linker_always_args  sT       	yH$$xl**tw%/?/?$~%8O	r   c                    | j         S r   )rt  r"   s    r   r|   zDLinker.rsp_file_syntax  s      r   )r   r   rr  r   rq  r   r   r   r   r   )r   r   r   r   r   r   rE   rM   ry   r|   re  rf  s   @r   ro  ro    s        WdWh ' ' ' ' ' ' ' '   ! ! ! !   ! ! ! ! ! ! ! !r   ro  c                  8     e Zd Zd fdZddZdd	Zdd
Z xZS )
CcrxLinkerr   r   c                X    t                                          |           d| _        d S )NrlinkrW  r   r   r   r   r_  s     r   r   zCcrxLinker.__init__  &    !!!r   r   r.   c                    dS NFr:   r"   s    r   r2   z CcrxLinker.can_linker_accept_rsp      ur   r3   r   c                    d| gS Nz-output=r:   rL   s     r   rM   zCcrxLinker.get_output_args  s    #6##$$r   c                
    ddgS )Nz-nologoz-form=libraryr:   r"   s    r   ry   z!CcrxLinker.get_linker_always_args  s    ?++r   r}   r   r   r   r   r   r   r   r2   rM   ry   re  rf  s   @r   r~  r~    sy                % % % %, , , , , , , ,r   r~  c                  8     e Zd Zd fdZddZdd	Zdd
Z xZS )
Xc16Linkerr   r   c                X    t                                          |           d| _        d S )Nzxc16-arr  r  s     r   r   zXc16Linker.__init__  s&    !!!r   r   r.   c                    dS r  r:   r"   s    r   r2   z Xc16Linker.can_linker_accept_rsp  r  r   r3   r   c                
    | gS r   r:   rL   s     r   rM   zXc16Linker.get_output_args      }r   c                    dgS )Nrcsr:   r"   s    r   ry   z!Xc16Linker.get_linker_always_args  	    wr   r}   r   r   r   r  rf  s   @r   r  r    sy                          r   r  c                  0     e Zd Zd
 fdZddZdd	Z xZS )CompCertLinkerr   r   c                X    t                                          |           d| _        d S )Nccompr  r  s     r   r   zCompCertLinker.__init__  r  r   r   r.   c                    dS r  r:   r"   s    r   r2   z$CompCertLinker.can_linker_accept_rsp  r  r   r3   r   c                    d| gS Nz-or:   rL   s     r   rM   zCompCertLinker.get_output_args  s    Vr   r}   r   r   )r   r   r   r   r2   rM   re  rf  s   @r   r  r    se                       r   r  c                  8     e Zd Zd fdZddZdd	Zdd
Z xZS )TILinkerr   r   c                X    t                                          |           d| _        d S )Nzti-arr  r  s     r   r   zTILinker.__init__  r  r   r   r.   c                    dS r  r:   r"   s    r   r2   zTILinker.can_linker_accept_rsp  r  r   r3   r   c                
    | gS r   r:   rL   s     r   rM   zTILinker.get_output_args  r  r   c                    dgS N-rr:   r"   s    r   ry   zTILinker.get_linker_always_args  	    vr   r}   r   r   r   r  rf  s   @r   r  r    sy                          r   r  c                      e Zd ZdZdS )C2000Linkerar2000Nrj  r:   r   r   r  r            	BBBr   r  c                      e Zd ZdZdS )C6000Linkerar6000Nrj  r:   r   r   r  r            	BBBr   r  c                      e Zd ZdZddgZdS )AIXArLinkeraixarz-csrz-XanyN)r   r   r   r   rY  r:   r   r   r  r    s        	B HHHr   r  c                  .    e Zd ZddZddZddZdd
ZdS )MetrowerksStaticLinkerr   r.   c                    dS NTr:   r"   s    r   r2   z,MetrowerksStaticLinker.can_linker_accept_rsp  rr   r   r   c                    dgS )Nz-libraryr:   r"   s    r   ry   z-MetrowerksStaticLinker.get_linker_always_args  
    |r   r3   r   c                
    d|gS r  r:   rL   s     r   rM   z&MetrowerksStaticLinker.get_output_args      f~r   r   c                    t           j        S r   r   r"   s    r   r|   z&MetrowerksStaticLinker.rsp_file_syntax  s      r   Nr   r   r   r   )r   r   r   r2   ry   rM   r|   r:   r   r   r  r    sd                 ! ! ! ! ! !r   r  c                      e Zd ZdZdS )MetrowerksStaticLinkerARMmwldarmNrj  r:   r   r   r  r            	BBBr   r  c                      e Zd ZdZdS )%MetrowerksStaticLinkerEmbeddedPowerPCmwldeppcNrj  r:   r   r   r  r            	BBBr   r  c                  D     e Zd ZdZd fdZddZdd	ZddZddZ xZ	S )TaskingStaticLinkertaskingr   r   c                J    t                                          |           d S r   rW  r   r  s     r   r   zTaskingStaticLinker.__init__$  s!    !!!!!r   r   r.   c                    dS r  r:   r"   s    r   r2   z)TaskingStaticLinker.can_linker_accept_rsp'  rr   r   r   c                    t           j        S r   r   TASKINGr"   s    r   r|   z#TaskingStaticLinker.rsp_file_syntax*      $$r   r3   r   c                
    d|gS )Nz-nr:   rL   s     r   rM   z#TaskingStaticLinker.get_output_args-  r  r   c                    dgS r  r:   r"   s    r   ry   z*TaskingStaticLinker.get_linker_always_args0  r  r   r}   r   r   r   r   )
r   r   r   r   r   r2   r|   rM   ry   re  rf  s   @r   r  r  !  s        	B" " " " " "   % % % %          r   r  
raw_rpathsrS   rP   r   rQ   r   r   c                F    fd| D             }t          |          }|S )Nc                2    g | ]}t          |          S r:   )evaluate_rpath)r   prP   rQ   s     r   r   z"prepare_rpaths.<locals>.<listcomp>7  s%    YYYnQ	8DDYYYr   )order_rpaths)r  rP   rQ   internal_format_rpathsordered_rpathss    ``  r   prepare_rpathsr  3  s8     ZYYYYjYYY!"899Nr   
rpath_listc                B    t          | t          j        j                  S )N)key)sortedosr   isabs)r  s    r   r  r  <  s     *"'-0000r   r  c                   | |k    rdS t           j                            |           r| S t           j                            t           j                            ||           t           j                            ||                    S r   )r  r   r  relpathr   )r  rP   rQ   s      r   r  r  H  sc    H}}r	q		 ^wrw||Iq9927<<	S[;\;\]]]r   c                  2    e Zd ZdZddZddZdd	ZddZdS )PosixDynamicLinkerMixinzMixin 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.
    r   r   r   r   c                
    d|gS r  r:   r   s     r   rM   z'PosixDynamicLinkerMixin.get_output_argsZ      j!!r   c                    dgS )N-sharedr:   r"   s    r   r   z/PosixDynamicLinkerMixin.get_std_shared_lib_args]  s
    {r   r   c                    d|z   gS Nz-Lr:   r   s     r   r   z'PosixDynamicLinkerMixin.get_search_args`  s    wr   r   c                    g S r   r:   r   s     r   r   z&PosixDynamicLinkerMixin.sanitizer_argsc  rF   r   Nr&  r   r'  r%  )r   r   r   r,  rM   r   r   r   r:   r   r   r  r  Q  sn         " " " "               r   r  c            
          e Zd ZU dZej        rej        Zd<dZ	g g g g g dgg dZ
d	ed
<   dddddddddd	Zded<   d=dZd>dZd>dZd?dZd>dZd>dZd@d Zd>d!ZdAd$ZdBd'ZdAd(Zd>d)Zd>d*ZdCd1ZdDd9ZdEd:Zd;S )FGnuLikeDynamicLinkerMixinzMixin 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.
    r   r   r   r   c                    d S r   r:   r   r   s     r   r   z'GnuLikeDynamicLinkerMixin._apply_prefixq        r   -O1r   r   r   r   windowsconsole71011121316)	nativer  r  posixefi_applicationefi_boot_service_driverefi_runtime_driverefi_romboot_applicationzT.Dict[str, str]_SUBSYSTEMSr.   c                    dS r  r:   r"   s    r   r   z)GnuLikeDynamicLinkerMixin.get_accepts_rsp  rr   r   c                    dgS )Nz-pier:   r"   s    r   r   z&GnuLikeDynamicLinkerMixin.get_pie_args  rv  r   c                ,    |                      d          S N--as-neededr   r"   s    r   r   z+GnuLikeDynamicLinkerMixin.get_asneeded_args  s    !!-000r   r)   c                f    |s|S |                      d          |z   |                      d          z   S Nz--whole-archivez--no-whole-archiver   r,   s     r   r   z,GnuLikeDynamicLinkerMixin.get_link_whole_for  =     	K!!"344t;d>P>PQe>f>fffr   c                ,    |                      d          S N--allow-shlib-undefinedr   r"   s    r   r   z2GnuLikeDynamicLinkerMixin.get_allow_undefined_args  s    !!";<<<r   c                    dgS )Nz-fltor:   r"   s    r   r   z&GnuLikeDynamicLinkerMixin.get_lto_args  s
    yr   r   c                <    |s|S dd                     |           gS Nz-fsanitize=,r   r   s     r   r   z(GnuLikeDynamicLinkerMixin.sanitizer_args  *     	L/chhuoo//00r   c                    dgS Nz
--coverager:   r"   s    r   r   z+GnuLikeDynamicLinkerMixin.get_coverage_args  
    ~r   r7   r8   c                    |j         | j                 }|                                s|                                r|                     d          S |                     d          S )Nz--export-all-symbolsz-export-dynamicrb  r   r1   	is_cygwinr   )r   r7   ms      r   r   z-GnuLikeDynamicLinkerMixin.export_dynamic_args  sZ    L)*<<>> 	>Q[[]] 	>%%&<===!!"3444r   r   r   c                2    |                      d|z             S )Nz--out-implib=r   r  s     r   r  z-GnuLikeDynamicLinkerMixin.import_library_args  s    !!/J">???r   c                T    |j         | j                                                 rg S dgS Nz-pthread)rb  r   is_haikur^   s     r   r  z&GnuLikeDynamicLinkerMixin.thread_flags  s-    <()2244 	I|r   c                ,    |                      d          S N--no-undefinedr   r"   s    r   r  z+GnuLikeDynamicLinkerMixin.no_undefined_args  s    !!"2333r   c                ,    |                      d          S )Nz--fatal-warningsr   r"   s    r   r
  z(GnuLikeDynamicLinkerMixin.fatal_warnings  s    !!"4555r   r  r  r  r  r  r  c                    |j         | j                 }|                                s|                                rg S |dnd|z   }|                     d| | d| |           S Nr   .z-soname,r  )	r   r7   r  r  r  r  r  r  sostrs	            r   r  z)GnuLikeDynamicLinkerMixin.get_soname_args  sv    L)*<<>> 	Q[[]] 	I'S9_!!"QV"QZ"Q"Q&"Q%"Q"QRRRr   rP   rQ   rR   rS   rT   rU   rV   c           
     b   |j         | j                 }|                                s|                                rg t	                      fS |s|s|sg t	                      fS g }dt          |||          }	t          j        fd|	D                       }
t	                      }|
D ]*}|                    |	                    d                     +|dk    rU|
                    |           |
                    d          D ]*}|                    |	                    d                     +t          j                    st          j                    r(|                    |                     d                     d                    |
          }t!          |	                    d                    }t!          |	                    d                    }||k     rd||z
  z  }|s|}n|dz   |z   }|                    |                     d	|z                        t          j                    s| j        d
k    r||fS | j        dv rht          j        | j        d          rN|D ]K}|                    |                     dt*          j                            ||          z                        L||fS )N$ORIGINc                P    g | ]"}t           j                            |          #S r:   r  r   r   r   r  origin_placeholders     r   r   z>GnuLikeDynamicLinkerMixin.build_rpath_args.<locals>.<listcomp>  +    (g(g(gQR6H!)L)L(g(g(gr   utf8r   :z	-z,originutf-8X-rpath,ld.zigcc>   ld.bfdld.goldz<2.28z-rpath-link,)rb  r   r1   r  rY   r  r   
OrderedSetaddencodesplitis_dragonflybsd
is_openbsdextendr   r   lenrd  r   version_comparer   r  r   )r   r7   rP   rQ   rR   rT   rU   r  r)   processed_rpaths	all_pathsrpath_dirs_to_remover  pathspaths_lengthinstall_rpath_lengthpaddingr%  s                    @r   r[   z*GnuLikeDynamicLinkerMixin.build_rpath_args  s    L)*<<>> 	Q[[]] 	; 	= 	 	;&)+y(KK '(g(g(g(gVf(g(g(ghh	-0UU 	7 	7A $$QXXf%5%56666"MM+&&& &&s++ ; ;$((&)9)9:::: #%% 	9)<)>)> 	9 KK**;77888 ##5<<0011"=#7#7#@#@AA...1L@AG .g-D&&y5'899:::
  	0$'Z"7"7.//, 7+++0HW^0_0_+  ] ]D..~YXY@Z@Z/Z[[\\\\*++r   c                    d }d|v r|                     dd          \  }}| j                            |          }|||d| z  }d| g}nt          j        d|d          |                     |          S )Nr
  r   r(  --subsystem,win_subsystem: z: not handled in MinGW linker. This should not be possible.)r2  r  getr   MesonBugExceptionr   )r   r   versionsuffixnewvaluer)   s        r   r  z0GnuLikeDynamicLinkerMixin.get_win_subsystem_args  s     %<<#(;;sA#6#6 E=#''..(////-8--.DD,  .Cu  .C  .C  .C  D  D  D!!$'''r   Nr"  r   r   r   r%  r   r(  r*  r   r)  )r   r   r   r,  rV  TYPE_CHECKINGr   HOSTr   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  g  s	          	 T#(SSSS W4 4     #'" 
% 
%K 
 
 
 
      1 1 1 1g g g g
= = = =   1 1 1 1
   5 5 5 5@ @ @ @   
4 4 4 46 6 6 6S S S SL, L, L, L,\( ( ( ( ( (r   r  c                      e Zd ZdZdZd*dZd*dZd+d	Zd*d
Zd,dZ	d*dZ
d-dZd*dZd*dZd*dZd*dZd.dZd/d%Zd0d'Zd1d(Zd)S )2AppleDynamicLinkerzApple's ld implementation.ld64r   r   c                ,    |                      d          S )Nz-dead_strip_dylibsr   r"   s    r   r   z$AppleDynamicLinker.get_asneeded_args*  s    !!"6777r   c                F    | j         dk    rg S |                     d          S )Niosz-undefined,dynamic_lookup)r   r   r"   s    r   r   z+AppleDynamicLinker.get_allow_undefined_args-  s)    ;%I%%&ABBBr   r3   r4   c                N    | j         dk    rdgS dg|                                 z   S )NrM  z-dynamiclibz-bundle)r   r   rL   s     r   r   z-AppleDynamicLinker.get_std_shared_module_args4  s0    ;%!?";!>!>!@!@@@r   c                    g S r   r:   r"   s    r   r   zAppleDynamicLinker.get_pie_args:  rF   r   r)   c                    g }|D ]?}|                     |                     d                     |                    |           @|S )Nz-force_load)r5  r   append)r   r)   resultr   s       r   r   z%AppleDynamicLinker.get_link_whole_for=  sP      	 	AMM$,,];;<<<MM!r   c                    dgS r  r:   r"   s    r   r   z$AppleDynamicLinker.get_coverage_argsD  r  r   r   c                <    |s|S dd                     |           gS r	  r  r   s     r   r   z!AppleDynamicLinker.sanitizer_argsG  r  r   c                    g S r   r:   r"   s    r   r  z$AppleDynamicLinker.no_undefined_argsL  r  r   c                ,    |                      d          S )Nz-headerpad_max_install_namesr   r"   s    r   r  z!AppleDynamicLinker.headerpad_argsW  s    !!"@AAAr   c                ,    |                      d          S )Nz-bitcode_bundler   r"   s    r   r  zAppleDynamicLinker.bitcode_argsZ      !!"3444r   c                ,    |                      d          S )Nz-fatal_warningsr   r"   s    r   r
  z!AppleDynamicLinker.fatal_warnings]  rX  r   r7   r8   r  r   r  r  r  r  r  c                    d||g}||                     d|z              |                     d|z              dd                    |          g}|r%|                    d|d         d|d         g           |S )	Nz@rpath/r  z-install_namer   z-compatibility_versionr   z-current_versionr   )rQ  r   r5  )	r   r7   r  r  r  r  r  install_namer)   s	            r   r  z"AppleDynamicLinker.get_soname_args`  s    !6:6 i000C&L)))!6!67 	BKK1?13E+_Q-?A B B Br   rP   rQ   rR   rS   rT   rU   rV   c                   |s|s|sg t                      fS g }t                      }dt          |||          }	t          j        fd|	D                       }
|dk    r(|
                    |                    d                     |
D ]U}|                    |                    d                     |                    | 	                    d|z                        V||fS )Nz@loader_pathc                P    g | ]"}t           j                            |          #S r:   r#  r$  s     r   r   z7AppleDynamicLinker.build_rpath_args.<locals>.<listcomp>w  r&  r   r   r(  r'  r+  )
rY   r  r   r/  updater2  r0  r1  r5  r   )r   r7   rP   rQ   rR   rT   rU   r)   r:  r8  r9  rpr%  s               @r   r[   z#AppleDynamicLinker.build_rpath_argsl  s     	= 	 	;-0UU ,)+y(KK'(g(g(g(gVf(g(g(ghh	"[..s33444 	< 	<B $$RYYv%6%6777KK**9r>::;;;;*++r   r   c                    d|z   gS )Nz-Wl,-cache_path_lto,r:   r   s     r   r   z)AppleDynamicLinker.get_thinlto_cache_args  s    &-..r   c                d    t          j        | j        d          r|                     d          S g S )Nz>=224.1z-export_dynamic)r   r7  r   r   r^   s     r   r   z&AppleDynamicLinker.export_dynamic_args  s3    #DL)<< 	9%%&7888	r   Nr   )r3   r4   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   rI  rI  $  sW       $$	B8 8 8 8C C C CA A A A         1 1 1 1
	 	 	 	B B B B5 5 5 55 5 5 5
 
 
 
, , , ,(/ / / /     r   rI  c                      e Zd ZdZdS )LLVMLD64DynamicLinkerzld64.lldNrj  r:   r   r   rc  rc    s        	BBBr   rc  c                      e Zd ZdZdS )GnuDynamicLinkerz)Representation of GNU ld.bfd and ld.gold.N)r   r   r   r,  r:   r   r   re  re    s        3333r   re  c                      e Zd ZdZddZdS )	GnuGoldDynamicLinkerr.  r   r   r   r   c                    d|z   gS )Nz-Wl,-plugin-opt,cache-dir=r:   r   s     r   r   z+GnuGoldDynamicLinker.get_thinlto_cache_args  s    ,t344r   Nr$  r   r   r   r   r   r:   r   r   rg  rg    s-        	B5 5 5 5 5 5r   rg  c                      e Zd ZdZdS )GnuBFDDynamicLinkerr-  Nrj  r:   r   r   rk  rk    r  r   rk  c                      e Zd ZdZddZdS )	MoldDynamicLinkerzld.moldr   r   r   r   c                    d|z   gS Nz-Wl,--thinlto-cache-dir=r:   r   s     r   r   z(MoldDynamicLinker.get_thinlto_cache_args      *T122r   Nr$  ri  r:   r   r   rm  rm    s-        	B3 3 3 3 3 3r   rm  c                  `     e Zd ZdZdZdddd fdZddZddZddZddZ	ddZ
d dZ xZS )!LLVMDynamicLinkerzRepresentation 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   r   r   r   r   r   r   r   r   r   r   c                   t                                          ||||||           |                     d|          | _        |                     d|          | _        |                     d|          | _        d S )Nr   r  r   r  )rW  r   _supports_flaghas_allow_shlib_undefinedhas_as_neededhas_no_undefined)r   r   r   r   r   r   r   r_  s          r   r   zLLVMDynamicLinker.__init__  s~     	+z;v_fggg *.)<)<=VXc)d)d&!00LL $ 3 34Dk R Rr   flagr   r.   c                    t          j        | j        |z   |                     |          z             \  }}}d| |vod| d|vod| |vS )Nzunknown argument: zunknown argument: ''zinvalid option:  )r   rX  r   r   )r   rx  r   _es        r   rt  z LLVMDynamicLinker._supports_flag  sy    %dl[&@4CUCUVZC[C[&[\\1a )$((1 2*4***!32 (''q0	
r   c                >    | j         r|                     d          S g S r  )ru  r   r"   s    r   r   z*LLVMDynamicLinker.get_allow_undefined_args  s(    ) 	A%%&?@@@	r   c                >    | j         r|                     d          S g S r  )rv  r   r"   s    r   r   z#LLVMDynamicLinker.get_asneeded_args  s&     	5%%m444	r   c                >    | j         r|                     d          S g S r  )rw  r   r"   s    r   r  z#LLVMDynamicLinker.no_undefined_args  s'      	8%%&6777	r   r   c                    d|z   gS ro  r:   r   s     r   r   z(LLVMDynamicLinker.get_thinlto_cache_args  rp  r   r   c                    d }d|v r|                     dd          \  }}|| j        v r#||d| z  }|                     d| g          S t          j        d| d          )Nr
  r   r(  r@  rA  z8 not handled in lld linker. This should not be possible.)r2  r  r   r   rC  )r   r   r   s      r   r  z(LLVMDynamicLinker.get_win_subsystem_args  s    %<<"[[a00NE7D$$$"W&%%'=e'='=&>???,-~u-~-~-~r   r#  )rx  r   r   r   r   r.   r   r$  r)  )r   r   r   r,  r   r   rt  r   r   r  r   r  re  rf  s   @r   rr  rr    s          
B =M 1
S 
S 
S 
S 
S 
S 
S 
S
 
 
 
   
   
   
3 3 3 3
@ 
@ 
@ 
@ 
@ 
@ 
@ 
@r   rr  c                      e Zd ZdZddZdS )	ZigCCDynamicLinkerr,  r   r   r   r   c                    g S r   r:   r   s     r   r   z)ZigCCDynamicLinker.get_thinlto_cache_args  rF   r   Nr$  ri  r:   r   r   r  r    s-        	B     r   r  c                  >    e Zd ZdZdZddZddZddZddZddZ	dS )WASMDynamicLinkerzEmscripten's wasm-ld.zld.wasmr   r   c                    dgS )Nz-sERROR_ON_UNDEFINED_SYMBOLS=0r:   r"   s    r   r   z*WASMDynamicLinker.get_allow_undefined_args      011r   c                    dgS )Nz-sERROR_ON_UNDEFINED_SYMBOLS=1r:   r"   s    r   r  z#WASMDynamicLinker.no_undefined_args  r  r   r7   r8   r  r   r  r  r  r  r  c                0    t          | j         d          Nz# does not support shared libraries.r
   r   r  s          r   r  z!WASMDynamicLinker.get_soname_args      LLLMMMr   c                    g S r   r:   r"   s    r   r   z#WASMDynamicLinker.get_asneeded_args  rF   r   rP   rQ   rR   rS   rT   rU   rV   c                "    g t                      fS r   rX   rZ   s          r   r[   z"WASMDynamicLinker.build_rpath_args  r\   r   Nr   r*  r   )
r   r   r   r,  r   r   r  r  r   r[   r:   r   r   r  r    s        	B2 2 2 22 2 2 2N N N N        r   r  c                  f     e Zd ZdZdZddd fd	Zd dZd!dZd"dZd#dZ	d$dZ
d"dZd%dZ xZS )&CcrxDynamicLinkerz!Linker for Renesas CCrx compiler.r  r   r   r   r   r   r   c               V    t                                          dg|dg |           d S )Nz	rlink.exer   r  r  r   r   r   r_  s      r   r   zCcrxDynamicLinker.__init__  s;    +R!( 	 	* 	* 	* 	* 	*r   r   r.   c                    dS r  r:   r"   s    r   r   z!CcrxDynamicLinker.get_accepts_rsp  r  r   c                    dS )Nz-lib=r:   r"   s    r   r   z CcrxDynamicLinker.get_lib_prefix  s    wr   r   c                    g S r   r:   r"   s    r   r   z)CcrxDynamicLinker.get_std_shared_lib_args  rF   r   r   c                    d| gS r  r:   r   s     r   rM   z!CcrxDynamicLinker.get_output_args  s    ':''((r   r   'T.NoReturn'c                     t          d          )Nz-rlink.exe does not have a search dir argumentOSErrorr   s     r   r   z!CcrxDynamicLinker.get_search_args  s    EFFFr   c                    g S r   r:   r"   s    r   r   z*CcrxDynamicLinker.get_allow_undefined_args!  rF   r   r7   r8   r  r  r  r  r  r  c                    g S r   r:   r  s          r   r  z!CcrxDynamicLinker.get_soname_args$  ru   r   r   r   r   r   r   r~   r   r&  r   r   r   r  r*  )r   r   r   r,  r   r   r   r   r   rM   r   r   r  re  rf  s   @r   r  r    s        ++	B $5* * * * * * * *
         ) ) ) )G G G G          r   r  c                  v     e Zd ZdZdZddd) fd	Zd*dZd+dZd,dZd-dZ	d.dZ
d/dZd-dZd0d Zd1d(Z xZS )2Xc16DynamicLinkerz#Linker for Microchip XC16 compiler.xc16-gccr   r  r   r   r   r   c               V    t                                          dg|dg |           d S )Nr  r   r  r  r  s      r   r   zXc16DynamicLinker.__init__/  s;    *{B!( 	 	* 	* 	* 	* 	*r   r)   r   r   c                    t          |          dk     r|S |                     d          |z   |                     d          z   S Nr   z--start-groupz--end-groupr6  r   r,   s     r   r   z$Xc16DynamicLinker.get_link_whole_for4  B    t99q==K!!/22T9D<N<N}<]<]]]r   r.   c                    dS r  r:   r"   s    r   r   z!Xc16DynamicLinker.get_accepts_rsp9  r  r   c                    dS r   r:   r"   s    r   r   z Xc16DynamicLinker.get_lib_prefix<  r   r   c                    g S r   r:   r"   s    r   r   z)Xc16DynamicLinker.get_std_shared_lib_args?  rF   r   r   c                    d| gS r  r:   r   s     r   rM   z!Xc16DynamicLinker.get_output_argsB      !Z!!""r   r   r  c                     t          d          )Nz,xc16-gcc does not have a search dir argumentr  r   s     r   r   z!Xc16DynamicLinker.get_search_argsE  s    DEEEr   c                    g S r   r:   r"   s    r   r   z*Xc16DynamicLinker.get_allow_undefined_argsH  rF   r   r7   r8   r  r  r  r  r  r  c                    g S r   r:   r  s          r   r  z!Xc16DynamicLinker.get_soname_argsK  ru   r   rP   rQ   rR   rS   rT   rU   rV   c                "    g t                      fS r   rX   rZ   s          r   r[   z"Xc16DynamicLinker.build_rpath_argsO  r\   r   r  r   r   r~   r   r&  r  r*  r   r   r   r   r,  r   r   r   r   r   r   rM   r   r   r  r[   re  rf  s   @r   r  r  )  s       --	B $5* * * * * * * *
^ ^ ^ ^
         # # # #F F F F             r   r  c                  v     e Zd ZdZdZddd( fd	Zd)dZd*dZd+dZd,dZ	d-dZ
d.dZd,dZd/dZd0d'Z xZS )1CompCertDynamicLinkerzLinker for CompCert C compiler.r  r   r  r   r   r   r   c               V    t                                          dg|dg |           d S )Nr  r   r  r  r  s      r   r   zCompCertDynamicLinker.__init__Z  s;    'KR!( 	 	* 	* 	* 	* 	*r   r)   r   r   c                f    |s|S |                      d          |z   |                      d          z   S )Nz-Wl,--whole-archivez-Wl,--no-whole-archiver   r,   s     r   r   z(CompCertDynamicLinker.get_link_whole_for_  s=     	K!!"7884?$BTBTUmBnBnnnr   r.   c                    dS r  r:   r"   s    r   r   z%CompCertDynamicLinker.get_accepts_rspd  r  r   c                    dS r   r:   r"   s    r   r   z$CompCertDynamicLinker.get_lib_prefixg  r   r   c                    g S r   r:   r"   s    r   r   z-CompCertDynamicLinker.get_std_shared_lib_argsj  rF   r   r   c                    d| gS r  r:   r   s     r   rM   z%CompCertDynamicLinker.get_output_argsm  r  r   r   c                    d| gS r  r:   r   s     r   r   z%CompCertDynamicLinker.get_search_argsp  s    Wr   c                    g S r   r:   r"   s    r   r   z.CompCertDynamicLinker.get_allow_undefined_argss  rF   r   r7   r8   r  r  r  r  r  r  c                0    t          | j         d          r  r  r  s          r   r  z%CompCertDynamicLinker.get_soname_argsv  r  r   rP   rQ   rR   rS   rT   rU   rV   c                "    g t                      fS r   rX   rZ   s          r   r[   z&CompCertDynamicLinker.build_rpath_argsz  r\   r   r  r   r   r~   r   r&  r'  r*  r   r  rf  s   @r   r  r  T  s       ))	B $5* * * * * * * *
o o o o
         # # # #          N N N N       r   r  c                  n     e Zd ZdZdZddd fdZddZddZddZddZ	ddZ
d dZddZddZ xZS )!TIDynamicLinkerz-Linker for Texas Instruments compiler family.tir   r  r   r   r   r   r   r   c               T    t                                          ||dg |           d S Nr   r  r  r   r   r   r   r_  s       r   r   zTIDynamicLinker.__init__  9    +r2!( 	 	* 	* 	* 	* 	*r   r)   r   c                    t          |          dk     r|S |                     d          |z   |                     d          z   S r  r  r,   s     r   r   z"TIDynamicLinker.get_link_whole_for  r  r   r.   c                    dS r  r:   r"   s    r   r   zTIDynamicLinker.get_accepts_rsp  r  r   c                    dS )Nz-l=r:   r"   s    r   r   zTIDynamicLinker.get_lib_prefix  r  r   c                    g S r   r:   r"   s    r   r   z'TIDynamicLinker.get_std_shared_lib_args  rF   r   r   c                    dd| gS )N-zz--output_file=r:   r   s     r   rM   zTIDynamicLinker.get_output_args  s    3z3344r   r   r  c                     t          d          )Nz.TI compilers do not have a search dir argumentr  r   s     r   r   zTIDynamicLinker.get_search_args  s    FGGGr   c                    g S r   r:   r"   s    r   r   z(TIDynamicLinker.get_allow_undefined_args  rF   r   c                    g S r   r:   r"   s    r   rw   zTIDynamicLinker.get_always_args  rF   r   r   r   r   r   r   r   r   r   r~   r   r&  r  )r   r   r   r,  r   r   r   r   r   r   rM   r   r   rw   re  rf  s   @r   r  r    s        77	B $5* * * * * * * *
^ ^ ^ ^
         5 5 5 5H H H H          r   r  c                      e Zd ZdZdS )C2000DynamicLinkercl2000Nrj  r:   r   r   r  r    r  r   r  c                      e Zd ZdZdS )C6000DynamicLinkercl6000Nrj  r:   r   r   r  r    r  r   r  c                  F     e Zd ZdZdZddd fd	ZddZddZddZ xZ	S )ArmDynamicLinkerzLinker for the ARM compiler.armlinkr   r  r   r   r   r   c               V    t                                          dg|dg |           d S )Nr  r   r  r  r  s      r   r   zArmDynamicLinker.__init__  s;    )k2r!( 	 	* 	* 	* 	* 	*r   r   r.   c                    dS r  r:   r"   s    r   r   z ArmDynamicLinker.get_accepts_rsp  r  r   r  c                     t          d          )Nz/The Arm Linkers do not support shared librariesr  r"   s    r   r   z(ArmDynamicLinker.get_std_shared_lib_args  s    NOOOr   r   c                    g S r   r:   r"   s    r   r   z)ArmDynamicLinker.get_allow_undefined_args  rF   r   r  r   )r   r  r   )
r   r   r   r,  r   r   r   r   r   re  rf  s   @r   r  r    s        &&	B $5* * * * * * * *
   P P P P       r   r  c                  "    e Zd ZdZddZdd	Zd
S )ArmClangDynamicLinkerzLinker 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.
    r7   r8   r   r   c                    dgS )Nz--export_dynamicr:   r^   s     r   r   z)ArmClangDynamicLinker.export_dynamic_args  s    "##r   r   r   c                    d|z   gS )Nz
--symdefs=r:   r  s     r   r  z)ArmClangDynamicLinker.import_library_args  s    z)**r   Nr   r(  )r   r   r   r,  r   r  r:   r   r   r  r    sF         $ $ $ $+ + + + + +r   r  c                      e Zd ZdZdZdS )QualcommLLVMDynamicLinkerz-ARM Linker from Snapdragon LLVM ARM Compiler.zld.qcldN)r   r   r   r,  r   r:   r   r   r  r    s        77	BBBr   r  c                  .    e Zd ZdZdZddZddZddZdS )NAGDynamicLinkera;  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
    nagr7   r8   rP   r   rQ   rR   rS   rT   rU   r   rV   c                P   |s|s|sg t                      fS g }dt          |||          }t          j        fd|D                       }	|dk    r|	                    |           |	D ]-}
|                    |                     d|
z                        .|t                      fS )Nr!  c                P    g | ]"}t           j                            |          #S r:   r#  r$  s     r   r   z5NAGDynamicLinker.build_rpath_args.<locals>.<listcomp>  r&  r   r   z-Wl,-Wl,,-rpath,,)rY   r  r   r/  r0  r5  r   )r   r7   rP   rQ   rR   rT   rU   r)   r8  r9  r_  r%  s              @r   r[   z!NAGDynamicLinker.build_rpath_args  s      	= 	 	;&)+y(KK'(g(g(g(gVf(g(g(ghh	"MM+&&& 	F 	FBKK**+>+CDDEEEEcee}r   r   c                    g S r   r:   r"   s    r   r   z)NAGDynamicLinker.get_allow_undefined_args  rF   r   c                J    ddl m} |                    | j                  dgz   S )Nr   )NAGFortranCompilerz-Wl,-shared)compilers.fortranr  get_nagfor_quietr   )r   r  s     r   r   z(NAGDynamicLinker.get_std_shared_lib_args  s1    ::::::!224<@@M?RRr   Nr   r   )r   r   r   r,  r   r[   r   r   r:   r   r   r  r    sg          
B       S S S S S Sr   r  c                  6    e Zd ZdZdZddZddZddZddZdS )PGIDynamicLinkerzPGI linker.pgir   r   c                    g S r   r:   r"   s    r   r   z)PGIDynamicLinker.get_allow_undefined_args  rF   r   r7   r8   r  r   r  r  r  r  r  c                    g S r   r:   r  s          r   r  z PGIDynamicLinker.get_soname_args  ru   r   c                `    t          j                    rddgS t          j                    rdgS g S )Nz	-Bdynamicz	-Mmakedllr  )r   r1   is_linuxr"   s    r   r   z(PGIDynamicLinker.get_std_shared_lib_args	  s<       	--   	;	r   rP   rQ   rR   rS   rT   rU   rV   c                    |j         | j                                                 sfd|D             t                      fS g t                      fS )Nc                V    g | ]%}d t           j                            |          z   &S )z-Rr#  )r   r  rP   s     r   r   z5PGIDynamicLinker.build_rpath_args.<locals>.<listcomp>  s.    LLL1TBGLLA666LLLr   )rb  r   r1   rY   rZ   s     `    r   r[   z!PGIDynamicLinker.build_rpath_args  sU     |D,-88:: 	ULLLLLLLceeTTCEE{r   Nr   r*  r   )	r   r   r   r,  r   r   r  r   r[   r:   r   r   r  r    so        	B              r   r  c                  0     e Zd Zd fdZdd	ZddZ xZS )PGIStaticLinkerr   r   c                h    t                                          |           d| _        dg| _        d S )NrR  r  )rW  r   r   rY  r  s     r   r   zPGIStaticLinker.__init__  s/    !!!r   r7   r8   rB   r.   r   c                    | j         S r   )rY  rD   s      r   rE   z!PGIStaticLinker.get_std_link_args!  s
    }r   r3   r   c                    |gS r   r:   rL   s     r   rM   zPGIStaticLinker.get_output_args$  rv  r   r}   r   r   )r   r   r   r   rE   rM   re  rf  s   @r   r  r    se             
          r   r  c                       e Zd ZU dZej        rej        Zd7dZ	g g g g g dgddgd	Z
d
ed<   dddej        dd8 fdZd9dZd:dZd; fd Zd<d"Zd;d#Zd=d%Zd>d&Zd?d(Zd;d)Zd@d2ZdAd4ZdBd5Zd;d6Z xZS )CVisualStudioLikeLinkerMixinzCMixin class for dynamic linkers that act like Microsoft's link.exe.r   r   r   r   c                    d S r   r:   r  s     r   r   z)VisualStudioLikeLinkerMixin._apply_prefix0  r  r   z/OPT:REFz/INCREMENTAL:NOr   r   r   r   Tx86)r   directr   rq  r   r   r   r   r   r   r   r  r.   r   rq  r   c               ~    t                                          |||||           || _        || _        || _        d S )Nr  )rW  r   r   r  rq  )
r   r   r   r   r   r   r  r   rq  r_  s
            r   r   z$VisualStudioLikeLinkerMixin.__init__>  sB    
 	+z;PWXXX$r   c                    | j          S r   )r  r"   s    r   invoked_by_compilerz/VisualStudioLikeLinkerMixin.invoked_by_compilerH  s    ;r   r   c                F    |                      d| j        z   d|z   g          S r8  )r   r   r   s     r   rM   z+VisualStudioLikeLinkerMixin.get_output_argsK  s'    !!;#=w?S"TUUUr   c                t    t                                                      }|                     d          |z   S )Nz/nologo)rW  rw   r   )r   parentr_  s     r   rw   z+VisualStudioLikeLinkerMixin.get_always_argsN  s1    ((**!!),,v55r   r   c                2    |                      d|z             S )Nz	/LIBPATH:r   r   s     r   r   z+VisualStudioLikeLinkerMixin.get_search_argsR  s    !!+"7888r   c                ,    |                      d          S )Nz/DLLr   r"   s    r   r   z3VisualStudioLikeLinkerMixin.get_std_shared_lib_argsU  s    !!&)))r   rn   c                    |S r   r:   rp   s     r   r   z.VisualStudioLikeLinkerMixin.get_debugfile_nameX  s    r   c                \    |                      dd|                     |          z   g          S )Nz/DEBUGz/PDB:)r   r   rp   s     r   r   z.VisualStudioLikeLinkerMixin.get_debugfile_args[  s.    !!8Wt7N7Nz7Z7Z-Z"[\\\r   r)   c                    t          j        |          }g }|D ]-}|                    |                     d|z                        .|S )Nz/WHOLEARCHIVE:r   r   r5  r   r   r)   lr   s       r   r   z.VisualStudioLikeLinkerMixin.get_link_whole_for^  sT    %% 	? 	?AHHT''(81(<==>>>>r   c                    g S r   r:   r"   s    r   r   z4VisualStudioLikeLinkerMixin.get_allow_undefined_argsf  rF   r   r7   r8   r  r  r  r  r  r  c                    g S r   r:   r  s          r   r  z+VisualStudioLikeLinkerMixin.get_soname_argsi  ru   r   r   c                4    |                      d|z   g          S )z+The command to generate the import library.z/IMPLIB:r   r  s     r   r  z/VisualStudioLikeLinkerMixin.import_library_argsm  s    !!:
#:";<<<r   c                    | j         S r   rp  r"   s    r   r|   z+VisualStudioLikeLinkerMixin.rsp_file_syntaxq  s
    r   c                    g S r   r:   r"   s    r   r   z(VisualStudioLikeLinkerMixin.get_pie_argst  rF   r   r"  )r   r   r   r   r   r   r   r   r   r   r  r.   r   r   rq  r   r   r&  r   r'  )rn   r   r   r   r   r   r*  r(  r   )r   r   r   r,  rV  rF  r   rG  r   r   r   r   r   rB  r   r  rM   rw   r   r   r   r   r   r   r  r  r|   r   re  rf  s   @r   r  r  *  s        MM T#(SSSS  \,
4 
4 
 
 
 
 !2$W\-:-?% % % % % % % %   V V V V6 6 6 6 6 69 9 9 9* * * *   ] ] ] ]         = = = =          r   r  c                  ^     e Zd ZdZdZdddddej        dd fdZd fdZd dZ	ddZ
 xZS )!MSVCDynamicLinkerzMicrosoft's Link.exe.linkNr   r  r   Tr   r  r   r   r  rq  r   r   r   r   r   T.Optional[T.List[str]]r  r   r   r   r   r  r.   rq  r   c          
     `    t                                          |pdg|||||||           d S )Nzlink.exer   r   r  rq  r  
r   r   r   r   r  r   r   r  rq  r_  s
            r   r   zMSVCDynamicLinker.__init__~  sJ    
 	0ZL+gwW]$. 	 	0 	0 	0 	0 	0r   r   c                r    |                      dg          t                                                      z   S )Nz/releaser   rW  rw   r   r_  s    r   rw   z!MSVCDynamicLinker.get_always_args  s.    !!:,//%''2I2I2K2KKKr   r   c                X    |                      d|                                 g          S Nz/SUBSYSTEM:r   upperr   s     r   r  z(MSVCDynamicLinker.get_win_subsystem_args  *    !!#@#@#@"ABBBr   c                    dgS Nz-WXr:   r"   s    r   r
  z MSVCDynamicLinker.fatal_warnings  r  r   r   r   r   r   r   r  r  r   r   r   r   r   r  r.   rq  r   r   r)  )r   r   r   r,  r   r   rB  r   rw   r  r
  re  rf  s   @r   r  r  x  s        	B 5957 %6G $-BT	0 0 0 0 0 0 0 0L L L L L LC C C C       r   r  c                  f     e Zd ZdZdZdddddej        dd! fdZd" fdZd#dZ	d$dZ
d%d Z xZS )&ClangClDynamicLinkerzClang's lld-link.exe.zlld-linkNr   r  r   Tr  r   r   r   r   r   r  r  r   r   r   r   r  r.   rq  r   c          
     `    t                                          |pdg|||||||           d S )Nzlld-link.exer  r  r  s
            r   r   zClangClDynamicLinker.__init__  sK    
 	4^$4kgwW]$. 	 	0 	0 	0 	0 	0r   r   r   c                    | j         |                     d| g          S t                                          |          S )Nr9  )r   r   rW  rM   )r   r   r_  s     r   rM   z$ClangClDynamicLinker.get_output_args  sE     <%%';z';';&<===ww&&z222r   r   c                X    |                      d|                                 g          S r  r   r   s     r   r  z+ClangClDynamicLinker.get_win_subsystem_args  r"  r   r   c                    d|z   gS )Nz/lldltocache:r:   r   s     r   r   z+ClangClDynamicLinker.get_thinlto_cache_args  s    $&''r   c                    dgS r$  r:   r"   s    r   r
  z#ClangClDynamicLinker.fatal_warnings  r  r   r%  r&  r)  r$  r   )r   r   r   r,  r   r   rB  r   rM   r  r   r
  re  rf  s   @r   r'  r'    s        	B 5957 %6G $-BT	0 0 0 0 0 0 0 03 3 3 3 3 3C C C C( ( ( (       r   r'  c                  >     e Zd ZdZdZddddddd fdZddZ xZS )XilinkDynamicLinkerzIntel's Xilink.exe.xilinkNr   r  r   T)r   r  r   r   r  r   r   r   r   r   r  r  r   r   r   r   r  r.   c               V    t                                          dg|d||           d S )Nz
xilink.exer   r  r  )	r   r   r   r   r  r   r   r  r_  s	           r   r   zXilinkDynamicLinker.__init__  s0    
 	,b+wWWWWWr   r   r   c                X    |                      d|                                 g          S r  r   r   s     r   r  z*XilinkDynamicLinker.get_win_subsystem_args  r"  r   )r   r   r   r   r   r  r  r   r   r   r   r   r  r.   r)  )r   r   r   r,  r   r   r  re  rf  s   @r   r.  r.    s        	B 5957 %6G $	X X X X X X X XC C C C C C C Cr   r.  c                  V    e Zd ZdZdZddZd dZd dZd d	Zd d
Z	d dZ
d!dZd"dZdS )#SolarisDynamicLinkerz5Sys-V derived linker used on Solaris and OpenSolaris.z
ld.solarisr)   r   r   c                f    |s|S |                      d          |z   |                      d          z   S r  r   r,   s     r   r   z'SolarisDynamicLinker.get_link_whole_for  r  r   c                    t          j        | j        |                     d          z             \  }}}||z                       d          D ]}d|v rd|v rddgc S  ng S )Nz-zhelp
z-z typepier  ztype=pie)r   rX  r   r   r2  )r   pcr\  stdelines        r   r   z!SolarisDynamicLinker.get_pie_args  s    !,T\D<N<Nx<X<X-XYYD$D[''-- 	 	DD  D== *---- ! 	r   c                0    |                      ddg          S )Nr  ignorer   r"   s    r   r   z&SolarisDynamicLinker.get_asneeded_args  s    !!4"2333r   c                
    ddgS )Nr  defsr:   r"   s    r   r  z&SolarisDynamicLinker.no_undefined_args  r  r   c                
    ddgS )Nr  nodefsr:   r"   s    r   r   z-SolarisDynamicLinker.get_allow_undefined_args  s    hr   c                
    ddgS )Nr  zfatal-warningsr:   r"   s    r   r
  z#SolarisDynamicLinker.fatal_warnings  s    &''r   r7   r8   rP   r   rQ   rR   rS   rT   rU   rV   c                   |s|s|sg t                      fS t          |||          }t          j        d |D                       }t                      }	|D ]*}
|	                    |
                    d                     +|dk    rU|                    |           |                    d          D ]*}
|	                    |
                    d                     +d                    |          }t          |                    d                    }t          |                    d                    }||k     rd||z
  z  }|s|}n|dz   |z   }| 	                    d|           |	fS )Nc                N    g | ]"}t           j                            d |          #S )r!  r#  )r   r  s     r   r   z9SolarisDynamicLinker.build_rpath_args.<locals>.<listcomp>  s(    (^(^(^i)C)C(^(^(^r   r'  r   r(  r)  r*  r+  )
rY   r  r   r/  r0  r1  r2  r   r6  r   )r   r7   rP   rQ   rR   rT   rU   r8  r9  r:  r  r;  r<  r=  r>  s                  r   r[   z%SolarisDynamicLinker.build_rpath_args  s     	= 	 	;)+y(KK'(^(^M](^(^(^__	-0UU 	7 	7A $$QXXf%5%56666"MM+&&& &&s++ ; ;$((&)9)9:::: ##5<<0011"=#7#7#@#@AA...1L@AG .g-""#4U#4#4557KLLr   r  r  r  r  r  r  c                R    |dnd|z   }|                      d| | d| |           S r  r   )r   r7   r  r  r  r  r  r  s           r   r  z$SolarisDynamicLinker.get_soname_args   sC    'S9_!!"QV"QZ"Q"Q&"Q%"Q"QRRRr   Nr   r   r   r*  )r   r   r   r,  r   r   r   r   r  r   r
  r[   r  r:   r   r   r3  r3    s        ??	Bg g g g
   4 4 4 4          ( ( ( (M M M M8S S S S S Sr   r3  c                  `     e Zd ZdZdZd fdZddZddZdd
ZddZ	ddZ
ddZddZ xZS )AIXDynamicLinkerz Sys-V derived linker used on AIXzld.aixr   r   c                t    |                      ddg          t                                                      z   S )Nz	-bnoipathz-bbigtocr  r  s    r   rw   z AIXDynamicLinker.get_always_args  s1    !!;
";<<uww?V?V?X?XXXr   c                .    |                      dg          S )Nz	-bernotokr   r"   s    r   r  z"AIXDynamicLinker.no_undefined_args  s    !!;-000r   c                .    |                      dg          S )Nz-berokr   r"   s    r   r   z)AIXDynamicLinker.get_allow_undefined_args  s    !!8*---r   r  r   c                Z    t          j        dd|                    dd                    }|S )Nz$[.][a]([.]?([0-9]+))*([.]?([a-z]+))*z.az.so)resubreplacer  s     r   r  z!AIXDynamicLinker.get_archive_name  s/     6@$HXHXY^`dHeHeffr   c                    g d}|S )N)
rR  r  z-sz-vz$out$inz&&rmz-frO  r:   )r   commands     r   r!  z-AIXDynamicLinker.get_command_to_archive_shlib  s     SRRr   r)   c                    |S r   r:   r,   s     r   r   z#AIXDynamicLinker.get_link_whole_for$  s	     r   r7   r8   rP   rQ   rR   rS   rT   rU   rV   c                r   t          j                    }|dk    r|                    |           |dk    r|                    |           |D ]5}|                    t          j                            ||                     6|                    | j                  }	t          |	          dk    r|	                    ddg           n9|	D ]6}t          j        
                    |          r|                    |           7|                     dd                    |          z             t                      fS )Nr   r   z/usr/libz/libz
-blibpath:r(  )r   r/  r0  r  r   r   get_compiler_system_lib_dirsr   r6  r^  isdirr   rY   )
r   r7   rP   rQ   rR   rT   rU   r9  r  sys_paths
             r   r[   z!AIXDynamicLinker.build_rpath_args*  s/    /7.A.C.C	BMM-((("MM+&&& 	6 	6AMM"',,y!445555 33D4DEEx==A j&12222  % %7==## %MM!$$$""<#((92E2E#EFFNNr   c                    dgS r  r:   r^   s     r   r  zAIXDynamicLinker.thread_flagsC  r  r   r   r+  r   r   r   )r   r   r   r,  r   rw   r  r   r  r!  r   r[   r  re  rf  s   @r   rF  rF    s        **	BY Y Y Y Y Y1 1 1 1. . . .         O O O O2       r   rF  c                  F     e Zd ZdZdZddd fdZddZddZddZ xZ	S )OptlinkDynamicLinkerz(Digital Mars dynamic linker for windows.optlinkr   r  r   r   r   r   r   r   c               T    t                                          ||dg |           d S r  r  r  s       r   r   zOptlinkDynamicLinker.__init__M  s.     	+r2wGGGGGr   r   c                    g S r   r:   r"   s    r   r   z-OptlinkDynamicLinker.get_allow_undefined_argsS  rF   r   rn   c                    g S r   r:   rp   s     r   r   z'OptlinkDynamicLinker.get_debugfile_argsV  ru   r   c                    g S r   r:   r"   s    r   rw   z$OptlinkDynamicLinker.get_always_argsZ  rF   r   r  r   r   )
r   r   r   r,  r   r   r   r   rw   re  rf  s   @r   rY  rY  G  s        22	B $5H H H H H H H H             r   rY  c                  V    e Zd ZdZdZedd            ZddZddZdd
Z	ddZ
ddZdS )
CudaLinkerzCuda linker (nvlink)nvlinkr   r   c                     ddg} 	 t          j        |           \  }}}n# t          $ r Y dS w xY w|                                                    dd          d         S )Nra  z	--versionr   Vr   )maxsplit)r   rX  r  striprsplit)version_cmdr{  outs      r   parse_versionzCudaLinker.parse_versionc  su    -	% +K88IAsAA 	% 	% 	%$$$	% yy{{!!#!22266s    
--r.   c                    dS r  r:   r"   s    r   r   zCudaLinker.get_accepts_rspr  s    ur   c                    ddl m} |j        S )Nr   )CudaCompiler)compilers.cudarm  LINKER_PREFIX)r   rm  s     r   r   zCudaLinker.get_lib_prefixv  s     	211111))r   r   c                    dgS )Nz--warning-as-errorr:   r"   s    r   r
  zCudaLinker.fatal_warnings  s    $%%r   c                    g S r   r:   r"   s    r   r   z#CudaLinker.get_allow_undefined_args  rF   r   r7   r8   r  r  r  r  r  r  c                    g S r   r:   r  s          r   r  zCudaLinker.get_soname_args  ru   r   Nr~   r   r   r*  )r   r   r   r,  r   staticmethodrj  r   r   r
  r   r  r:   r   r   r`  r`  ^  s        	B7 7 7 \7   * * * *"& & & &        r   r`  c                  f     e Zd Zddd fd	ZddZddZd dZddZd!dZd"dZ	d dZ
d#dZ xZS )$MetrowerksLinkerr   r  r   r   r   r   r   r   c               T    t                                          ||dg |           d S r  r  r  s       r   r   zMetrowerksLinker.__init__  r  r   r   c                
    ddgS )Nz-werrorr:   r"   s    r   r
  zMetrowerksLinker.fatal_warnings  s    gr   c                    g S r   r:   r"   s    r   r   z)MetrowerksLinker.get_allow_undefined_args  rF   r   r.   c                    dS r  r:   r"   s    r   r   z MetrowerksLinker.get_accepts_rsp  rr   r   c                    g S r   r:   r"   s    r   ry   z'MetrowerksLinker.get_linker_always_args  rF   r   r   c                
    d|gS r  r:   r   s     r   rM   z MetrowerksLinker.get_output_args  r  r   r   c                2    |                      d|z             S r  r   r   s     r   r   z MetrowerksLinker.get_search_args      !!$.111r   c                    dS r  r:   r"   s    r   r  z$MetrowerksLinker.invoked_by_compiler  r  r   r7   r8   r  r  r  r  r  r  c                0    t          | j         d          r  r  r  s          r   r  z MetrowerksLinker.get_soname_args  r  r   r  r   r   r&  r'  r*  )r   r   r   r   r
  r   r   ry   rM   r   r  r  re  rf  s   @r   ru  ru    s         $5* * * * * * * *
            " " " "2 2 2 2   N N N N N N N Nr   ru  c                      e Zd ZdZdS )MetrowerksLinkerARMr  Nrj  r:   r   r   r  r    r  r   r  c                      e Zd ZdZdS )MetrowerksLinkerEmbeddedPowerPCr  Nrj  r:   r   r   r  r    r  r   r  c                       e Zd ZU dZg dgdgdgdgdgdgdZded<   d	d
d" fdZd#dZd$dZd%dZ	d#dZ
d&dZd'dZd%dZd(dZd%dZd)d!Z xZS )*TaskingLinkerr  z-O0r  z-O2z-Osr   r   r   r   r  r   r   r   r   r   r   c               T    t                                          ||dg |           d S r  r  r  s       r   r   zTaskingLinker.__init__  r  r   r   r.   c                    dS r  r:   r"   s    r   r   zTaskingLinker.get_accepts_rsp  rr   r   c                    dS r   r:   r"   s    r   r   zTaskingLinker.get_lib_prefix  r   r   c                    g S r   r:   r"   s    r   r   z&TaskingLinker.get_allow_undefined_args  rF   r   c                    dS r  r:   r"   s    r   r  z!TaskingLinker.invoked_by_compiler  rr   r   r   c                2    |                      d|z             S r  r   r   s     r   r   zTaskingLinker.get_search_args  r~  r   r   c                
    d|gS r  r:   r   s     r   rM   zTaskingLinker.get_output_args  r  r   c                    dgS )Nz
--mil-linkr:   r"   s    r   r   zTaskingLinker.get_lto_args  r  r   r   c                    t           j        S r   r  r"   s    r   r|   zTaskingLinker.rsp_file_syntax  r  r   c                ,    |                      d          S )r	  z--warnings-as-errorsr   r"   s    r   r
  zTaskingLinker.fatal_warnings  s    !!"8999r   r)   c                    t          j        |          }g }|D ]-}|                    |                     d|z                        .|S )Nz-Wl--whole-archive=r  r  s       r   r   z TaskingLinker.get_link_whole_for  sV    %% 	D 	DAHHT''(=(ABBCCCCr   r  r   r~   r   r'  r&  r   r   )r   r   r   r   r   r   r   r   r   r   r  r   rM   r   r|   r
  r   re  rf  s   @r   r  r    s_        	B WWWWWW4 4     $5* * * * * * * *
            2 2 2 2" " " "   % % % %: : : :       r   r  )r  rS   rP   r   rQ   r   r   r   )r  r   r   r   )r  r   rP   r   rQ   r   r   r   )X
__future__r   r-  r  typingrV  rK  baser   r   r   r   r	   r
   arglistr   rF  environmentr   r   buildr   	compilersr   r   ABCMetar   StaticLinkerBaseDynamicLinkerBaseobjectr2  rD  rM  rQ  rh  rl  ro  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rI  rc  re  rg  rk  rm  rr  r  r  r  r  r  r  r  r  r  r  r  r  r  NvidiaHPC_DynamicLinkerr  NvidiaHPC_StaticLinkerr  r  r'  r.  r3  rF  rY  r`  ru  r  r  r  r:   r   r   <module>r     s3  
 # " " " " " 



 				     				 - - - - - - - -       ; ; ; ; ; ; ; ; " " " " " "? %))))))((((((######$$$$$$Vj Vj Vj Vj Vj Vj Vj VjrJ J J J Jck J J J JZ ? 2#%+11(" " " " "- " " "B7 7 7 7 7/ 7 7 77 7 7 7 74l 7 7 7! ! ! ! !|\ ! ! !B    H       ,   ! ! ! ! !l ! ! !4, , , , , , , ,        
 
 
 
 
\ 
 
 
    |        (       (   ! ! ! ! !, ! ! !
! ! ! ! !\ ! ! !     6       ,B       ,   $   	1 	1 	1 	1^ ^ ^ ^    /   ,z( z( z( z( z( 1 z( z( z(zb b b b b0- b b bJ    .   
4 4 4 4 402I= 4 4 4
5 5 5 5 5+ 5 5 5    *   
3 3 3 3 3( 3 3 3<@ <@ <@ <@ <@13JM <@ <@ <@~    *       13JM   2       D) ) ) ) ) ) ) )V) ) ) ) )M ) ) )V# # # # #m # # #L                  .   *+ + + + +, + + +     1   "S "S "S "S "S. "S "S "SJ    .   8 + 
 
 
 
 
l 
 
 
 ) K K K K K"3 K K K\    3]   2    6   BC C C C C5} C C C"@S @S @S @S @S2M @S @S @SF> > > > >. > > >B    6   .1 1 1 1 1(- 1 1 1hN N N N N} N N NB    *       &6   3 3 3 3 3M 3 3 3 3 3r   