o
    e                     @  s   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
 ddlmZ dd	lmZmZmZ ejrWd d
lmZ ddlmZ ddlmZ ddlmZ G dd deZG dd deZdddZdS )    )annotationsN   )ExtensionModuleModuleReturnValue
ModuleInfo   )build)mesonlib)CT_INPUT_KW)	KwargInfotyped_kwargstyped_pos_args)	TypedDict)ModuleState)Interpreter)ExternalProgramc                   @  s   e Zd ZU ded< ded< dS )ProjectKwargsz<T.List[T.Union[mesonlib.FileOrString, build.GeneratedTypes]]sourcesz4T.Union[mesonlib.FileOrString, build.GeneratedTypes]constraint_fileN)__name__
__module____qualname____annotations__ r   r   @/usr/lib/python3.10/site-packages/mesonbuild/modules/icestorm.pyr       s   
 r   c                      s   e Zd ZeddddZd fd	d
ZdddZedeee	j
ejejejfdedejddedee	j
ejejejfdddddZ  ZS )IceStormModulezFPGA/Icestormz0.45.0T)Zunstableinterpreterr   returnNonec                   s(   t  | i | _| jd| ji d S )Nproject)super__init__toolsmethodsupdater   )selfr   	__class__r   r   r!   )   s
   
zIceStormModule.__init__stater   c                 C  sT   | d| jd< | d| jd< | d| jd< | d| jd< | d| jd< d S )Nyosyszarachne-pnrarachneicepackiceprogicetime)Zfind_programr"   )r%   r(   r   r   r   detect_tools0   s
   zIceStormModule.detect_toolszicestorm.project)varargsr   )namer   )requiredargsJT.Tuple[str, T.List[T.Union[mesonlib.FileOrString, build.GeneratedTypes]]]kwargsr   r   c                 C  sZ  | j s| | |\}}| jtt||d }t| d|j	|j
|j| j d ddddg|| dg}t| d	|j	|j
|j| j d
 dddddddg|d |g| dg}tj| d|j	|j
|j| j d ddg|g| dgdd}	t| d| j d |	gg |j	|j
|j}
t| d| j d |	gg |j	|j
|j}td |||	|
|gS )Nr   Z_blifr)   z-qz-pzsynth_ice40 -blif @OUTPUT@z@INPUT@z.blifZ_ascr*   z-dZ1kz-oz@OUTPUT@r   z.ascZ_binr+   z.binT)Zbuild_by_defaultz-uploadr,   z-timer-   )r"   r.   r   Zsource_strings_to_fileslist	itertoolschainr   CustomTargetZsubdirZ
subprojectenvironmentZ	RunTargetr   )r%   r(   r2   r4   Z	proj_nameZarg_sourcesZall_sourcesZblif_targetZ
asc_targetZ
bin_targetZupload_targetZtime_targetr   r   r   r   7   sl   






		zIceStormModule.project)r   r   r   r   )r(   r   r   r   )r(   r   r2   r3   r4   r   r   r   )r   r   r   r   INFOr!   r.   r   strr	   ZFiler   r8   ZCustomTargetIndexZGeneratedListr   r
   Zevolver   r   __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   r6   typingT r   r   r   r   r	   Zinterpreter.type_checkingr
   Zinterpreterbase.decoratorsr   r   r   TYPE_CHECKINGtyping_extensionsr   r   r   r   Zprogramsr   r   r   r>   r   r   r   r   <module>   s    ]