[wasm] emsdk: allow to install emscripten only (#7961)

This commit is contained in:
Yulong Wang 2021-06-07 09:45:02 -07:00 committed by GitHub
parent f352d54743
commit 9b5f749176
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 3287 additions and 29 deletions

1
.gitmodules vendored
View file

@ -78,3 +78,4 @@
path = cmake/external/emsdk
url = https://github.com/emscripten-core/emsdk.git
branch = 2.0.23
ignore = dirty

View file

@ -5,7 +5,6 @@
import argparse
import contextlib
import glob
import json
import os
import re
import shutil
@ -348,6 +347,8 @@ def parse_arguments():
help="Build WebAssembly with DWARF format debug info")
parser.add_argument(
"--wasm_malloc", default="dlmalloc", help="Specify memory allocator for WebAssembly")
parser.add_argument(
"--emsdk_version", default="2.0.23", help="Specify version of emsdk")
# Arguments needed by CI
parser.add_argument(
@ -2032,38 +2033,36 @@ def main():
args.test = False
if args.build_wasm:
# install emscripten if not exist.
# since emscripten doesn't support file packaging required for unit tests,
# need to apply patch with the specific version of emscripten.
# once patch is committed to emsdk repository, this must be replaced with 'latest'.
emsdk_version = "2.0.23"
emsdk_version = args.emsdk_version
emsdk_dir = os.path.join(source_dir, "cmake", "external", "emsdk")
emsdk_file = os.path.join(emsdk_dir, "emsdk.bat") if is_windows() else os.path.join(emsdk_dir, "emsdk")
emsdk_version_file = os.path.join(emsdk_dir, "upstream", "emscripten", "emscripten-version.txt")
emscripten_cmake_toolchain_file = os.path.join(emsdk_dir, "upstream", "emscripten", "cmake", "Modules",
"Platform", "Emscripten.cmake")
if os.path.exists(emsdk_version_file):
with open(emsdk_version_file) as f:
emsdk_version_data = json.load(f)
emsdk_version_match = isinstance(emsdk_version_data, str) and emsdk_version_data == emsdk_version
if not os.path.exists(emscripten_cmake_toolchain_file) or not emsdk_version_match:
print("Installing emsdk...")
run_subprocess([emsdk_file, "install", emsdk_version], cwd=emsdk_dir)
print("Activating emsdk...")
# apply patch to emsdk/emsdk.py
#
# Note: this patch fixes bug in emsdk to install a single emscripten tool.
#
# should remove patch file and remove "ignore = dirty" in .gitmodules once the following PR get
# merged and included in a new release:
# https://github.com/emscripten-core/emsdk/pull/834
shutil.copy(
os.path.join(SCRIPT_DIR, "wasm", "emsdk.py.patch"),
os.path.join(emsdk_dir, "emsdk.py"))
log.info("Installing emsdk...")
run_subprocess([emsdk_file, "install", emsdk_version], cwd=emsdk_dir)
log.info("Activating emsdk...")
run_subprocess([emsdk_file, "activate", emsdk_version], cwd=emsdk_dir)
if args.test:
# if wasm test is enabled, apply emsdk file_packager.py patch to enable file I/O from node.js
#
# Note: this patch enables file_packager.py to generate JavaScript code to support preload files in
# Node.js
# should be removed once the following PR get merged:
# https://github.com/emscripten-core/emscripten/pull/11785
shutil.copy(
os.path.join(SCRIPT_DIR, "wasm", "file_packager.py.patch"),
os.path.join(emsdk_dir, "upstream", "emscripten", "tools", "file_packager.py"))
# apply patch to file_packager.py
#
# Note: this patch enables file_packager.py to generate JavaScript code to support preload files in Node.js
#
# should remove patch file once the following PR get merged and included in a new release:
# https://github.com/emscripten-core/emscripten/pull/11785 (merged, not release yet)
# https://github.com/emscripten-core/emscripten/pull/14372 (merged, not release yet)
shutil.copy(
os.path.join(SCRIPT_DIR, "wasm", "file_packager.py.patch"),
os.path.join(emsdk_dir, "upstream", "emscripten", "tools", "file_packager.py"))
if (args.android or args.ios or args.enable_windows_store or args.build_wasm
or is_cross_compiling_on_apple(args)) and args.path_to_protoc_exe is None:

View file

@ -87,7 +87,7 @@ jobs:
displayName: 'Build and test'
inputs:
scriptPath: '$(Build.SourcesDirectory)\tools\ci_build\build.py'
arguments: '--config $(BuildConfig) --build_dir $(Build.BinariesDirectory) --skip_submodule_sync --build_wasm --cmake_generator "Visual Studio 16 2019" $(CmdParams)'
arguments: '--config $(BuildConfig) --build_dir $(Build.BinariesDirectory) --skip_submodule_sync --build_wasm --emsdk_version releases-upstream-77b065ace39e6ab21446e13f92897f956c80476a-64bit --cmake_generator "Visual Studio 16 2019" $(CmdParams)'
workingDirectory: '$(Build.BinariesDirectory)'
- script: |
copy $(Build.BinariesDirectory)\$(BuildConfig)\$(WasmFileName)*.* $(Build.ArtifactStagingDirectory)

File diff suppressed because it is too large Load diff