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:
49
emsdk.py
49
emsdk.py
@@ -1258,8 +1258,34 @@ def is_optimizer_installed(tool):
|
|||||||
return os.path.exists(build_root)
|
return os.path.exists(build_root)
|
||||||
|
|
||||||
|
|
||||||
def build_optimizer_tool(tool):
|
# Finds newest tool of given name that is active, or if none are active, finds the newest one that is installed.
|
||||||
debug_print('build_optimizer_tool(' + str(tool) + ')')
|
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')
|
src_root = os.path.join(tool.installation_path(), 'tools', 'optimizer')
|
||||||
build_root = optimizer_build_root(tool)
|
build_root = optimizer_build_root(tool)
|
||||||
build_type = decide_cmake_build_type(tool)
|
build_type = decide_cmake_build_type(tool)
|
||||||
@@ -1282,7 +1308,12 @@ def build_optimizer_tool(tool):
|
|||||||
|
|
||||||
# Make
|
# Make
|
||||||
success = make_build(build_root, build_type, 'x64' if tool.bitness == 64 else 'Win32')
|
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:
|
# Binaryen build scripts:
|
||||||
@@ -1819,6 +1850,12 @@ class Tool(object):
|
|||||||
success = tool.install()
|
success = tool.install()
|
||||||
if not success:
|
if not success:
|
||||||
return False
|
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) + "'.")
|
print("Done installing SDK '" + str(self) + "'.")
|
||||||
return True
|
return True
|
||||||
else:
|
else:
|
||||||
@@ -1859,8 +1896,10 @@ class Tool(object):
|
|||||||
|
|
||||||
if success:
|
if success:
|
||||||
if hasattr(self, 'custom_install_script'):
|
if hasattr(self, 'custom_install_script'):
|
||||||
if self.custom_install_script == 'build_optimizer':
|
if self.custom_install_script == 'emscripten_post_install':
|
||||||
success = build_optimizer_tool(self)
|
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'):
|
elif self.custom_install_script in ('build_fastcomp', 'build_llvm_monorepo'):
|
||||||
# 'build_fastcomp' is a special one that does the download on its
|
# 'build_fastcomp' is a special one that does the download on its
|
||||||
# own, others do the download manually.
|
# own, others do the download manually.
|
||||||
|
|||||||
@@ -384,7 +384,7 @@
|
|||||||
"activated_path": "%installation_dir%",
|
"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%",
|
"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",
|
"cmake_build_type": "Release",
|
||||||
"custom_install_script": "build_optimizer",
|
"custom_install_script": "emscripten_post_install",
|
||||||
"custom_is_installed_script": "is_optimizer_installed",
|
"custom_is_installed_script": "is_optimizer_installed",
|
||||||
"custom_uninstall_script": "uninstall_optimizer"
|
"custom_uninstall_script": "uninstall_optimizer"
|
||||||
},
|
},
|
||||||
@@ -399,7 +399,7 @@
|
|||||||
"activated_path": "%installation_dir%",
|
"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%",
|
"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",
|
"cmake_build_type": "Release",
|
||||||
"custom_install_script": "build_optimizer",
|
"custom_install_script": "emscripten_post_install",
|
||||||
"custom_is_installed_script": "is_optimizer_installed",
|
"custom_is_installed_script": "is_optimizer_installed",
|
||||||
"custom_uninstall_script": "uninstall_optimizer"
|
"custom_uninstall_script": "uninstall_optimizer"
|
||||||
},
|
},
|
||||||
@@ -464,7 +464,7 @@
|
|||||||
"activated_path": "%installation_dir%",
|
"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%",
|
"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",
|
"cmake_build_type": "Release",
|
||||||
"custom_install_script": "build_optimizer",
|
"custom_install_script": "emscripten_post_install",
|
||||||
"custom_is_installed_script": "is_optimizer_installed",
|
"custom_is_installed_script": "is_optimizer_installed",
|
||||||
"custom_uninstall_script": "uninstall_optimizer"
|
"custom_uninstall_script": "uninstall_optimizer"
|
||||||
},
|
},
|
||||||
@@ -479,7 +479,7 @@
|
|||||||
"activated_path": "%installation_dir%",
|
"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%",
|
"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",
|
"cmake_build_type": "Release",
|
||||||
"custom_install_script": "build_optimizer",
|
"custom_install_script": "emscripten_post_install",
|
||||||
"custom_is_installed_script": "is_optimizer_installed",
|
"custom_is_installed_script": "is_optimizer_installed",
|
||||||
"custom_uninstall_script": "uninstall_optimizer"
|
"custom_uninstall_script": "uninstall_optimizer"
|
||||||
},
|
},
|
||||||
@@ -494,7 +494,7 @@
|
|||||||
"activated_path": "%installation_dir%",
|
"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%",
|
"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",
|
"cmake_build_type": "Release",
|
||||||
"custom_install_script": "build_optimizer",
|
"custom_install_script": "emscripten_post_install",
|
||||||
"custom_is_installed_script": "is_optimizer_installed",
|
"custom_is_installed_script": "is_optimizer_installed",
|
||||||
"custom_uninstall_script": "uninstall_optimizer"
|
"custom_uninstall_script": "uninstall_optimizer"
|
||||||
},
|
},
|
||||||
@@ -509,7 +509,7 @@
|
|||||||
"activated_path": "%installation_dir%",
|
"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%",
|
"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",
|
"cmake_build_type": "Release",
|
||||||
"custom_install_script": "build_optimizer",
|
"custom_install_script": "emscripten_post_install",
|
||||||
"custom_is_installed_script": "is_optimizer_installed",
|
"custom_is_installed_script": "is_optimizer_installed",
|
||||||
"custom_uninstall_script": "uninstall_optimizer"
|
"custom_uninstall_script": "uninstall_optimizer"
|
||||||
},
|
},
|
||||||
@@ -776,38 +776,44 @@
|
|||||||
{
|
{
|
||||||
"version": "releases-upstream-%releases-tag%",
|
"version": "releases-upstream-%releases-tag%",
|
||||||
"bitness": 64,
|
"bitness": 64,
|
||||||
"uses": ["releases-upstream-%releases-tag%-64bit", "node-12.9.1-64bit"],
|
"uses": ["node-12.9.1-64bit", "releases-upstream-%releases-tag%-64bit"],
|
||||||
"os": "linux"
|
"os": "linux",
|
||||||
|
"custom_install_script": "emscripten_npm_install"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "releases-upstream-%releases-tag%",
|
"version": "releases-upstream-%releases-tag%",
|
||||||
"bitness": 64,
|
"bitness": 64,
|
||||||
"uses": ["releases-upstream-%releases-tag%-64bit", "node-12.9.1-64bit"],
|
"uses": ["node-12.9.1-64bit", "releases-upstream-%releases-tag%-64bit"],
|
||||||
"os": "osx"
|
"os": "osx",
|
||||||
|
"custom_install_script": "emscripten_npm_install"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "releases-upstream-%releases-tag%",
|
"version": "releases-upstream-%releases-tag%",
|
||||||
"bitness": 64,
|
"bitness": 64,
|
||||||
"uses": ["releases-upstream-%releases-tag%-64bit", "node-12.9.1-64bit", "python-2.7.13.1-64bit", "java-8.152-64bit"],
|
"uses": ["node-12.9.1-64bit", "python-2.7.13.1-64bit", "java-8.152-64bit", "releases-upstream-%releases-tag%-64bit"],
|
||||||
"os": "win"
|
"os": "win",
|
||||||
|
"custom_install_script": "emscripten_npm_install"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "releases-fastcomp-%releases-tag%",
|
"version": "releases-fastcomp-%releases-tag%",
|
||||||
"bitness": 64,
|
"bitness": 64,
|
||||||
"uses": ["releases-fastcomp-%releases-tag%-64bit", "node-12.9.1-64bit"],
|
"uses": ["node-12.9.1-64bit", "releases-fastcomp-%releases-tag%-64bit"],
|
||||||
"os": "linux"
|
"os": "linux",
|
||||||
|
"custom_install_script": "emscripten_npm_install"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "releases-fastcomp-%releases-tag%",
|
"version": "releases-fastcomp-%releases-tag%",
|
||||||
"bitness": 64,
|
"bitness": 64,
|
||||||
"uses": ["releases-fastcomp-%releases-tag%-64bit", "node-12.9.1-64bit"],
|
"uses": ["node-12.9.1-64bit", "releases-fastcomp-%releases-tag%-64bit"],
|
||||||
"os": "osx"
|
"os": "osx",
|
||||||
|
"custom_install_script": "emscripten_npm_install"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "releases-fastcomp-%releases-tag%",
|
"version": "releases-fastcomp-%releases-tag%",
|
||||||
"bitness": 64,
|
"bitness": 64,
|
||||||
"uses": ["releases-fastcomp-%releases-tag%-64bit", "node-12.9.1-64bit", "python-2.7.13.1-64bit", "java-8.152-64bit"],
|
"uses": ["node-12.9.1-64bit", "python-2.7.13.1-64bit", "java-8.152-64bit", "releases-fastcomp-%releases-tag%-64bit"],
|
||||||
"os": "win"
|
"os": "win",
|
||||||
|
"custom_install_script": "emscripten_npm_install"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "fastcomp-%precompiled_tag32%",
|
"version": "fastcomp-%precompiled_tag32%",
|
||||||
|
|||||||
Reference in New Issue
Block a user