mirror of
https://github.com/saymrwulf/onnxruntime.git
synced 2026-05-31 23:27:43 +00:00
[wasm] emsdk: allow to install emscripten only (#7961)
This commit is contained in:
parent
f352d54743
commit
9b5f749176
4 changed files with 3287 additions and 29 deletions
1
.gitmodules
vendored
1
.gitmodules
vendored
|
|
@ -78,3 +78,4 @@
|
|||
path = cmake/external/emsdk
|
||||
url = https://github.com/emscripten-core/emsdk.git
|
||||
branch = 2.0.23
|
||||
ignore = dirty
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
3258
tools/ci_build/wasm/emsdk.py.patch
Normal file
3258
tools/ci_build/wasm/emsdk.py.patch
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue