
    eCij                        U d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlm	Z	 ddl
mZmZmZmZmZmZmZmZ ddlmZ ddlmZ ddlmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z' ddl(m)Z) dd	lm*Z*m+Z+  ej,        d
          Z-da.dZ/i Z0e1e2e3f         e4d<    e5            Z6e5e2         e4d<   g Z7e8e2         e4d<   d Z9d Z: e)j;                    d             Z<d Z=d Z>d Z?dDdZ@d ZAdEdZBdFdZCd ZDdGdZEd eE_F        dZGd ZHd ZId ZJd  ZKd! ZL e)j;                    d"             ZM e)j;                    dHd$            ZNd% ZOd& ZPd' ZQd( ZRd) ZSdId*ZTdJd+ZUd, ZVd- ZWd. ZXd/ ZYd0 ZZd1 Z[d2 Z\ e)j;                    d3             Z]d4 Z^d5 Z_d6 Z`d7 Zad8 Zbd9 Zcd: Zdd; ZedafdKd<Zgdg fd=Zhd aid> Zjd? Zkd@ ZldLdAZmdB ZndC ZodS )M    N)PIPE   )cacheconfigdiagnosticsjs_optimizerresponse_filesharedutilswebassembly)UNSUPPORTED)settings)CLANG_CC	CLANG_CXXDEBUGEMAREMCCEMRANLIBEMXXLLVM_DWARFDUMPLLVM_NMLLVM_OBJCOPYWASM_LDasmjs_mangle
check_calldemangle_c_symbol_nameexit_with_errorget_emscripten_temp_diris_c_symbolpath_from_root)ToolchainProfiler)WINDOWSrun_processbuildingF}   _is_ar_cacheuser_requested_exportsbinaryen_featuresc                     t          j                     t          j                                        } t
          | d<   t          | d<   t          | d<   t
          | d<   t          | d<   t
          | d<   t          | d<   t          d          | d	<   t          | d
<   t          | d<   d| d<   d| d<   t          j        d          t          j        j        z   t          j        d          z   | d<   t          j                            dd          | d<   t                      | d<   t          j        d          t          j        z   | d         z   | d<   t          j        d          | d<   t          d          | d<   | S )NCCCXXARLDNMLDSHAREDRANLIBtoolsEMSCRIPTEN_TOOLSHOST_CCHOST_CXXz-WHOST_CFLAGSHOST_CXXFLAGSzlocal/lib/pkgconfigzlib/pkgconfigPKG_CONFIG_LIBDIREM_PKG_CONFIG_PATH PKG_CONFIG_PATH
EMSCRIPTENbinPATHzshare/aclocalACLOCAL_PATHemCROSS_COMPILE)r   ensureosenvironcopyr   r   r   r   r   r    r   r   get_sysroot_dirpathpathsepgetenvs    2/b/s/w/ir/x/w/install/emscripten/tools/building.pyget_building_envrL   C   sS   ,...

##d)#e*#d)#d)#d)#j/#h-*733##i.#j/#m#o"23HIIBGO[^c^s  uD  _E  _E  E#:>>*>CC#$&&#l%e,,rz9CKG#f+-o>>#n'--#o	*    c                     dg} t           j        s| dgz  } t           j        rMdt           j        v rt           xj        ddgz  c_        d                    t           j                  }| d|z   gz  } t           j        xdk    r | d	gz  } nd
k    r| dgz  } t           j        rt           j        r| dgz  } n| dgz  } | dgz  } | S )Nz%-combiner-global-alias-analysis=falsez!-enable-emscripten-cxx-exceptionsmain__original_main__main_argc_argv,z#-emscripten-cxx-exceptions-allowed=
emscriptenz-enable-emscripten-sjljwasmz-wasm-enable-sjlj-wasm-use-legacy-eh-wasm-use-legacy-eh=0z-disable-lsr)r   DISABLE_EXCEPTION_CATCHINGEXCEPTION_CATCHING_ALLOWEDjoinSUPPORT_LONGJMPWASM_EXCEPTIONSWASM_LEGACY_EXCEPTIONS)argsalloweds     rK   llvm_backend_argsr_   \   s    
1	2$ 
	, 2011D( > 444)).?AS-TT))hhx:;;G2W<==D 	
())dd	
"##d (& (
$%%dd
&''d >
$	+rM   c                 .    t          | dgz   |           d S )N--relocatable)link_lld)r]   targets     rK   link_to_objectrd      s     
4?##V,,,,,rM   c                     t                      }t          j        D ]0}t          |          }|| v r|                    | |                   }1t          |          S )zVFind the list of the external symbols that are needed by the
  linked side modules.
  )setr   SIDE_MODULE_IMPORTSr   unionsorted)external_symbolsdepssyms      rK   side_module_external_depsrm      s\     
$) / /c
 
%
%C
ZZ(-..d	rM   c                 j   t          j                                        d          j        }dg}|                                 D ]G\  }}|                    d          s-|                    |dd                    |                     Ht          j	        |d                    |                     |S )zoCreate a stub object, based on the JS library symbols and their
  dependencies, that we can pass to wasm-ld.
  zlibemscripten_js_symbols.soz#STUB$: rR   
)
r
   get_temp_filesrH   nameitems
startswithappendrY   r   
write_file)rj   stubfilestubsrs   rk   s        rK   create_stub_objectrz      s     "$$(()FGGL()%$**,, 6 6jdD??3 6lltttSXXd^^^45558TYYu--...	/rM   c                 	    g } rt           j        r[t                      }                                 D ]8}|D ]3}||vr|                    d|z              |                    |           49t                     }|                    |           t           j        s|                    d           t           j        r|                    d           t           j	        r|                    d           t           j
        sEt           j        s9t           j        s-t           j        s!t           j        s|                    d           t           j        r|                    d           t           j        r!t           j        s|                    d           d t           j        D             }d	 |D             } fd
