Skip to content

Commit cdcd473

Browse files
committed
SCons: Default num_jobs to max CPUs minus 1 if not specified
This doesn't change the behavior when `--jobs`/`-j` is specified as a command-line argument or in `SCONSFLAGS`. The SCons hack used to know if `num_jobs` was set by the user is derived from the MongoDB setup. We use `os.cpu_count()` for portability (available since Python 3.4). With 4 CPUs or less, we use the max. With more than 4 we use max - 1 to preserve some bandwidth for the user's other programs.
1 parent 17c1d1f commit cdcd473

File tree

2 files changed

+21
-3
lines changed

2 files changed

+21
-3
lines changed

.github/workflows/ci.yml

+3-3
Original file line numberDiff line numberDiff line change
@@ -83,17 +83,17 @@ jobs:
8383

8484
- name: Build godot-cpp (debug)
8585
run: |
86-
scons platform=${{ matrix.platform }} target=debug generate_bindings=yes ${{ matrix.flags }} -j2
86+
scons platform=${{ matrix.platform }} target=debug generate_bindings=yes ${{ matrix.flags }}
8787
8888
- name: Build test without rebuilding godot-cpp (debug)
8989
run: |
9090
cd test
91-
scons platform=${{ matrix.platform }} target=debug ${{ matrix.flags }} build_library=no -j2
91+
scons platform=${{ matrix.platform }} target=debug ${{ matrix.flags }} build_library=no
9292
9393
- name: Build test and godot-cpp (release)
9494
run: |
9595
cd test
96-
scons platform=${{ matrix.platform }} target=release ${{ matrix.flags }} -j2
96+
scons platform=${{ matrix.platform }} target=release ${{ matrix.flags }}
9797
9898
- name: Upload artifact
9999
uses: actions/upload-artifact@v3

SConstruct

+18
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,24 @@ else:
3030

3131
env = Environment(tools=["default"])
3232

33+
# Default num_jobs to local cpu count if not user specified.
34+
# SCons has a peculiarity where user-specified options won't be overridden
35+
# by SetOption, so we can rely on this to know if we should use our default.
36+
initial_num_jobs = env.GetOption("num_jobs")
37+
altered_num_jobs = initial_num_jobs + 1
38+
env.SetOption("num_jobs", altered_num_jobs)
39+
if env.GetOption("num_jobs") == altered_num_jobs:
40+
cpu_count = os.cpu_count()
41+
if cpu_count is None:
42+
print("Couldn't auto-detect CPU count to configure build parallelism. Specify it with the -j argument.")
43+
else:
44+
safer_cpu_count = cpu_count if cpu_count <= 4 else cpu_count - 1
45+
print(
46+
"Auto-detected %d CPU cores available for build parallelism. Using %d cores by default. You can override it with the -j argument."
47+
% (cpu_count, safer_cpu_count)
48+
)
49+
env.SetOption("num_jobs", safer_cpu_count)
50+
3351
platforms = ("linux", "osx", "windows", "android", "ios", "javascript")
3452
opts = Variables([], ARGUMENTS)
3553
opts.Add(

0 commit comments

Comments
 (0)