Skip to content

Commit 3429d64

Browse files
committed
standardize cmake-related arguments as element properties
1 parent 878351f commit 3429d64

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
@@ -92,7 +92,7 @@
9292
THIS_SCRIPT_DIR = os.path.dirname(os.path.abspath(getsourcefile(lambda: 0)))
9393

9494
ELEMENTS = {
95-
'backend': ['tag', 'org'],
95+
'backend': ['tag', 'org', 'cmake'],
9696
'repoagent': ['tag', 'org'],
9797
'cache': ['tag', 'org'],
9898
'filesystem': ['strict'],
@@ -402,22 +402,15 @@ def cmake_core_arg(name, type, value):
402402
# command-line specified value if one is given.
403403
if name in OVERRIDE_CORE_CMAKE_FLAGS:
404404
value = OVERRIDE_CORE_CMAKE_FLAGS[name]
405-
if type is None:
406-
type = ""
407-
else:
408-
type = ":{}".format(type)
405+
type = ":{}".format(type) if type else ""
409406
return '"-D{}{}={}"'.format(name, type, value)
410407

411408

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

422415

423416
def cmake_core_extra_args():
@@ -427,46 +420,47 @@ def cmake_core_extra_args():
427420
return args
428421

429422

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

442432

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

455443

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

463456

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

472466

@@ -484,10 +478,7 @@ def cmake_repoagent_extra_args():
484478

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

493484

@@ -2605,6 +2596,34 @@ def enable_all(default):
26052596
help="Enable all standard released Triton features, backends, repository agents, caches, endpoints, and file systems.",
26062597
)
26072598

2599+
def add_cmake_args(element, parser):
2600+
dependent_kwargs = dict(
2601+
nargs=3,
2602+
metavar=(f"<{element}>","<name>","<value>"),
2603+
)
2604+
if element=="core":
2605+
# "core" is a special case: it is already a specific component, so no need to select a specific instance of its element type
2606+
dependent_kwargs = dict(
2607+
nargs=2,
2608+
metavar=("<name>","<value>"),
2609+
)
2610+
parser.add_argument(
2611+
f"--extra-{element}-cmake-arg",
2612+
action="append",
2613+
required=False,
2614+
default=[],
2615+
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.",
2616+
**dependent_kwargs
2617+
)
2618+
parser.add_argument(
2619+
f"--override-{element}-cmake-arg",
2620+
action="append",
2621+
required=False,
2622+
default=[],
2623+
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.",
2624+
**dependent_kwargs
2625+
)
2626+
26082627
element_groups = {}
26092628
for element, properties in ELEMENTS.items():
26102629
if 'strict' in properties:
@@ -2659,6 +2678,11 @@ def enable_all(default):
26592678
default=[],
26602679
help=f'Select <org> for specified <{element}>, to use the fork of the corresponding repository from <org> instead of the default --github-organization value.',
26612680
)
2681+
if 'cmake' in properties:
2682+
add_cmake_args(element, group)
2683+
2684+
# special case
2685+
add_cmake_args("core", element_groups["component"])
26622686

