diff --git a/emsdk b/emsdk index adc1521..f197be0 100755 --- a/emsdk +++ b/emsdk @@ -79,6 +79,22 @@ if not OSX and (platform.system() == 'Linux' or os.name == 'posix'): LINUX = True ENVPATH_SEPARATOR = ':' +UNIX = (OSX or LINUX) + +ARCH = 'unknown' +machine = platform.machine() +if machine.startswith('x64') or machine.startswith('amd64') or machine.startswith('x86_64'): + ARCH = 'x86_64' +elif machine.endswith('86'): + ARCH = 'x86' +elif machine.startswith('aarch64') or machine.lower().startswith('arm64'): + ARCH = 'aarch64' +elif platform.machine().startswith('arm'): + ARCH = 'arm' +else: + print("Warning: unknown machine architecture " + machine) + print() + # Don't saturate all cores to not steal the whole system, but be aggressive. CPU_CORES = max(multiprocessing.cpu_count() - 1, 1) @@ -973,9 +989,19 @@ def build_llvm_tool(tool): enable_assertions = ENABLE_LLVM_ASSERTIONS.lower() == 'on' or (ENABLE_LLVM_ASSERTIONS == 'auto' and build_type.lower() != 'release' and build_type.lower() != 'minsizerel') only_supports_wasm = hasattr(tool, 'only_supports_wasm') - targets_to_build = 'X86' + if ARCH == 'x86' or ARCH == 'x86_64': + targets_to_build = 'X86' + elif ARCH == 'arm': + targets_to_build = 'ARM' + elif ARCH == 'aarch64': + targets_to_build = 'AArch64' + else: + # May have problems with emconfigure + targets_to_build = '' if not only_supports_wasm: - targets_to_build += ';JSBackend' + if targets_to_build != '': + targets_to_build += ';' + targets_to_build += 'JSBackend' args = ['-DLLVM_TARGETS_TO_BUILD=' + targets_to_build, '-DLLVM_INCLUDE_EXAMPLES=OFF', '-DCLANG_INCLUDE_EXAMPLES=OFF', '-DLLVM_INCLUDE_TESTS=' + tests_arg, '-DCLANG_INCLUDE_TESTS=' + tests_arg, '-DLLVM_ENABLE_ASSERTIONS=' + ('ON' if enable_assertions else 'OFF')] if os.environ.get('LLVM_CMAKE_ARGS'): extra_args = os.environ['LLVM_CMAKE_ARGS'].split(',') @@ -1370,11 +1396,17 @@ class Tool(object): else: return [] + def compatible_with_this_arch(self): + if hasattr(self, 'arch'): + if self.arch != ARCH: + return False + return True + def compatible_with_this_os(self): if hasattr(self, 'os'): if self.os == 'all': return True - if (WINDOWS and 'win' in self.os) or (LINUX and ('linux' in self.os or 'unix' in self.os)) or (OSX and ('osx' in self.os or 'unix' in self.os)): + if self.compatible_with_this_arch() and ((WINDOWS and 'win' in self.os) or (LINUX and ('linux' in self.os or 'unix' in self.os)) or (OSX and ('osx' in self.os or 'unix' in self.os))): return True else: return False @@ -1382,16 +1414,16 @@ class Tool(object): if not hasattr(self, 'osx_url') and not hasattr(self, 'windows_url') and not hasattr(self, 'unix_url') and not hasattr(self, 'linux_url'): return True - if OSX and hasattr(self, 'osx_url'): + if OSX and hasattr(self, 'osx_url') and self.compatible_with_this_arch(): return True - if LINUX and hasattr(self, 'linux_url'): + if LINUX and hasattr(self, 'linux_url') and self.compatible_with_this_arch(): return True - if WINDOWS and (hasattr(self, 'windows_url') or hasattr(self, 'windows_install_path')): + if WINDOWS and (hasattr(self, 'windows_url') or hasattr(self, 'windows_install_path')) and self.compatible_with_this_arch(): return True - if (LINUX or OSX) and hasattr(self, 'unix_url'): + if UNIX and hasattr(self, 'unix_url'): return True return hasattr(self, 'url') @@ -1517,7 +1549,7 @@ class Tool(object): return self.osx_url elif LINUX and hasattr(self, 'linux_url'): return self.linux_url - elif (OSX or LINUX) and hasattr(self, 'unix_url'): + elif UNIX and hasattr(self, 'unix_url'): return self.unix_url elif hasattr(self, 'url'): return self.url @@ -2502,16 +2534,22 @@ def main(): if cmd == 'list': print('') - print('The *recommended* precompiled SDK download is %s (%s).' % (find_latest_releases_version(), find_latest_releases_hash())) - print() - print('To install/activate it, use one of:') - print(' latest [default (fastcomp) backend]') - print(' latest-upstream [upstream LLVM wasm backend]') - print('') - print('Those are equivalent to installing/activating the following:') - print(' %s' % find_latest_releases_version()) - print(' %s-upstream' % find_latest_releases_version()) - print('') + if (LINUX or OSX or WINDOWS) and (ARCH == 'x86' or ARCH == 'x86_64'): + print('The *recommended* precompiled SDK download is %s (%s).' % (find_latest_releases_version(), find_latest_releases_hash())) + print() + print('To install/activate it, use one of:') + print(' latest [default (fastcomp) backend]') + print(' latest-upstream [upstream LLVM wasm backend]') + print('') + print('Those are equivalent to installing/activating the following:') + print(' %s' % find_latest_releases_version()) + print(' %s-upstream' % find_latest_releases_version()) + print('') + else: + print('Warning: your platform does not have precompiled SDKs available.') + print('You may install components from source.') + print('') + print('All recent (non-legacy) installable versions are:') releases_versions = sorted(load_releases_versions()) releases_versions.reverse() @@ -2612,7 +2650,7 @@ def main(): tools_to_activate = process_tool_list(tools_to_activate, log_errors=True) env_string = construct_env(tools_to_activate, len(sys.argv) >= 3 and 'perm' in sys.argv[2]) open(outfile, 'w').write(env_string) - if LINUX or OSX: + if UNIX: os.chmod(outfile, 0o755) return 0 elif cmd == 'update': diff --git a/emsdk_manifest.json b/emsdk_manifest.json index f1d69e1..23730ff 100644 --- a/emsdk_manifest.json +++ b/emsdk_manifest.json @@ -4,6 +4,7 @@ "id": "clang", "version": "3.2", "bitness": 32, + "arch": "x86", "windows_url": "clang_3.2_32bit.zip", "activated_path": "%installation_dir%", "activated_cfg": "LLVM_ROOT='%installation_dir%'", @@ -14,6 +15,7 @@ "id": "clang", "version": "3.2", "bitness": 64, + "arch": "x86_64", "windows_url": "clang_3.2_64bit.zip", "activated_path": "%installation_dir%/bin", "activated_cfg": "LLVM_ROOT='%installation_dir%/bin'", @@ -24,6 +26,7 @@ "id": "clang", "version": "3.3", "bitness": 32, + "arch": "x86", "windows_url": "clang_3.3_32bit.zip", "activated_path": "%installation_dir%", "activated_cfg": "LLVM_ROOT='%installation_dir%'", @@ -34,6 +37,7 @@ "id": "clang", "version": "3.3", "bitness": 64, + "arch": "x86_64", "windows_url": "clang_3.3_64bit.zip", "activated_path": "%installation_dir%", "activated_cfg": "LLVM_ROOT='%installation_dir%'", @@ -44,6 +48,7 @@ "id": "clang", "version": "3.2", "bitness": 64, + "arch": "x86_64", "osx_url": "clang%2Bllvm-3.2-x86_64-apple-darwin11.tar.gz", "activated_path": "%installation_dir%/bin", "activated_cfg": "LLVM_ROOT='%installation_dir%/bin'", @@ -54,6 +59,7 @@ "id": "clang", "version": "3.3", "bitness": 64, + "arch": "x86_64", "osx_url": "clang%2Bllvm-3.3-x86_64-apple-darwin12.tar.gz", "activated_path": "%installation_dir%/bin", "activated_cfg": "LLVM_ROOT='%installation_dir%/bin'", @@ -94,6 +100,7 @@ "id": "clang", "version": "nightly-e%nightly-llvm-64bit%", "bitness": 64, + "arch": "x86_64", "append_bitness": false, "windows_url": "llvm/nightly/win_64bit/emscripten-llvm-e%nightly-llvm-64bit%.zip", "osx_url": "llvm/nightly/osx_64bit/emscripten-llvm-e%nightly-llvm-64bit%.tar.gz", @@ -163,6 +170,7 @@ "id": "releases", "version": "upstream-%releases-tag%", "bitness": 64, + "arch": "x86_64", "linux_url": "https://storage.googleapis.com/webassembly/emscripten-releases-builds/linux/%releases-tag%/wasm-binaries.tbz2", "osx_url": "https://storage.googleapis.com/webassembly/emscripten-releases-builds/mac/%releases-tag%/wasm-binaries.tbz2", "windows_url": "https://storage.googleapis.com/webassembly/emscripten-releases-builds/win/%releases-tag%/wasm-binaries.zip", @@ -177,6 +185,7 @@ "id": "releases", "version": "fastcomp-%releases-tag%", "bitness": 64, + "arch": "x86_64", "linux_url": "https://storage.googleapis.com/webassembly/emscripten-releases-builds/linux/%releases-tag%/wasm-binaries.tbz2", "osx_url": "https://storage.googleapis.com/webassembly/emscripten-releases-builds/mac/%releases-tag%/wasm-binaries.tbz2", "windows_url": "https://storage.googleapis.com/webassembly/emscripten-releases-builds/win/%releases-tag%/wasm-binaries.zip", @@ -192,6 +201,7 @@ "id": "clang", "version": "e1.13.0", "bitness": 64, + "arch": "x86_64", "windows_url": "emscripten-clang_e1.13.0.zip", "osx_url": "emscripten-clang_e1.13.0.tar.gz", "activated_path": "%installation_dir%", @@ -203,6 +213,7 @@ "id": "clang", "version": "e1.13.1", "bitness": 64, + "arch": "x86_64", "windows_url": "emscripten-clang_e1.13.1.zip", "osx_url": "emscripten-clang_e1.13.1.tar.gz", "activated_path": "%installation_dir%", @@ -214,6 +225,7 @@ "id": "clang", "version": "e1.16.0", "bitness": 64, + "arch": "x86_64", "windows_url": "emscripten-clang_e1.16.0.zip", "osx_url": "emscripten-clang_e1.16.0.tar.gz", "activated_path": "%installation_dir%", @@ -225,6 +237,7 @@ "id": "clang", "version": "e1.21.0", "bitness": 64, + "arch": "x86_64", "windows_url": "emscripten-clang_e1.21.0.zip", "osx_url": "emscripten-clang_e1.21.0.tar.gz", "activated_path": "%installation_dir%", @@ -236,6 +249,7 @@ "id": "clang", "version": "e1.22.0", "bitness": 64, + "arch": "x86_64", "windows_url": "emscripten-clang_e1.22.0.zip", "osx_url": "emscripten-clang_e1.22.0.tar.gz", "activated_path": "%installation_dir%", @@ -247,6 +261,7 @@ "id": "clang", "version": "e1.25.0", "bitness": 64, + "arch": "x86_64", "windows_url": "emscripten-clang_e1.25.0.zip", "osx_url": "emscripten-clang_e1.25.0.tar.gz", "activated_path": "%installation_dir%", @@ -258,6 +273,7 @@ "id": "clang", "version": "e1.27.0", "bitness": 64, + "arch": "x86_64", "windows_url": "emscripten-clang_e1.27.0.zip", "osx_url": "emscripten-clang_e1.27.0.tar.gz", "activated_path": "%installation_dir%", @@ -269,6 +285,7 @@ "id": "clang", "version": "e1.29.0", "bitness": 64, + "arch": "x86_64", "windows_url": "emscripten-clang_e1.29.0.zip", "osx_url": "emscripten-clang_e1.29.0.tar.gz", "activated_path": "%installation_dir%", @@ -280,6 +297,7 @@ "id": "clang", "version": "e1.30.0", "bitness": 64, + "arch": "x86_64", "windows_url": "emscripten-clang_e1.30.0.zip", "osx_url": "emscripten-clang_e1.30.0.tar.gz", "activated_path": "%installation_dir%", @@ -290,6 +308,7 @@ "id": "clang", "version": "e1.34.1", "bitness": 64, + "arch": "x86_64", "windows_url": "emscripten-clang_e1.34.1.zip", "osx_url": "emscripten-clang_e1.34.1.tar.gz", "activated_path": "%installation_dir%", @@ -300,6 +319,7 @@ "id": "clang", "version": "e1.35.0", "bitness": 64, + "arch": "x86_64", "windows_url": "emscripten-clang_e1.35.0.zip", "osx_url": "emscripten-clang_e1.35.0.tar.gz", "activated_path": "%installation_dir%", @@ -310,6 +330,7 @@ "id": "clang", "version": "e1.37.1", "bitness": 64, + "arch": "x86_64", "windows_url": "llvm/tag/win_64bit/emscripten-llvm-e1.37.1.zip", "osx_url": "llvm/tag/osx_64bit/emscripten-llvm-e1.37.1.tar.gz", "linux_url": "llvm/tag/linux_64bit/emscripten-llvm-e1.37.1.tar.gz", @@ -321,6 +342,7 @@ "id": "clang", "version": "e%precompiled_tag32%", "bitness": 32, + "arch": "x86", "windows_url": "llvm/tag/win_64bit/emscripten-llvm-e%precompiled_tag32%.zip", "osx_url": "llvm/tag/osx_64bit/emscripten-llvm-e%precompiled_tag32%.tar.gz", "linux_url": "llvm/tag/linux_64bit/emscripten-llvm-e%precompiled_tag32%.tar.gz", @@ -332,6 +354,7 @@ "id": "clang", "version": "e%precompiled_tag64%", "bitness": 64, + "arch": "x86_64", "windows_url": "https://storage.googleapis.com/webassembly/emscripten-releases-builds/old/win/emscripten-llvm-e%precompiled_tag64%.zip", "osx_url": "https://storage.googleapis.com/webassembly/emscripten-releases-builds/old/mac/emscripten-llvm-e%precompiled_tag64%.tar.gz", "linux_url": "https://storage.googleapis.com/webassembly/emscripten-releases-builds/old/linux/emscripten-llvm-e%precompiled_tag64%.tar.gz", @@ -343,6 +366,7 @@ "id": "node", "version": "0.10.17", "bitness": 32, + "arch": "x86", "windows_url": "node_0.10.17_32bit.exe", "windows_install_path": "node/0.10.17_32bit/node.exe", "activated_path": "%installation_dir%", @@ -354,6 +378,7 @@ "id": "node", "version": "0.10.17", "bitness": 64, + "arch": "x86_64", "windows_url": "node_0.10.17_64bit.exe", "windows_install_path": "node/0.10.17_64bit/node.exe", "activated_path": "%installation_dir%", @@ -365,6 +390,7 @@ "id": "node", "version": "0.10.18", "bitness": 64, + "arch": "x86_64", "osx_url": "node-v0.10.18-darwin-x64.tar.gz", "activated_path": "%installation_dir%/bin", "activated_cfg": "NODE_JS='%installation_dir%/bin/node'", @@ -375,6 +401,7 @@ "id": "node", "version": "0.12.2", "bitness": 32, + "arch": "x86", "windows_url": "node_0.12.2_32bit.exe", "windows_install_path": "node/0.12.2_32bit/node.exe", "activated_path": "%installation_dir%", @@ -386,6 +413,7 @@ "id": "node", "version": "0.12.2", "bitness": 64, + "arch": "x86_64", "windows_url": "node_0.12.2_64bit.exe", "windows_install_path": "node/0.12.2_64bit/node.exe", "activated_path": "%installation_dir%", @@ -397,6 +425,7 @@ "id": "node", "version": "0.12.2", "bitness": 64, + "arch": "x86_64", "osx_url": "node-v0.12.2-darwin-x64.tar.gz", "activated_path": "%installation_dir%/bin", "activated_cfg": "NODE_JS='%installation_dir%/bin/node'", @@ -407,16 +436,28 @@ "id": "node", "version": "4.1.1", "bitness": 32, + "arch": "x86", "windows_url": "node_4.1.1_32bit.zip", "linux_url": "node-v4.1.1-linux-x86.tar.gz", "activated_path": "%installation_dir%/bin", "activated_cfg": "NODE_JS='%installation_dir%/bin/node%.exe%'", "activated_env": "EMSDK_NODE=%installation_dir%/bin/node%.exe%" }, + { + "id": "node", + "version": "4.1.1", + "bitness": 32, + "arch": "arm", + "linux_url": "https://nodejs.org/download/release/v4.1.1/node-v4.1.1-linux-armv7l.tar.xz", + "activated_path": "%installation_dir%/bin", + "activated_cfg": "NODE_JS='%installation_dir%/bin/node%.exe%'", + "activated_env": "EMSDK_NODE=%installation_dir%/bin/node%.exe%" + }, { "id": "node", "version": "4.1.1", "bitness": 64, + "arch": "x86_64", "osx_url": "node-v4.1.1-darwin-x64.tar.gz", "windows_url": "node_4.1.1_64bit.zip", "linux_url": "node-v4.1.1-linux-x64.tar.gz", @@ -424,20 +465,42 @@ "activated_cfg": "NODE_JS='%installation_dir%/bin/node%.exe%'", "activated_env": "EMSDK_NODE=%installation_dir%/bin/node%.exe%" }, + { + "id": "node", + "version": "4.1.1", + "bitness": 64, + "arch": "aarch64", + "linux_url": "https://nodejs.org/download/release/v4.1.1/node-v4.1.1-linux-arm64.tar.gz", + "activated_path": "%installation_dir%/bin", + "activated_cfg": "NODE_JS='%installation_dir%/bin/node%.exe%'", + "activated_env": "EMSDK_NODE=%installation_dir%/bin/node%.exe%" + }, { "id": "node", "version": "8.9.1", "bitness": 32, + "arch": "x86", "windows_url": "node-v8.9.1-win-x86.zip", "linux_url": "node-v8.9.1-linux-x86.tar.xz", "activated_path": "%installation_dir%/bin", "activated_cfg": "NODE_JS='%installation_dir%/bin/node%.exe%'", "activated_env": "EMSDK_NODE=%installation_dir%/bin/node%.exe%" }, + { + "id": "node", + "version": "8.9.1", + "arch": "arm", + "bitness": 32, + "linux_url": "https://nodejs.org/dist/v8.9.1/node-v8.9.1-linux-armv7l.tar.xz", + "activated_path": "%installation_dir%/bin", + "activated_cfg": "NODE_JS='%installation_dir%/bin/node%.exe%'", + "activated_env": "EMSDK_NODE=%installation_dir%/bin/node%.exe%" + }, { "id": "node", "version": "8.9.1", "bitness": 64, + "arch": "x86_64", "osx_url": "node-v8.9.1-darwin-x64.tar.gz", "windows_url": "node-v8.9.1-win-x64.zip", "linux_url": "node-v8.9.1-linux-x64.tar.xz", @@ -445,10 +508,21 @@ "activated_cfg": "NODE_JS='%installation_dir%/bin/node%.exe%'", "activated_env": "EMSDK_NODE=%installation_dir%/bin/node%.exe%" }, + { + "id": "node", + "version": "8.9.1", + "arch": "aarch64", + "bitness": 64, + "linux_url": "https://nodejs.org/dist/v8.9.1/node-v8.9.1-linux-arm64.tar.xz", + "activated_path": "%installation_dir%/bin", + "activated_cfg": "NODE_JS='%installation_dir%/bin/node%.exe%'", + "activated_env": "EMSDK_NODE=%installation_dir%/bin/node%.exe%" + }, { "id": "python", "version": "2.7.5.1", "bitness": 32, + "arch": "x86", "windows_url": "python_2.7.5.1_32bit.zip", "activated_path": "%installation_dir%", "activated_cfg": "PYTHON='%installation_dir%/python%.exe%'", @@ -459,6 +533,7 @@ "id": "python", "version": "2.7.5", "bitness": 64, + "arch": "x86_64", "windows_url": "python_2.7.5_64bit.zip", "activated_path": "%installation_dir%", "activated_cfg": "PYTHON='%installation_dir%/python%.exe%'", @@ -469,6 +544,7 @@ "id": "python", "version": "2.7.5.3", "bitness": 32, + "arch": "x86", "windows_url": "python_2.7.5.3_32bit.zip", "activated_path": "%installation_dir%", "activated_cfg": "PYTHON='%installation_dir%/python%.exe%'", @@ -479,6 +555,7 @@ "id": "python", "version": "2.7.5.3", "bitness": 64, + "arch": "x86_64", "windows_url": "python_2.7.5.3_64bit.zip", "activated_path": "%installation_dir%", "activated_cfg": "PYTHON='%installation_dir%/python%.exe%'", @@ -489,6 +566,7 @@ "id": "python", "version": "2.7.13.1", "bitness": 32, + "arch": "x86", "windows_url": "WinPython-32bit-2.7.13.1Zero.zip", "activated_path": "%installation_dir%/python-2.7.13", "activated_cfg": "PYTHON='%installation_dir%/python-2.7.13/python%.exe%'", @@ -498,6 +576,7 @@ "id": "python", "version": "2.7.13.1", "bitness": 64, + "arch": "x86_64", "windows_url": "WinPython-64bit-2.7.13.1Zero.zip", "activated_path": "%installation_dir%/python-2.7.13.amd64", "activated_cfg": "PYTHON='%installation_dir%/python-2.7.13.amd64/python%.exe%'", @@ -507,6 +586,7 @@ "id": "python", "version": "3.5.4", "bitness": 32, + "arch": "x86", "windows_url": "WinPython-32bit-3.5.4.1Zero.zip", "activated_path": "%installation_dir%/python-3.5.4", "activated_cfg": "PYTHON='%installation_dir%/python-3.5.4/python%.exe%'", @@ -516,6 +596,7 @@ "id": "python", "version": "3.5.4", "bitness": 64, + "arch": "x86_64", "windows_url": "WinPython-64bit-3.5.4.1Zero.zip", "activated_path": "%installation_dir%/python-3.5.4.amd64", "activated_cfg": "PYTHON='%installation_dir%/python-3.5.4.amd64/python%.exe%'", @@ -525,6 +606,7 @@ "id": "java", "version": "7.45", "bitness": 32, + "arch": "x86", "windows_url": "portable_jre_7_update_45_32bit.zip", "activated_path": "%installation_dir%/bin", "activated_env": "JAVA_HOME=%installation_dir%", @@ -534,6 +616,7 @@ "id": "java", "version": "7.45", "bitness": 64, + "arch": "x86_64", "windows_url": "portable_jre_7_update_45_64bit.zip", "activated_path": "%installation_dir%/bin", "activated_env": "JAVA_HOME=%installation_dir%", @@ -543,6 +626,7 @@ "id": "java", "version": "8.152", "bitness": 32, + "arch": "x86", "windows_url": "portable_jre_8_update_152_32bit.zip", "activated_path": "%installation_dir%/bin", "activated_env": "JAVA_HOME=%installation_dir%", @@ -552,6 +636,7 @@ "id": "java", "version": "8.152", "bitness": 64, + "arch": "x86_64", "windows_url": "portable_jre_8_update_152_64bit.zip", "activated_path": "%installation_dir%/bin", "activated_env": "JAVA_HOME=%installation_dir%", @@ -561,6 +646,7 @@ "id": "spidermonkey", "version": "27.0.1", "bitness": 64, + "arch": "x86_64", "windows_url": "spidermonkey-27.0.1.zip", "osx_url": "spidermonkey-27.0.1.tar.gz", "activated_path": "%installation_dir%", @@ -571,6 +657,7 @@ "id": "spidermonkey", "version": "nightly-2014-03-13", "bitness": 64, + "arch": "x86_64", "windows_url": "spidermonkey-nightly-2014-03-13.zip", "osx_url": "spidermonkey-nightly-2014-03-13.tar.gz", "activated_path": "%installation_dir%", @@ -581,6 +668,7 @@ "id": "spidermonkey", "version": "30.0.0", "bitness": 64, + "arch": "x86_64", "windows_url": "spidermonkey-30.0.0.zip", "osx_url": "spidermonkey-30.0.0.tar.gz", "activated_path": "%installation_dir%", @@ -591,6 +679,7 @@ "id": "spidermonkey", "version": "37.0.1", "bitness": 64, + "arch": "x86_64", "windows_url": "spidermonkey-37.0.1_64bit.zip", "osx_url": "spidermonkey-37.0.1_64bit.tar.gz", "activated_path": "%installation_dir%", @@ -600,6 +689,7 @@ "id": "spidermonkey", "version": "nightly-2015-04-12", "bitness": 64, + "arch": "x86_64", "windows_url": "spidermonkey-nightly-2015-04-12_64bit.zip", "osx_url": "spidermonkey-nightly-2015-04-12_64bit.tar.gz", "activated_path": "%installation_dir%",