o
    eh,                     @  s&  U d dl mZ d dlZd dlZddlmZmZmZ ddl	m
Z
 ddlmZmZmZ ejrDddlmZ dd	lmZ dd
lmZ ddlmZ g dgdgdgdgdgdgdZded< G dd de
ZG dd deZG dd de
ZG dd de
ZG dd dee
ZG dd deZG dd deZdS )     )annotationsN   )EnvironmentException	OptionKeyget_meson_command   )Compiler)MetrowerksCompilermwasmarm_instruction_set_argsmwasmeppc_instruction_set_args)Environment)DynamicLinker)MachineChoice)MachineInfoz-O0z-O1z-Ox)plain0g123sT.Dict[str, T.List[str]]nasm_optimization_argsc                      s   e Zd ZU dZdZg g dg dg dg ddZded< 			
dMdN fddZdOddZdPdd Z	dPd!d"Z
dQd$d%ZdRd'd(ZdSd*d+ZdTd-d.ZdUd/d0ZdVd3d4ZdWd9d:ZdXd<d=ZdPd>d?ZdYdBdCZdZdFdGZd[dIdJZd[dKdLZ  ZS )\NasmCompilernasm)z/DEFAULTLIB:ucrt.libz/DEFAULTLIB:vcruntime.libz/DEFAULTLIB:msvcrt.lib)z/DEFAULTLIB:ucrtd.libz/DEFAULTLIB:vcruntimed.libz/DEFAULTLIB:msvcrtd.lib)z/DEFAULTLIB:libucrt.libz/DEFAULTLIB:libvcruntime.libz/DEFAULTLIB:libcmt.lib)z/DEFAULTLIB:libucrtd.libz/DEFAULTLIB:libvcruntimed.libz/DEFAULTLIB:libcmtd.lib)noneZmdZmddmtZmtdr   crt_argsNFccacheT.List[str]exelistversionstrfor_machine'MachineChoice'info'MachineInfo'linkerT.Optional['DynamicLinker']full_versionT.Optional[str]is_crossboolc	           	   
     s>   t  |||||||| d| jjv r| jtd d S d S )NlinkZb_vscrt)super__init__r'   idZbase_optionsaddr   	selfr   r    r!   r#   r%   r'   r)   r+   	__class__ =/usr/lib/python3.10/site-packages/mesonbuild/compilers/asm.pyr/   (   s   zNasmCompiler.__init__returnc                 C     dS NTr6   r3   r6   r6   r7   needs_static_linker0      z NasmCompiler.needs_static_linkerc                 C  s~   | j jrdnd}| j  s| j  rd}d| }n| j  r$d}d}nd}d}d	| | d
| g}| j jr=|d |S )NZ64Z32winZWINZmachoZMACHOZelfELFz-fz-Dz-D__x86_64__)r%   Z	is_64_bit
is_windowsZ	is_cygwinZ	is_darwinappend)r3   ZcpuplatZdefineargsr6   r6   r7   get_always_args3   s   

zNasmCompiler.get_always_argsc                 C     dgS )Nz-Werrorr6   r;   r6   r6   r7   get_werror_argsC      zNasmCompiler.get_werror_args
outputnamec                 C     d|gS Nz-or6   r3   rH   r6   r6   r7   get_output_argsF      zNasmCompiler.get_output_argsrC   c                 C  s&   g }|D ]}|dkrq| | q|S )Nz-pthread)rA   )r3   rC   Zoutargsargr6   r6   r7   unix_args_to_nativeI   s   z NasmCompiler.unix_args_to_nativeoptimization_levelc                 C  s   t | S N)r   r3   rP   r6   r6   r7   get_optimization_argsQ   rM   z"NasmCompiler.get_optimization_argsis_debugc                 C  s   |r| j  r	g S g dS g S )N)-gz-FZdwarfr%   r@   r3   rT   r6   r6   r7   get_debug_argsT   s
   