|D             }|t           j        z  }t           j        r'|                    d           |t+                     z  }|D ]?}t           j        r|                    d|            '|                    d|            @|                    d t           j        D                        t           j        st           j        rK|                    d           |                    d           t           j        s|                    d           t           j        rYt           j        r|                    d           n|                    d           t           j        s|                    d           n6|                    d           t           j        r|                    d           t           j        s|ddt           j        z  gz  }t           j        r|dt           j        z  gz  }n|dgz  }t           j        dk    r|dt           j        z  gz  }t           j         dk    r|dt           j         z  gz  }t           j!        rt           j"        s|dgz  }nt           j#        r|dgz  }n|dgz  }t           j$        r|                    d            n|                    d!           t           j        sP|                    d"t           j%        z             t           j$        s"|                    d#t           j&        z             |S )$N--export-if-defined=z--import-undefinedz--import-memoryz--shared-memoryz--strip-debugz--export-dynamicz-u__cxa_atexitc                 0    g | ]}t          |          |S  )r   .0es     rK   
<listcomp>z,lld_flags_for_executable.<locals>.<listcomp>   s#    HHHQQHqHHHrM   c                 ,    g | ]}t          |          S r~   )r   r   s     rK   r   z,lld_flags_for_executable.<locals>.<listcomp>   s!    <<<Q%a((<<<rM   c                     g | ]}|v|	S r~   r~   )r   r   rj   s     rK   r   z,lld_flags_for_executable.<locals>.<listcomp>   s$    AAAQq0@'@'@q'@'@'@rM   z	-Bdynamicz	--export=c              3       K   | ]	}d | V  
dS )r|   Nr~   r   s     rK   	<genexpr>z+lld_flags_for_executable.<locals>.<genexpr>   s+      LLA'A''LLLLLLrM   z--experimental-picz#--unresolved-symbols=import-dynamicz--no-shlib-sigcheckz-sharedz-piez--no-export-dynamicz--export-tablez--growable-tablez-zzstack-size=%sz--max-memory=%dz--no-growable-memoryz--initial-heap=%dz--initial-memory=%dz--entry=_initializez--entry=_emscripten_proxy_mainz
--no-entryz--stack-firstz--no-stack-firstz--table-base=%sz--global-base=%s)'r   INCLUDE_FULL_LIBRARYrf   valuesrv   addrz   ERROR_ON_UNDEFINED_SYMBOLSIMPORTED_MEMORYSHARED_MEMORYGENERATE_DWARFEMIT_SYMBOL_MAPGENERATE_SOURCE_MAPEMIT_NAME_SECTIONASYNCIFYLINKABLELTOEXIT_RUNTIMEEXPORTED_FUNCTIONSREQUIRED_EXPORTSMAIN_MODULErm   extendEXPORT_IF_DEFINEDRELOCATABLEWASM_BIGINTSIDE_MODULEALLOW_TABLE_GROWTH
STACK_SIZEALLOW_MEMORY_GROWTHMAXIMUM_MEMORYINITIAL_HEAPINITIAL_MEMORYSTANDALONE_WASMEXPECT_MAINPROXY_TO_PTHREADSTACK_FIRST
TABLE_BASEGLOBAL_BASE)rj   cmdall_depsrk   depstub	c_exportsexports   `       rK   lld_flags_for_executabler      s   
# $  h"))++  $ 	 	C  JJ-3444
,,s



	 .//DJJt		, %JJ#$$$ "JJ !!! "JJ !!!
 #  $ (  &  	 
 JJ #JJ!"""\ !(/ ! JJ   HH(5HHH)<<)<<<)AAAA)AAA)x(() =JJ{*+;<<<I 2 2f* 2	jj%V%%&&&&	jj0001111**LL1KLLLLLL (X1 (JJ#$$$JJ4555 (
 
jj&''' 
% 	jj	jj (	jj&'''JJ   " %	jj#$$$		 D/H$7788C# &	("99::cc	$%%c""	!H$99::c"$$	#h&==>>c ! '%&&		" 011 	~  #JJJJ!"""		 <JJ 8#66777 <	jj#h&::;;;	*rM   c                 L    t           j                            t                    st	          dt                     d  D              t
          j        r+                     dd                                d           t
          j	        rd vr                     d           t           fdd	D                       r                     d
           t          d|g}t                      D ]	}|d|gz  }
t
          j        r"|ddgz  }t
          j        r|ddgz  }n|ddgz  }t
          j        st
          j        dk    r|ddgz  }t
          j        r|                    d           d vrd vr|t!          |          z  }| z  }t#          |          }t%          |           d S )Nz-linker binary not found in LLVM directory: %sc                     g | ]}|d v|	S ))z--start-groupz--end-groupr~   r   as     rK   r   zlink_lld.<locals>.<listcomp>$  s#    	G	G	GQ&FFF!FFFrM   r   z--whole-archivez--no-whole-archivez--no-fatal-warningsz--fatal-warningsc              3       K   | ]}|v V  	d S Nr~   )r   r   r]   s     rK   r   zlink_lld.<locals>.<genexpr>/  s'      22qd222222rM   )z--strip-allz-sz--keep-section=target_features-oz-mllvmz-wasm-enable-ehrU   rV   rT   z-exception-model=wasmz-mwasm64ra   z-r)rB   rF   existsr   r   r   r   insertrv   STRICTanyr_   r[   r\   rZ   MEMORY64r   'get_command_with_possible_response_filer   )r]   rc   rj   r   r   s   `    rK   rb   rb     s   		 	  NCWMMM
 
H	GT	G	G	G$  &KK$%%%KK$%%%_ $.d::KK"###2222122222 2 	KK0111	$#  aHa=CC 1H'((C& 1	h-..cc	h/00c /!9V!C!CH-..C JJz D  T%5%5#$4555C+#/44#S/////rM   c                 B   t          j        d          }t          t          j        |                     dk    r|dk    s|dk    r| S t
                              d| d         z             t          j        | dd          t          j
                  }| d         d|z   g}|S )	NEM_FORCE_RESPONSE_FILESiX  10zusing response file for %sr   r   @)rB   getenvlenshlexrY   loggerdebugr	   create_response_filer
   TEMP_DIR)r   force_response_filesfilenamenew_cmds       rK   r   r   O  s    #<== 
%*S//d""';s'B'BG[_bGbGbJ,,+c!f4555/ABBII(VS8^$'	.rM   c                     t          j        |           t          | |g|z   }t          |          }t	          ||||           d| v r,t
          j                            |          sJ d|z               d S d S )N)stdoutstderrrJ   cz#emar could not create output file: )r   delete_filer   r   r#   rB   rF   r   )actionoutput_filename	filenamesr   r   rJ   r   s          rK   emarr   d  s    O$$$	v')3#/44#c&S9999F]]7>>/**cc,QTc,ccc* ]ccrM   c                 X    | dk    rdS |dk    rdS |dk    rdS dt          | d           S )	Nr   z-O0r   z-Os   z-Oz-O   )min)	opt_levelshrink_levels     rK   opt_level_to_strr   n  sH    !^^5Q5q5#Iq!!###rM   c                     	 t          j        | |          S # t          j        $ r9}t	          dd                    |j                  |j                   Y d }~d S d }~ww xY w)Nz'%s' failed (%d) )r   run_on_file
subprocessCalledProcessErrorr   rY   r   
returncode)r   passesr   s      rK   run_js_optimizerr   z  st    G#Hf555		& G G G&FFFFFFFFFGs    A.AAc                    t          d          }| }|t          j        st          j                    }|                    dd          j        }t          j        | |           t          |d          5 }	|		                    dt          j        |          z              d d d            n# 1 swxY w Y   |} t          j        || gz   |z   }
|s$t          j        r|
dgz  }
t          j        r|
dgz  }
t          j        r|
d	gz  }
|r=t          j        rt          j        |
           d
S t'          |
t(                    j        S t,          xj        dz  c_        t1          j        |          }d|v rt1          j        |          }|dt,          j        z  z   }t          j                                        |           |
d|gz  }
t          j        rt          j        |
           |S t'          |
           t7          |d|d         z             |S )Nztools/acorn-optimizer.mjs.jsemcc_acorn_info_prefixr   z// EXTRA_INFO: z--closure-friendlyz--export-es6z	--verboser9   r   r   z.jsoz	.jso%d.jsr   z%s.jsr   )r    r
   SKIP_SUBPROCSrr   rH   rs   shutilcopyfileopenwritejsondumpsr   NODE_JSr   MAYBE_CLOSURE_COMPILER
EXPORT_ES6VERBOSEprint_compiler_stager   r   r   acorn_optimizercounterr   
unsuffixednotesave_intermediate)r   r   
extra_inforeturn_output	worker_js	optimizeroriginal_filename
temp_filestempfr   basenameoutput_files                rK   r   r     sU   899)F$8&((J>>%(:>;;@D
OHd###	dC :Agg$*Z"8"88999: : : : : : : : : : : : : : :H)X..7#	  & $	"##c 	nc K=C / !#&&&Rc$'''..Q/00(x))H;)@@@+{+++$	# 
$$$S///K6!9!4555	s   4+B++B/2B/__wasm_call_ctorsc                    dt            d}t          j        |           }d}t          j        sg }g }||v }|r|t           gz  }t          j        rd}dt          j        v rd}||gz  }||gz  }|st                              d           d S dd	                    |          z   g}	|r|	d	d	                    |          z   gz  }	nt          j
        rd
}
nd}
d|
z   d	|
z   g}	t          j        dk    r|	dgz  }	t                              dd	                    |	          z   dz              t          d|||	t          |          }t                              d|z              |                    d          }|r<|r:|                    |d          }t          j                            t                      t          j        | |           d S )NzwasmExports['z']();FrO   rQ   zctor_evaller: no ctorsz--ctors=rR   z--kept-exports=_start_initializer   z--ignore-external-inputz+ctor_evaller: trying to eval global ctors (r   )zwasm-ctor-eval)r]   r   r   z

z
success onr9   )WASM_CALL_CTORSr   	read_filer   r   HAS_MAINWASM_EXPORTSr   inforY   r   
EVAL_CTORSrun_binaryen_commandr   countreplaceremoverw   )js_file	wasm_file
debug_infoCTOR_ADD_PATTERNjshas_wasm_call_ctorsctors
kept_ctorsrO   r]   ctoroutnum_successfuls                rK   
eval_ctorsr!    s   ;_;;;w" 
	! 9EJ*b0 !  e d	x4	4	4!voe TFj kk*+++f%()D 9
 388J#7#7788d ddd0478DA&''D++;chhtnnLsRSSS-y)$W[cmnnn#++fsl99\**. 2+ 2	$b	)	)B  1117BrM   c                      t           j        rt           j        S t          j        d          } t          s|                     dd           | S )Nzgoogle-closure-compilerr   z--max_old_space_size=8192)r   CLOSURE_COMPILERr
   get_npm_cmdr"   r   )r   s    rK   get_closure_compilerr%    sM     #"" 	455#	 0 JJr.///	*rM   c                    | |z   dgz   } 	 t          | t          |          j        }n# t          $ r}|rY d }~dS t	          |t
          j                  r$t          j        	                    |j                   t          j        	                    t          |          dz              t          dt          j        |           z             Y d }~nd }~ww xY wd|vr+|rdS t          dt          j        |           d|           d	S )
N	--version)r   rJ   Frq   z/closure compiler (%s) did not execute properly!zVersion:z0unrecognized closure compiler --version output (z):
T)r#   r   r   	Exception
isinstancer   r   sysr   r   strr   r   rY   )r   r]   rJ   allowed_to_failoutputr   s         rK   check_closure_compilerr.    s-   d
k]"#YTs333:FF	 Y Y Y UUUUU!Z233 !	jqx   JSVVd]###E
SVWXXXXXXXXY v UORWR\]`RaRaRaRacicijkkk	s   ( 
CCBCCc                 ,   t          j                    }t                      }t          || |d          }|s[t	          d | D                       sBt
                              d           |                     d           t          || |d           ||fS )NT)r,  c              3   @   K   | ]}|                     d           V  dS )z
--platformN)ru   r   s     rK   r   z/get_closure_compiler_and_env.<locals>.<genexpr>	  s/      2a2aRS1<<3M3M2a2a2a2a2a2arM   z0falling back to java version of closure compilerz--platform=javaF)r
   env_with_node_in_pathr%  r.  r   r   warningrv   )	user_argsrJ   closure_cmdnative_closure_compiler_workss       rK   get_closure_compiler_and_envr6    s    $&&#$&&+"8iQTfj"k"k"k	& Os2a2aW`2a2a2a/a/a O NNEFFF&''';	3NNNN	c	rM   c                 4   t          |                               dd          } t          |           dk    sJ t          j        d|           }|                    ddd          \  }}}t          |           dt          |           dt          |           S )zRSplit version setting number (e.g. 162000) into versions string (e.g. "16.2.0")
     r   z(\d{2})(\d{2})(\d{2})r   r   r   .)r+  rjustr   rematchgroupint)vmmajorminorrevs        rK   version_splitrD    s     
!ffll1c!	Q1h'++!ggaA&&%JJ	0	0U	0	0c#hh	0	00rM   c                    ddgi d}t           j        t          k    r"t          t           j                  |d         d<   t           j        t          k    r"t          t           j                  |d         d<   t           j        t          k    r"t          t           j                  |d         d<   t           j        t          k    r"t          t           j                  |d         d<   t          j	        |d	
          }t          j                                        d          j        }t          j                                        d          j        }t                              |           t!          j        ||           t          j        d          | d|d|gz   }t          j                    }t)          d          |d<   t+          ||           |S )Nscriptz@babel/preset-env)
sourceTypepresetstargetsrI  chromefirefoxsafarinoder   indentzbabel.jszbabel_config.jsonbabelr   z--config-filenode_modules	NODE_PATHrI   )r   MIN_CHROME_VERSIONr   r+  MIN_FIREFOX_VERSIONMIN_SAFARI_VERSIONrD  MIN_NODE_VERSIONr   r   r
   rr   rH   rs   r   r   r   rw   r$  r1  r    r   )r   r   config_jsonoutfileconfig_filer   rJ   s          rK   	transpilerZ    s    #$ &
  K//"%h&A"B"BF9h![00#&x'C#D#DF9i  K//"/0K"L"LF9h+-- -h.G H HF9f
6!,,,+!##''
338'%''++,?@@E+,,{;,,,7##xwQ\&]]# 	$&&##N33#kSc	.rM   Tc                 R   g }t           j                            d          }|r|t          j        |          z  }|r||z  }t          |          \  }}t          d          g}t          j        r+t          j	        rt          j
        s|t          d          gz  }t          j        r|t          d          gz  }t          j        rt          j        sd t          j        D             t          j        z   }d                    d |D                       }	t!          j                                        dd	
          }
|
                    |	                                           |
                                 ||
j        gz  }t          j        rGt          d          t          j                  }fd|D             }|t          d          g|z   z  }t          j        r(t          d          g}t          d          g}|||z   z  }t          j	        st          j        rUt          d          t           j                                      r't          j                  }fd|D             }||z  }t          j        r|t          d          gz  }d|rdndg}|ddgz  }|ddgz  }|dgz  }|dgz  }|dgz  }t          j        r|                    d           |D ]	}|d|gz  }
||z  }t          j        dk    r|d gz  }d!t          _         ||z   }tC          || |          S )"NEMCC_CLOSURE_ARGSz&src/closure-externs/closure-externs.jsz)src/closure-externs/modularize-externs.jsz,src/closure-externs/audio-worklet-externs.jsc                 ,    g | ]}t          |          S r~   r   )r   is     rK   r   z$closure_compiler.<locals>.<listcomp>U  s    >>>1|A>>>rM   rq   c                     g | ]}d |z  S )z8/**
 * @suppress {duplicate, undefinedVars}
 */
var %s;
r~   r   s     rK   r   z$closure_compiler.<locals>.<listcomp>V  s2      -B  -B  -Btu-kno-o  -B  -B  -BrM   r   emcc_module_exports_r   z)third_party/closure-compiler/node-externsc                 z    g | ]7}|                     d           t          j                            |          8S r   endswithrB   rF   rY   )r   rs   NODE_EXTERNS_BASEs     rK   r   z$closure_compiler.<locals>.<listcomp>a  sJ     - - -d}}U++-BGLL!2D99 - - -rM   z#src/closure-externs/node-externs.jsz!src/closure-externs/v8-externs.jsz+src/closure-externs/spidermonkey-externs.jsz#src/closure-externs/browser-externsc                 z    g | ]7}|                     d           t          j                            |          8S rc  rd  )r   rs   BROWSER_EXTERNS_BASEs     rK   r   z$closure_compiler.<locals>.<listcomp>p  sJ     2 2 2d MM%002&:DAA 2 2 2rM   z&src/closure-externs/dyncall-externs.jsz--compilation_levelADVANCED_OPTIMIZATIONSSIMPLE_OPTIMIZATIONSz--language_inUNSTABLEz--language_outNO_TRANSPILEz--emit_use_strict=falsez---assume_static_inheritance_is_not_used=falsez--charset=UTF8z--jscomp_off=*	--externsr   z--debugF)"rB   rC   rH   r   splitr6  r    r   
MODULARIZEENVIRONMENT_MAY_BE_WEBr   AUDIO_WORKLETr  DECLARE_ASM_MODULE_EXPORTSALIASESrY   r
   rr   r   encodeclosers   ENVIRONMENT_MAY_BE_NODElistdirENVIRONMENT_MAY_BE_SHELLENVIRONMENT_MAY_BE_WORKERrF   isdirDYNCALLSIGNORE_CLOSURE_COMPILER_ERRORSrv   DEBUG_LEVELr   run_closure_cmd)r   advancedextra_closure_argsr3  env_argsr4  rJ   CLOSURE_EXTERNSexportsmodule_exports_suppressionsexports_fileNODE_EXTERNS
V8_EXTERNSSPIDERMONKEY_EXTERNSBROWSER_EXTERNSr]   r   r   rh  rf  s                     @@rK   closure_compilerr  ;  s   )Z^^/00( 'X&&&I $##I1)<<+s $$LMMN/ UX< UXEX U'RSSTTO X'UVVWWO
  +8#F +>>(=>>>AQQG"&))  -B  -B  zA  -B  -B  -B  #C  #C(**..u=S.TTL299;;<<<)**O % ^&'RSS:/00L- - - -l - - -L'LMMNQ]]]O & 9 !DEEFJ*+XYYZz$888O $ )(J ))*OPP	w}})** )
#788o2 2 2 2o 2 2 2o(o R'OPPQQO
X!a!9!9Ka	b$?J
''$^
,,$$
%%$:
;;$ 
$, "KK !!!  a[!DD)$AYKD %*(!d#	h	,	,,rM   c                    | d|gz  } t          j                    fd}t          t          |                     D ]}dD ]}| |         |k    r || |dz                      | |dz   <   )| |                             |dz             rE| |                             dd          d         }d                    | ||          g          | |<                       d          j        }| dt          j
                            |j                  gz  } t          j        s| dd	gz  } t          j        r| d
gz  } | dgz  } t          j        |            t#          | t$          d|j        t&          rdnd          }t)          j        |dz              t,          j        j        d         }|j        dk    rt4                              d           not          |j                                                  dk    rE|d         r=|d         rt4                              d           nt4                              d           t>          dk    r|j        dk    s2t          |j                                                  dk    r|d         rtA          |          !                                "                                }	t          t          |	                    D ]0}tF          j        $                    |dz    d|	|          d           1|j        dk    r^t4                              |j                   d|j         dtK          j        |            }
t          j        r|
dz  }
tM          |
           t          |j                                                  dk    r|d         r|d         r t4                              |j                   nt4                              |j                   t          j        rt4                              d           n%t>          dk    rt4                              d           |d         rtM          d            |S )!N--jsc                 L   t           j                            |                                           rt           j                            |           S                     d          j        }t          j        | |           t           j                            |j	                  S )Nr   )
rB   rF   abspathisasciirH   rs   r   r   relpathtmpdir)r   safe_filename	tempfiless     rK    move_to_safe_7bit_ascii_filenamez9run_closure_cmd.<locals>.move_to_safe_7bit_ascii_filename  sx    	wx  ((** 'W__X&&&MM%((-M
OHm,,,7??=)*:;;;rM   )rm  r  r   =z.cc.jsz--js_output_filez--formattingPRETTY_PRINTz--jscomp_off=checkTypesz--jscomp_off=uselessCodeFz
iso-8859-1utf-8)r   checkrJ   cwdencoding.mapclosurer   zClosure compiler run failed:
enablederrorzPClosure compiler completed with warnings and -Werror=closure enabled, aborting!
z*Closure compiler completed with warnings:
r   rp   rq   zclosure compiler failed (rc: z): z? the error message may be clearer with -g1 and EMCC_DEBUG=2 setz5(rerun with -g1 linker flag for an unminified output)z<(rerun with EMCC_DEBUG=2 enabled to dump Closure input file)z?closure compiler produced warnings and -W=error=closure enabled)'r
   rr   ranger   ru   rn  rY   rH   rs   rB   rF   r  r  r   MINIFY_WHITESPACEWASM2JSr   r#   r   r"   r   r   r   managerwarningsr   r   r  r   stripr2  r   r   read
splitlinesr*  r   r   r   )r   r   rJ   r  r_  r   rX  procclosure_warnings
input_filemsgr  s              @rK   r~  r~    sf   &(	# #%%)< < < < < S?? 	P 	Pa' P P	Q6		55c!a%jAAAE

q6Vc\** Pq6<<Q''*6#C#CH#M#MNOOAP MM(##(' 
bgoogy7GHH	II#		# ,NN++C ( %&&C &''Cc""" 
SUAQls  ]A\h\h  zA  
B  
B  
B$ Gf$%%% (1)< 
_
LL12222
4;!##(8(C#  DllfggggnnBCCC aZZT_))c$+2C2C2E2E.F.F.J.JO_`iOj.Jh$$&&1133J3z??## 6 6	j!a%44:a=4445555	_
LL P$/
O
Oejoo
O
OC! O	NNcC				!!&6y&A!  "ll4;nnT[!!! ! UnnLMMMM	!nnSTTT  YWXXX	.rM   c                    g }t           j        s|                    |sdnd           t           j        ot           j         }|r|                    d           |r@t
                              dd                    |          z              t          | |          } t           j        s|rt          | ||t           j
                   } dg}|r|                    d           t
                              dd                    |          z              t          | |          } t           j
        rt          | |t           j        |          } | S )	NJSDCEAJSDCE--minify-whitespacezrunning cleanup on shell code: r   )r  lastz-running post-meta-DCE cleanup on shell code: )minify_exportsr  )r   r   rv   r  r   r   r   rY   r   metadceMINIFY_WASM_IMPORTS_AND_EXPORTSminify_wasm_imports_and_exportsMINIFY_WASM_EXPORT_NAMES)r  r  expensive_optimizationsr  r   minifys         rK   minify_wasm_jsr    si    &		 H
MM!8F''hGGG%Mh.M*M& )
MM'((( /
LL2SXXf5E5EEFFFgv..G 
	 I  I!#-!)!IIK K Kg zf	 -+,,,llBSXXfEUEUUVVV00g		1 I1'9AIAb=GI I I 
.rM   c                  @    dt           j         dt           j         dgS )Nz--optimize-level=z--shrink-level=z--optimize-stack-ir)r   	OPT_LEVELSHRINK_LEVELr~   rM   rK   get_last_binaryen_optsr  .  s+    
2h0
2
2
3H1
3
3

! !rM   c                 
   t                               d           t          j                    }dd t          j        D             i}t          | ddgd|          }t          j        r| S t          j	        |          }t                              t          t          j                            }|D ]0}	d|	v r*t          |	d                   }
t          j        s|
|v rd|	d	<   1h d
}|D ]+}	d|	v r%|	d         d         |v rt          j        |	d         d<   ,i }i }|D ]U}	d|	v r:|	d         d         }|||	d         <   t          |          t          j        v rd|	d	<   @d|	v r|	d         ||	d         <   V|                    dd          j        }t'          j        |t          j        |d                     d|z   g}|r|t-                      z  }t/          d||||t0                    }g }g }|                                D ]}|                    d          r|                    d                                          }t          j        r|                    d          d         dv rh|                    d          r||         }|                    |           |                    d          r=t          j         r1||         }t          j!        |          r|                    |           |s|s| S dg}t          j"        r|                    d           tF          rPt                               dtI          |                     t                               d tI          |                     ||d!}t          | ||"          S )#Nzrunning meta-DCEr  c                 0    g | ]}t          |          |gS r~   r^  )r   xs     rK   r   zmetadce.<locals>.<listcomp>8  s#    PPPQ\!__a0PPPrM   emitDCEGraphz
--no-printT)r   r   r   root>   fd_readfd_seekfd_syncargs_getfd_closefd_preadfd_write	fd_pwrite	path_open	proc_exit
random_getenviron_getclock_res_getfd_fdstat_getargs_sizes_getclock_time_getenviron_sizes_getimportr   r   rs   z.jsonemcc_dce_graph_r   r   rN  z--graph-file=wasm-metadcer   r   zunused:ro   r   )
wasmMemory	wasmTablezemcc$import$zemcc$export$applyDCEGraphRemovalsr  zunused_imports: %szunused_exports: %s)unusedImportsunusedExportsr   )%r   r   r
   rr   r   r  r   r   r   loadsr'   rh   rf   rg   r   
EXPORT_ALLWASI_MODULE_NAMErH   rs   r   rw   r   r  r  r   r  ru   removeprefixr  r   rn  rv   rr  is_user_exportr  r   r+  )r  r  r  r  r  r   txtgraphrequired_symbolsitemr   WASI_IMPORTSimport_name_mapexport_name_maprs   r  r]   r  unused_importsunused_exportslinenative_namer   s                          rK   r  r  5  s   ,,!"""$&&*PP(:OPPPQ*.,!?t`jkkk# N
*S//%+11#h6R2S2STT  d4DN++f		 *: : :V  ,&  4 4d4DN1-=="3d8nQ // 5 5d4(^Ad&*od6l#	d		x;	;	;V	T		&*8nod6l#	(9	:	:	?$4E!444555
D
 	!$	 %"$$$D^&&!#-$(	* 	* 	*# ..nn - -dy!! -y))//11d 
	 $**S//""59T"T"T		(	( -%d+k****??>** -x/R -%d+ -- 	-



,
,
,	  N#$& )
MM'(((
 <
LL%s>':':;;;
LL%s>':':;;;!/.QQ*	&Z	@	@	@@rM   c                    t                               d           g }|r8t          j        r|                    d           n+|                    d           n|                    d           |t                      z  }t          ||||t                    }d}i }|                    d          D ]C}||v r=|	                                                    |          \  }	}
|	|vs
J d            |
||	<   Dd	g}t          j
        r|                    d
           d|i}t          j        rSd |                                D             }t          j        t          j        d                    |          dz              t!          | ||          S )Nz"minifying wasm imports and exportsz(--minify-imports-and-exports-and-modulesz--minify-imports-and-exportsz--minify-importsr  z => rq   zimports must be uniqueapplyImportAndExportNameChangesr  mappingc                 "    g | ]\  }}| d | S :r~   )r   oldnews      rK   r   z3minify_wasm_imports_and_exports.<locals>.<listcomp>  s&    <<<S^^c^^<<<rM   r  )r   r   r   MINIFY_WASM_IMPORTED_MODULESrv   r  run_wasm_optr   rn  r  r  MINIFICATION_MAPrt   r   rw   rY   r   )r  r  r  r  r]   r  SEPr  r  r  r  r   r   liness                 rK   r  r    s   ,,3444	$ $ , 2
kk<====
kk01111KK"###
 
"
""$Y	4z$OOO# 	#'iioo  d
d{{##C((hc3!9gcl-.& )
MM'(((7#* I<<GMMOO<<<E	X.		%0@0@40GHHH	&Z	@	@	@@rM   c                 j   t                               d           dg}|dk    r|dgz  }|r	|d|z  gz  }t          d|||t                    }t          r?t          j        t          j        	                    t                      d          |           |dk    rg }	|st          j        s|	d	gz  }	|r	|	d
|z  gz  }	t          j        r|	dgz  }	|	rd| d}|                    dd          }|                    dd          }t          j                                        d          j        }
t          j        |
|           t'          |
|	          }
t          j        |
          }|dk    rt          j                                        d          j        }
t+          |
d          5 }|                    |           d d d            n# 1 swxY w Y   t/          |
d          }
t          j        |
          }|                                }|d         dk    r
|d d         }t          j        |           }t3          j        d|          }|st3          j        d|          }t7          |          dk    sJ |d         }|                    |d| d          }| dz   } t          j        | |           | S )Nwasm2jsz--emscriptenr   r   z--symbols-file=%s)r]   r   r   zwasm2js-output.jsr   minifyNameszsymbolMap=%sr  z// EMSCRIPTEN_START_ASM
z// EMSCRIPTEN_END_ASM
z
 function $z
function $z
 }z
}r   r   F)r  r   ;z+[\w\d_$]+\[['"]__wasm2jsInstantiate__['"]\]z![\w\d_$]+\.__wasm2jsInstantiate__r   z(
z
)z.wasm2js.js)r   r   r  r   r   r   rw   rB   rF   rY   r   r   PTHREADSr  r  r
   rr   rH   rs   r   r  r   r   r  r  r;  findallr   )r  r  r   use_closure_compilerr  symbols_filesymbols_file_jsr]   
wasm2js_jsr   r  r  all_jsfindsmarkers                  rK   r  r    s   ,,y
	$]]TFND 1 </00D#Iy)-*4+/1 1 1*  _	RW\\"9";";=PQQS]^^^!^^F 5h/ 5f	 5>O344! (&''f )RzRRRj%%o~FFj%%fe44j"$$((//4dtZ(((dF++d?4((j Q ""&&u--2D	dC Aggj              D5111D&&J !!##J"~crc?j?7##&
*G
P
P%	 IJ?HHE	Uq8&>>&"7
"7"7"788&m#'7F###	.s   &GGGc                 j    t           | |g}|r|dgz  }|r|d |D             z  }t          |           dS )z<Strip DWARF and/or other specified sections from a wasm filez--remove-section=.debug*c                     g | ]}d |z   S )z--remove-section=r~   )r   sections     rK   r   zstrip.<locals>.<listcomp>  s    BBBg')BBBrM   N)r   r   )infilerX  r   sectionsr   s        rK   r  r    sU    	vw'#
 (&''C CBBBBBBCS/////rM   c                    t           j        }|sQt          j                            |t          j                            |                     }t          j        |          }t          j	        | |           t          || d           d}|                    d          }t          j        t          |                    |z   }t          |          t          |          z   }t          | d          5 }|                    d           |                    t          j        |                     |                    |           |                    |           d d d            d S # 1 swxY w Y   d S )NT)r   s   external_debug_infor  ab    )r   SEPARATE_DWARF_URLrB   rF   r  dirnamer   normalize_pathr   mover  rt  r   to_lebr   r   r   )r  wasm_file_with_dwarfembedded_pathsection_namefilename_bytescontentssection_sizer  s           rK   emit_debug_on_sider    s   --	 8GOO$8$&GOOI$>$>@ @M (77M+i-...it4444 ,, ''00.N 3 344~E(\""S]]2,It GGENNNGGK|,,---GGLGGH	                 s   1A'E%%E),E)c                 X    t                               d           t          | dg          S )Nz'enforcing little endian heap byte orderlittleEndianHeapr   r   r   r  s    rK   little_endian_heapr  '  s)    ,,8999	#5"6	7	77rM   c                 t    t           j        rJ t                              d           t	          | dg          S )Nz+supporting wasm memory growth with pthreadsgrowableHeap)r   GROWABLE_ARRAYBUFFERSr   r   r   r  s    rK   apply_wasm_memory_growthr"  ,  s7    +++	+,,<===	>"2	3	33rM   c                 X    t                               d           t          | dg          S )Nzusing unsigned pointers in JSunsignPointersr  r  s    rK   use_unsigned_pointers_in_jsr%  2  s)    ,,.///	#3"4	5	55rM   c                 X    t                               d           t          | dg          S )Nz)instrumenting JS memory accesses for ASanasanifyr  r  s    rK   instrument_js_for_asanr(  7  s'    ,,:;;;	9+	.	..rM   c                 X    t                               d           t          | dg          S )Nz.instrumenting JS memory accesses for SAFE_HEAPsafeHeapr  r  s    rK   instrument_js_for_safe_heapr+  <  s'    ,,?@@@	:,	/	//rM   c                    t          j        |           5 }|                                D ]y}|j        t           j        j        k    r[|                    |j                   |                                dk    r(i }|	                                |j        |j
        z   k     r|                                }|                                }|	                                |z   }|t           j        j        k    rc|                                }t          |          D ]/}|                                }	|                                }
|
||	<   0|c cd d d            S |                    |           |	                                |j        |j
        z   k     |c cd d d            S {	 d d d            d S # 1 swxY w Y   d S )Nrs   )r   Moduler
  typeSecTypeCUSTOMseekoffsetread_stringtellsize	read_ulebNameTypeFUNCTIONr  )r  moduler  name_map	name_typesubsection_sizesubsection_end	num_names_idrs   s              rK   read_name_sectionrA  A  s    )$$ ??$$  	,3	3	3GN###6))(  ===((**I$..00O#[[]]_<NK0999 **,,iY'' $ $!%%''))++#oo'       ( KK'''  === //-                        s   D7F3=F3#F33F7:F7c                     t                               d           t          |           }|sJ d |                                D             }d                    |          dz   }t          j        ||           d S )Nhandle_final_wasm_symbolsc                 "    g | ]\  }}| d | S r  r~   )r   r@  rs   s      rK   r   z$write_symbol_map.<locals>.<listcomp>`  s&    :::D^^T^^:::rM   rq   )r   r   rA  rt   rY   r   rw   )r  r   namesstringsr  s        rK   write_symbol_maprG  [  su    ,,*+++
