Skip to content

Commit 4f6ae14

Browse files
authored
Add build.py --targets option to specify multiple targets. Update existing list-valued options to use argparse "extend" action. (microsoft#25718)
### Description <!-- Describe your changes. --> - Add build.py `--targets` option to specify multiple targets. - Update existing list-valued options to use argparse "extend" action. Unlike "append", "extend" won't create nested lists. ### 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. --> Allow multiple targets to be specified. Use newer argparse feature to simplify option handling.
1 parent 2678b9c commit 4f6ae14

File tree

2 files changed

+34
-20
lines changed

2 files changed

+34
-20
lines changed

tools/ci_build/build.py

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -203,10 +203,6 @@ def add_default_definition(definition_list, key, default_value):
203203
definition_list.append(key + "=" + default_value)
204204

205205

206-
def normalize_arg_list(nested_list):
207-
return [i for j in nested_list for i in j] if nested_list else []
208-
209-
210206
def number_of_parallel_jobs(args):
211207
return os.cpu_count() if args.parallel == 0 else args.parallel
212208

@@ -986,7 +982,7 @@ def generate_build_tree(
986982
]
987983

988984
# add default emscripten settings
989-
emscripten_settings = normalize_arg_list(args.emscripten_settings)
985+
emscripten_settings = list(args.emscripten_settings)
990986

991987
# set -s MALLOC
992988
if args.wasm_malloc is not None:
@@ -1330,13 +1326,14 @@ def clean_targets(cmake_path, build_dir, configs):
13301326
run_subprocess(cmd_args)
13311327

13321328

1333-
def build_targets(args, cmake_path, build_dir, configs, num_parallel_jobs, target=None):
1329+
def build_targets(args, cmake_path, build_dir, configs, num_parallel_jobs, targets: list[str] | None):
13341330
for config in configs:
13351331
log.info("Building targets for %s configuration", config)
13361332
build_dir2 = get_config_build_dir(build_dir, config)
13371333
cmd_args = [cmake_path, "--build", build_dir2, "--config", config]
1338-
if target:
1339-
cmd_args.extend(["--target", target])
1334+
if targets:
1335+
log.info(f"Building specified targets: {targets}")
1336+
cmd_args.extend(["--target", *targets])
13401337

13411338
build_tool_args = []
13421339
if num_parallel_jobs != 1:
@@ -2060,13 +2057,13 @@ def build_nuget_package(
20602057
# use the sln that include the mobile targets
20612058
sln = "OnnxRuntime.CSharp.sln"
20622059

2063-
# explicitly exclude mobile targets in this case
2064-
if sln != "OnnxRuntime.CSharp.sln" and have_exclude_mobile_targets_option is False:
2065-
msbuild_extra_options.append("IncludeMobileTargets=false")
2066-
20672060
# expand extra_options to add prefix
20682061
extra_options = ["/p:" + option for option in msbuild_extra_options]
20692062

2063+
# explicitly exclude mobile targets in this case
2064+
if sln != "OnnxRuntime.CSharp.sln" and have_exclude_mobile_targets_option is False:
2065+
extra_options.append("/p:IncludeMobileTargets=false")
2066+
20702067
# we have to use msbuild directly if including Xamarin targets as dotnet only supports MAUI (.net6)
20712068
use_dotnet = sln != "OnnxRuntime.CSharp.sln"
20722069

@@ -2281,7 +2278,7 @@ def main():
22812278
"Running as root is not allowed. If you really want to do that, use '--allow_running_as_root'."
22822279
)
22832280

2284-
cmake_extra_defines = normalize_arg_list(args.cmake_extra_defines)
2281+
cmake_extra_defines = list(args.cmake_extra_defines)
22852282

22862283
if args.use_tensorrt:
22872284
args.use_cuda = True
@@ -2560,7 +2557,7 @@ def main():
25602557
if args.parallel < 0:
25612558
raise BuildError(f"Invalid parallel job count: {args.parallel}")
25622559
num_parallel_jobs = number_of_parallel_jobs(args)
2563-
build_targets(args, cmake_path, build_dir, configs, num_parallel_jobs, args.target)
2560+
build_targets(args, cmake_path, build_dir, configs, num_parallel_jobs, args.targets)
25642561

25652562
if args.test:
25662563
if args.enable_onnx_tests:
@@ -2629,7 +2626,7 @@ def main():
26292626
getattr(args, "use_dml", False),
26302627
args.use_migraphx,
26312628
args.enable_training_apis,
2632-
normalize_arg_list(args.msbuild_extra_options),
2629+
args.msbuild_extra_options,
26332630
)
26342631

26352632
if args.test and args.build_nuget:
@@ -2642,7 +2639,7 @@ def main():
26422639
args.use_dnnl,
26432640
args.enable_training_apis,
26442641
configs,
2645-
normalize_arg_list(args.msbuild_extra_options),
2642+
args.msbuild_extra_options,
26462643
)
26472644

26482645
if args.gen_doc:

tools/ci_build/build_args.py

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,21 @@ def add_core_build_args(parser: argparse.ArgumentParser) -> None:
122122
type=int,
123123
help="Use parallel build. Optional value specifies max jobs (0=num CPUs).",
124124
)
125-
parser.add_argument("--target", help="Build a specific CMake target (e.g., winml_dll).")
125+
parser.add_argument(
126+
"--target",
127+
nargs=1,
128+
action="extend",
129+
metavar="TARGET",
130+
dest="targets",
131+
help="Build a specific CMake target (e.g., winml_dll).",
132+
)
133+
parser.add_argument(
134+
"--targets",
135+
nargs="+",
136+
action="extend",
137+
default=[],
138+
help="Build one or more specific CMake targets.",
139+
)
126140
parser.add_argument(
127141
"--compile_no_warning_as_error",
128142
action="store_true",
@@ -146,7 +160,8 @@ def add_cmake_build_config_args(parser: argparse.ArgumentParser) -> None:
146160
parser.add_argument(
147161
"--cmake_extra_defines",
148162
nargs="+",
149-
action="append",
163+
action="extend",
164+
default=[],
150165
help="Extra CMake definitions (-D<key>=<value>). Provide as <key>=<value>.",
151166
)
152167
parser.add_argument("--cmake_path", default="cmake", help="Path to the CMake executable.")
@@ -366,7 +381,8 @@ def add_webassembly_args(parser: argparse.ArgumentParser) -> None:
366381
parser.add_argument(
367382
"--emscripten_settings",
368383
nargs="+",
369-
action="append",
384+
action="extend",
385+
default=[],
370386
help="Extra emscripten settings (-s <key>=<value>). Provide as <key>=<value>.",
371387
)
372388

@@ -562,7 +578,8 @@ def add_csharp_binding_args(parser: argparse.ArgumentParser) -> None:
562578
parser.add_argument(
563579
"--msbuild_extra_options",
564580
nargs="+",
565-
action="append",
581+
action="extend",
582+
default=[],
566583
help="Extra MSBuild properties (/p:key=value). Provide as key=value.",
567584
)
568585

0 commit comments

Comments
 (0)