o
    Vc'                     @  s   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	m
Z
 ddlmZ d d	lZd d	lZd d
lmZ d dlmZ ejrUd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Zd	S )    )annotations)Path   )CMakeTraceParser   )CMakeSkipCompilerTest)language_mapcmake_get_generator_args)mlogN)Enum)dedent)CMakeExecutor)Environment)Compiler)MachineChoicec                   @  s   e Zd ZdZdZdS )CMakeExecScopeZ
subprojectZ
dependencyN)__name__
__module____qualname__Z
SUBPROJECT
DEPENDENCY r   r   yhome/ych/rk3568/buildroot/output/rockchip_rk3568_recovery/host/lib/python3.10/site-packages/mesonbuild/cmake/toolchain.pyr   !   s    r   c                   @  sp   e Zd Zd*d+ddZd,ddZd-ddZed.ddZd/ddZd/ddZ	d0d d!Z
ed1d&d'Zd2d(d)ZdS )3CMakeToolchainNcmakebin'CMakeExecutor'env'Environment'for_machiner   
exec_scoper   	build_dirr   preload_fileT.Optional[Path]returnNonec                 C  s  || _ || _|| _|| _|| _|| _| j | _|d | _|d | _| j j	| j | _
| j j| j | _| j jj| j | _| j j| j | _| j jj| j | _|  | _| j| j  | j }|tjk| _|tjkrs| jtjkrsd| _| j s{d| _| j sJ d S )NzCMakeMesonToolchainFile.cmakezCMakeCache.txtTF)r   r   r   r   r    r   resolvetoolchain_filecmcache_fileZmachinesminfo
propertiesZcoredata	compilersZ	cmakevarscmake_cache
cmakestateget_defaults	variablesupdateZget_variablesZget_cmake_skip_compiler_testr   ZALWAYS
skip_checkZDEP_ONLYr   r   get_cmake_defaultsis_absolute)selfr   r   r   r   r   r    Zskip_statusr   r   r   __init__&   s.   




zCMakeToolchain.__init__c                 C  sZ   | j j s| j jjdd | j j|  dd | jj|  dd t	| j 
  | j S )NT)parentsutf-8encoding)r%   parentexistsmkdir
write_textgenerater&   generate_cacher
   Zcmd_ci_includeas_posix)r2   r   r   r   writeC   s   zCMakeToolchain.writeT.List[str]c                 C  s2   d| j   g}| jd ur|d| j  g7 }|S )N-DCMAKE_TOOLCHAIN_FILE=z-DMESON_PRELOAD_FILE=)r%   r>   r    )r2   argsr   r   r   get_cmake_argsK   s   
zCMakeToolchain.get_cmake_argsvarsT.Dict[str, T.List[str]]strc                 C  sH   d}|   D ]\}}|d| 7 }|D ]
}|d| d7 }q|d7 }q|S )N zset(z ""z)
)items)rD   reskeyvalueir   r   r   _print_varsQ   s   
zCMakeToolchain._print_varsc                 C  s   t d}| j D ]\}}dd |D | j|< q	| jrB|   |d7 }| jD ]\}}|d| d7 }|| |7 }|d7 }q&|d7 }|d7 }|| | j7 }|d7 }| j }|d urf|t d	|
 7 }|S )	Na              ######################################
            ###  AUTOMATICALLY GENERATED FILE  ###
            ######################################

            # This file was generated from the configuration in the
            # relevant meson machine file. See the meson documentation
            # https://mesonbuild.com/Machine-files.html for more information

            if(DEFINED MESON_PRELOAD_FILE)
                include("${MESON_PRELOAD_FILE}")
            endif()

        c                 S  s   g | ]}| d dqS )\/)replace.0xr   r   r   
