Skip to content

Commit 17ca196

Browse files
committed
standardize cmake-related arguments as element properties
1 parent fa5a6c9 commit 17ca196

1 file changed

Lines changed: 92 additions & 105 deletions

File tree

build.py

Lines changed: 92 additions & 105 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@
9393
THIS_SCRIPT_DIR = os.path.dirname(os.path.abspath(getsourcefile(lambda: 0)))
9494

9595
ELEMENTS = {
96-
'backend': ['tag', 'org'],
96+
'backend': ['tag', 'org', 'cmake'],
9797
'repoagent': ['tag', 'org'],
9898
'cache': ['tag', 'org'],
9999
'filesystem': ['strict'],
@@ -403,22 +403,15 @@ def cmake_core_arg(name, type, value):
403403
# command-line specified value if one is given.
404404
if name in OVERRIDE_CORE_CMAKE_FLAGS:
405405
value = OVERRIDE_CORE_CMAKE_FLAGS[name]
406-
if type is None:
407-
type = ""
408-
else:
409-
type = ":{}".format(type)
406+
type = ":{}".format(type) if type else ""
410407
return '"-D{}{}={}"'.format(name, type, value)
411408

412409

413410
def cmake_core_enable(name, flag):
414411
# Return cmake -D setting to set name=flag?ON:OFF for core
415412
# build. Use command-line specified value for 'flag' if one is
416413
# given.
417-
if name in OVERRIDE_CORE_CMAKE_FLAGS:
418-
value = OVERRIDE_CORE_CMAKE_FLAGS[name]
419-
else:
420-
value = "ON" if flag else "OFF"
421-
return '"-D{}:BOOL={}"'.format(name, value)
414+
return cmake_core_arg(name, "BOOL", "ON" if flag else "OFF")
422415

423416

424417
def cmake_core_extra_args():
@@ -428,46 +421,47 @@ def cmake_core_extra_args():
428421
return args
429422

430423

431-
def cmake_backend_arg(backend, name, type, value):
432-
# Return cmake -D setting to set name=value for backend build. Use
424+
def cmake_element_arg(element, element_val, name, type, value):
425+
# Return cmake -D setting to set name=value for <element> build. Use
433426
# command-line specified value if one is given.
434-
if backend in OVERRIDE_BACKEND_CMAKE_FLAGS:
435-
if name in OVERRIDE_BACKEND_CMAKE_FLAGS[backend]:
436-
value = OVERRIDE_BACKEND_CMAKE_FLAGS[backend][name]
437-
if type is None:
438-
type = ""
439-
else:
440-
type = ":{}".format(type)
427+
element_flags = getattr(FLAGS, element)
428+
if "cmake_override" in element_flags[element_val]:
429+
value = element_flags[element_val]["cmake_override"].get(name, value)
430+
type = ":{}".format(type) if type else ""
441431
return '"-D{}{}={}"'.format(name, type, value)
442432

443433

444-
def cmake_backend_enable(backend, name, flag):
445-
# Return cmake -D setting to set name=flag?ON:OFF for backend
434+
def cmake_backend_arg(*args, **kwargs):
435+
return cmake_element_arg('backend', *args, **kwargs)
436+
437+
438+
def cmake_element_enable(element, element_val, name, flag):
439+
# Return cmake -D setting to set name=flag?ON:OFF for <element>
446440
# build. Use command-line specified value for 'flag' if one is
447441
# given.
448-
value = None
449-
if backend in OVERRIDE_BACKEND_CMAKE_FLAGS:
450-
if name in OVERRIDE_BACKEND_CMAKE_FLAGS[backend]:
451-
value = OVERRIDE_BACKEND_CMAKE_FLAGS[backend][name]
452-
if value is None:
453-
value = "ON" if flag else "OFF"
454-
return '"-D{}:BOOL={}"'.format(name, value)
442+
return cmake_element_arg(element, element_val, name, "BOOL", "ON" if flag else "OFF")
455443

456444

457-
def cmake_backend_extra_args(backend):
445+
def cmake_backend_enable(*args, **kwargs):
446+
return cmake_element_enable('backend', *args, **kwargs)
447+
448+
449+
def cmake_element_extra_args(element, element_val):
458450
args = []
459-
if backend in EXTRA_BACKEND_CMAKE_FLAGS:
460-
for k, v in EXTRA_BACKEND_CMAKE_FLAGS[backend].items():
451+
element_flags = getattr(FLAGS, element)
452+
if "cmake_extra" in element_flags[element_val]:
453+
for k, v in element_flags[element_val]["cmake_extra"].items():
461454
args.append('"-D{}={}"'.format(k, v))
462455
return args
463456

464457

458+
def cmake_backend_extra_args(backend):
459+
return cmake_element_extra_args('backend', backend)
460+
461+
465462
def cmake_repoagent_arg(name, type, value):
466463
# For now there is no override for repo-agents
467-
if type is None:
468-
type = ""
469-
else:
470-
type = ":{}".format(type)
464+
type = ":{}".format(type) if type else ""
471465
return '"-D{}{}={}"'.format(name, type, value)
472466

473467

@@ -485,10 +479,7 @@ def cmake_repoagent_extra_args():
485479

486480
def cmake_cache_arg(name, type, value):
487481
# For now there is no override for caches
488-
if type is None:
489-
type = ""
490-
else:
491-
type = ":{}".format(type)
482+
type = ":{}".format(type) if type else ""
492483
return '"-D{}{}={}"'.format(name, type, value)
493484

494485

@@ -2611,6 +2602,34 @@ def enable_all(default):
26112602
help="Enable all standard released Triton features, backends, repository agents, caches, endpoints, and file systems.",
26122603
)
26132604

