Deduplicate activated configs in the .emscripten file (#198)

While doing so, we:

* keep the latest activation (e.g., the user may have activated latest and then latest-upstream, then the upstream LLVM is what is desired).
* keep the order of keys fixed (so the relative order of lines in the .emscripten file is fixed)

This adds some assertions in the Dockerfile, to verify we have one LLVM_ROOT command, and it is the right one.

Fixes #194
This commit is contained in:
Alon Zakai
2019-01-18 16:29:08 -08:00
committed by GitHub
parent 5a8f59737d
commit ea5d631a54
2 changed files with 19 additions and 5 deletions

View File

@@ -20,6 +20,8 @@ RUN cd /root/ \
&& /root/emsdk/emsdk activate latest-upstream \
&& source /root/emsdk/emsdk_env.sh --build=Release \
&& emcc hello_world.cpp -s WASM_OBJECT_FILES=1 \
&& python -c "import os ; assert open(os.path.expanduser('~/.emscripten')).read().count('LLVM_ROOT') == 1" \
&& python -c "import os ; assert 'upstream' in open(os.path.expanduser('~/.emscripten')).read()" \
&& echo "test fastcomp (waterfall)" \
&& /root/emsdk/emsdk install latest-fastcomp \
&& /root/emsdk/emsdk activate latest-fastcomp \
@@ -28,4 +30,3 @@ RUN cd /root/ \
&& emcc hello_world.cpp -s WASM=0 \
&& echo "test binaryen source build" \
&& /root/emsdk/emsdk install --build=Release binaryen-master-64bit

21
emsdk
View File

@@ -1051,13 +1051,26 @@ def generate_dot_emscripten(active_tools):
if embedded:
cfg += "emsdk_path=os.path.dirname(os.environ.get('EM_CONFIG')).replace('\\\\', '/')\n"
# Different tools may provide the same activated configs; the latest to be
# activated is the relevant one.
activated_keys_in_order = []
activated_key_values = {}
for tool in active_tools:
tool_cfg = tool.activated_config()
if tool_cfg:
tool_cfg = tool_cfg.replace(';', '\n')
if 'SPIDERMONKEY_ENGINE=' in tool_cfg: has_spidermonkey = True
if 'NODE_JS=' in tool_cfg: has_node = True
cfg += tool_cfg + '\n'
for specific_cfg in tool_cfg.split(';'):
name, value = specific_cfg.split('=')
if name not in activated_key_values:
activated_keys_in_order.append(name)
activated_key_values[name] = value
for name in activated_keys_in_order:
if name == 'SPIDERMONKEY_ENGINE':
has_spidermonkey = True
if name == 'NODE_JS':
has_node = True
cfg += name + ' = ' + activated_key_values[name] + '\n'
# These two vars must always be defined, even though they might not exist.
if not has_spidermonkey: cfg += "SPIDERMONKEY_ENGINE = ''\n"