zNasmCompiler.get_debug_argsc                 C  r9   )Ndr6   r;   r6   r6   r7   get_depfile_suffix[   r=   zNasmCompiler.get_depfile_suffix	outtargetoutfilec                 C  s   d|d|gS )Nz-MDz-MQr6   r3   r[   r\   r6   r6   r7   get_dependency_gen_args^      z$NasmCompiler.get_dependency_gen_argswork_direnvironment'Environment'Nonec                 C  ,   | j jdvrtd| jd| j j dd S N>   x86_64x86ASM compiler  does not support  CPU familyr%   Z
cpu_familyr   r0   r3   r`   ra   r6   r6   r7   sanity_checka      zNasmCompiler.sanity_check	buildtypec                 C     g S rQ   r6   r3   ro   r6   r6   r7   get_buildtype_argse      zNasmCompiler.get_buildtype_argsc                 C  rp   rQ   r6   r;   r6   r6   r7   get_pic_argsi   r=   zNasmCompiler.get_pic_argspath	is_systemc                 C     |sd}d| gS N.-Ir6   r3   ru   rv   r6   r6   r7   get_include_argsl      
zNasmCompiler.get_include_argsparameter_list	build_dirc              
   C  T   t |D ]#\}}|d d dkr'|d d tjtj||dd   ||< q|S Nr   rz   	enumerateosru   normpathjoinr3   r~   r   idxir6   r6   r7   &compute_parameters_with_absolute_pathsq   
   .z3NasmCompiler.compute_parameters_with_absolute_pathscrt_valc                 C  rp   rQ   r6   r3   r   ro   r6   r6   r7   get_crt_compile_argsx   r=   z!NasmCompiler.get_crt_compile_argsc                 C  s    | j  sg S | j| || S rQ   )r%   r@   r   Zget_crt_valr   r6   r6   r7   get_crt_link_args~   s   
zNasmCompiler.get_crt_link_argsNNFr   r   r    r   r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r8   r,   r8   r   rH   r"   r8   r   )rC   r   r8   r   rP   r"   r8   r   rT   r,   r8   r   r8   r"   r[   r"   r\   r"   r8   r   r`   r"   ra   rb   r8   rc   ro   r"   r8   r   ru   r"   rv   r,   r8   r   r~   r   r   r"   r8   r   r   r"   ro   r"   r8   r   )__name__
__module____qualname__languager0   r   __annotations__r/   r<   rD   rF   rL   rO   rS   rX   rZ   r^   rm   rr   rt   r|   r   r   r   __classcell__r6   r6   r4   r7   r      s8   
 















r   c                      sB   e Zd ZdZdddZdd fddZdddZdddZ  ZS )YasmCompileryasmrP   r"   r8   r   c                 C  rp   rQ   r6   rR   r6   r6   r7   rS      rs   z"YasmCompiler.get_optimization_argsTr   r,   c                   s   t  |}t ddg | S )Nz
--internalr   )r.   get_exelistr   )r3   r   r    r4   r6   r7   r      s   zYasmCompiler.get_exelistrT   c                 C  s"   |r| j  rddgS ddgS g S )NrU   nullZdwarf2rV   rW   r6   r6   r7   rX      s
   
zYasmCompiler.get_debug_argsr[   r\   c                 C  s   d|gS )Nz	--depfiler6   r]   r6   r6   r7   r^      rM   z$YasmCompiler.get_dependency_gen_argsr   )T)r   r,   r8   r   r   r   )	r   r   r   r0   rS   r   rX   r^   r   r6   r6   r4   r7   r      s    