2605+
def add_cmake_args(element, parser):
2606+
dependent_kwargs = dict(
2607+
nargs=3,
2608+
metavar=(f"<{element}>","<name>","<value>"),
2609+
)
2610+
if element=="core":
2611+
# "core" is a special case: it is already a specific component, so no need to select a specific instance of its element type
2612+
dependent_kwargs = dict(
2613+
nargs=2,
2614+
metavar=("<name>","<value>"),
2615+
)
2616+
parser.add_argument(
2617+
f"--extra-{element}-cmake-arg",
2618+
action="append",
2619+
required=False,
2620+
default=[],
2621+
help=f"Extra CMake argument for {element} build. The argument is passed to CMake as -D<name>=<value> and is included after all CMake arguments added by build.py.",
2622+
**dependent_kwargs
2623+
)
2624+
parser.add_argument(
2625+
f"--override-{element}-cmake-arg",
2626+
action="append",
2627+
required=False,
2628+
default=[],
2629+
help=f"Override specified backend CMake argument in the {element} build. The argument is passed to CMake as -D<name>=<value>. This flag only impacts CMake arguments that are used by build.py. To unconditionally add a CMake argument to the {element} build use --extra-{element}-cmake-arg.",
2630+
**dependent_kwargs
2631+
)
2632+
26142633
element_groups = {}
26152634
for element, properties in ELEMENTS.items():
26162635
if 'strict' in properties:
@@ -2665,6 +2684,11 @@ def enable_all(default):
26652684
default=[],
26662685
help=f'Select <org> for specified <{element}>, to use the fork of the corresponding repository from <org> instead of the default --github-organization value.',
26672686
)
2687+
if 'cmake' in properties:
2688+
add_cmake_args(element, group)
2689+
2690+
# special case
2691+
add_cmake_args("core", element_groups["component"])
26682692

