mirror of
https://github.com/saymrwulf/onnxruntime.git
synced 2026-07-22 19:23:30 +00:00
### Description Merge main to WindowsAI ### Motivation and Context <!-- - Why is this change required? What problem does it solve? - If it fixes an open issue, please link to the issue here. --> --------- Signed-off-by: Nash <george.nash@intel.com> Signed-off-by: Yiming Hu <yiming.hu@amd.com> Signed-off-by: Liqun Fu <liqfu@microsoft.com> Co-authored-by: Kaz Nishimura <kazssym@linuxfront.com> Co-authored-by: Tianlei Wu <tlwu@microsoft.com> Co-authored-by: Nat Kershaw (MSFT) <nakersha@microsoft.com> Co-authored-by: Yulong Wang <7679871+fs-eire@users.noreply.github.com> Co-authored-by: Changming Sun <chasun@microsoft.com> Co-authored-by: zesongw <zesong.wang@intel.com> Co-authored-by: Yi Zhang <zhanyi@microsoft.com> Co-authored-by: Dmitri Smirnov <yuslepukhin@users.noreply.github.com> Co-authored-by: Yifan Li <109183385+yf711@users.noreply.github.com> Co-authored-by: simonjub <78098752+simonjub@users.noreply.github.com> Co-authored-by: PeixuanZuo <94887879+PeixuanZuo@users.noreply.github.com> Co-authored-by: Adrian Lizarraga <adlizarraga@microsoft.com> Co-authored-by: Edward Chen <18449977+edgchen1@users.noreply.github.com> Co-authored-by: Arthur Islamov <arthur@islamov.ai> Co-authored-by: Jambay Kinley <jambaykinley@microsoft.com> Co-authored-by: Justin Chu <justinchuby@users.noreply.github.com> Co-authored-by: Wei-Sheng Chin <wschin@outlook.com> Co-authored-by: Bowen Bao <bowbao@microsoft.com> Co-authored-by: Hariharan Seshadri <shariharan91@gmail.com> Co-authored-by: Numfor Tiapo <numsmt2@gmail.com> Co-authored-by: Vincent Wang <wangwchpku@outlook.com> Co-authored-by: Pranav Sharma <prs@microsoft.com> Co-authored-by: George Nash <george.nash@intel.com> Co-authored-by: Abhishek Jindal <abjindal@microsoft.com> Co-authored-by: pengwa <pengwa@microsoft.com> Co-authored-by: Yiming Hu <woinck@users.noreply.github.com> Co-authored-by: Jiajia Qin <jiajia.qin@intel.com> Co-authored-by: Lukas Berbuer <36054362+lukasberbuer@users.noreply.github.com> Co-authored-by: Wanming Lin <wanming.lin@intel.com> Co-authored-by: Xavier Dupré <xadupre@users.noreply.github.com> Co-authored-by: aimilefth <60664743+aimilefth@users.noreply.github.com> Co-authored-by: Baiju Meswani <bmeswani@microsoft.com> Co-authored-by: Adam Pocock <adam.pocock@oracle.com> Co-authored-by: Chi Lo <54722500+chilo-ms@users.noreply.github.com> Co-authored-by: RandySheriffH <48490400+RandySheriffH@users.noreply.github.com> Co-authored-by: Randy Shuai <rashuai@microsoft.com> Co-authored-by: Vadym Stupakov <vadim.stupakov@gmail.com> Co-authored-by: Jian Chen <cjian@microsoft.com> Co-authored-by: Brian Lambert <98757707+brian-pieces@users.noreply.github.com> Co-authored-by: Nicolò Lucchesi <nicolo.lucchesi@gmail.com> Co-authored-by: liqun Fu <liqfu@microsoft.com> Co-authored-by: trajep <trajepl@gmail.com> Co-authored-by: Scott McKay <skottmckay@gmail.com> Co-authored-by: Mustafa Ateş Uzun <mustafauzun0@gmail.com> Co-authored-by: MistEO <mistereo@hotmail.com> Co-authored-by: satyajandhyala <satya.k.jandhyala@gmail.com> Co-authored-by: shaahji <96227573+shaahji@users.noreply.github.com> Co-authored-by: Rachel Guo <35738743+YUNQIUGUO@users.noreply.github.com> Co-authored-by: rachguo <rachguo@rachguos-Mini.attlocal.net> Co-authored-by: Caroline Zhu <wolfivyaura@gmail.com> Co-authored-by: Caroline Zhu <carolinezhu@microsoft.com> Co-authored-by: Guenther Schmuelling <guschmue@microsoft.com> Co-authored-by: xhcao <xinghua.cao@intel.com> Co-authored-by: Ella Charlaix <80481427+echarlaix@users.noreply.github.com> Co-authored-by: Xu Xing <xing.xu@intel.com> Co-authored-by: Hector Li <hecli@microsoft.com> Co-authored-by: Ye Wang <52801275+wangyems@users.noreply.github.com> Co-authored-by: Your Name <you@example.com> Co-authored-by: Benedikt Hilmes <benedikt.hilmes@rwth-aachen.de> Co-authored-by: rachguo <rachguo@rachguos-Mac-mini.local> Co-authored-by: George Wu <jywu@microsoft.com> Co-authored-by: JiCheng <wejoncy@163.com> Co-authored-by: Sheil Kumar <smk2007@gmail.com> Co-authored-by: Sheil Kumar <sheilk@microsoft.com> Co-authored-by: cloudhan <guangyunhan@microsoft.com> Co-authored-by: kyoshisuki <143475866+kyoshisuki@users.noreply.github.com> Co-authored-by: aciddelgado <139922440+aciddelgado@users.noreply.github.com> Co-authored-by: tlwu@microsoft.com <tlwu@a100.crj0ad2y1kku1j4yxl4sj10o4e.gx.internal.cloudapp.net> Co-authored-by: Maximilian Müller <44298237+gedoensmax@users.noreply.github.com> Co-authored-by: Tang, Cheng <souptc@gmail.com> Co-authored-by: Cheng Tang <chenta@microsoft.com@orttrainingdev9.d32nl1ml4oruzj4qz3bqlggovf.px.internal.cloudapp.net> Co-authored-by: Cheng Tang <chenta@microsoft.com> Co-authored-by: Jeff Daily <jeff.daily@amd.com> Co-authored-by: cloudhan <cloudhan@outlook.com> Co-authored-by: Yufeng Li <liyufeng1987@gmail.com> Co-authored-by: Zhang Lei <zhang.huanning@hotmail.com> Co-authored-by: Dwayne Robinson <fdwr@hotmail.com> Co-authored-by: Zhipeng Han <zhipeng.han@outlook.com> Co-authored-by: Thiago Crepaldi <thiago.crepaldi@microsoft.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Patrice Vignola <vignola.patrice@gmail.com> Co-authored-by: kunal-vaishnavi <115581922+kunal-vaishnavi@users.noreply.github.com> Co-authored-by: snadampal <87143774+snadampal@users.noreply.github.com> Co-authored-by: Sumit Agarwal <sumitagarwal330@gmail.com> Co-authored-by: Ashwini Khade <askhade@microsoft.com> Co-authored-by: Yang Gu <yang.gu@intel.com> Co-authored-by: Cheng Tang <chenta@a100.crj0ad2y1kku1j4yxl4sj10o4e.gx.internal.cloudapp.net> Co-authored-by: mindest <30493312+mindest@users.noreply.github.com> Co-authored-by: Scott McKay <Scott.McKay@microsoft.com> Co-authored-by: Xavier Dupre <xadupre@microsoft.com@orttrainingdev9.d32nl1ml4oruzj4qz3bqlggovf.px.internal.cloudapp.net> Co-authored-by: guyang3532 <62738430+guyang3532@users.noreply.github.com> Co-authored-by: Carson M <carson@pyke.io> Co-authored-by: sophies927 <107952697+sophies927@users.noreply.github.com>
200 lines
7.3 KiB
Python
200 lines
7.3 KiB
Python
#!/usr/bin/env python3
|
|
# Copyright (c) Microsoft Corporation. All rights reserved.
|
|
# Licensed under the MIT License.
|
|
|
|
import argparse
|
|
import contextlib
|
|
import json
|
|
import os
|
|
import pathlib
|
|
import shutil
|
|
import subprocess
|
|
import sys
|
|
import tempfile
|
|
|
|
from c.assemble_c_pod_package import assemble_c_pod_package
|
|
from package_assembly_utils import PackageVariant, gen_file_from_template, get_ort_version
|
|
|
|
SCRIPT_PATH = pathlib.Path(__file__).resolve(strict=True)
|
|
REPO_DIR = SCRIPT_PATH.parents[4]
|
|
|
|
|
|
def _test_ios_packages(args):
|
|
# check if CocoaPods is installed
|
|
if shutil.which("pod") is None:
|
|
if args.fail_if_cocoapods_missing:
|
|
raise ValueError("CocoaPods is required for this test")
|
|
else:
|
|
print("CocoaPods is not installed, ignore this test")
|
|
return
|
|
|
|
# Now we need to create a zip file contains the framework and the podspec file, both of these 2 files
|
|
# should be under the c_framework_dir
|
|
c_framework_dir = args.c_framework_dir.resolve()
|
|
if not c_framework_dir.is_dir():
|
|
raise FileNotFoundError(f"c_framework_dir {c_framework_dir} is not a folder.")
|
|
|
|
has_framework = (c_framework_dir / "onnxruntime.framework").exists()
|
|
has_xcframework = (c_framework_dir / "onnxruntime.xcframework").exists()
|
|
|
|
if not has_framework and not has_xcframework:
|
|
raise FileNotFoundError(f"{c_framework_dir} does not have onnxruntime.framework/xcframework")
|
|
|
|
if has_framework and has_xcframework:
|
|
raise ValueError("Cannot proceed when both onnxruntime.framework and onnxruntime.xcframework exist")
|
|
|
|
framework_name = "onnxruntime.framework" if has_framework else "onnxruntime.xcframework"
|
|
|
|
# create a temp folder
|
|
|
|
with contextlib.ExitStack() as context_stack:
|
|
if args.test_project_stage_dir is None:
|
|
stage_dir = pathlib.Path(context_stack.enter_context(tempfile.TemporaryDirectory())).resolve()
|
|
else:
|
|
# If we specify the stage dir, then use it to create test project
|
|
stage_dir = args.test_project_stage_dir.resolve()
|
|
if os.path.exists(stage_dir):
|
|
shutil.rmtree(stage_dir)
|
|
os.makedirs(stage_dir)
|
|
|
|
# assemble the test project here
|
|
target_proj_path = stage_dir / "ios_package_test"
|
|
|
|
# copy the test project source files to target_proj_path
|
|
test_proj_path = pathlib.Path(REPO_DIR, "onnxruntime/test/platform/ios/ios_package_test")
|
|
shutil.copytree(test_proj_path, target_proj_path)
|
|
|
|
# assemble local pod files here
|
|
local_pods_dir = stage_dir / "local_pods"
|
|
|
|
# We will only publish xcframework, however, assembly of the xcframework is a post process
|
|
# and it cannot be done by CMake for now. See, https://gitlab.kitware.com/cmake/cmake/-/issues/21752
|
|
# For a single sysroot and arch built by build.py or cmake, we can only generate framework
|
|
# We still need a way to test it. framework_dir and public_headers_dir have different values when testing a
|
|
# framework and a xcframework.
|
|
framework_dir = args.c_framework_dir / framework_name
|
|
public_headers_dir = framework_dir / "Headers" if has_framework else args.c_framework_dir / "Headers"
|
|
|
|
pod_name, podspec = assemble_c_pod_package(
|
|
staging_dir=local_pods_dir,
|
|
pod_version=get_ort_version(),
|
|
framework_info_file=args.framework_info_file,
|
|
public_headers_dir=public_headers_dir,
|
|
framework_dir=framework_dir,
|
|
package_variant=PackageVariant[args.variant],
|
|
)
|
|
|
|
# move podspec out to target_proj_path first
|
|
podspec = shutil.move(podspec, target_proj_path / podspec.name)
|
|
|
|
# create a zip file contains the framework
|
|
zip_file_path = local_pods_dir / f"{pod_name}.zip"
|
|
# shutil.make_archive require target file as full path without extension
|
|
shutil.make_archive(zip_file_path.with_suffix(""), "zip", root_dir=local_pods_dir)
|
|
|
|
# update the podspec to point to the local framework zip file
|
|
with open(podspec) as file:
|
|
file_data = file.read()
|
|
|
|
file_data = file_data.replace("file:///http_source_placeholder", f"file:///{zip_file_path}")
|
|
|
|
with open(podspec, "w") as file:
|
|
file.write(file_data)
|
|
|
|
# generate Podfile to point to pod
|
|
gen_file_from_template(
|
|
target_proj_path / "Podfile.template",
|
|
target_proj_path / "Podfile",
|
|
{"C_POD_NAME": pod_name, "C_POD_PODSPEC": f"./{podspec.name}"},
|
|
)
|
|
|
|
# clean the Cocoapods cache first, in case the same pod was cached in previous runs
|
|
subprocess.run(["pod", "cache", "clean", "--all"], shell=False, check=True, cwd=target_proj_path)
|
|
|
|
# install pods
|
|
subprocess.run(["pod", "install"], shell=False, check=True, cwd=target_proj_path)
|
|
|
|
# run the tests
|
|
if not args.prepare_test_project_only:
|
|
simulator_device_info = subprocess.check_output(
|
|
[
|
|
sys.executable,
|
|
str(REPO_DIR / "tools" / "ci_build" / "github" / "apple" / "get_simulator_device_info.py"),
|
|
],
|
|
text=True,
|
|
).strip()
|
|
print(f"Simulator device info:\n{simulator_device_info}")
|
|
|
|
simulator_device_info = json.loads(simulator_device_info)
|
|
|
|
subprocess.run(
|
|
[
|
|
"xcrun",
|
|
"xcodebuild",
|
|
"test",
|
|
"-workspace",
|
|
"./ios_package_test.xcworkspace",
|
|
"-scheme",
|
|
"ios_package_test",
|
|
"-destination",
|
|
f"platform=iOS Simulator,id={simulator_device_info['device_udid']}",
|
|
],
|
|
shell=False,
|
|
check=True,
|
|
cwd=target_proj_path,
|
|
)
|
|
|
|
|
|
def parse_args():
|
|
parser = argparse.ArgumentParser(
|
|
os.path.basename(__file__), description="Test iOS framework using CocoaPods package."
|
|
)
|
|
|
|
parser.add_argument(
|
|
"--fail_if_cocoapods_missing",
|
|
action="store_true",
|
|
help="This script will fail if CocoaPods is not installed, "
|
|
"will not throw error unless fail_if_cocoapod_missing is set.",
|
|
)
|
|
|
|
parser.add_argument(
|
|
"--framework_info_file",
|
|
type=pathlib.Path,
|
|
required=True,
|
|
help="Path to the framework_info.json file containing additional values for the podspec. "
|
|
"This file should be generated by CMake in the build directory.",
|
|
)
|
|
|
|
parser.add_argument(
|
|
"--c_framework_dir", type=pathlib.Path, required=True, help="Provide the parent directory for C/C++ framework"
|
|
)
|
|
|
|
parser.add_argument(
|
|
"--variant",
|
|
choices=PackageVariant.all_variant_names(),
|
|
default=PackageVariant.Test.name,
|
|
help="Pod package variant.",
|
|
)
|
|
|
|
parser.add_argument(
|
|
"--test_project_stage_dir",
|
|
type=pathlib.Path,
|
|
help="The stage dir for the test project, if not specified, will use a temporary path",
|
|
)
|
|
|
|
parser.add_argument(
|
|
"--prepare_test_project_only",
|
|
action="store_true",
|
|
help="Prepare the test project only, without running the tests",
|
|
)
|
|
|
|
return parser.parse_args()
|
|
|
|
|
|
def main():
|
|
args = parse_args()
|
|
_test_ios_packages(args)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|