Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(7)

Side by Side Diff: build_tools/download_emscripten.py

Issue 1393343002: Improve emscripten download, install and auto-detection (Closed) Base URL: https://chromium.googlesource.com/external/naclports.git@master
Patch Set: Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « build_tools/buildbot_selector.sh ('k') | lib/naclports/source_package.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright 2015 The Native Client Authors. All rights reserved. 2 # Copyright 2015 The Native Client Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 """Download the Emscripten SDK for the current platform. 5 """Download the Emscripten SDK for the current platform.
6 6
7 This script downloads the emscripten tarball and expands it. 7 This script downloads the emscripten tarball and expands it.
8 It requires gsutil to be in the bin PATH and is currently 8 It requires gsutil to be in the bin PATH and is currently
9 supported on Linux and Mac OSX and not windows. 9 supported on Linux and Mac OSX and not windows.
10
11 Additional prerequisites include cmake, node.js and Java.
12 """ 10 """
13 11
14 import os 12 import os
15 import subprocess 13 import subprocess
16 import sys 14 import sys
17 import tarfile 15 import tarfile
18 16
19 SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) 17 SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
20 NACLPORTS_ROOT = os.path.dirname(SCRIPT_DIR) 18 NACLPORTS_ROOT = os.path.dirname(SCRIPT_DIR)
21 sys.path.append(os.path.join(NACLPORTS_ROOT, 'lib')) 19 sys.path.append(os.path.join(NACLPORTS_ROOT, 'lib'))
(...skipping 27 matching lines...) Expand all
49 naclports.Log("Verified cached file: %s" % filename) 47 naclports.Log("Verified cached file: %s" % filename)
50 return full_name 48 return full_name
51 except naclports.util.HashVerificationError: 49 except naclports.util.HashVerificationError:
52 naclports.Log("Hash mistmatch on cached download: %s" % filename) 50 naclports.Log("Hash mistmatch on cached download: %s" % filename)
53 51
54 naclports.DownloadFile(full_name, url) 52 naclports.DownloadFile(full_name, url)
55 naclports.util.VerifyHash(full_name, sha1) 53 naclports.util.VerifyHash(full_name, sha1)
56 return full_name 54 return full_name
57 55
58 56
59 def DownloadAndExtract(url, sha1, target_dir): 57 def DownloadAndExtract(url, sha1, target_dir, link_name=None):
60 tar_file = DownloadToCache(url, sha1) 58 tar_file = DownloadToCache(url, sha1)
61 59
62 if not os.path.exists(OUT_DIR): 60 if not os.path.exists(OUT_DIR):
63 os.makedirs(OUT_DIR) 61 os.makedirs(OUT_DIR)
64 62
65 os.chdir(OUT_DIR) 63 os.chdir(OUT_DIR)
66 64
67 # Remove previously extracted archive 65 # Remove previously extracted archive
68 if os.path.exists(target_dir): 66 if os.path.exists(target_dir):
69 naclports.Log('Cleaning up existing %s...' % target_dir) 67 naclports.Log('Cleaning up existing %s...' % target_dir)
70 cmd = ['rm', '-rf'] 68 cmd = ['rm', '-rf']
71 cmd.append(target_dir) 69 cmd.append(target_dir)
72 subprocess.check_call(cmd) 70 subprocess.check_call(cmd)
73 71
74 # Extract archive 72 # Extract archive
75 naclports.Log('Exctacting %s...' % os.path.basename(tar_file)) 73 naclports.Log('Exctacting %s...' % os.path.basename(tar_file))
76 if subprocess.call(['tar', 'xf', tar_file]): 74 if subprocess.call(['tar', 'xf', tar_file]):
77 raise naclports.Error('Error unpacking Emscripten SDK') 75 raise naclports.Error('Error unpacking Emscripten SDK')
78 76
77 if link_name:
78 if os.path.exists(link_name):
79 os.remove(link_name)
80 os.symlink(target_dir, link_name)
81
82
83 def BuildOptimizer():
84 emsdk_root = os.path.join(OUT_DIR, 'emsdk')
85 node_bin = os.path.join(OUT_DIR, 'node', 'bin')
86 emscripten_root = os.path.join(emsdk_root, 'emscripten')
87 os.environ['EMSDK_ROOT'] = emscripten_root
88 os.environ['EM_CONFIG'] = os.path.join(emsdk_root, '.emscripten')
89 os.environ['PATH'] += ':' + node_bin
90 os.environ['PATH'] += ':' + emscripten_root
91
92 # Run using -O2 to compile the native js-optimizer
93 open('test.c', 'w').close()
94 subprocess.check_call(['emcc', '-O2', '-o', 'test.js', 'test.c'])
95 os.remove('test.js')
96 os.remove('test.c')
97 return 0
98
79 99
80 def main(argv): 100 def main(argv):
81 if sys.platform in ['win32', 'cygwin']: 101 if sys.platform in ['win32', 'cygwin']:
82 naclports.Error('Emscripten support is currently not available on Windows.') 102 naclports.Error('Emscripten support is currently not available on Windows.')
83 return 1 103 return 1
84 104
85 DownloadAndExtract(EMSDK_URL, EMSDK_SHA1, 'emsdk') 105 DownloadAndExtract(EMSDK_URL, EMSDK_SHA1, 'emsdk')
86 DownloadAndExtract(NODEJS_URL, NODEJS_SHA1, 'node-v0.12.1-linux-x64') 106 DownloadAndExtract(NODEJS_URL, NODEJS_SHA1, 'node-v0.12.1-linux-x64', 'node')
107 BuildOptimizer()
108
87 naclports.Log('Emscripten SDK Install complete') 109 naclports.Log('Emscripten SDK Install complete')
88 return 0 110 return 0
89 111
90 112
91 if __name__ == '__main__': 113 if __name__ == '__main__':
92 try: 114 try:
93 rtn = main(sys.argv[1:]) 115 rtn = main(sys.argv[1:])
94 except naclports.Error as e: 116 except naclports.Error as e:
95 sys.stderr.write('error: %s\n' % str(e)) 117 sys.stderr.write('error: %s\n' % str(e))
96 rtn = 1 118 rtn = 1
OLDNEW
« no previous file with comments | « build_tools/buildbot_selector.sh ('k') | lib/naclports/source_package.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698