Add npm install step as post-build to Emscripten (#404)

* Add npm install step as post-build to Emscripten

* Address review

* Run npm install on releases-upstream and releases-fastcomp

* Fix node path

* Add node to PATH

* Only install production packages with npm

* Address review
This commit is contained in:
juj
2020-01-10 22:11:38 +02:00
committed by GitHub
parent 98ad15a3d7
commit d30ba160ed
2 changed files with 68 additions and 23 deletions

View File

@@ -1258,8 +1258,34 @@ def is_optimizer_installed(tool):
return os.path.exists(build_root)
def build_optimizer_tool(tool):
debug_print('build_optimizer_tool(' + str(tool) + ')')
# Finds newest tool of given name that is active, or if none are active, finds the newest one that is installed.
def find_latest_active_or_installed_tool(name):
for t in reversed(tools):
if t.id == name and t.is_active():
return t
for t in reversed(tools):
if t.id == name and t.is_installed():
return t
# npm install in Emscripten root directory
def emscripten_npm_install(tool, directory):
node_tool = find_latest_active_or_installed_tool('node')
if not node_tool:
print('Failed to run "npm install" in installed Emscripten root directory ' + tool.installation_path() + '! Please install node.js first!')
return False
node_path = os.path.join(node_tool.installation_path(), 'bin')
npm = os.path.join(node_path, 'npm' + ('.cmd' if WINDOWS else ''))
env = os.environ.copy()
env["PATH"] = node_path + os.pathsep + env["PATH"]
subprocess.check_call([npm, 'install', '--production'], cwd=directory, env=env)
return True
def emscripten_post_install(tool):
debug_print('emscripten_post_install(' + str(tool) + ')')
src_root = os.path.join(tool.installation_path(), 'tools', 'optimizer')
build_root = optimizer_build_root(tool)
build_type = decide_cmake_build_type(tool)
@@ -1282,7 +1308,12 @@ def build_optimizer_tool(tool):
# Make
success = make_build(build_root, build_type, 'x64' if tool.bitness == 64 else 'Win32')
return success
if not success:
return False
success = emscripten_npm_install(tool, tool.installation_path())
return True
# Binaryen build scripts:
@@ -1819,6 +1850,12 @@ class Tool(object):
success = tool.install()
if not success:
return False
if getattr(self, 'custom_install_script', None) == 'emscripten_npm_install':
# upstream tools have hardcoded paths that are not stored in emsdk_manifest.json registry
install_path = 'upstream' if 'releases-upstream' in self.version else 'fastcomp'
success = emscripten_npm_install(self, os.path.join(emsdk_path(), install_path, 'emscripten'))
if not success:
return False
print("Done installing SDK '" + str(self) + "'.")
return True
else:
@@ -1859,8 +1896,10 @@ class Tool(object):
if success:
if hasattr(self, 'custom_install_script'):
if self.custom_install_script == 'build_optimizer':
success = build_optimizer_tool(self)
if self.custom_install_script == 'emscripten_post_install':
success = emscripten_post_install(self)
elif self.custom_install_script == 'emscripten_npm_install':
success = emscripten_npm_install(self, self.installation_path())
elif self.custom_install_script in ('build_fastcomp', 'build_llvm_monorepo'):
# 'build_fastcomp' is a special one that does the download on its
# own, others do the download manually.

View File

@@ -384,7 +384,7 @@
"activated_path": "%installation_dir%",
"activated_env": "EMSCRIPTEN=%installation_dir%;EMSCRIPTEN_NATIVE_OPTIMIZER=%installation_dir%%generator_prefix%_32bit_optimizer/%cmake_build_type_on_win%optimizer%.exe%",
"cmake_build_type": "Release",
"custom_install_script": "build_optimizer",
"custom_install_script": "emscripten_post_install",
"custom_is_installed_script": "is_optimizer_installed",
"custom_uninstall_script": "uninstall_optimizer"
},
@@ -399,7 +399,7 @@
"activated_path": "%installation_dir%",
"activated_env": "EMSCRIPTEN=%installation_dir%;EMSCRIPTEN_NATIVE_OPTIMIZER=%installation_dir%%generator_prefix%_64bit_optimizer/%cmake_build_type_on_win%optimizer%.exe%",
"cmake_build_type": "Release",
"custom_install_script": "build_optimizer",
"custom_install_script": "emscripten_post_install",
"custom_is_installed_script": "is_optimizer_installed",
"custom_uninstall_script": "uninstall_optimizer"
},
@@ -464,7 +464,7 @@
"activated_path": "%installation_dir%",
"activated_env": "EMSCRIPTEN=%installation_dir%;EMSCRIPTEN_NATIVE_OPTIMIZER=%installation_dir%%generator_prefix%_32bit_optimizer/%cmake_build_type_on_win%optimizer%.exe%",
"cmake_build_type": "Release",
"custom_install_script": "build_optimizer",
"custom_install_script": "emscripten_post_install",
"custom_is_installed_script": "is_optimizer_installed",
"custom_uninstall_script": "uninstall_optimizer"
},
@@ -479,7 +479,7 @@
"activated_path": "%installation_dir%",
"activated_env": "EMSCRIPTEN=%installation_dir%;EMSCRIPTEN_NATIVE_OPTIMIZER=%installation_dir%%generator_prefix%_32bit_optimizer/%cmake_build_type_on_win%optimizer%.exe%",
"cmake_build_type": "Release",
"custom_install_script": "build_optimizer",
"custom_install_script": "emscripten_post_install",
"custom_is_installed_script": "is_optimizer_installed",
"custom_uninstall_script": "uninstall_optimizer"
},
@@ -494,7 +494,7 @@
"activated_path": "%installation_dir%",
"activated_env": "EMSCRIPTEN=%installation_dir%;EMSCRIPTEN_NATIVE_OPTIMIZER=%installation_dir%%generator_prefix%_64bit_optimizer/%cmake_build_type_on_win%optimizer%.exe%",
"cmake_build_type": "Release",
"custom_install_script": "build_optimizer",
"custom_install_script": "emscripten_post_install",
"custom_is_installed_script": "is_optimizer_installed",
"custom_uninstall_script": "uninstall_optimizer"
},
@@ -509,7 +509,7 @@
"activated_path": "%installation_dir%",
"activated_env": "EMSCRIPTEN=%installation_dir%;EMSCRIPTEN_NATIVE_OPTIMIZER=%installation_dir%%generator_prefix%_64bit_optimizer/%cmake_build_type_on_win%optimizer%.exe%",
"cmake_build_type": "Release",
"custom_install_script": "build_optimizer",
"custom_install_script": "emscripten_post_install",
"custom_is_installed_script": "is_optimizer_installed",
"custom_uninstall_script": "uninstall_optimizer"
},
@@ -776,38 +776,44 @@
{
"version": "releases-upstream-%releases-tag%",
"bitness": 64,
"uses": ["releases-upstream-%releases-tag%-64bit", "node-12.9.1-64bit"],
"os": "linux"
"uses": ["node-12.9.1-64bit", "releases-upstream-%releases-tag%-64bit"],
"os": "linux",
"custom_install_script": "emscripten_npm_install"
},
{
"version": "releases-upstream-%releases-tag%",
"bitness": 64,
"uses": ["releases-upstream-%releases-tag%-64bit", "node-12.9.1-64bit"],
"os": "osx"
"uses": ["node-12.9.1-64bit", "releases-upstream-%releases-tag%-64bit"],
"os": "osx",
"custom_install_script": "emscripten_npm_install"
},
{
"version": "releases-upstream-%releases-tag%",
"bitness": 64,
"uses": ["releases-upstream-%releases-tag%-64bit", "node-12.9.1-64bit", "python-2.7.13.1-64bit", "java-8.152-64bit"],
"os": "win"
"uses": ["node-12.9.1-64bit", "python-2.7.13.1-64bit", "java-8.152-64bit", "releases-upstream-%releases-tag%-64bit"],
"os": "win",
"custom_install_script": "emscripten_npm_install"
},
{
"version": "releases-fastcomp-%releases-tag%",
"bitness": 64,
"uses": ["releases-fastcomp-%releases-tag%-64bit", "node-12.9.1-64bit"],
"os": "linux"
"uses": ["node-12.9.1-64bit", "releases-fastcomp-%releases-tag%-64bit"],
"os": "linux",
"custom_install_script": "emscripten_npm_install"
},
{
"version": "releases-fastcomp-%releases-tag%",
"bitness": 64,
"uses": ["releases-fastcomp-%releases-tag%-64bit", "node-12.9.1-64bit"],
"os": "osx"
"uses": ["node-12.9.1-64bit", "releases-fastcomp-%releases-tag%-64bit"],
"os": "osx",
"custom_install_script": "emscripten_npm_install"
},
{
"version": "releases-fastcomp-%releases-tag%",
"bitness": 64,
"uses": ["releases-fastcomp-%releases-tag%-64bit", "node-12.9.1-64bit", "python-2.7.13.1-64bit", "java-8.152-64bit"],
"os": "win"
"uses": ["node-12.9.1-64bit", "python-2.7.13.1-64bit", "java-8.152-64bit", "releases-fastcomp-%releases-tag%-64bit"],
"os": "win",
"custom_install_script": "emscripten_npm_install"
},
{
"version": "fastcomp-%precompiled_tag32%",