mirror of
https://github.com/saymrwulf/onnxruntime.git
synced 2026-05-14 20:48:00 +00:00
### Description
This PR includes the following changes:
- upgrade js dependencies
- enable STRICT mode for web assembly build.
- corresponding fix for cmake-js upgrade
- corresponsing fix for linter upgrade
- upgrade default typescript compile option of:
- `moduleResolution`: from `node` to `node16`
- `target`: from `es2017` to `es2020`
- fix ESM module import in commonJS source file
## change explanation
### changes to onnxruntime_webassembly.cmake
`-s WASM=1` and `-s LLD_REPORT_UNDEFINED` in latest version is
by-default and deprecated.
### changes to onnxruntime_node.cmake
The npm package `cmake-js` updated its way to find file `node.lib`.
previously it downloads this file from Node.js public release channel,
and now it generates it from a definition file.
The node.js release channel does not contain a windows/arm64 version, so
previously cmake-js will fail to download `node.lib` for that platform.
this is why we made special handling to download the unofficial binary
to build. now this is no longer needed so we removed that from the cmake
file.
### changes to tsconfig.json
`node16` module resolution supports async import and `es2020` as target
supports top level await.
86 lines
3 KiB
TypeScript
86 lines
3 KiB
TypeScript
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
// Licensed under the MIT License.
|
|
|
|
import {spawnSync} from 'child_process';
|
|
import * as fs from 'fs-extra';
|
|
import minimist from 'minimist';
|
|
import * as os from 'os';
|
|
import * as path from 'path';
|
|
|
|
// command line flags
|
|
const buildArgs = minimist(process.argv.slice(2));
|
|
|
|
// --config=Debug|Release|RelWithDebInfo
|
|
const CONFIG: 'Debug'|'Release'|'RelWithDebInfo' =
|
|
buildArgs.config || (os.platform() === 'win32' ? 'RelWithDebInfo' : 'Release');
|
|
if (CONFIG !== 'Debug' && CONFIG !== 'Release' && CONFIG !== 'RelWithDebInfo') {
|
|
throw new Error(`unrecognized config: ${CONFIG}`);
|
|
}
|
|
// --arch=x64|ia32|arm64|arm
|
|
const ARCH: 'x64'|'ia32'|'arm64'|'arm' = buildArgs.arch || os.arch();
|
|
if (ARCH !== 'x64' && ARCH !== 'ia32' && ARCH !== 'arm64' && ARCH !== 'arm') {
|
|
throw new Error(`unrecognized architecture: ${ARCH}`);
|
|
}
|
|
// --onnxruntime-build-dir=
|
|
const ONNXRUNTIME_BUILD_DIR = buildArgs['onnxruntime-build-dir'];
|
|
// --rebuild
|
|
const REBUILD = !!buildArgs.rebuild;
|
|
|
|
// build path
|
|
const ROOT_FOLDER = path.join(__dirname, '..');
|
|
const BIN_FOLDER = path.join(ROOT_FOLDER, 'bin');
|
|
const BUILD_FOLDER = path.join(ROOT_FOLDER, 'build');
|
|
|
|
// if rebuild, clean up the dist folders
|
|
if (REBUILD) {
|
|
fs.removeSync(BIN_FOLDER);
|
|
fs.removeSync(BUILD_FOLDER);
|
|
}
|
|
|
|
const args = [
|
|
'cmake-js',
|
|
(REBUILD ? 'reconfigure' : 'configure'),
|
|
`--arch=${ARCH}`,
|
|
'--CDnapi_build_version=3',
|
|
`--CDCMAKE_BUILD_TYPE=${CONFIG}`,
|
|
];
|
|
if (ONNXRUNTIME_BUILD_DIR && typeof ONNXRUNTIME_BUILD_DIR === 'string') {
|
|
args.push(`--CDONNXRUNTIME_BUILD_DIR=${ONNXRUNTIME_BUILD_DIR}`);
|
|
}
|
|
|
|
// set CMAKE_OSX_ARCHITECTURES for macOS build
|
|
if (os.platform() === 'darwin') {
|
|
if (ARCH === 'x64') {
|
|
args.push('--CDCMAKE_OSX_ARCHITECTURES=x86_64');
|
|
} else if (ARCH === 'arm64') {
|
|
args.push('--CDCMAKE_OSX_ARCHITECTURES=arm64');
|
|
} else {
|
|
throw new Error(`architecture not supported for macOS build: ${ARCH}`);
|
|
}
|
|
}
|
|
|
|
// In Windows, "npx cmake-js configure" uses a powershell script to detect the Visual Studio installation.
|
|
// The script uses the environment variable LIB. If an invalid path is specified in LIB, the script will fail.
|
|
// So we override the LIB environment variable to remove invalid paths.
|
|
const envOverride = os.platform() === 'win32' && process.env.LIB ?
|
|
{...process.env, LIB: process.env.LIB.split(';').filter(fs.existsSync).join(';')} :
|
|
process.env;
|
|
|
|
// launch cmake-js configure
|
|
const procCmakejs = spawnSync('npx', args, {shell: true, stdio: 'inherit', cwd: ROOT_FOLDER, env: envOverride});
|
|
if (procCmakejs.status !== 0) {
|
|
if (procCmakejs.error) {
|
|
console.error(procCmakejs.error);
|
|
}
|
|
process.exit(procCmakejs.status === null ? undefined : procCmakejs.status);
|
|
}
|
|
|
|
// launch cmake to build
|
|
const procCmake =
|
|
spawnSync('cmake', ['--build', '.', '--config', CONFIG], {shell: true, stdio: 'inherit', cwd: BUILD_FOLDER});
|
|
if (procCmake.status !== 0) {
|
|
if (procCmake.error) {
|
|
console.error(procCmake.error);
|
|
}
|
|
process.exit(procCmake.status === null ? undefined : procCmake.status);
|
|
}
|