
    eCiN                        U 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 ddlm	Z	m
Z
 h dZh dZh dZh d	                    e          Zd
ddddddZdhZg dZddddddddZg ddgddgdd gd!d gd"gd#d gd$gd%d gd&gd'd(gd)gd*d+gd,gd-d.gd/d gd0gd1d gd2gd3d gd4gd5d6gd7gd8d9gd:gd;dd+gd<gd=dgd>gd?dgd@gdAdgdBgdCd dgdDgdEd gdFgdGdHgdId dgdJgdKd gdJgdLdMgdJgdNd dgdOgdPdQgdRdSgdTdSgdUdVgdWgdXd gdYgdZdgd[gd\d dgd[gd]d^gd_d`gdadbgdcd gddgdedVgddgdfd dgdggdhd dgdigdjg dkdlgdmd dgdngdod dgdpgdqdgdpgdrg gdsgdtd9gdugdvd dgdwgdxd gdygdzd gdwgd{dVgdwgd|d dgdwgd}g gdwgd~d gdgdg gdwgdg gdwgdd gdgddVgdgddgdgdd gdgdd dgdgddgdgdg ddwgddgddgdgddgdgdd gdgdd dgdwgddgdgdg gdgdd gdgdd gdgdd gdgdd gdgdd gdgdd gdgdd gdgdd gdgZi Zeeef         ed<   d Z G d d          Z e            ZdS )    N)Any   )diagnostics)exit_with_errorpath_from_root>   
STACK_SIZEGLOBAL_BASETOTAL_STACKINITIAL_HEAPINITIAL_MEMORYMAXIMUM_MEMORYASYNCIFY_STACK_SIZEGL_MAX_TEMP_BUFFER_SIZEMEMORY_GROWTH_LINEAR_STEPDEFAULT_PTHREAD_STACK_SIZEMEMORY_GROWTH_GEOMETRIC_CAP>   USE_ICUUSE_OGGUSE_SDLUSE_ZLIB	USE_BZIP2	USE_REGAL
USE_BULLET
USE_GIFLIB
USE_LIBPNG
USE_MPG123
USE_VORBISUSE_COCOS2DUSE_LIBJPEGUSE_MODPLUGUSE_SDL_GFXUSE_SDL_NETUSE_SDL_TTFUSE_SQLITE3USE_FREETYPEUSE_HARFBUZZUSE_SDL_IMAGEUSE_SDL_MIXERUSE_BOOST_HEADERSSDL2_IMAGE_FORMATSSDL2_MIXER_FORMATS>   	STRICT_JS
EXPORT_ES6
MODULARIZEEXPORT_NAMEBUILD_AS_WORKERSMALL_XHR_CHUNKSDYNAMIC_EXECUTIONPTHREAD_POOL_SIZEINCLUDE_FULL_LIBRARYPTHREAD_POOL_DELAY_LOADPTHREAD_POOL_SIZE_STRICTr    DEFAULT_LIBRARY_FUNCS_TO_INCLUDE>   LTOSTRICTLINKABLEMEMORY64PTHREADS	OPT_LEVELDEBUG_LEVELMAIN_MODULERELOCATABLESIDE_MODULEUSE_PTHREADSWASM_WORKERSSHARED_MEMORYINLINING_LIMITSUPPORT_LONGJMPWASM_EXCEPTIONSWASM_OBJECT_FILESEMSCRIPTEN_TRACINGWASM_LEGACY_EXCEPTIONSDISABLE_EXCEPTION_CATCHINGDISABLE_EXCEPTION_THROWINGEXCEPTION_CATCHING_ALLOWEDzAyou can simply list the libraries directly on the commandline nowz"use -Wclosure/-Wno-closure insteadzJto disable JS type legalization use `-sWASM_BIGINT` or `-sSTANDALONE_WASM`zplease use JSPI_EXPORTS insteadz\under consideration for removal (https://github.com/emscripten-core/emscripten/issues/25262)z] under consideration for removal (https://github.com/emscripten-core/emscripten/issues/25262))RUNTIME_LINKED_LIBSCLOSURE_WARNINGSLEGALIZE_JS_FFIASYNCIFY_EXPORTSr:   r@   SIDE_MODULE_IMPORTS))MINIMAL_RUNTIMEr@   N)WASM2JSr?   (wasm2js does not support dynamic linking)rT   rA   rU   )r.   NO_DECLARE_ASM_MODULE_EXPORTSN)
EVAL_CTORSrT   N)rW   r@   zmovable segments)rW   ASYNCIFYN)PTHREADS_PROFILINGNO_ASSERTIONSz"only works with ASSERTIONS enabled)SOURCE_PHASE_IMPORTSNO_EXPORT_ES6N)STANDALONE_WASMrS   N)r,   r.   N)r,   r-   N)*MINIMAL_RUNTIME_STREAMING_WASM_COMPILATION,MINIMAL_RUNTIME_STREAMING_WASM_INSTANTIATIONzthey are mutually exclusive)r^   SINGLE_FILEN)r_   r`   N)SEPARATE_DWARFrT   zas there is no wasm file)&GL_SUPPORT_AUTOMATIC_ENABLE_EXTENSIONS&NO_GL_SUPPORT_SIMPLE_ENABLE_EXTENSIONSN)r.   NODEJS_CATCH_REJECTIONN)r.   NODEJS_CATCH_EXITN)LEGACY_VM_SUPPORTr;   N)CROSS_ORIGINNO_DYNAMIC_EXECUTIONN)rg   NO_PTHREADSNz4-sSPLIT_MODULE is experimental and subject to changezB-sWASM_JS_TYPES is only supported under a flag in certain browserszH-sSOURCE_PHASE_IMPORTS is experimental and not yet supported in browserszA-sJS_BASE64_API is experimental and not yet supported in browserszI-sGROWABLE_ARRAYBUFFERS is experimental and not yet supported in browserszK-sSUPPORT_BIG_ENDIAN is experimental, not all features are fully supported.zN-sWASM_ESM_INTEGRATION is still experimental and not yet supported in browsers)SPLIT_MODULEWASM_JS_TYPESr[   JS_BASE64_APIGROWABLE_ARRAYBUFFERSSUPPORT_BIG_ENDIANWASM_ESM_INTEGRATIONBINARYENWASMr
   r   BINARYEN_ASYNC_COMPILATIONWASM_ASYNC_COMPILATIONUNALIGNED_MEMORYz1forced unaligned memory not supported in fastcompFORCE_ALIGNED_MEMORYz2forced aligned memory is not supported in fastcompPGOzpgo no longer supportedQUANTUM_SIZE   z*altering the QUANTUM_SIZE is not supportedFUNCTION_POINTER_ALIGNMENT   zoStarting from Emscripten 1.37.29, no longer available (https://github.com/emscripten-core/emscripten/pull/6091)RESERVED_FUNCTION_POINTERSALLOW_TABLE_GROWTHBUILD_AS_SHARED_LIBzoStarting from Emscripten 1.38.16, no longer available (https://github.com/emscripten-core/emscripten/pull/7433)SAFE_SPLIT_MEMORYzStarting from Emscripten 1.38.19, SAFE_SPLIT_MEMORY codegen is no longer available (https://github.com/emscripten-core/emscripten/pull/7465)SPLIT_MEMORYzStarting from Emscripten 1.38.19, SPLIT_MEMORY codegen is no longer available (https://github.com/emscripten-core/emscripten/pull/7465)BINARYEN_METHODznative-wasmzStarting from Emscripten 1.38.23, Emscripten now always builds either to Wasm (-sWASM - default), or to JavaScript (-sWASM=0), other methods are not supported (https://github.com/emscripten-core/emscripten/pull/7836)BINARYEN_TRAP_MODEzKThe wasm backend does not support a trap mode (it always clamps, in effect)PRECISE_I64_MATHz~Starting from Emscripten 1.38.26, PRECISE_I64_MATH is always enabled (https://github.com/emscripten-core/emscripten/pull/7935)MEMFS_APPEND_TO_TYPED_ARRAYSzStarting from Emscripten 1.38.26, MEMFS_APPEND_TO_TYPED_ARRAYS=0 is no longer supported. MEMFS no longer supports using JS arrays for file data (https://github.com/emscripten-core/emscripten/pull/7918)ERROR_ON_MISSING_LIBRARIESz)missing libraries are always an error nowEMITTING_JSzYThe new STANDALONE_WASM flag replaces this (replace EMITTING_JS=0 with STANDALONE_WASM=1)SKIP_STACK_IN_SMALLzOSKIP_STACK_IN_SMALL is no longer needed as the backend can optimize it directly
SAFE_STACKz0Replace SAFE_STACK=1 with STACK_OVERFLOW_CHECK=2MEMORY_GROWTH_STEPr   ELIMINATE_DUPLICATE_FUNCTIONSzLDuplicate function elimination for wasm is handled automatically by binaryen7ELIMINATE_DUPLICATE_FUNCTIONS_DUMP_EQUIVALENT_FUNCTIONS$ELIMINATE_DUPLICATE_FUNCTIONS_PASSES   rH   zxFor LTO, use -flto or -fto=thin instead; to disable LTO, just do not pass WASM_OBJECT_FILES=1 as 1 is the default anyhowTOTAL_MEMORYr   WASM_MEM_MAXr   BINARYEN_MEM_MAXBINARYEN_PASSES z2Use BINARYEN_EXTRA_PASSES to add additional passesSWAPPABLE_ASM_MODULEz3Fully swappable asm modules are no longer supportedASM_JSz&asm.js output is not supported anymoreFINALIZE_ASM_JSASYNCIFY_WHITELISTASYNCIFY_ONLYASYNCIFY_BLACKLISTASYNCIFY_REMOVEEXCEPTION_CATCHING_WHITELISTrM   SEPARATE_ASMz?Separate asm.js only made sense for fastcomp with asm.js outputSEPARATE_ASM_MODULE_NAMEFAST_UNROLLED_MEMCPY_AND_MEMSETz.The wasm backend implements memcpy/memset in CDOUBLE_MODEz3The wasm backend always implements doubles normallyPRECISE_F32)r   r   rz   z2The wasm backend always implements floats normallyALIASING_FUNCTION_POINTERSzZThe wasm backend always uses a single index space for function pointers, in a single TableAGGRESSIVE_VARIABLE_ELIMINATIONz/Wasm ignores asm.js-specific optimization flagsSIMPLIFY_IFSDEAD_FUNCTIONSz7The wasm backend does not support dead function removalWASM_BACKENDzaOnly the wasm backend is now supported (note that setting it as -s has never been allowed anyhow)EXPORT_BINDINGSzNo longer neededRUNNING_JS_OPTSzUFastcomp cared about running JS which could alter asm.js validation, but not upstreamEXPORT_FUNCTION_TABLESBINARYEN_SCRIPTSWARN_UNALIGNEDASM_PRIMITIVE_VARS WORKAROUND_IOS_9_RIGHT_SHIFT_BUGz~Wasm2JS does not support iPhone 4s, iPad 2, iPad 3, iPad Mini 1, Pod Touch 5 (devices with end-of-life at iOS 9.3.5) and olderRUNTIME_FUNCS_TO_IMPORTLIBRARY_DEPS_TO_AUTOEXPORTEMIT_EMSCRIPTEN_METADATAzNo longer supported
SHELL_FILELLD_REPORT_UNDEFINEDz Disabling is no longer supportedMEM_INIT_METHODrB   z&No longer needed. Use -pthread insteadUSES_DYNAMIC_ALLOCz&No longer supported. Use -sMALLOC=noneREVERSE_DEPS)autoallnoneRUNTIME_LOGGINGRUNTIME_DEBUGMIN_EDGE_VERSIONiMIN_IE_VERSION6WORKAROUND_OLD_WEBGL_UNIFORM_UPLOAD_IGNORED_OFFSET_BUGAUTO_ARCHIVE_INDEXESUSE_ES6_IMPORT_METAEXTRA_EXPORTED_RUNTIME_METHODSz1No longer supported, use EXPORTED_RUNTIME_METHODSSUPPORT_ERRNODEMANGLE_SUPPORTMAYBE_WASM2JSz"No longer supported (use -sWASM=2)HEADLESSz@No longer supported, use headless browsers or Node.js with JSDOMUSE_OFFSET_COVERTERz7No longer supported, not needed with modern v8 versionsASYNCIFY_LAZY_LOAD_CODE
USE_WEBGPUzNo longer supported; replaced by --use-port=emdawnwebgpu, which implements a newer (but incompatible) version of webgpu.h - see tools/ports/emdawnwebgpu.pyPROXY_TO_WORKERuser_settingsc                 H    | t           vrt          t          | |           d S d S N)r   setattrsettings)namenew_defaults     2/b/s/w/ir/x/w/install/emscripten/tools/settings.pydefault_settingr     s-    	HdK(((((     c                   L   e Zd ZU i Zeeef         ed<   i Zeee	f         ed<   i Z
eeef         ed<    e            Zee         ed<   i Zeee	f         ed<   i Zeeef         ed<    e            Zee         ed<   d Zd	 Zd
 Zi fdZd Zd Zd Zd Zd Zd Zd Zd Zd ZdS )SettingsManagerattrsdefaultstypesallowed_settingslegacy_settings	alt_namesinternal_settingsc                 r   | j                                          | j                                         | j                                         | j                                         | j                                         | j                                         d }i } |t          d          | j                     |t          d          |           | j                             |           | 	                                 d}dt          j        v r,t          t          j                            d                    }t          D ]}t          |          dk    r6|\  }}d d|z   f| j        |<   || j        |<   || j        |<   | j         |         }n|\  }}}	||	f| j        |<   |d         }|| j         vsJ d	|z              |s
