MCPcopy Create free account
hub / github.com/emscripten-core/emscripten / update_settings_glue

Function update_settings_glue

tools/emscripten.py:104–156  ·  view source on GitHub ↗
(wasm_file, metadata, base_metadata)

Source from the content-addressed store, hash-verified

102
103
104def update_settings_glue(wasm_file, metadata, base_metadata):
105 maybe_disable_filesystem(metadata.imports)
106
107 # Integrate info from backend
108 if settings.SIDE_MODULE:
109 # we don't need any JS library contents in side modules
110 settings.DEFAULT_LIBRARY_FUNCS_TO_INCLUDE = []
111 else:
112 syms = settings.DEFAULT_LIBRARY_FUNCS_TO_INCLUDE + metadata.imports
113 syms = set(syms).difference(metadata.all_exports)
114 settings.DEFAULT_LIBRARY_FUNCS_TO_INCLUDE = sorted(syms)
115 if settings.MAIN_MODULE:
116 settings.WEAK_IMPORTS += webassembly.get_weak_imports(wasm_file)
117
118 if base_metadata:
119 settings.WASM_EXPORTS = base_metadata.all_exports
120 else:
121 settings.WASM_EXPORTS = metadata.all_exports
122 settings.HAVE_EM_ASM = bool(settings.MAIN_MODULE or len(metadata.em_asm_consts) != 0)
123
124 if settings.MAIN_MODULE and settings.ASYNCIFY == 1:
125 # These will be exported from Wasm, but only once we run the asyncify pass.
126 settings.WASM_EXPORTS += ['__asyncify_state', '__asyncify_data']
127
128 # start with the MVP features, and add any detected features.
129 building.binaryen_features = ['--mvp-features', *metadata.features]
130 if settings.ASYNCIFY == 2:
131 building.binaryen_features += ['--enable-reference-types']
132
133 if settings.PTHREADS:
134 assert '--enable-threads' in building.binaryen_features
135 if settings.MEMORY64:
136 assert '--enable-memory64' in building.binaryen_features
137
138 settings.HAS_MAIN = bool(settings.MAIN_MODULE) or settings.PROXY_TO_PTHREAD or settings.STANDALONE_WASM or 'main' in settings.WASM_EXPORTS or '__main_argc_argv' in settings.WASM_EXPORTS
139 if settings.HAS_MAIN and not settings.MINIMAL_RUNTIME:
140 # Dependencies of `callMain`
141 settings.DEFAULT_LIBRARY_FUNCS_TO_INCLUDE += ['$exitJS', '$handleException']
142
143 # When using dynamic linking the main function might be in a side module.
144 # To be safe assume they do take input parameters.
145 settings.MAIN_READS_PARAMS = metadata.main_reads_params or bool(settings.MAIN_MODULE)
146 if settings.MAIN_READS_PARAMS and not settings.STANDALONE_WASM:
147 # callMain depends on this library function
148 settings.DEFAULT_LIBRARY_FUNCS_TO_INCLUDE += ['$stringToUTF8OnStack']
149
150 if settings.STACK_OVERFLOW_CHECK and not settings.SIDE_MODULE:
151 # writeStackCookie and checkStackCookie both rely on emscripten_stack_get_end being
152 # exported. In theory it should always be present since its defined in compiler-rt.
153 assert 'emscripten_stack_get_end' in metadata.function_exports
154
155 for deps in metadata.js_deps:
156 settings.DEFAULT_LIBRARY_FUNCS_TO_INCLUDE.extend(deps.split(','))
157
158
159def apply_static_code_hooks(forwarded_json, code):

Callers 1

emscriptFunction · 0.85

Calls 4

maybe_disable_filesystemFunction · 0.85
extendMethod · 0.80
splitMethod · 0.80
setFunction · 0.50

Tested by

no test coverage detected