o
    Wod&                     @   s   d dl Z d dlZddlmZmZmZ ddlmZ ej	r3d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G dd deZG dd deZG dd deZG dd deZdS )    N   )EnvironmentException	OptionKeyget_meson_command   )Compiler)Environment)DynamicLinker)MachineChoice)MachineInfoz-O0z-O1z-Ox)plain0g123sc                       s  e Zd ZU dZdZg g dg dg dg ddZejeej	e f e
d< 			dGd
ej	e dej	e dedddddejd deje def fddZdefddZdej	e fddZdej	e fddZdedej	e fdd Zd!ej	e dej	e fd"d#Zd$edej	e fd%d&Zd'edej	e fd(d)Zdefd*d+Zd,ed-edej	e fd.d/Zd0ed1d2ddfd3d4Zd5edej	e fd6d7Zdej	e fd8d9Zd:ed;edej	e fd<d=Zd>ej	e d?edej	e fd@dAZdBed5edej	e fdCdDZdBed5edej	e fdEdFZ  ZS )HNasmCompilerZ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)nonemdmddmtmtdcrt_argsNFccacheexelistversionfor_machiner
   infor   linkerr	   full_versionis_crossc	           	   
      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__ whome/ych/rk3568/buildroot/output/rockchip_rk3568_recovery/host/lib/python3.10/site-packages/mesonbuild/compilers/asm.pyr$   %   s   zNasmCompiler.__init__returnc                 C      dS NTr*   r'   r*   r*   r+   needs_static_linker-      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)r'   ZcpuplatZdefineargsr*   r*   r+   get_always_args0   s   

zNasmCompiler.get_always_argsc                 C      dgS )Nz-Werrorr*   r/   r*   r*   r+   get_werror_args@      zNasmCompiler.get_werror_args
outputnamec                 C      d|gS Nz-or*   r'   r<   r*   r*   r+   get_output_argsC      zNasmCompiler.get_output_argsr7   c                 C   s&   g }|D ]}|dkrq| | q|S )Nz-pthread)r5   )r'   r7   Zoutargsargr*   r*   r+   unix_args_to_nativeF   s   z NasmCompiler.unix_args_to_nativeoptimization_levelc                 C   s   t | S N)nasm_optimization_argsr'   rD   r*   r*   r+   get_optimization_argsN   rA   z"NasmCompiler.get_optimization_argsis_debugc                 C   s   |r| j  r	g S g dS g S )N)-gz-FZdwarfr   r4   r'   rI   r*   r*   r+   get_debug_argsQ   s
   
zNasmCompiler.get_debug_argsc                 C   r-   )Ndr*   r/   r*   r*   r+   get_depfile_suffixX   r1   zNasmCompiler.get_depfile_suffix	outtargetoutfilec                 C   s   d|d|gS )Nz-MDz-MQr*   r'   rP   rQ   r*   r*   r+   get_dependency_gen_args[   s   z$NasmCompiler.get_dependency_gen_argswork_direnvironmentr   c                 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   r%   r'   rT   rU   r*   r*   r+   sanity_check^      zNasmCompiler.sanity_check	buildtypec                 C      g S rE   r*   r'   ra   r*   r*   r+   get_buildtype_argsb      zNasmCompiler.get_buildtype_argsc                 C   rb   rE   r*   r/   r*   r*   r+   get_pic_argsf   r1   zNasmCompiler.get_pic_argspath	is_systemc                 C      |sd}d| gS N.-Ir*   r'   rg   rh   r*   r*   r+   get_include_argsi      
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   rl   	enumerateosrg   normpathjoinr'   rp   rq   idxir*   r*   r+   &compute_parameters_with_absolute_pathsn   
   .z3NasmCompiler.compute_parameters_with_absolute_pathscrt_valc                 C   rb   rE   r*   r'   r~   ra   r*   r*   r+   get_crt_compile_argsu   r1   z!NasmCompiler.get_crt_compile_argsc                 C   s   | j  sg S || jv r| j| S |dv sJ d}d}|dkr#d}d}|dkr)g S |dkr2| j| S |d	kr;| j| S |d
krD| j| S |dkrM| j| S |dksSJ td)N>   static_from_buildtypeZfrom_buildtyper   r   r   r   r   r   debugZdebugoptimizedreleaseZminsizeZcustomzBRequested C runtime based on buildtype, but buildtype is "custom".)r   r4   r   r   )r'   r~   ra   Zdbgrelr*   r*   r+   get_crt_link_args{   s,   






zNasmCompiler.get_crt_link_args)NNF)__name__
__module____qualname__languager%   r   TDictstrList__annotations__Optionalboolr$   r0   r8   r:   r@   rC   rH   rM   rO   rS   r_   rd   rf   rn   r|   r   r   __classcell__r*   r*   r(   r+   r      sT   
 

$r   c                       s~   e Zd ZdZdedeje fddZddedeje f fdd	Z	d
edeje fddZ
dededeje fddZ  ZS )YasmCompileryasmrD   r,   c                 C   rb   rE   r*   rG   r*   r*   r+   rH      re   z"YasmCompiler.get_optimization_argsTr   c                    s   t  |}t ddg | S )Nz
--internalr   )r#   get_exelistr   )r'   r   r   r(   r*   r+   r      s   zYasmCompiler.get_exelistrI   c                 C   s"   |r| j  rddgS ddgS g S )NrJ   nullZdwarf2rK   rL   r*   r*   r+   rM      s
   
