Add support for installing precompiled nightly LLVM/Emscripten/SDK versions.
This commit is contained in:
@@ -77,4 +77,7 @@
|
|||||||
1.36.5
|
1.36.5
|
||||||
1.36.6
|
1.36.6
|
||||||
1.36.7
|
1.36.7
|
||||||
1.36.8
|
1.36.8
|
||||||
|
1.36.9
|
||||||
|
1.36.10
|
||||||
|
1.36.11
|
||||||
111
emsdk
111
emsdk
@@ -373,7 +373,7 @@ def path_points_to_directory(path):
|
|||||||
if no_suffix:
|
if no_suffix:
|
||||||
return True
|
return True
|
||||||
suffix = path[last_dot:]
|
suffix = path[last_dot:]
|
||||||
if suffix == '.exe' or suffix == '.zip': # Very simple logic for the only file suffixes used by emsdk downloader. Other suffixes, like 'clang-3.2' are treated as dirs.
|
if suffix == '.exe' or suffix == '.zip' or suffix == '.txt': # Very simple logic for the only file suffixes used by emsdk downloader. Other suffixes, like 'clang-3.2' are treated as dirs.
|
||||||
return False
|
return False
|
||||||
else:
|
else:
|
||||||
return True
|
return True
|
||||||
@@ -947,6 +947,9 @@ class Tool:
|
|||||||
if hasattr(self, 'uses'):
|
if hasattr(self, 'uses'):
|
||||||
for tool_name in self.uses:
|
for tool_name in self.uses:
|
||||||
tool = find_tool(tool_name)
|
tool = find_tool(tool_name)
|
||||||
|
if not tool:
|
||||||
|
if VERBOSE: print('Tool ' + str(self) + ' depends on ' + tool_name + ' which does not exist!')
|
||||||
|
continue
|
||||||
if tool.needs_compilation(): return True
|
if tool.needs_compilation(): return True
|
||||||
|
|
||||||
return False
|
return False
|
||||||
@@ -1326,6 +1329,19 @@ def fetch_emscripten_tags():
|
|||||||
else:
|
else:
|
||||||
print('Done. No tagged releases available.')
|
print('Done. No tagged releases available.')
|
||||||
|
|
||||||
|
def os_name_for_llvm_location():
|
||||||
|
if WINDOWS: return 'win'
|
||||||
|
if LINUX: return 'linux'
|
||||||
|
if OSX: return 'osx'
|
||||||
|
def os_name_for_emscripten_location():
|
||||||
|
if WINDOWS: return 'win'
|
||||||
|
else: return 'linux'
|
||||||
|
|
||||||
|
print('Fetching all precompiled Nightly versions..')
|
||||||
|
download_file('https://s3.amazonaws.com/mozilla-games/emscripten/packages/llvm/nightly/' + os_name_for_llvm_location() + '_32bit/index.txt', 'llvm-nightlies-32bit.txt', download_even_if_exists=True)
|
||||||
|
download_file('https://s3.amazonaws.com/mozilla-games/emscripten/packages/llvm/nightly/' + os_name_for_llvm_location() + '_64bit/index.txt', 'llvm-nightlies-64bit.txt', download_even_if_exists=True)
|
||||||
|
download_file('https://s3.amazonaws.com/mozilla-games/emscripten/packages/emscripten/nightly/' + os_name_for_emscripten_location() + '/index.txt', 'emscripten-nightlies.txt', download_even_if_exists=True)
|
||||||
|
|
||||||
def update_emsdk():
|
def update_emsdk():
|
||||||
if WINDOWS:
|
if WINDOWS:
|
||||||
download_and_unzip(urljoin(emsdk_packages_url, 'emsdk_windows_update.zip'), emsdk_path(), download_even_if_exists=True)
|
download_and_unzip(urljoin(emsdk_packages_url, 'emsdk_windows_update.zip'), emsdk_path(), download_even_if_exists=True)
|
||||||
@@ -1343,8 +1359,35 @@ def load_emscripten_tags():
|
|||||||
except:
|
except:
|
||||||
return []
|
return []
|
||||||
|
|
||||||
|
def remove_prefix(s, prefix):
|
||||||
|
if s.startswith(prefix): return s[len(prefix):]
|
||||||
|
else: return s
|
||||||
|
|
||||||
|
def remove_suffix(s, suffix):
|
||||||
|
if s.endswith(suffix): return s[:len(s)-len(suffix)]
|
||||||
|
else: return s
|
||||||
|
|
||||||
|
# Kind should be one of: 'llvm-nightlies-32bit.txt', 'llvm-nightlies-64bit.txt', 'emscripten-nightlies.txt'
|
||||||
|
def load_nightlies_list(kind):
|
||||||
|
try:
|
||||||
|
items = open(sdk_path(kind), 'r').read().split('\n')
|
||||||
|
items = map(lambda x: remove_suffix(remove_suffix(remove_prefix(remove_prefix(x, 'emscripten-llvm-e'), 'emscripten-nightly-'), '.tar.gz'), '.zip').strip(), items)
|
||||||
|
items = filter(lambda x: 'latest' not in x and len(x) > 0, items)
|
||||||
|
return items
|
||||||
|
except:
|
||||||
|
return []
|
||||||
|
|
||||||
|
def load_llvm_32bit_nightlies():
|
||||||
|
return load_nightlies_list('llvm-nightlies-32bit.txt')
|
||||||
|
|
||||||
|
def load_llvm_64bit_nightlies():
|
||||||
|
return load_nightlies_list('llvm-nightlies-64bit.txt')
|
||||||
|
|
||||||
|
def load_emscripten_nightlies():
|
||||||
|
return load_nightlies_list('emscripten-nightlies.txt')
|
||||||
|
|
||||||
def load_sdk_manifest():
|
def load_sdk_manifest():
|
||||||
global tools
|
global tools, sdks
|
||||||
try:
|
try:
|
||||||
manifest = json.loads(open(sdk_path("emsdk_manifest.json"), "r").read())
|
manifest = json.loads(open(sdk_path("emsdk_manifest.json"), "r").read())
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
@@ -1353,6 +1396,34 @@ def load_sdk_manifest():
|
|||||||
return
|
return
|
||||||
|
|
||||||
emscripten_tags = load_emscripten_tags()
|
emscripten_tags = load_emscripten_tags()
|
||||||
|
llvm_32bit_nightlies = load_llvm_32bit_nightlies()
|
||||||
|
llvm_64bit_nightlies = load_llvm_64bit_nightlies()
|
||||||
|
emscripten_nightlies = load_emscripten_nightlies()
|
||||||
|
|
||||||
|
def dependencies_exist(sdk):
|
||||||
|
for tool_name in sdk.uses:
|
||||||
|
tool = find_tool(tool_name)
|
||||||
|
if not tool: return False
|
||||||
|
return True
|
||||||
|
|
||||||
|
# A 'category parameter' is a %foo%-encoded identifier that specifies
|
||||||
|
# a class of tools instead of just one tool, e.g. %tag% or %nightly..%
|
||||||
|
def expand_category_param(param, category_list, t, is_sdk):
|
||||||
|
global tools, sdks
|
||||||
|
for i in range(len(category_list)):
|
||||||
|
ver = category_list[i]
|
||||||
|
t2 = copy.copy(t)
|
||||||
|
for p, v in vars(t2).iteritems():
|
||||||
|
if isinstance(v, basestring) and param in v:
|
||||||
|
t2.__dict__[p] = v.replace(param, ver)
|
||||||
|
t2.is_old = i < len(category_list) - 2
|
||||||
|
if hasattr(t2, 'uses'):
|
||||||
|
t2.uses = map((lambda x: x.replace(param, ver)), t2.uses)
|
||||||
|
if is_sdk:
|
||||||
|
if dependencies_exist(t2):
|
||||||
|
sdks.append(t2)
|
||||||
|
else:
|
||||||
|
tools.append(t2)
|
||||||
|
|
||||||
for tool in manifest['tools']:
|
for tool in manifest['tools']:
|
||||||
t = Tool(tool)
|
t = Tool(tool)
|
||||||
@@ -1360,16 +1431,15 @@ def load_sdk_manifest():
|
|||||||
if not hasattr(t, 'is_old'):
|
if not hasattr(t, 'is_old'):
|
||||||
t.is_old = False
|
t.is_old = False
|
||||||
|
|
||||||
|
# Expand the metapackages that refer to tags or nightlies.
|
||||||
if '%tag%' in t.version:
|
if '%tag%' in t.version:
|
||||||
# Expand the metapackage that refers to all tags.
|
expand_category_param('%tag%', emscripten_tags, t, is_sdk=False)
|
||||||
for i in range(len(emscripten_tags)):
|
elif '%nightly-llvm-64bit%' in t.version:
|
||||||
tag = emscripten_tags[i]
|
expand_category_param('%nightly-llvm-64bit%', llvm_64bit_nightlies, t, is_sdk=False)
|
||||||
t2 = copy.copy(t)
|
elif '%nightly-llvm-32bit%' in t.version:
|
||||||
for p, v in vars(t2).iteritems():
|
expand_category_param('%nightly-llvm-32bit%', llvm_32bit_nightlies, t, is_sdk=False)
|
||||||
if isinstance(v, basestring) and '%tag%' in v:
|
elif '%nightly-emscripten%' in t.version:
|
||||||
t2.__dict__[p] = v.replace('%tag%', tag)
|
expand_category_param('%nightly-emscripten%', emscripten_nightlies, t, is_sdk=False)
|
||||||
t2.is_old = i < len(emscripten_tags) - 2
|
|
||||||
tools.append(t2)
|
|
||||||
else:
|
else:
|
||||||
tools.append(t)
|
tools.append(t)
|
||||||
|
|
||||||
@@ -1381,16 +1451,13 @@ def load_sdk_manifest():
|
|||||||
sdk.is_old = False
|
sdk.is_old = False
|
||||||
|
|
||||||
if '%tag%' in sdk.version:
|
if '%tag%' in sdk.version:
|
||||||
# Expand the metapackage that refers to all tags.
|
expand_category_param('%tag%', emscripten_tags, sdk, is_sdk=True)
|
||||||
for i in range(len(emscripten_tags)):
|
elif '%nightly-llvm-64bit%' in sdk.version:
|
||||||
tag = emscripten_tags[i]
|
expand_category_param('%nightly-llvm-64bit%', llvm_64bit_nightlies, sdk, is_sdk=True)
|
||||||
sdk2 = copy.copy(sdk)
|
elif '%nightly-llvm-32bit%' in sdk.version:
|
||||||
for p, v in vars(sdk2).iteritems():
|
expand_category_param('%nightly-llvm-32bit%', llvm_32bit_nightlies, sdk, is_sdk=True)
|
||||||
if isinstance(v, basestring) and '%tag%' in v:
|
elif '%nightly-emscripten%' in sdk.version:
|
||||||
sdk2.__dict__[p] = v.replace('%tag%', tag)
|
expand_category_param('%nightly-emscripten%', emscripten_nightlies, sdk, is_sdk=True)
|
||||||
sdk2.is_old = i < len(emscripten_tags) - 2
|
|
||||||
sdk2.uses = map((lambda x: x.replace('%tag%', tag)), sdk2.uses)
|
|
||||||
sdks.append(sdk2)
|
|
||||||
else:
|
else:
|
||||||
sdks.append(sdk)
|
sdks.append(sdk)
|
||||||
|
|
||||||
@@ -1777,7 +1844,7 @@ def main():
|
|||||||
active = '*' if sdk.is_active() else ' '
|
active = '*' if sdk.is_active() else ' '
|
||||||
print(' ' + active + ' {0: <25}'.format(str(sdk)) + installed)
|
print(' ' + active + ' {0: <25}'.format(str(sdk)) + installed)
|
||||||
print('')
|
print('')
|
||||||
print('The following precompiled SDKs are available for download:')
|
print('The following precompiled SDKs are available for download: (Run "./emsdk update" to pull in the latest list)')
|
||||||
print_sdks(find_sdks(False))
|
print_sdks(find_sdks(False))
|
||||||
print('The following SDKs can be compiled from source:')
|
print('The following SDKs can be compiled from source:')
|
||||||
print_sdks(find_sdks(True))
|
print_sdks(find_sdks(True))
|
||||||
|
|||||||
@@ -82,6 +82,17 @@
|
|||||||
"activated_cfg": "LLVM_ROOT='%installation_dir%/%fastcomp_build_bin_dir%'",
|
"activated_cfg": "LLVM_ROOT='%installation_dir%/%fastcomp_build_bin_dir%'",
|
||||||
"cmake_build_type": "RelWithDebInfo"
|
"cmake_build_type": "RelWithDebInfo"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"id": "clang",
|
||||||
|
"version": "nightly-e%nightly-llvm-64bit%",
|
||||||
|
"bitness": 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",
|
||||||
|
"linux_url": "llvm/nightly/linux_64bit/emscripten-llvm-e%nightly-llvm-64bit%.tar.gz",
|
||||||
|
"activated_path": "%installation_dir%",
|
||||||
|
"activated_cfg": "LLVM_ROOT='%installation_dir%'"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"id": "clang",
|
"id": "clang",
|
||||||
"version": "incoming",
|
"version": "incoming",
|
||||||
@@ -641,6 +652,15 @@
|
|||||||
"custom_is_installed_script": "is_optimizer_installed",
|
"custom_is_installed_script": "is_optimizer_installed",
|
||||||
"custom_uninstall_script": "uninstall_optimizer"
|
"custom_uninstall_script": "uninstall_optimizer"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"id": "emscripten",
|
||||||
|
"version": "nightly-%nightly-emscripten%",
|
||||||
|
"windows_url": "emscripten/nightly/win/emscripten-nightly-%nightly-emscripten%.zip",
|
||||||
|
"unix_url": "emscripten/nightly/linux/emscripten-nightly-%nightly-emscripten%.tar.gz",
|
||||||
|
"activated_cfg": "EMSCRIPTEN_ROOT='%installation_dir%'",
|
||||||
|
"activated_path": "%installation_dir%",
|
||||||
|
"activated_env": "EMSCRIPTEN=%installation_dir%"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"id": "emscripten",
|
"id": "emscripten",
|
||||||
"version": "incoming",
|
"version": "incoming",
|
||||||
@@ -850,6 +870,12 @@
|
|||||||
"uses": ["clang-tag-e%tag%-64bit", "node-4.1.1-64bit", "emscripten-tag-%tag%-64bit"],
|
"uses": ["clang-tag-e%tag%-64bit", "node-4.1.1-64bit", "emscripten-tag-%tag%-64bit"],
|
||||||
"os": "unix"
|
"os": "unix"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"version": "nightly-%nightly-llvm-64bit%",
|
||||||
|
"bitness": 64,
|
||||||
|
"uses": ["clang-nightly-e%nightly-llvm-64bit%-64bit", "node-4.1.1-64bit", "emscripten-nightly-%nightly-llvm-64bit%"],
|
||||||
|
"os": "unix"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"version": "1.5.6",
|
"version": "1.5.6",
|
||||||
"bitness": 32,
|
"bitness": 32,
|
||||||
|
|||||||
Reference in New Issue
Block a user