
    eh,                    d   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                  rd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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 d de      Zy)     )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                       e Zd ZU dZdZg g dg dg dg ddZde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d%dZddZd&dZ	 	 	 	 d'dZd(dZd(dZ x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)nonemdmddmtmtdr   crt_argsc	           
         t         	|   ||||||||       d| j                  j                  v r%| j                  j                  t        d             y y )Nlinkb_vscrt)super__init__linkeridbase_optionsaddr   )
selfccacheexelistversionfor_machineinfor(   full_versionis_cross	__class__s
            :/usr/lib/python3/dist-packages/mesonbuild/compilers/asm.pyr'   zNasmCompiler.__init__(   sO     	';fl\deT[[^^#!!)I"67 $    c                     yNT r,   s    r5   needs_static_linkerz NasmCompiler.needs_static_linker0       r6   c                ^   | j                   j                  rdnd}| j                   j                         s| j                   j                         rd}d| }n#| j                   j	                         rd}d}nd}d}d	| | d
| g}| j                   j                  r|j                  d       |S )N6432winWINmachoMACHOelfELFz-fz-Dz-D__x86_64__)r1   	is_64_bit
is_windows	is_cygwin	is_darwinappend)r,   cpuplatdefineargss        r5   get_always_argszNasmCompiler.get_always_args3   s    ii))dt99!TYY%8%8%:D3%[FYY  "DFDFsen6(m499KK'r6   c                    dgS )Nz-Werrorr9   r:   s    r5   get_werror_argszNasmCompiler.get_werror_argsC   
    {r6   c                
    d|gS Nz-or9   r,   
outputnames     r5   get_output_argszNasmCompiler.get_output_argsF       j!!r6   c                F    g }|D ]  }|dk(  r	|j                  |        |S )Nz-pthread)rJ   )r,   rN   outargsargs       r5   unix_args_to_nativez NasmCompiler.unix_args_to_nativeI   s4    ! 	 Cj NN3	  r6   c                    t         |   S N)r   r,   optimization_levels     r5   get_optimization_argsz"NasmCompiler.get_optimization_argsQ   s    %&899r6   c                J    |r | j                   j                         rg S g dS g S )N)-gz-Fdwarfr1   rG   r,   is_debugs     r5   get_debug_argszNasmCompiler.get_debug_argsT   s%    yy##%	((	r6   c                     y)Ndr9   r:   s    r5   get_depfile_suffixzNasmCompiler.get_depfile_suffix[   s    r6   c                    d|d|gS )Nz-MDz-MQr9   r,   	outtargetoutfiles      r5   get_dependency_gen_argsz$NasmCompiler.get_dependency_gen_args^   s    wy11r6   c                    | j                   j                  dvr0t        d| j                  d| j                   j                   d      y N>   x86x86_64ASM compiler  does not support  CPU familyr1   
cpu_familyr   r)   r,   work_direnvironments      r5   sanity_checkzNasmCompiler.sanity_checka   H    99'88&twwkASTXT]T]ThThSiit'uvv 9r6   c                    g S r^   r9   r,   	buildtypes     r5   get_buildtype_argszNasmCompiler.get_buildtype_argse       	r6   c                    g S r^   r9   r:   s    r5   get_pic_argszNasmCompiler.get_pic_argsi       	r6   c                    |sd}d|z   gS N.-Ir9   r,   path	is_systems      r5   get_include_argszNasmCompiler.get_include_argsl       Dt}r6   c           
         t        |      D ]W  \  }}|d d dk(  s|d d t        j                  j                  t        j                  j	                  ||dd              z   ||<   Y |S Nr   r   	enumerateosr   normpathjoinr,   parameter_list	build_diridxis        r5   &compute_parameters_with_absolute_pathsz3NasmCompiler.compute_parameters_with_absolute_pathsq   n    / 	_FC!u}&'ebgg.>.>rww||IWXYZY[W\?].^&^s#	_ r6   c                    g S r^   r9   r,   crt_valr   s      r5   get_crt_compile_argsz!NasmCompiler.get_crt_compile_argsx   r   r6   c                x    | j                   j                         sg S | j                  | j                  ||         S r^   )r1   rG   r"   get_crt_valr   s      r5   get_crt_link_argszNasmCompiler.get_crt_link_args~   s3    yy##%I}}T--gyABBr6   NNFr-   T.List[str]r.   r   r/   strr0   z'MachineChoice'r1   z'MachineInfo'r(   zT.Optional['DynamicLinker']r2   T.Optional[str]r3   boolreturnr   r   r   rV   r   r   r   )rN   r   r   r   r`   r   r   r   rg   r   r   r   r   r   rn   r   ro   r   r   r   r{   r   r|   z'Environment'r   Noner   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )__name__
