o
    nc                     @  s   d dl mZ d dlmZ d dl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 dd
lmZ ddlmZ ejrMddlmZmZ ddlmZ eejejhdddZG dd deZdS )    )annotations)PathN   )	OptionKey   )DependencyMethods)DependencyException)CMakeDependency)PkgConfigDependency)factory_methods)EnvironmentMachineChoice)DependencyGeneratorenv'Environment'for_machine'MachineChoice'kwargsT.Dict[str, T.Any]methodsT.List[DependencyMethods]returnT.List['DependencyGenerator']c              	   C  s   g }t j|v r4|d| jtd}|rdnd}|tt	|| | dD ]}|tt
|| | q&t j|v rD|ttd| | |S )NstaticZprefer_staticzmkl-static-lp64-iompzmkl-dynamic-lp64-iomp)zscalapack-openmpiZ	scalapackZ	Scalapack)r   	PKGCONFIGgetZcoredataZ
get_optionr   append	functoolspartialMKLPkgConfigDependencyr
   CMAKEr	   )r   r   r   r   
candidatesZ
static_optZmklpkg r#   home/ych/rk3568/buildroot/output/rockchip_rk3568_recovery/host/lib/python3.10/site-packages/mesonbuild/dependencies/scalapack.pyscalapack_factory!   s    

r%   c                      s>   e Zd ZdZ	dd fddZd fddZdddZ  ZS )r   zPkgConfigDependency for Intel MKL.

    MKL's pkg-config is pretty much borked in every way. We need to apply a
    bunch of fixups to make it work correctly.
    Nnamestrr   r   r   r   languageT.Optional[str]c                   s   t jd}|rt| nd | _t j||||d | jr,|j| j	 
 r/| jjdkr/d| _| js4d S | jdks=J d| jdkrx| jddd	}|sj| jrjz| j d
d ddd }W n	 tyi   Y nw |rzt|tssJ || _d S d S d S )NZMKLROOT)r(   gccF z0This should not happen if we didn't return aboveunknownVersion)	pkgconfigdefault_valueZcompilers_and_libraries_r   /r   )osenvironr   r   resolve _MKLPkgConfigDependency__mklrootsuper__init__machinesr   
is_windowsclib_compileridZis_foundversionZget_variableas_posixsplit
IndexError
isinstancer'   )selfr&   r   r   r(   _mv	__class__r#   r$   r6   @   s8   




zMKLPkgConfigDependency.__init__r   Nonec                   sH  t    | jj| j  rd}n| jrd}nd}| jd }| jj	dkrLt
| jD ]"\}}tj|\}}d|v rK|dd}d	tj|| | j|< q)d
}t
| jD ]\}}|dra|d }qS|dkrg nqS| jj| j  st| jr| j|t|d|   | j|d t|d|   d S | j|d | j|d d d S )Nz.libz.ar+   zlib/intel64r*   Zmkl_intel_lp64intelZgfr0   r   )z-Lz-Wlr      Zmkl_scalapack_lp64Zmkl_blacs_intelmpi_lp64z-lmkl_scalapack_lp64z-lmkl_blacs_intelmpi_lp64)r5   	_set_libsr   r7   r   r8   r   r4   r9   r:   	enumerateZ	link_argsr1   pathr=   replacejoin
startswithinsertr'   )r@   suffixlibdiriadirnamebasenamejrC   r#   r$   rH   i   s<   



z MKLPkgConfigDependency._set_libsc                 C  sv   d }| j dkrtj }d|d< | jd| jd| j  g|d\}}}|dkr0td| j|f | 	| 
|| _d S )	NZfortran1ZPKG_CONFIG_ALLOW_SYSTEM_CFLAGSz--cflagsz--define-variable=prefix=)r   r   z$Could not generate cargs for %s:
%s
)r(   r1   r2   copyZ_call_pkgbinr&   r4   r<   r   Z_convert_mingw_pathsZ_split_argsZcompile_args)r@   r   retouterrr#   r#   r$   
_set_cargs   s   

z!MKLPkgConfigDependency._set_cargs)N)r&   r'   r   r   r   r   r(   r)   )r   rE   )__name__
__module____qualname____doc__r6   rH   r[   __classcell__r#   r#   rC   r$   r   8   s    )%r   )
r   r   r   r   r   r   r   r   r   r   )
__future__r   pathlibr   r   r1   typingTZmesonlibr   baser   r   Zcmaker	   r.   r
   factoryr   TYPE_CHECKINGenvironmentr   r   r   r   r    r%   r   r#   r#   r#   r$   <module>   s"   