diff --git a/.gitignore b/.gitignore index 6318bf32e1..547e1cd129 100644 --- a/.gitignore +++ b/.gitignore @@ -26,3 +26,4 @@ llvm-tags-32bit.txt llvm-tags-64bit.txt upstream !upstream/lkgr.json +emscripten-releases-tot.txt diff --git a/emscripten-releases-history.txt b/emscripten-releases-history.txt new file mode 100644 index 0000000000..95377e4a21 --- /dev/null +++ b/emscripten-releases-history.txt @@ -0,0 +1,10 @@ +92502c924353cd84f33cc519c2c121c8a0721d9e +c34dc3ebba733a36767fd75c1348ef1ac726db4b +c964ba0138544d215aa3607c16a5c30a8ef8a6cc +62c4d736bb0a393dda9e6eec6f998111d9070208 +d215321ac0e0a0b76b0e7e81c4f87adfe5d106e4 +870622da9305ce5cb44987ad520827161d69df81 +5e0c54a15df7dd762acb3162beee7db54c6ae197 +37ff372e7389d7e2c7eb23736ad53b16f6626a05 +e74d3b061d851e400ec8dff33b5b3dbc3909c009 +44c1f80345b3296ff1253dd6c5f4a9ba7aa3b959 \ No newline at end of file diff --git a/emsdk b/emsdk index 8a69afc14a..94b540fc52 100755 --- a/emsdk +++ b/emsdk @@ -41,6 +41,7 @@ emsdk_packages_url = urljoin(emsdk_master_server, 'packages/') emscripten_git_repo = 'https://github.com/kripken/emscripten.git' binaryen_git_repo = 'https://github.com/WebAssembly/binaryen.git' +emscripten_releases_repo = 'https://chromium.googlesource.com/emscripten-releases' # Enable this to do very verbose printing about the different steps that are being run. Useful for debugging. VERBOSE = bool(os.getenv('EMSDK_VERBOSE')) if os.getenv('EMSDK_VERBOSE') is not None else False @@ -96,6 +97,13 @@ def os_name(): raise Exception('unknown OS') +def os_name_for_emscripten_releases(): + if WINDOWS: return 'win' + elif LINUX: return 'linux' + elif OSX: return 'mac' + else: + raise Exception('unknown OS') + def to_unix_path(p): return p.replace('\\', '/') @@ -632,6 +640,14 @@ def git_repo_version(repo_path): return "" +def git_recent_commits(repo_path, n=10): + returncode, stdout, stderr = run_get_output([GIT(), 'log', '-n', str(n), '--pretty="%H"'], cwd=repo_path) + if returncode == 0: + return stdout.strip().replace('\r', '').replace('"', '').split('\n') + else: + return [] + + def git_clone(url, dstpath): if VERBOSE: print('git_clone(url=' + url + ', dstpath=' + dstpath + ')') if os.path.isdir(os.path.join(dstpath, '.git')): @@ -1690,6 +1706,25 @@ def get_emscripten_release_version(emscripten_releases_hash): return key return emscripten_releases_hash +def get_emscripten_releases_tot(): + git_clone_checkout_and_pull(emscripten_releases_repo, sdk_path('releases'), 'master') + recent_releases = git_recent_commits(sdk_path('releases')) + # The recent releases are the latest hashes in the git repo. There + # may not be a build for the most recent ones yet; find the last + # that does. + for release in recent_releases: + url = "https://storage.googleapis.com/webassembly/emscripten-releases-builds/%s/%s/wasm-binaries.%s" % ( + os_name_for_emscripten_releases(), + release, + 'tbz2' if not WINDOWS else 'zip' + ) + print(url) + try: + u = urlopen(url) + except: + continue + return release + return '' # Finds the best-matching python tool for use. def find_used_python(): @@ -1759,6 +1794,11 @@ def fetch_emscripten_tags(): else: print('Done. No tagged Binaryen releases available.') + print('Fetching emscripten-releases repository...') + emscripten_releases_tot = get_emscripten_releases_tot() + if emscripten_releases_tot: + open(sdk_path('emscripten-releases-tot.txt'), 'w').write(emscripten_releases_tot) + # Emscripten Nightlies support has been removed, clear the list of known Nightlies locally. # print('Fetching all precompiled Nightly versions..') # download_file('https://s3.amazonaws.com/mozilla-games/emscripten/packages/llvm/nightly/' + os_name() + '_32bit/index.txt', 'llvm-nightlies-32bit.txt', download_even_if_exists=True)