Add support for specifying the number of cores to use when building tools in the SDK, with the -jX command line option to 'emsdk install'. Fixes #28.

This commit is contained in:
Jukka Jylänki 2015-04-08 15:52:36 +03:00
Родитель 766b656206
Коммит 4957c20d72
1 изменённых файлов: 28 добавлений и 8 удалений

36
emsdk
Просмотреть файл

@ -1,6 +1,6 @@
#!/usr/bin/env python
import sys, optparse, subprocess, urllib2, os, os.path, errno, zipfile, string, json, platform, shutil, tarfile, urlparse, tempfile, multiprocessing
import sys, optparse, subprocess, urllib2, os, os.path, errno, zipfile, string, json, platform, shutil, tarfile, urlparse, tempfile, multiprocessing, re
# EMSDK_DEV is a developer mode flag, which, if true, the SDK is downloaded from a 'staging' online source,
# instead of the public source. New releases are first deployed to the staging source for testing, before
@ -33,6 +33,8 @@ if platform.mac_ver()[0] != '':
OSX = True
ENVPATH_SEPARATOR = ':'
CPU_CORES = max(multiprocessing.cpu_count()-1, 1) # Don't saturate all cores to not steal the whole system, but be aggressive.
emscripten_config_directory = os.path.expanduser("~/")
EMSDK_SET_ENV = 'emsdk_set_env.bat' if WINDOWS else 'emsdk_set_env.sh'
@ -441,19 +443,19 @@ def find_msbuild(sln_file):
if os.path.isfile(p): return p
def make_build(build_root, build_type):
cpu_cores = max(multiprocessing.cpu_count()-1, 1) # Don't saturate all cores to not steal the whole system, but be aggressive.
if cpu_cores > 1:
print 'Performing a parallel build with ' + str(cpu_cores) + ' cores.'
global CPU_CORES
if CPU_CORES > 1:
print 'Performing a parallel build with ' + str(CPU_CORES) + ' cores.'
else:
print 'Performing a singlethreaded build.'
if WINDOWS:
if 'Visual Studio' in CMAKE_GENERATOR:
solution_name = subprocess.check_output(['dir', '/b', '*.sln'], shell=True, cwd=build_root).strip()
make = [find_msbuild(os.path.join(build_root, solution_name)), '/maxcpucount:' + str(cpu_cores), '/t:Build', '/p:Configuration='+build_type, '/nologo', '/verbosity:minimal', solution_name]
make = [find_msbuild(os.path.join(build_root, solution_name)), '/maxcpucount:' + str(CPU_CORES), '/t:Build', '/p:Configuration='+build_type, '/nologo', '/verbosity:minimal', solution_name]
else:
make = ['mingw32-make', '-j' + str(cpu_cores)]
make = ['mingw32-make', '-j' + str(CPU_CORES)]
else:
make = ['make', '-j' + str(cpu_cores)]
make = ['make', '-j' + str(CPU_CORES)]
# Build
try:
@ -1273,7 +1275,13 @@ def main():
emsdk update - Fetches a list of updates from the net (but
does not install them)
emsdk install <tool/sdk> - Downloads and installs the given tool or SDK.
emsdk install [-j<num>] <tool/sdk>
- Downloads and installs the given tool or SDK.
An optional -j<num> specifier can be used to
specify the number of cores to use when
building the tool. (default: use one less
than the # of detected cores)
emsdk uninstall <tool/sdk> - Removes the given tool or SDK from disk.
emsdk activate <tool/sdk> - Activates the given tool or SDK in the
@ -1419,6 +1427,18 @@ def main():
print 'To permanently register this environment globally to all users in Windows Registry, rerun the command with the option --global.'
return 0
elif cmd == 'install':
# Process args
for i in range(2, len(sys.argv)):
if sys.argv[i].startswith('-j'):
multicore = re.match(r'^-j(\d+)$', sys.argv[i])
if multicore:
global CPU_CORES
CPU_CORES = int(multicore.group(1))
sys.argv[i] = ''
else:
print >> sys.stderr, "Invalid command line parameter " + sys.argv[i] + ' specified!'
return 1
sys.argv = filter(lambda x: not len(x) == 0, sys.argv)
if len(sys.argv) <= 2:
print "Missing parameter. Type 'emsdk install <tool name>' to install a tool or an SDK. Type 'emsdk list' to obtain a list of available tools. Type 'emsdk install latest' to automatically install the newest version of the SDK."
return 1