Meta: Provide compiler jobs as a command line argument

On my Linux machine with 32 cores, ninja actually defaults to 34 jobs.
By defaulting ourselves to multiprocessing.cpu_count(), we actually
decrease the number of jobs used.
This commit is contained in:
Timothy Flynn 2025-05-30 10:06:09 -04:00 committed by Tim Flynn
commit 0958c5f508
Notes: github-actions[bot] 2025-05-30 16:55:22 +00:00

View file

@ -6,7 +6,6 @@
# SPDX-License-Identifier: BSD-2-Clause # SPDX-License-Identifier: BSD-2-Clause
import argparse import argparse
import multiprocessing
import os import os
import platform import platform
import re import re
@ -45,6 +44,7 @@ def main():
compiler_parser = argparse.ArgumentParser(add_help=False) compiler_parser = argparse.ArgumentParser(add_help=False)
compiler_parser.add_argument("--cc", required=False, default=default_cc) compiler_parser.add_argument("--cc", required=False, default=default_cc)
compiler_parser.add_argument("--cxx", required=False, default=default_cxx) compiler_parser.add_argument("--cxx", required=False, default=default_cxx)
compiler_parser.add_argument("--jobs", "-j", required=False)
target_parser = argparse.ArgumentParser(add_help=False) target_parser = argparse.ArgumentParser(add_help=False)
target_parser.add_argument("target", nargs=argparse.OPTIONAL) target_parser.add_argument("target", nargs=argparse.OPTIONAL)
@ -126,10 +126,10 @@ def main():
if args.command == "build": if args.command == "build":
build_dir = configure_main(platform, args.preset, args.cc, args.cxx) build_dir = configure_main(platform, args.preset, args.cc, args.cxx)
build_main(build_dir, args.target, args.args) build_main(build_dir, args.jobs, args.target, args.args)
elif args.command == "test": elif args.command == "test":
build_dir = configure_main(platform, args.preset, args.cc, args.cxx) build_dir = configure_main(platform, args.preset, args.cc, args.cxx)
build_main(build_dir) build_main(build_dir, args.jobs)
test_main(build_dir, args.preset, args.pattern) test_main(build_dir, args.preset, args.pattern)
elif args.command == "run": elif args.command == "run":
if args.preset == "Sanitizer": if args.preset == "Sanitizer":
@ -143,16 +143,16 @@ def main():
"UBSAN_OPTIONS", "print_stacktrace=1:print_summary=1:halt_on_error=1" "UBSAN_OPTIONS", "print_stacktrace=1:print_summary=1:halt_on_error=1"
) )
build_dir = configure_main(platform, args.preset, args.cc, args.cxx) build_dir = configure_main(platform, args.preset, args.cc, args.cxx)
build_main(build_dir, args.target) build_main(build_dir, args.jobs, args.target)
run_main(platform.host_system, build_dir, args.target, args.args) run_main(platform.host_system, build_dir, args.target, args.args)
elif args.command == "debug": elif args.command == "debug":
build_dir = configure_main(platform, args.preset, args.cc, args.cxx) build_dir = configure_main(platform, args.preset, args.cc, args.cxx)
build_main(build_dir, args.target, args.args) build_main(build_dir, args.jobs, args.target, args.args)
debug_main(platform.host_system, build_dir, args.target, args.debugger, args.cmd) debug_main(platform.host_system, build_dir, args.target, args.debugger, args.cmd)
elif args.command == "install": elif args.command == "install":
build_dir = configure_main(platform, args.preset, args.cc, args.cxx) build_dir = configure_main(platform, args.preset, args.cc, args.cxx)
build_main(build_dir, args.target, args.args) build_main(build_dir, args.jobs, args.target, args.args)
build_main(build_dir, "install", args.args) build_main(build_dir, args.jobs, "install", args.args)
elif args.command == "vcpkg": elif args.command == "vcpkg":
configure_build_env(args.preset) configure_build_env(args.preset)
build_vcpkg() build_vcpkg()
@ -161,10 +161,10 @@ def main():
elif args.command == "rebuild": elif args.command == "rebuild":
clean_main(args.preset) clean_main(args.preset)
build_dir = configure_main(platform, args.preset, args.cc, args.cxx) build_dir = configure_main(platform, args.preset, args.cc, args.cxx)
build_main(build_dir, args.target, args.args) build_main(build_dir, args.jobs, args.target, args.args)
elif args.command == "addr2line": elif args.command == "addr2line":
build_dir = configure_main(platform, args.preset, args.cc, args.cxx) build_dir = configure_main(platform, args.preset, args.cc, args.cxx)
build_main(build_dir, args.target) build_main(build_dir, args.jobs, args.target)
addr2line_main(build_dir, args.target, args.program, args.addresses) addr2line_main(build_dir, args.target, args.program, args.addresses)
@ -297,14 +297,13 @@ def ensure_ladybird_source_dir() -> Path:
return ladybird_source_dir return ladybird_source_dir
def build_main(build_dir: Path, target: Optional[str] = None, args: list[str] = []): def build_main(build_dir: Path, jobs: str | None, target: Optional[str] = None, args: list[str] = []):
build_args = [ build_args = ["ninja", "-C", str(build_dir)]
"ninja",
"-C", if not jobs:
str(build_dir), jobs = os.environ.get("MAKEJOBS", None)
"-j", if jobs:
os.environ.get("MAKEJOBS", str(multiprocessing.cpu_count())), build_args.extend(["-j", jobs])
]
if target: if target:
build_args.append(target) build_args.append(target)