<listcomp>m       z+CMakeToolchain.generate.<locals>.<listcomp>z!# CMake compiler state variables
z# -- Variables for language 
z# Variables from meson
zr
                # Load the CMake toolchain file specified by the user
                include("{}")

            )r   r-   rI   r/   update_cmake_compiler_stater+   rN   r(   Zget_cmake_toolchain_fileformatr>   )r2   rJ   rK   rL   langrD   	user_filer   r   r   r<   [   s(   


zCMakeToolchain.generatec              	   C  sL   | j sdS d}| jj D ]\}}|| d|j dd|j d7 }q|S )NrG   :=;rW   )r/   r+   r*   rI   typejoinrL   )r2   rJ   namevr   r   r   r=      s   &zCMakeToolchain.generate_cachec           	      C  s@  i }| j  s	|S dddddd}| jj| jdr-|| jj| jjg|d< | jjg|d	< | jj	r3d
ndg|d< | j 
 }|rD|g|d< ddd}| j D ]O\}}dt|| }| }|sdqNt|dkr| ||d s||d g||d < |dd  }||d |d< |||d < | dkr| |d< qN|S )NZAndroidLinuxWindowsZFreeBSDDarwin)ZandroidlinuxwindowsZfreebsddarwin)Zwhen_building_forZCMAKE_SYSTEM_NAMEZCMAKE_SYSTEM_PROCESSOR84ZCMAKE_SIZEOF_VOID_PZCMAKE_SYSROOTexerF   r"   c                 S  s*   t |  r| S t| }|d u r| S |S N)r   r1   shutilwhich)rk   pr   r   r   make_abs   s   
z-CMakeToolchain.get_defaults.<locals>.make_absz	CMAKE_{}_r   r   r   ZCOMPILER_LAUNCHERZCOMPILERzclang-clZCMAKE_LINKER)rk   rF   r"   rF   )r(   r0   r   Zis_cross_buildr   getr'   systemZ
cpu_familyZ	is_64_bitZget_sys_rootr)   rI   rY   r   upperZget_exelistlenis_cmdline_optionZget_idZget_linker_exelist)	r2   defaultsZ
SYSTEM_MAPZsys_rootrp   rZ   Zcomp_objprefixZexe_listr   r   r   r,      s>   





zCMakeToolchain.get_defaultscompiler
'Compiler'argboolc                 C  s    |   dkr|dS |dS )NmsvcrP   -)Zget_argument_syntax
startswith)rx   rz   r   r   r   ru      s   

z CMakeToolchain.is_cmdline_optionc                 C  s  | j j| j rd S td t| j }dd |D }tdd	| d}t
| jjd }|jddd	 |d
 }|j|dd |d }|jt| jdd t| j || j}| jjd| d g }|| 7 }|t| j7 }|d|  dg7 }| jj||dd\}	}
}|	dkrtd d S || i |j| j _dd |j  D }|D ]&}t!"||# }d| d}|$|i }dg|d| d< | j %|| qd S )NzBCMake Toolchain: Calling CMake once to generate the compiler statec                 S  s   g | ]
}t || qS r   )r   rq   rs   rR   r   r   r   rU      s    z>CMakeToolchain.update_cmake_compiler_state.<locals>.<listcomp>zN
            cmake_minimum_required(VERSION 3.7)
            project(CompInfo  z
)
        Z__CMake_compiler_info__T)r4   exist_okzCMakeLists.txtr5   r6   z!CMakeMesonTempToolchainFile.cmakeF)Zprint_cmoutZalways_capture_stderrrA   .)r   Zdisable_cacher   z:CMake Toolchain: Failed to determine CMake compilers statec                 S  s   i | ]\}}|j |qS r   )ra   )rS   krb   r   r   r   
<dictcomp>   rV   z>CMakeToolchain.update_cmake_compiler_state.<locals>.<dictcomp>ZCMakezCompiler.cmake1ZCMAKE_Z_COMPILER_FORCED)&r+   	languages
issupersetr)   keysr
   debuglistr   r`   r   r   Zscratch_dirr:   r;   r   rN   r-   r   r   versionZset_exec_modeZrequires_stderrZ
trace_argsr	   r>   callwarningparsecacher*   vars_by_filerI   r   rq   rs   
setdefaultr.   )r2   r   Zlang_idsZcmake_contentr   Z
cmake_fileZtemp_toolchain_filetraceZ
cmake_argsrc_Z	raw_tracer   rZ   Z
lang_cmake	file_namerD   r   r   r   rX      sD   



z*CMakeToolchain.update_cmake_compiler_staterl   )r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   )r"   r   )r"   r@   )rD   rE   r"   rF   )r"   rF   )r"   rE   )rx   ry   rz   rF   r"   r{   )r"   r#   )r   r   r   r3   r?   rC   staticmethodrN   r<   r=   r,   ru   rX   r   r   r   r   r   %   s    


	
.
	:r   )
__future__r   pathlibr   Ztraceparserr   Z	envconfigr   commonr   r	   rG   r
   rm   typingTenumr   textwrapr   TYPE_CHECKINGZexecutorr   environmentr   r)   r   Zmesonlibr   r   r   r   r   r   r   <module>   s"   