o
    ld                     @  s   d dl mZ 	 d dlZd dlZddlmZ ddlmZ ddlm	Z	 ddlm
Z
 ejr=ddlmZ dd	lmZ dd
lmZ neZdddZG dd deZdS )    )annotationsN   )coredata)mesonlib)	OptionKey)LibType)Environment)Compiler)
DependencyargsT.List[str]returnc                 C  s>   g }| D ]}| dr|ds|d|g7 }q||g7 }q|S )N.js-z--js-library)endswith
startswith)r   Z
final_argsi r   home/ych/rk3568/buildroot/output/rockchip_rk3568_recovery/host/lib/python3.10/site-packages/mesonbuild/compilers/mixins/emscripten.pywrap_js_includes&   s   r   c                      sh   e Zd Zd ddZd!d
dZd" fddZed# fddZd$ fddZe	j
dfd% fddZ  ZS )&EmscriptenMixindirnamestrmoder   c                 C  s0   |dkrd S |dkrd}nd}t j|d| S )N
preprocesslinkZjsozoutput.)ospathjoin)selfr   r   suffixr   r   r   _get_compile_output1   s   z#EmscriptenMixin._get_compile_outputenv'Environment'r   c                 C  s:   dg}|j jtd| j| jd j}|r|d|  |S )Nz-pthreadthread_count)langmachinez-sPTHREAD_POOL_SIZE=)r   optionsr   languagefor_machinevalueappend)r    r#   r   countr   r   r   thread_link_flags>   s
   z!EmscriptenMixin.thread_link_flags%'coredata.MutableKeyedOptionDictType'c                   s6   t   }td| j| jd}||tddi |S )Nr%   )r'   r&   z=Number of threads to use in web assembly, set to 0 to disable)r   N   )superget_optionsr   r*   r)   updater   ZUserIntegerOption)r    optskey	__class__r   r   r2   E   s   
zEmscriptenMixin.get_optionsr   c                      t t |S N)r   r1   native_args_to_unix)clsr   r6   r   r   r:   Q   s   z#EmscriptenMixin.native_args_to_unixdep'Dependency'c                   r8   r9   )r   r1   get_dependency_link_args)r    r<   r6   r   r   r>   U   s   z(EmscriptenMixin.get_dependency_link_argsTlibname
extra_dirslibtyper   lib_prefix_warningboolT.Optional[T.List[str]]c                   s   | dst |||||S tj|rtj|r|gS t|dkr)t	d|D ]}tj
||}tj|r?|g  S q+d S )Nr   r   z]Looking up Emscripten JS libraries requires either an absolute path or specifying extra_dirs.)r   r1   find_libraryr   r   isabsexistslenr   ZEnvironmentExceptionr   )r    r?   r#   r@   rA   rB   dZabs_pathr6   r   r   rE   X   s   


zEmscriptenMixin.find_library)r   r   r   r   r   r   )r#   r$   r   r   )r   r/   r   r   r   r   )r<   r=   r   r   )r?   r   r#   r$   r@   r   rA   r   rB   rC   r   rD   )__name__
__module____qualname__r"   r.   r2   classmethodr:   r>   r   ZPREFER_SHAREDrE   __classcell__r   r   r6   r   r   /   s    

r   rJ   )
__future__r   os.pathr   typingT r   r   r   r   TYPE_CHECKINGenvironmentr   Zcompilers.compilersr	   dependenciesr
   objectr   r   r   r   r   r   <module>   s   
	