o
    e                     @  s   d dl mZ d dlZddlmZmZ ddlmZ ddlm	Z	 ddl
mZmZ ddlmZmZmZmZ d	d
lmZmZ ejrZd	dlmZ ddlmZmZ ddl
mZ G dd dejZdZG dd deZdddZdS )    )annotationsN   )mesonlibmlog)build)Compiler)BT_SOURCES_KWSTATIC_LIB_KWS)	KwargInfopermittedKwargstyped_pos_argstyped_kwargs   )ExtensionModule
ModuleInfo)ModuleState)Interpreterkwargs)SourcesVarargsTypec                   @  sf   e Zd ZU ded< ded< ded< ded< ded< ded< ded	< ded
< ded< ded< ded< dS )CheckKwr   compilerr   mmxssesse2sse3ssse3sse41sse42avxavx2neonN)__name__
__module____qualname____annotations__ r%   r%   </usr/lib/python3.10/site-packages/mesonbuild/modules/simd.pyr      s   
 r   )
r   r   r   r   r   r   r   r   r   r    c                      s   e Zd ZeddddZd fddZed	eed	e	d
e
ddgdd eD dd eD R ddied
heejdddZ  ZS )
SimdModuleZSIMDz0.42.0T)Zunstableinterpreterr   c                   s"   t  | | jd| ji d S )Ncheck)super__init__methodsupdater)   )selfr(   	__class__r%   r&   r+   A   s   
zSimdModule.__init__z
simd.checkr   )requiredc                 C  s   g | ]	}t j|d dqS )N)namedefault)r   Zevolve).0isetr%   r%   r&   
<listcomp>J       zSimdModule.<listcomp>c                 C  s   g | ]	}|j d kr|qS )sources)r2   )r4   ar%   r%   r&   r6   K   r7   Zallow_unknownstater   argsT.Tuple[str]r   r   returnET.List[T.Union[T.List[build.StaticLibrary], build.ConfigurationData]]c                   s~  g }d|v rt dtg tdR  td fdd| D }|d }|d }t }tD ]}	||	 }
|
d u r<q1|	|	}|d u rSt
d|	 d	t
d
 q1|||jd sjt
d|	 d	t
d
 q1t
d|	 d	t
d dd|	 df|jd|	  < |d |	 }| }|
|d< | d }t ||}|| }|||< | j|j|g f|tj}|| q1||gS )Nr8   z2SIMD module does not support the "sources" keywordr   zkwtypes.StaticLibraryc                   s   i | ]\}}| vr||qS r%   r%   )r4   kvZlocal_kwargsr%   r&   
<dictcomp>U   s    z$SimdModule.check.<locals>.<dictcomp>r   zCompiler supports :ZNOZYES1.ZHAVE___args)r   ZMesonExceptionsetISETSTcastitemsr   ZConfigurationDataZget_instruction_set_argsr   logZredZhas_multi_argumentsenvironmentZgreenvaluesuppercopyZget_languageZextract_as_listr(   Zbuild_targetZcurrent_nodeStaticLibraryappend)r.   r:   r;   r   resultZstatic_lib_kwargsprefixr   Zconfr5   r8   Zcompile_argslibnameZ
lib_kwargsZlangarg_keyZold_lang_argsZall_lang_argslibr%   rA   r&   r)   G   s>   

zSimdModule.check)r(   r   )r:   r   r;   r<   r   r   r=   r>   )r!   r"   r#   r   INFOr+   r   strr   r
   r   rI   r	   r   r   Zknown_stlib_kwargsr)   __classcell__r%   r%   r/   r&   r'   =   s    r'   interpr   r=   c                 C  s   t | S )N)r'   )r[   r%   r%   r&   
initialize{   s   r\   )r[   r   r=   r'   ) 
__future__r   typingrJ    r   r   r   	compilersr   Zinterpreter.type_checkingr   r	   Zinterpreterbase.decoratorsr
   r   r   r   r   r   TYPE_CHECKINGr   r(   r   r   Zkwtypesr   rR   r   rI   r'   r\   r%   r%   r%   r&   <module>   s    >