I
&
&%	--::EKKMM:::'YYw$&(<*****rM   c                     	 t          | d                              d          }n8# t          $ r+}t                              d| d|           Y d}~dS d}~ww xY w|dv S )zIReturn True if a the given filename is an ar archive, False otherwise.
  rb   z#is_ar failed to test whether file 'z/' is a llvm archive file! Failed on exception: NF)s   !<arch>
s   !<thin>
)r   r  r(  r   r   )r   headerr   s      rK   is_arrL  e  s    (D!!&&q))FF	   
LLLowowowyzyz{|||55555 
/	//s   #& 
A AAc                     t           j                            |           sdS t          | d                              t
          j                  }|t
          j        t
          j        z   k    S )NFrI  )	rB   rF   isfiler   r  r   HEADER_SIZEMAGICVERSION)r   rK  s     rK   is_wasmrR  q  sS    		!	! 5$$$[%<==&	;${'::	::rM   c                 r   t          |           sdS t          j        |           5 }t          |                                          }|j        t          j        j        k    r>|                    |j	                   |
                                dv r	 ddd           dS ddd           n# 1 swxY w Y   dS )zMDetect wasm dynamic libraries by the presence of the "dylink" custom section.F)dylinkzdylink.0NT)rR  r   r-  nextr
  r.  r/  r0  r1  r2  r3  )r   r9  r  s      rK   is_wasm_dylibrV  x  s   			 5(## v6??$$%%G|{*111kk'.!!!					!7	7	7                       
s   A-B,,B03B0c                    t           j                            t           j                            |                    }t	          j        d          }| dt          z   d|d|z   g}t          j        r|dgt          j        z  }t          j	        dk    r|dgz  }|
                    |          }|dk    rt          d	|           d S d S )