r   c                   @  s   e Zd ZdZdZd5ddZd6dd	Zd7ddZd5ddZd5ddZ	d8ddZ
d9ddZd:ddZd;ddZd<d!d"Zd5d#d$Zd=d'd(Zd>d+d,Zd?d.d/Zd@d2d3Zd4S )AMasmCompilermasmmlr8   r   c                 C  rE   )Nz/cr6   r;   r6   r6   r7   get_compile_only_args   rG   z"MasmCompiler.get_compile_only_argsr"   c                 C  r9   )Nmsvcr6   r;   r6   r6   r7   get_argument_syntax   r=   z MasmCompiler.get_argument_syntaxr,   c                 C  r9   r:   r6   r;   r6   r6   r7   r<      r=   z MasmCompiler.needs_static_linkerc                 C  rE   )Nz/nologor6   r;   r6   r6   r7   rD      rG   zMasmCompiler.get_always_argsc                 C  rE   )Nz/WXr6   r;   r6   r6   r7   rF      rG   zMasmCompiler.get_werror_argsrH   c                 C  rI   )Nz/For6   rK   r6   r6   r7   rL      rM   zMasmCompiler.get_output_argsrP   c                 C  rp   rQ   r6   rR   r6   r6   r7   rS      r=   z"MasmCompiler.get_optimization_argsrT   c                 C     |rdgS g S )Nz/Zir6   rW   r6   r6   r7   rX         zMasmCompiler.get_debug_argsr`   ra   rb   rc   c                 C  rd   re   rk   rl   r6   r6   r7   rm      rn   zMasmCompiler.sanity_checkro   c                 C  rp   rQ   r6   rq   r6   r6   r7   rr      rs   zMasmCompiler.get_buildtype_argsc                 C  rp   rQ   r6   r;   r6   r6   r7   rt      r=   zMasmCompiler.get_pic_argsru   rv   c                 C  rw   rx   r6   r{   r6   r6   r7   r|      r}   zMasmCompiler.get_include_argsr~   r   c              
   C  sd   t |D ]+\}}|d d dks|d d dkr/|d d tjtj||dd   ||< q|S )Nr   rz   z/Ir   r   r6   r6   r7   r      s
    .z3MasmCompiler.compute_parameters_with_absolute_pathsr   c                 C  rp   rQ   r6   r   r6   r6   r7   r      r=   z!MasmCompiler.get_crt_compile_argsobjfiler*   c                 C     d S rQ   r6   r3   r   r6   r6   r7   depfile_for_object   r=   zMasmCompiler.depfile_for_objectNr   r   r   r   r   r   r   r   r   r   r   r   r"   r8   r*   )r   r   r   r   r0   r   r   r<   rD   rF   rL   rS   rX   rm   rr   rt   r|   r   r   r   r6   r6   r6   r7   r      s$    













r   c                   @  s   e Zd ZdZdZd1ddZd2dd	Zd2d
dZd3ddZd4ddZ	d5ddZ
d6ddZd7ddZd2dd Zd8d#d$Zd9d'd(Zd:d*d+Zd;d.d/Zd0S )<MasmARMCompilerr   Zarmasmr8   r,   c                 C  r9   r:   r6   r;   r6   r6   r7   r<      r=   z#MasmARMCompiler.needs_static_linkerr   c                 C  rE   )Nz-nologor6   r;   r6   r6   r7   rD      rG   zMasmARMCompiler.get_always_argsc                 C  rp   rQ   r6   r;   r6   r6   r7   rF      r=   zMasmARMCompiler.get_werror_argsrH   r"   c                 C  rI   rJ   r6   rK   r6   r6   r7   rL      rM   zMasmARMCompiler.get_output_argsrP   c                 C  rp   rQ   r6   rR   r6   r6   r7   rS      r=   z%MasmARMCompiler.get_optimization_argsrT   c                 C  r   )NrU   r6   rW   r6   r6   r7   rX      r   zMasmARMCompiler.get_debug_argsr`   ra   rb   rc   c                 C  rd   )N>   aarch64armrh   ri   rj   rk   rl   r6   r6   r7   rm      rn   zMasmARMCompiler.sanity_checkro   c                 C  rp   rQ   r6   rq   r6   r6   r7   rr      rs   z"MasmARMCompiler.get_buildtype_argsc                 C  rp   rQ   r6   r;   r6   r6   r7   rt      r=   zMasmARMCompiler.get_pic_argsru   rv   c                 C  rw   )Nry   z-ir6   r{   r6   r6   r7   r|      r}   z MasmARMCompiler.get_include_argsr~   r   c              
   C  r   r   r   r   r6   r6   r7   r      r   z6MasmARMCompiler.compute_parameters_with_absolute_pathsr   c                 C  rp   rQ   r6   r   r6   r6   r7   r     r=   z$MasmARMCompiler.get_crt_compile_argsr   r*   c                 C  r   rQ   r6   r   r6   r6   r7   r   	  r=   z"MasmARMCompiler.depfile_for_objectNr   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r0   r<   rD   rF   rL   rS   rX   rm   rr   rt   r|   r   r   r   r6   r6   r6   r7   r      s     











