Skip to content

Commit c20e3db

Browse files
committed
[CI] Allow for passing build option overrides as arguments to build_root
1 parent 7a63e49 commit c20e3db

File tree

2 files changed

+30
-7
lines changed

2 files changed

+30
-7
lines changed

.github/workflows/root-ci-config/build_root.py

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@
3030
die,
3131
github_log_group,
3232
is_macos,
33-
load_config,
3433
subprocess_with_capture,
3534
subprocess_with_log,
3635
upload_file,
@@ -67,16 +66,29 @@ def main():
6766

6867
cleanup_previous_build()
6968

70-
# Load CMake options from .github/workflows/root-ci-config/buildconfig/[platform].txt
7169
this_script_dir = os.path.dirname(os.path.abspath(__file__))
7270

73-
options_dict = {
74-
**load_config(f'{this_script_dir}/buildconfig/global.txt'),
75-
# file below overwrites values from above
76-
**load_config(f'{this_script_dir}/buildconfig/{args.platform}.txt')
77-
}
71+
# Compute CMake build options:
72+
# - Get global options
73+
# - Override with options from .github/workflows/root-ci-config/buildconfig/[platform].txt
74+
# - Apply overrides from command line if necessary
75+
options_dict = build_utils.load_config(f"{this_script_dir}/buildconfig/global.txt")
76+
last_options = dict(options_dict)
77+
78+
options_dict.update(build_utils.load_config(f"{this_script_dir}/buildconfig/{args.platform}.txt"))
79+
print(f"Build option overrides for {args.platform}:")
80+
build_utils.print_options_diff(options_dict, last_options)
81+
82+
if args.overrides is not None:
83+
print("Build option overrides from command line:")
84+
last_options = dict(options_dict)
85+
options_dict.update((arg.split("=", maxsplit=1) for arg in args.overrides))
86+
build_utils.print_options_diff(options_dict, last_options)
7887

7988
options = build_utils.cmake_options_from_dict(options_dict)
89+
print("Full build options")
90+
for key,val in sorted(options_dict.items()):
91+
print(f"\t{key: <30}{val}")
8092

8193
if WINDOWS:
8294
options = "-Thost=x64 " + options
@@ -193,6 +205,7 @@ def parse_args():
193205
parser.add_argument("--architecture", default=None, help="Windows only, target arch")
194206
parser.add_argument("--repository", default="https://github.com/root-project/root.git",
195207
help="url to repository")
208+
parser.add_argument("--overrides", default=None, help="Override build options using a syntax like 'A=1 B=2'", nargs="*")
196209

197210
args = parser.parse_args()
198211

.github/workflows/root-ci-config/build_utils.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,16 @@ def print_warning(*values, **kwargs):
108108
def print_error(*values, **kwargs):
109109
print_fancy("Fatal error: ", *values, sgr=31, **kwargs)
110110

111+
def print_options_diff(new, old):
112+
"""Print difference between build option dicts"""
113+
114+
for key in sorted(new):
115+
try:
116+
if new[key] != old[key]:
117+
print(f"\t{key: <30}{old[key]} --> {new[key]}")
118+
except:
119+
print(f"\t{key: <30}None --> {new[key]}")
120+
111121

112122
def subprocess_with_log(command: str) -> int:
113123
"""Runs <command> in shell and appends <command> to log"""

0 commit comments

Comments
 (0)