Nztools.wasm-sourcemapz--dwarfdump=r   z--basepath=z--prefixr   z	--sourcesr   zwasm-sourcemap failed (%s))rB   rF   r  r  	importlibimport_moduler   r   SOURCE_MAP_PREFIXESr   rO   r   )r  map_file
final_wasm	base_pathwasm_sourcemapsourcemap_cmdrtns          rK   emit_wasm_source_mapra    s     goobgooj99::) *+ABB.!N2( 9,.-
 ! Aj@8#?@@M!Q&&k]"M 	M**#AXX0-@@@@@ XrM   c                  $    t           rt           S dgS )Nz--detect-features)r(   r~   rM   rK   get_binaryen_feature_flagsrc    s      !  rM   c                    t          j        | d          }t          j                            |          st          d|z             	 t          |dgt                    j        S # t          j
        $ r t          d|z             Y d S w xY w)Nwasm-optzKbinaryen executable not found (%s). Please check your binaryen installationr'  r   zOerror running binaryen executable (%s). Please check your binaryen installation)r   find_exerB   rF   r   r   r#   r   r   r   r   )bindiropts     rK   get_binaryen_versionri    s    vz**#			 iadgghhhm[)$777>>		& m m mehkkllllllms   A% %!B
	B
c                 h   t          |           }|r|                                d         }	 |                                d         }t          |          }n*# t          t
          f$ r t          d| d           Y nw xY w|t          t          dz   fvrt          j	        dd|t                     d S d S )Nr   r   z error parsing binaryen version (z*). Please check your binaryen installationr   zversion-checkz-unexpected binaryen version: %s (expected %s))