|| j         |<   | j                            |                                           | j                            t#          j        | j                              |r|| j         d
<   d S d S )Nc                 P   t          |           5 }|                                }d d d            n# 1 swxY w Y   |                    dd          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          |d	|i           d S )
Nz//#zvar ([\w\d]+)zattrs["\1"]z=\s+false\s*;z= Falsez=\s+true\s*;z= Truer   )openreadreplaceresubexec)filenamer   fhr   s       r   read_js_settingsz2SettingsManager.__init__.<locals>.read_js_settings  s    >> R7799               !!$,,h(.(CCh()X>>h8<<h
8gu%&&&&&s   155zsrc/settings.jszsrc/settings_internal.jsFEMCC_STRICTrz   zsetting renamed to r   z4legacy setting (%s) cannot also be a regular settingr9   )r   clearr   r   r   r   r   r   updateinfer_typesosenvironintgetLEGACY_SETTINGSlenkeyscopydeepcopy)
selfr   internal_attrsstrict_overridelegacyr   new_namedefault_valuefixed_valueserrs
             r   __init__zSettingsManager.__init__  sT   J   MN  """!!!' ' ' N^$566
CCC^$>??PPPJn%%%O
""BJNN=99::o " ) )	V		h&*,AH,L%MT"'t#'x 
8,"(lC&2C%8T"$Q###%[^b%b### )(
4!!."5"5"7"7888 	Mtz22333 -,dj- -r   c                 r    | j                                         D ]\  }}t          |          | j        |<   d S r   )r   itemstyper   r   keyvalues      r   r   zSettingsManager.infer_typesL  s@    j&&(( $ $
UUdjoo$ $r   c                     | j         S r   r   r   s    r   dictzSettingsManager.dictP  s
    :r   c                    i }|                                                                  D ]5\  }}|| j                            |          k    r|t          vr	||vr|||<   6| j        d         s| j        D ]}| j        |         ||<   |S )Nr9   )r  r   r   r   INTERNAL_SETTINGSr   r   )r   	skip_keysexternal_settingsr   r  s        r   external_dictzSettingsManager.external_dictS  s    iikk'')) ' '
U	$-##C((	(	(S8I-I-IcYbNbNb!&#:h 1 % 1 1#!%C#r   c                 4    | j                                         S r   )r   r   r  s    r   r   zSettingsManager.keys_  s    :??r   c                 t    | j                                          |r| j                             |           d S d S r   )r   r   r   )r   alloweds     r   limit_settingszSettingsManager.limit_settingsb  sF    !!! ,
""7+++++, ,r   c                     | j         r|| j         v sJ d| d            || j        v r| j        |         S t          d| d          )Nz)internal error: attempt to read setting ' ' while in limited settings modezno such setting: '')r   r   AttributeError)r   attrs     r   __getattr__zSettingsManager.__getattr__g  sk     T****,~X\,~,~,~***tzZ7777888r   c                 B     j         r| j         v sJ d| d            |dk    r'|r% j        D ]} j                            |d            | j        v rb j        d         rt	          d|            j        |         \  }}|r||vrt	          d| d| d|            t          j        dd	||           | j        v r j        |         }| j        |<   | j        vrd
|z  }t           j        	                                          
                     j                  }t          j        ||          }	 fd|	D             }	d                    |	          }	|	r|d|	z  z  }|dz  }|dz  }t	          |                                ||           | j        |<   d S )Nz*internal error: attempt to write setting 'r  r9   z&legacy setting used in strict mode: %sz invalid command line setting `-s=z`: zlegacy-settingszuse of legacy setting: %s (%s)z,Attempt to set a non-existent setting: '%s'
c                 &    g | ]}|j         v|S  )r   ).0sr   s     r   
<listcomp>z/SettingsManager.__setattr__.<locals>.<listcomp>  s&    MMM1q8L/L/LQ/L/L/Lr   z, z - did you mean one of %s?
z. - perhaps a typo in emcc's  -sX=Y  notation?
z) - (see src/settings.js for valid values))r   r   r   popr   r   warningr   setr   
differencer   difflibget_close_matchesjoin
check_type)
r   r   r  ar   error_messagealt_namemsg
valid_keyssuggestionss
   `         r   __setattr__zSettingsManager.__setattr__p  s    @T****,Y],,,***xE#    !
q$t### 
H	 H@$GGG$($8$>!lM	 ]%|33[4[[%[[M[[\\\+-MtUbccct~%h"dj4:;dBctz(())44T5KLLj-dJ??kMMMMMMMkIIk**k	 <-;;	>>c	88ccOOD%   DJtr   c           
      D   |dv rd S | j                             |          }|sd S |t          k    r-|dv rt          |          }|dv rt          d|d|d           t	          |          |ur2t          d|d|j        d	t	          |          j        d
           d S d S )N)rF   r3   ra   r8   r.   )r   r   )TrueFalsetruefalsezattempt to set `z` to `z"`; use 1/0 to set boolean settingsz	setting `z` expects `z` but got ``)r   r   boolr   r   __name__)r   r   r  expected_types       r   r#  zSettingsManager.check_type  s    ^^^fJNN4((M f	&U	4	4	4Z^Z^Z^`e`e`efgggE{{-''o$$$H^H^H^`dej`k`k`t`t`tuvvvvv ('r   c                     | j         |         S r   r  )r   r   s     r   __getitem__zSettingsManager.__getitem__  s    :c?r   c                     || j         |<   d S r   r  r   s      r   __setitem__zSettingsManager.__setitem__  s    DJsOOOr   c                 4    t          j        | j                  S r   )r   r   r   r  s    r   backupzSettingsManager.backup  s    =$$$r   c                 :    | j                             |           d S r   )r   r   )r   previouss     r   restorezSettingsManager.restore  s    Jhr   N)r2  
__module____qualname__r   r  strr   __annotations__r   tupler   r  r   r   r   r   r   r   r
  r   r  r  r*  r#  r5  r7  r9  r<  r  r   r   r   r   
  s        %c3h!(De!!!%c3h"suuCH$$$&(/4U
#((( )T#s(^    #SX%%%7- 7- 7-r$ $ $   %' 
 
 
 
  , , ,
9 9 9# # #Jw w w     % % %         r   r   )r   r   r   r   typingr   r   r   utilsr   r   MEM_SIZE_SETTINGSPORTS_SETTINGSJS_ONLY_SETTINGSunionCOMPILE_TIME_SETTINGSDEPRECATED_SETTINGSr  INCOMPATIBLE_SETTINGSEXPERIMENTAL_SETTINGSr   r   r  r?  r@  r   r   r   r  r   r   <module>rL     sp     				 				             2 2 2 2 2 2 2 2     <   $  2 %3 F _<c9nr    
   8 KYfXhgl  ,OOL!O "#;<O !QR	O
 aS"VWO QC*+O aSFGO "A3  )Z  [O "#78O QC  "S  TO 1#   n  oO aS  d  eO   *D  EO B4!noO  !Q  "b  c!O" $aS  +v  w#O$ "A3(ST%O& QCtu'O( QF$uv)O* A3JK+O, 67-O. %q!f.|}/O0 ?  FT  U1O2 ,aS  3A  B3O6 1a&  #]  ^7O8 %&9O: %&;O< )*=O> RS?O@ aS"WXAOB s<=COD A HIEOF ?+GOH ,-IOJ $%ABKOL aS[\MON  "'hiOOP 'A0`aQOR QFQRSOT IIISTUOV "Aq6  ,H  IWOX 'A0abYOZ aSKL[O\ tVW]O^ bT~_O` A 23aOb tucOd s$67eOf "12gOh 1v12iOj B4!34kOl (!  /o  pmOn &89oOp "B4);<qOr  !&;<sOt B4./uOv aS"DEwOx 23yOz aVEF{O| A3 HI}O~ ,,,.@AO@ (AOB *'<=COD 
|%:;EOF >sDYZGOH aV%78IOJ QC!CDKOL &t-`aMON qc01OOP !34QOR qc?@SOT !XYUOV QC!Z[WOX %:;YOZ A3  v  w[O\ 23]Ob !#tCH~ " " ") ) )
e  e  e  e  e  e  e  e P ?r   