__module____qualname__languager)   r"   __annotations__r'   r;   rO   rQ   rW   r\   ra   rh   rk   rp   r}   r   r   r   r   r   r   __classcell__r4   s   @r5   r   r      s    H	B ]acg*H&  8<HM8-85B848  /8 BF8 ":2w
:=BMCr6   r   c                  >     e Zd ZdZddZdd fdZd	dZd
dZ xZS )YasmCompileryasmc                    g S r^   r9   r_   s     r5   ra   z"YasmCompiler.get_optimization_args   r   r6   c                F    t         |   |      }t               ddgz   |z   S )Nz
--internalr   )r&   get_exelistr   )r,   r-   r.   r4   s      r5   r   zYasmCompiler.get_exelist   s*    '%f- "lF%;;gEEr6   c                N    |r"| j                   j                         rddgS ddgS g S )Nrc   nulldwarf2re   rf   s     r5   rh   zYasmCompiler.get_debug_args   s/    yy##%f~%(##	r6   c                
    d|gS )Nz	--depfiler9   rm   s      r5   rp   z$YasmCompiler.get_dependency_gen_args   s    W%%r6   r   )T)r-   r   r   r   r   r   )	r   r   r   r)   ra   r   rh   rp   r   r   s   @r5   r   r      s    	BF
&r6   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ddZddZy)MasmCompilermasmmlc                    dgS )Nz/cr9   r:   s    r5   get_compile_only_argsz"MasmCompiler.get_compile_only_args   s	    vr6   c                     y)Nmsvcr9   r:   s    r5   get_argument_syntaxz MasmCompiler.get_argument_syntax   s    r6   c                     yr8   r9   r:   s    r5   r;   z MasmCompiler.needs_static_linker   r<   r6   c                    dgS )Nz/nologor9   r:   s    r5   rO   zMasmCompiler.get_always_args   rR   r6   c                    dgS )Nz/WXr9   r:   s    r5   rQ   zMasmCompiler.get_werror_args   s	    wr6   c                
    d|gS )Nz/For9   rU   s     r5   rW   zMasmCompiler.get_output_args   s    z""r6   c                    g S r^   r9   r_   s     r5   ra   z"MasmCompiler.get_optimization_args   r   r6   c                    |rdgS g S )Nz/Zir9   rf   s     r5   rh   zMasmCompiler.get_debug_args   s    7N	r6   c                    | j                   j                  dvr0t        d| j                  d| j                   j                   d      y rr   rx   rz   s      r5   r}   zMasmCompiler.sanity_check   r~   r6   c                    g S r^   r9   r   s     r5   r   zMasmCompiler.get_buildtype_args   r   r6   c                    g S r^   r9   r:   s    r5   r   zMasmCompiler.get_pic_args   r   r6   c                    |sd}d|z   gS r   r9   r   s      r5   r   zMasmCompiler.get_include_args   r   r6   c           
         t        |      D ]_  \  }}|d d dk(  s	|d d dk(  s|d d t        j                  j                  t        j                  j	                  ||dd              z   ||<   a |S )Nr   r   z/Ir   r   s        r5   r   z3MasmCompiler.compute_parameters_with_absolute_paths   sz    / 	_FC!u}"1&'ebgg.>.>rww||IWXYZY[W\?].^&^s#	_ r6   c                    g S r^   r9   r   s      r5   r   z!MasmCompiler.get_crt_compile_args   r   r6   c                     y r^   r9   r,   objfiles     r5   depfile_for_objectzMasmCompiler.depfile_for_object   r<   r6   Nr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r)   r   r   r;   rO   rQ   rW   ra   rh   r}   r   r   r   r   r   r   r9   r6   r5   r   r      sh    H	B#