26632687
parser.add_argument(
26642688
"--min-compute-capability",
@@ -2680,42 +2704,6 @@ def enable_all(default):
26802704
default=False,
26812705
help="Do not create fresh clones of repos that have already been cloned.",
26822706
)
2683-
parser.add_argument(
2684-
"--extra-core-cmake-arg",
2685-
action="append",
2686-
metavar=("<name>","<value>"),
2687-
nargs=2,
2688-
required=False,
2689-
default=[],
2690-
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.",
2691-
)
2692-
parser.add_argument(
2693-
"--override-core-cmake-arg",
2694-
action="append",
2695-
metavar=("<name>","<value>"),
2696-
nargs=2,
2697-
required=False,
2698-
default=[],
2699-
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.",
2700-
)
2701-
parser.add_argument(
2702-
"--extra-backend-cmake-arg",
2703-
action="append",
2704-
metavar=("<backend>","<name>","<value>"),
2705-
nargs=3,
2706-
required=False,
2707-
default=[],
2708-
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.",
2709-
)
2710-
parser.add_argument(
2711-
"--override-backend-cmake-arg",
2712-
action="append",
2713-
metavar=("<backend>","<name>","<value>"),
2714-
nargs=3,
2715-
required=False,
2716-
default=[],
2717-
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.",
2718-
)
27192707
parser.add_argument(
27202708
"--release-version",
27212709
required=False,
@@ -2871,6 +2859,9 @@ def default_element_dict(element):
28712859
default["tag"] = default_repo_tag
28722860
if "org" in ELEMENTS[element]:
28732861
default["org"] = FLAGS.github_organization
2862+
if "cmake" in ELEMENTS[element]:
2863+
default["cmake_extra"] = {}
2864+
default["cmake_override"] = {}
28742865
return default
28752866
for element, properties in ELEMENTS.items():
28762867
setattr(FLAGS, f"{element}", {})
@@ -2896,15 +2887,24 @@ def do_tag(element, map, key, value):
28962887
map[key]["tag"] = value
28972888
def do_org(element, map, key, value):
28982889
map[key]["org"] = value
2890+
def do_cmake_extra(element, map, key, name, value):
2891+
map[key]["cmake_extra"][name] = value
2892+
def do_cmake_override(element, map, key, name, value):
2893+
map[key]["cmake_override"][name] = value
28992894
attr_fns = {
29002895
"enable": do_enable,
29012896
"disable": do_disable,
29022897
"tag": do_tag,
29032898
"org": do_org,
2899+
"extracmakearg": do_cmake_extra,
2900+
"overridecmakearg": do_cmake_override,
29042901
}
29052902
for element in ELEMENTS:
29062903
map = getattr(FLAGS, element)
2907-
attr_names = [f"enable_{element}", f"disable_{element}", f"{element}_tag", f"{element}_org"]
2904+
attr_names = [
2905+
f"enable_{element}", f"disable_{element}", f"{element}_tag", f"{element}_org",
2906+
f"extra_{element}_cmake_arg", f"override_{element}_cmake_arg",
2907+
]
29082908
for attr_name in attr_names:
29092909
attr = getattr(FLAGS, attr_name, None)
29102910
if not attr: continue
@@ -2933,6 +2933,8 @@ def do_org(element, map, key, value):
29332933
FLAGS.backend["tensorrtllm"]["org"] = "https://github.com/NVIDIA"
29342934

29352935
# Print final element info
2936+
def format_cmake_args(args):
2937+
return ', '.join(['"-D{}={}"'.format(n,v) for n,v in args.items()])
29362938
for element in ELEMENTS:
29372939
map = getattr(FLAGS, element)
29382940
for key, info in map.items():
@@ -2941,6 +2943,20 @@ def do_org(element, map, key, value):
29412943
'at tag/branch "{}"'.format(info["tag"]) if "tag" in info else "",
29422944
'from org "{}"'.format(info["org"]) if "org" in info else "",
29432945
])))
2946+
if any(["cmake" in prop for prop in info]):
2947+
cmake_extra_str = format_cmake_args(info["cmake_extra"]) if "cmake_extra" in info else ""
2948+
if cmake_extra_str: log(' CMake extra: '+cmake_extra_str)
2949+
cmake_override_str = format_cmake_args(info["cmake_override"]) if "cmake_override" in info else ""
2950+
if cmake_override_str: log(' CMake override: '+cmake_override_str)
2951+
2952+
# Parse any explicitly specified cmake arguments
2953+
for key,val in FLAGS.extra_core_cmake_arg:
2954+
log('core: CMake extra "-D{}={}"'.format(key, val))
2955+
EXTRA_CORE_CMAKE_FLAGS[key] = val
2956+
2957+
for key,val in FLAGS.override_core_cmake_arg:
2958+
log('core: CMake override "-D{}={}"'.format(key, val))
2959+
OVERRIDE_CORE_CMAKE_FLAGS[key] = val
29442960

29452961
# Initialize map of docker images.
29462962
images = {}
@@ -2957,35 +2973,6 @@ def do_org(element, map, key, value):
29572973
if "base" in images:
29582974
images["buildbase"] = images["base"]
29592975

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

0 commit comments

Comments
 (0)