zYasmCompiler.get_debug_argsrP   rQ   c                 C   s   d|gS )Nz	--depfiler*   rR   r*   r*   r+   rS      rA   z$YasmCompiler.get_dependency_gen_args)T)r   r   r   r%   r   r   r   rH   r   r   rM   rS   r   r*   r*   r(   r+   r      s    $r   c                   @   sh  e Zd ZdZdZdeje fddZdefddZ	de
fdd	Zdeje fd
dZdeje fddZdedeje fddZdedeje fddZde
deje fddZdeddddfddZdedeje fddZdeje fd d!Zd"ed#e
deje fd$d%Zd&eje d'edeje fd(d)Zd*ededeje fd+d,Zd-edeje fd.d/ZdS )0MasmCompilermasmmlr,   c                 C   r9   )Nz/cr*   r/   r*   r*   r+   get_compile_only_args   r;   z"MasmCompiler.get_compile_only_argsc                 C   r-   )Nmsvcr*   r/   r*   r*   r+   get_argument_syntax   r1   z MasmCompiler.get_argument_syntaxc                 C   r-   r.   r*   r/   r*   r*   r+   r0      r1   z MasmCompiler.needs_static_linkerc                 C   r9   )Nz/nologor*   r/   r*   r*   r+   r8      r;   zMasmCompiler.get_always_argsc                 C   r9   )Nz/WXr*   r/   r*   r*   r+   r:      r;   zMasmCompiler.get_werror_argsr<   c                 C   r=   )Nz/For*   r?   r*   r*   r+   r@      rA   zMasmCompiler.get_output_argsrD   c                 C   rb   rE   r*   rG   r*   r*   r+   rH      r1   z"MasmCompiler.get_optimization_argsrI   c                 C      |rdgS g S )Nz/Zir*   rL   r*   r*   r+   rM         zMasmCompiler.get_debug_argsrT   rU   r   Nc                 C   rV   rW   r]   r^   r*   r*   r+   r_      r`   zMasmCompiler.sanity_checkra   c                 C   rb   rE   r*   rc   r*   r*   r+   rd      re   zMasmCompiler.get_buildtype_argsc                 C   rb   rE   r*   r/   r*   r*   r+   rf      r1   zMasmCompiler.get_pic_argsrg   rh   c                 C   ri   rj   r*   rm   r*   r*   r+   rn      ro   zMasmCompiler.get_include_argsrp   rq   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   rl   z/Irt   ry   r*   r*   r+   r|      s
    .z3MasmCompiler.compute_parameters_with_absolute_pathsr~   c                 C   rb   rE   r*   r   r*   r*   r+   r      r1   z!MasmCompiler.get_crt_compile_argsobjfilec                 C      d S rE   r*   r'   r   r*   r*   r+   depfile_for_object   r1   zMasmCompiler.depfile_for_object)r   r   r   r   r%   r   r   r   r   r   r   r0   r8   r:   r@   rH   rM   r_   rd   rf   rn   r|   r   r   r   r*   r*   r*   r+   r      s,    
r   c                   @   sF  e Zd ZdZdZdefddZdeje	 fddZ
deje	 fdd	Zd
e	deje	 fddZde	deje	 fddZdedeje	 fddZde	ddddfddZde	deje	 fddZdeje	 fddZde	dedeje	 fd d!Zd"eje	 d#e	deje	 fd$d%Zd&e	de	deje	 fd'd(Zd)e	deje	 fd*d+ZdS ),MasmARMCompilerr   Zarmasmr,   c                 C   r-   r.   r*   r/   r*   r*   r+   r0      r1   z#MasmARMCompiler.needs_static_linkerc                 C   r9   )Nz-nologor*   r/   r*   r*   r+   r8      r;   zMasmARMCompiler.get_always_argsc                 C   rb   rE   r*   r/   r*   r*   r+   r:      r1   zMasmARMCompiler.get_werror_argsr<   c                 C   r=   r>   r*   r?   r*   r*   r+   r@      rA   zMasmARMCompiler.get_output_argsrD   c                 C   rb   rE   r*   rG   r*   r*   r+   rH      r1   z%MasmARMCompiler.get_optimization_argsrI   c                 C   r   )NrJ   r*   rL   r*   r*   r+   rM      r   zMasmARMCompiler.get_debug_argsrT   rU   r   Nc                 C   rV   )N>   armaarch64rZ   r[   r\   r]   r^   r*   r*   r+   r_     r`   zMasmARMCompiler.sanity_checkra   c                 C   rb   rE   r*   rc   r*   r*   r+   rd     re   z"MasmARMCompiler.get_buildtype_argsc                 C   rb   rE   r*   r/   r*   r*   r+   rf   	  r1   zMasmARMCompiler.get_pic_argsrg   rh   c                 C   ri   )Nrk   z-ir*   rm   r*   r*   r+   rn     ro   z MasmARMCompiler.get_include_argsrp   rq   c              
   C   rr   rs   rt   ry   r*   r*   r+   r|     r}   z6MasmARMCompiler.compute_parameters_with_absolute_pathsr~   c                 C   rb   rE   r*   r   r*   r*   r+   r     r1   z$MasmARMCompiler.get_crt_compile_argsr   c                 C   r   rE   r*   r   r*   r*   r+   r     r1   z"MasmARMCompiler.depfile_for_object)r   r   r   r   r%   r   r0   r   r   r   r8   r:   r@   rH   rM   r_   rd   rf   rn   r|   r   r   r   r*   r*   r*   r+   r      s(    
r   )rv   typingr   Zmesonlibr   r   r   	compilersr   TYPE_CHECKINGrU   r   Zlinkersr	   r
   Z	envconfigr   rF   r   r   r   r   r*   r*   r*   r+   <module>   s*    }=