26692693
parser.add_argument(
26702694
"--min-compute-capability",
@@ -2686,42 +2710,6 @@ def enable_all(default):
26862710
default=False,
26872711
help="Do not create fresh clones of repos that have already been cloned.",
26882712
)
2689-
parser.add_argument(
2690-
"--extra-core-cmake-arg",
2691-
action="append",
2692-
metavar=("<name>","<value>"),
2693-
nargs=2,
2694-
required=False,
2695-
default=[],
2696-
help="Extra CMake argument. The argument is passed to CMake as -D<name>=<value> and is included after all CMake arguments added by build.py for the core builds.",
2697-
)
2698-
parser.add_argument(
2699-
"--override-core-cmake-arg",
2700-
action="append",
2701-
metavar=("<name>","<value>"),
2702-
nargs=2,
2703-
required=False,
2704-
default=[],
2705-
help="Override specified CMake argument in the build. The argument is passed to CMake as -D<name>=<value>. This flag only impacts CMake arguments that are used by build.py. To unconditionally add a CMake argument to the core build use --extra-core-cmake-arg.",
2706-
)
2707-
parser.add_argument(
2708-
"--extra-backend-cmake-arg",
2709-
action="append",
2710-
metavar=("<backend>","<name>","<value>"),
2711-
nargs=3,
2712-
required=False,
2713-
default=[],
2714-
help="Extra CMake argument for a backend build. The argument is passed to CMake as -D<name>=<value> and is included after all CMake arguments added by build.py for the backend.",
2715-
)
2716-
parser.add_argument(
2717-
"--override-backend-cmake-arg",
2718-
action="append",
2719-
metavar=("<backend>","<name>","<value>"),
2720-
nargs=3,
2721-
required=False,
2722-
default=[],
2723-
help="Override specified backend CMake argument in the build. The argument is passed to CMake as -D<name>=<value>. This flag only impacts CMake arguments that are used by build.py. To unconditionally add a CMake argument to the backend build use --extra-backend-cmake-arg.",
2724-
)
27252713
parser.add_argument(
27262714
"--release-version",
27272715
required=False,
@@ -2869,6 +2857,9 @@ def default_element_dict(element):
28692857
default["tag"] = default_repo_tag
28702858
if "org" in ELEMENTS[element]:
28712859
default["org"] = FLAGS.github_organization
2860+
if "cmake" in ELEMENTS[element]:
2861+
default["cmake_extra"] = {}
2862+
default["cmake_override"] = {}
28722863
return default
28732864
for element, properties in ELEMENTS.items():
28742865
setattr(FLAGS, f"{element}", {})
@@ -2894,15 +2885,24 @@ def do_tag(element, map, key, value):
28942885
map[key]["tag"] = value
28952886
def do_org(element, map, key, value):
28962887
map[key]["org"] = value
2888+
def do_cmake_extra(element, map, key, name, value):
2889+
map[key]["cmake_extra"][name] = value
2890+
def do_cmake_override(element, map, key, name, value):
2891+
map[key]["cmake_override"][name] = value
28972892
attr_fns = {
28982893
"enable": do_enable,
28992894
"disable": do_disable,
29002895
"tag": do_tag,
29012896
"org": do_org,
2897+
"extracmakearg": do_cmake_extra,
2898+
"overridecmakearg": do_cmake_override,
29022899
}
29032900
for element in ELEMENTS:
29042901
map = getattr(FLAGS, element)
2905-
attr_names = [f"enable_{element}", f"disable_{element}", f"{element}_tag", f"{element}_org"]
2902+
attr_names = [
2903+
f"enable_{element}", f"disable_{element}", f"{element}_tag", f"{element}_org",
2904+
f"extra_{element}_cmake_arg", f"override_{element}_cmake_arg",
2905+
]
29062906
for attr_name in attr_names:
29072907
attr = getattr(FLAGS, attr_name, None)
29082908
if not attr: continue
@@ -2931,6 +2931,8 @@ def do_org(element, map, key, value):
29312931
FLAGS.backend["tensorrtllm"]["org"] = "https://github.com/NVIDIA"
29322932

29332933
# Print final element info
2934+
def format_cmake_args(args):
2935+
return ', '.join(['"-D{}={}"'.format(n,v) for n,v in args.items()])
29342936
for element in ELEMENTS:
29352937
map = getattr(FLAGS, element)
29362938
for key, info in map.items():
@@ -2939,6 +2941,20 @@ def do_org(element, map, key, value):
29392941
'at tag/branch "{}"'.format(info["tag"]) if "tag" in info else "",
29402942
'from org "{}"'.format(info["org"]) if "org" in info else "",
29412943
])))
2944+
if any(["cmake" in prop for prop in info]):
2945+
cmake_extra_str = format_cmake_args(info["cmake_extra"]) if "cmake_extra" in info else ""
2946+
if cmake_extra_str: log(' CMake extra: '+cmake_extra_str)
2947+
cmake_override_str = format_cmake_args(info["cmake_override"]) if "cmake_override" in info else ""
2948+
if cmake_override_str: log(' CMake override: '+cmake_override_str)
2949+
2950+
# Parse any explicitly specified cmake arguments
2951+
for key,val in FLAGS.extra_core_cmake_arg:
2952+
log('core: CMake extra "-D{}={}"'.format(key, val))
2953+
EXTRA_CORE_CMAKE_FLAGS[key] = val
2954+
2955+
for key,val in FLAGS.override_core_cmake_arg:
2956+
log('core: CMake override "-D{}={}"'.format(key, val))
2957+
OVERRIDE_CORE_CMAKE_FLAGS[key] = val
29422958

29432959
# Initialize map of docker images.
29442960
images = {}
@@ -2955,35 +2971,6 @@ def do_org(element, map, key, value):
29552971
if "base" in images:
29562972
images["buildbase"] = images["base"]
29572973

2958-
# Parse any explicitly specified cmake arguments
2959-
for key,val in FLAGS.extra_core_cmake_arg:
2960-
log('CMake core extra "-D{}={}"'.format(key, val))
2961-
EXTRA_CORE_CMAKE_FLAGS[key] = val
2962-
2963-
for key,val in FLAGS.override_core_cmake_arg:
2964-
log('CMake core override "-D{}={}"'.format(key, val))
2965-
OVERRIDE_CORE_CMAKE_FLAGS[key] = val
2966-
2967-
for be,key,val in FLAGS.extra_backend_cmake_arg:
2968-
fail_if(
2969-
be not in FLAGS.backend,
2970-
f'--extra-backend-cmake-arg specifies backend "{be}" which is not included in build',
2971-
)
2972-
log('backend "{}" CMake extra "-D{}={}"'.format(be, key, val))
2973-
if be not in EXTRA_BACKEND_CMAKE_FLAGS:
2974-
EXTRA_BACKEND_CMAKE_FLAGS[be] = {}
2975-
EXTRA_BACKEND_CMAKE_FLAGS[be][key] = val
2976-
2977-
for be,key,val in FLAGS.override_backend_cmake_arg:
2978-
fail_if(
2979-
be not in FLAGS.backend,
2980-
f'--override-backend-cmake-arg specifies backend "{be}" which is not included in build',
2981-
)
2982-
log('backend "{}" CMake override "-D{}={}"'.format(be, key, val))
2983-
if be not in OVERRIDE_BACKEND_CMAKE_FLAGS:
2984-
OVERRIDE_BACKEND_CMAKE_FLAGS[be] = {}
2985-
OVERRIDE_BACKEND_CMAKE_FLAGS[be][key] = [val]
2986-
29872974
# Set the build, install, and cmake directories to use for the
29882975
# generated build scripts and Dockerfiles. If building without
29892976
# Docker, these are the directories specified on the cmdline. If

0 commit comments

Comments
 (0)