r   c                   @  sH   e Zd ZdZ		d!d"ddZd#ddZd$ddZd%ddZd&dd ZdS )'MetrowerksAsmCompilerr   NFr   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   c	           	      C  sF   t | ||||||||	 t|  g g g g g d| _| jd d S )N)r   r   r   r   Z
everythingr   )r   r/   r	   Z	warn_argsZcan_compile_suffixesr1   r2   r6   r6   r7   r/     s   
zMetrowerksAsmCompiler.__init__r   ro   r8   c                 C  rp   rQ   r6   r   r6   r6   r7   r     r=   z*MetrowerksAsmCompiler.get_crt_compile_argsrP   c                 C  rp   rQ   r6   rR   r6   r6   r7   rS   "  r=   z+MetrowerksAsmCompiler.get_optimization_argsc                 C  rp   rQ   r6   r;   r6   r6   r7   rt   %  r=   z"MetrowerksAsmCompiler.get_pic_argsc                 C  r9   r:   r6   r;   r6   r6   r7   r<   (  r=   z)MetrowerksAsmCompiler.needs_static_linkerr   r   r   r   r   r   )	r   r   r   r   r/   r   rS   rt   r<   r6   r6   r6   r7   r     s    


r   c                   @  $   e Zd ZdZdddZdddZdS )MetrowerksAsmCompilerARMZmwasmarminstruction_setr"   r8   T.Optional[T.List[str]]c                 C     t |d S rQ   )r
   getr3   r   r6   r6   r7   get_instruction_set_args/  r_   z1MetrowerksAsmCompilerARM.get_instruction_set_argsr`   ra   rb   rc   c                 C  rd   )N>   r   rh   ri   rj   rk   rl   r6   r6   r7   rm   2  rn   z%MetrowerksAsmCompilerARM.sanity_checkNr   r"   r8   r   r   r   r   r   r0   r   rm   r6   r6   r6   r7   r   ,      
r   c                   @  r   )$MetrowerksAsmCompilerEmbeddedPowerPCZ	mwasmeppcr   r"   r8   r   c                 C  r   rQ   )r   r   r   r6   r6   r7   r   :  r_   z=MetrowerksAsmCompilerEmbeddedPowerPC.get_instruction_set_argsr`   ra   rb   rc   c                 C  rd   )N>   ppcrh   ri   rj   rk   rl   r6   r6   r7   rm   =  rn   z1MetrowerksAsmCompilerEmbeddedPowerPC.sanity_checkNr   r   r   r6   r6   r6   r7   r   7  r   r   ) 
__future__r   r   typingTZmesonlibr   r   r   	compilersr   Zmixins.metrowerksr	   r
   r   TYPE_CHECKINGra   r   Zlinkers.linkersr   r   Z	envconfigr   r   r   r   r   r   r   r   r   r   r6   r6   r6   r7   <module>   s4    h=6