ri  r  rn  r>  
IndexError
ValueErrorr   EXPECTED_BINARYEN_VERSIONr   r2  )rg  r-  versions      rK   check_binaryenro    s    ''& $  #FkllnnQG'llGG
j	! k k kiviiijjjjjk
 .0IA0MNNN)XZac|}}}}} ONs   )A $A>=A>c                      t           j                            t          j        d          } t
          st          |            da| S )Nr<   T)rB   rF   rY   r   BINARYEN_ROOTbinaryen_checkedro  )r`  s    rK   get_binaryen_binrs    s;    
V)511#	 3	*rM   c                 @   t           j                            t                      |           g}|r||z  }|r||gz  }|rO|d|gz  }t          j        r<d}t          j        r|dz  }t          j        dk    r|dz  }t          d| |            |r|dgz  }|t                      z  }t          j
        r|r| dv r|d	| d
gz  }|d| d
gz  }t          j        rt          j        |           dS t          ||          j        }|rt!          |d| z             d|v a|S )Nr   r9   zZ
note: to disable int64 legalization (which requires changes after link) use -sWASM_BIGINTr   zO
note: -O2+ optimizations always require changes, build with -O0 or -O1 insteadzachanges to the wasm are required after link, but disallowed by ERROR_ON_WASM_CHANGES_AFTER_LINK: z-g)re  zwasm-emscripten-finalizer  z--input-source-map=r  z--output-source-map=r   z%s.wasm)rB   rF   rY   rs  r    ERROR_ON_WASM_CHANGES_AFTER_LINKLEGALIZE_JS_FFIr  r   rc  r   r
   r   r   r   r   r   binaryen_kept_debug_info)	toolr	  rX  r]   r   r   r   extrarets	            rK   r  r    s   	&(($	/	/0#	 4KC F8OC HD'?C0 
He 
	! onn		a		cc  Gz}  G  @E  G  G  H  H  H
 D6MC	#	%	%%#
 ! 2g 2$:r2r2r.&...//C0700011C 
$$$23v&&&-# +gy4/000#s{	*rM   c                 $    t          d| |fd|i|S )Nre  r]   )r  )r	  rX  r]   kwargss       rK   r  r    s!    	j&'	O	O	O	O	OOrM   c                     t           sJ dt          | fz  }t          dz  at          j                            t
          j        |          }t                              d|z             |S )Nzemcc-%02d-%sr   zsaving intermediate file %s)	r   intermediate_counterrB   rF   rY   r
   CANONICAL_TEMP_DIRr   r   )rs   r  r   s      rK   new_intermediate_filenamer    s[    	,,3T::(!W\\&3X>>(,,,x7888	/rM   c                 \    t           r$t          j        | t          |                     dS dS )z(Copy an existing file CANONICAL_TEMP_DIRN)r   r   r   r  )srcrs   s     rK   r   r   	  s5    
 :
OC248899999: :rM   c                 \    t           r$t          j        t          |          |            dS dS )z,Generate a new debug file CANONICAL_TEMP_DIRN)r   r   rw   r  )contentrs   s     rK   write_intermediater    s6    
 ?	.t44g>>>>>? ?rM   c                 6   t          j        t          j                    dd          }t	          |d           t
          j                            |           \  }} |sd }d| g}|r|dgz  }t          j	        t          d          ||t          j        |          S )	NTr   )	sort_keysrO  zsettings.json-z--expand-macrosztools/preprocessor.mjs)inputr   r  )r   r   r   external_dictr  rB   rF   rn  r
   run_js_toolr    r   r   )r   expand_macrossettings_jsonr  r]   s        rK   read_and_preprocessr    s    *X355aPPP-]O444 gmmH--'8	 G
x$  D		N+CDDdR_hrhw  ~E  
F  
F  
F  FrM   c                  j    g } t           j        st           j        r| dgz  } t           j        s| dgz  } | S )Nz1--pass-arg=legalize-js-interface-export-originalsz1--pass-arg=legalize-js-interface-exported-helpers)r   r   r   r   )flagss    rK   js_legalization_pass_flagsr  %  sO    
% CX1 C 
ABBE		 C 
ABBE	,rM   c                      | sg S d| z  }d| gS )Nz%02d%02d%02dz-sMIN_NODE_VERSION=r~   )node_versionstr_node_versions     rK   get_emcc_node_flagsr  6  s.    	 I $l2
2 0
2
2	33rM   r   )NNN)r   )NFF)TN)NN)FN)NNFN)F)prX  r   loggingrB   r;  r   r   r   r*  r   r9   r   r   r   r   r	   r
   r   r   feature_matrixr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    toolchain_profilerr!   r"   r#   	getLoggerr   rr  rm  r&   dictr+  bool__annotations__rf   r'   r(   listrL   r_   profilerd   rm   rz   r   rb   r   r   r   r   r   r   r  r!  r%  r.  r6  rD  rZ  r  r~  r  r  r  r  r  r  r  r  r"  r%  r(  r+  rA  rG  rL  rR  rV  ra  rc  ri  ro  rs  rw  r  r  r~  r  r   r  r  r  r  r~   rM   rK   <module>r     sG          				 				       



      	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ( ' ' ' ' '                                             ( 2 1 1 1 1 1 ' ' ' ' ' ' ' '		:	&	&    "d39o " " "#&355 C ( ( (  " 49 ! ! !  2! ! !H - - -	 	 	
 
 
| | |~/ / / /d  *d d d d	$ 	$ 	$ 	$G G G& & & &R  %
,  ,  , ^    (  1 1 1   : X- X- X- X-vj j j^# # #P! ! !^A ^A ^AB!A !A !AH; ; ; ;|        F8 8 8
4 4 46 6 6
/ / /
0 0 0
  4 + + +	0 	0 	0; ; ;
 
 
A A A2! ! !m m m~ ~ ~    ! & & & &R "&B P P P P    : : :? ? ?F F F F   "4 4 4 4 4rM   