w
:=BMr6   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y)MasmARMCompilerr   armasmc                     yr8   r9   r:   s    r5   r;   z#MasmARMCompiler.needs_static_linker   r<   r6   c                    dgS )Nz-nologor9   r:   s    r5   rO   zMasmARMCompiler.get_always_args   rR   r6   c                    g S r^   r9   r:   s    r5   rQ   zMasmARMCompiler.get_werror_args   r   r6   c                
    d|gS rT   r9   rU   s     r5   rW   zMasmARMCompiler.get_output_args   rX   r6   c                    g S r^   r9   r_   s     r5   ra   z%MasmARMCompiler.get_optimization_args   r   r6   c                    |rdgS g S )Nrc   r9   rf   s     r5   rh   zMasmARMCompiler.get_debug_args   s    6M	r6   c                    | j                   j                  dvr0t        d| j                  d| j                   j                   d      y )N>   armaarch64ru   rv   rw   rx   rz   s      r5   r}   zMasmARMCompiler.sanity_check   sH    99'99&twwkASTXT]T]ThThSiit'uvv :r6   c                    g S r^   r9   r   s     r5   r   z"MasmARMCompiler.get_buildtype_args   r   r6   c                    g S r^   r9   r:   s    r5   r   zMasmARMCompiler.get_pic_args   r   r6   c                    |sd}d|z   gS )Nr   z-ir9   r   s      r5   r   z MasmARMCompiler.get_include_args   r   r6   c           
         t        |      D ]W  \  }}|d d dk(  s|d d t        j                  j                  t        j                  j	                  ||dd              z   ||<   Y |S r   r   r   s        r5   r   z6MasmARMCompiler.compute_parameters_with_absolute_paths   r   r6   c                    g S r^   r9   r   s      r5   r   z$MasmARMCompiler.get_crt_compile_args  r   r6   c                     y r^   r9   r   s     r5   r   z"MasmARMCompiler.depfile_for_object	  r<   r6   Nr   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r)   r;   rO   rQ   rW   ra   rh   r}   r   r   r   r   r   r   r9   r6   r5   r   r      s^    H	B"
w
:=BMr6   r   c                  P    e Zd ZdZ	 	 d	 	 	 	 	 	 	 	 	 d	dZd
dZddZddZddZy)MetrowerksAsmCompilerr   Nc	                    t        j                  | ||||||||	       t        j                  |        g g g g g d| _        | j                  j                  d       y )N)r   r   r   r   
everythingr   )r	   r'   r
   	warn_argscan_compile_suffixesr+   )	r,   r-   r.   r/   r0   r1   r(   r2   r3   s	            r5   r'   zMetrowerksAsmCompiler.__init__  sb     	$+tVUackl##D) 4 	!!%%c*r6   c                    g S r^   r9   r   s      r5   r   z*MetrowerksAsmCompiler.get_crt_compile_args  r   r6   c                    g S r^   r9   r_   s     r5   ra   z+MetrowerksAsmCompiler.get_optimization_args"  r   r6   c                    g S r^   r9   r:   s    r5   r   z"MetrowerksAsmCompiler.get_pic_args%  r   r6   c                     yr8   r9   r:   s    r5   r;   z)MetrowerksAsmCompiler.needs_static_linker(  r<   r6   r   r   r   r   r   r   )	r   r   r   r   r'   r   ra   r   r;   r9   r6   r5   r   r     sV    H 8<HM+-+5B+4+  /+ BF+r6   r   c                       e Zd ZdZddZddZy)MetrowerksAsmCompilerARMmwasmarmc                .    t        j                  |d       S r^   )r   getr,   instruction_sets     r5   get_instruction_set_argsz1MetrowerksAsmCompilerARM.get_instruction_set_args/  s    ,00$GGr6   c                    | j                   j                  dvr0t        d| j                  d| j                   j                   d      y )N>   r   ru   rv   rw   rx   rz   s      r5   r}   z%MetrowerksAsmCompilerARM.sanity_check2  G    99w.&twwkASTXT]T]ThThSiit'uvv /r6   Nr  r   r   zT.Optional[T.List[str]]r   r   r   r   r)   r  r}   r9   r6   r5   r  r  ,  s    	BHwr6   r  c                       e Zd ZdZddZddZy)$MetrowerksAsmCompilerEmbeddedPowerPC	mwasmeppcc                .    t        j                  |d       S r^   )r   r  r  s     r5   r  z=MetrowerksAsmCompilerEmbeddedPowerPC.get_instruction_set_args:  s    -11/4HHr6   c                    | j                   j                  dvr0t        d| j                  d| j                   j                   d      y )N>   ppcru   rv   rw   rx   rz   s      r5   r}   z1MetrowerksAsmCompilerEmbeddedPowerPC.sanity_check=  r	  r6   Nr
  r   r  r9   r6   r5   r  r  7  s    	BIwr6   r  ) 
__future__r   r   typingTmesonlibr   r   r   	compilersr	   mixins.metrowerksr
   r   r   TYPE_CHECKINGr|   r   linkers.linkersr   r   	envconfigr   r   r   r   r   r   r   r   r  r  r9   r6   r5   <module>r     s    " 	  I I  p p??)/(' 





4 0 fC8 fCP&< &.98 9z3h 3l. >w4 ww+@ wr6   