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. Makefile: Dehardcode -j4, SCons defaults to max - 1 (cherry picked from commitspull/830/headcdcd473371
andc2b35fb226
)
parent
3e1f8f3d89
commit
e7ebeccd25
|
@ -79,17 +79,17 @@ jobs:
|
||||||
|
|
||||||
- name: Build godot-cpp (debug)
|
- name: Build godot-cpp (debug)
|
||||||
run: |
|
run: |
|
||||||
scons platform=${{ matrix.platform }} target=debug generate_bindings=yes ${{ matrix.flags }} -j2
|
scons platform=${{ matrix.platform }} target=debug generate_bindings=yes ${{ matrix.flags }}
|
||||||
|
|
||||||
- name: Build test without rebuilding godot-cpp (debug)
|
- name: Build test without rebuilding godot-cpp (debug)
|
||||||
run: |
|
run: |
|
||||||
cd test
|
cd test
|
||||||
scons platform=${{ matrix.platform }} target=debug ${{ matrix.flags }} build_library=no -j2
|
scons platform=${{ matrix.platform }} target=debug ${{ matrix.flags }} build_library=no
|
||||||
|
|
||||||
- name: Build test and godot-cpp (release)
|
- name: Build test and godot-cpp (release)
|
||||||
run: |
|
run: |
|
||||||
cd test
|
cd test
|
||||||
scons platform=${{ matrix.platform }} target=release ${{ matrix.flags }} -j2
|
scons platform=${{ matrix.platform }} target=release ${{ matrix.flags }}
|
||||||
|
|
||||||
- name: Run test GDNative library
|
- name: Run test GDNative library
|
||||||
if: ${{ matrix.platform == 'linux' || matrix.platform == 'osx' }}
|
if: ${{ matrix.platform == 'linux' || matrix.platform == 'osx' }}
|
||||||
|
|
2
Makefile
2
Makefile
|
@ -3,7 +3,7 @@ HEADERS = godot-headers
|
||||||
TARGET = debug
|
TARGET = debug
|
||||||
USE_CLANG = no
|
USE_CLANG = no
|
||||||
|
|
||||||
BASE = scons use_llvm=$(USE_CLANG) generate_bindings=$(GENERATE_BINDINGS) target=$(TARGET) headers=$(HEADERS) -j4
|
BASE = scons use_llvm=$(USE_CLANG) generate_bindings=$(GENERATE_BINDINGS) target=$(TARGET) headers=$(HEADERS)
|
||||||
LINUX = $(BASE) platform=linux
|
LINUX = $(BASE) platform=linux
|
||||||
WINDOWS = $(BASE) platform=windows
|
WINDOWS = $(BASE) platform=windows
|
||||||
OSX = $(BASE) platform=osx
|
OSX = $(BASE) platform=osx
|
||||||
|
|
19
SConstruct
19
SConstruct
|
@ -81,6 +81,25 @@ else:
|
||||||
|
|
||||||
env = Environment(ENV=os.environ)
|
env = Environment(ENV=os.environ)
|
||||||
|
|
||||||
|
# Default num_jobs to local cpu count if not user specified.
|
||||||
|
# SCons has a peculiarity where user-specified options won't be overridden
|
||||||
|
# by SetOption, so we can rely on this to know if we should use our default.
|
||||||
|
initial_num_jobs = env.GetOption("num_jobs")
|
||||||
|
altered_num_jobs = initial_num_jobs + 1
|
||||||
|
env.SetOption("num_jobs", altered_num_jobs)
|
||||||
|
# os.cpu_count() requires Python 3.4+.
|
||||||
|
if hasattr(os, "cpu_count") and env.GetOption("num_jobs") == altered_num_jobs:
|
||||||
|
cpu_count = os.cpu_count()
|
||||||
|
if cpu_count is None:
|
||||||
|
print("Couldn't auto-detect CPU count to configure build parallelism. Specify it with the -j argument.")
|
||||||
|
else:
|
||||||
|
safer_cpu_count = cpu_count if cpu_count <= 4 else cpu_count - 1
|
||||||
|
print(
|
||||||
|
"Auto-detected %d CPU cores available for build parallelism. Using %d cores by default. You can override it with the -j argument."
|
||||||
|
% (cpu_count, safer_cpu_count)
|
||||||
|
)
|
||||||
|
env.SetOption("num_jobs", safer_cpu_count)
|
||||||
|
|
||||||
is64 = sys.maxsize > 2 ** 32
|
is64 = sys.maxsize > 2 ** 32
|
||||||
if (
|
if (
|
||||||
env["TARGET_ARCH"] == "amd64"
|
env["TARGET_ARCH"] == "amd64"
|
||||||
|
|
Loading…
Reference in New Issue