diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 717c9911..25fb65ab 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -83,17 +83,17 @@ jobs: - name: Build godot-cpp (debug) 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) run: | 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) run: | cd test - scons platform=${{ matrix.platform }} target=release ${{ matrix.flags }} -j2 + scons platform=${{ matrix.platform }} target=release ${{ matrix.flags }} - name: Upload artifact uses: actions/upload-artifact@v3 diff --git a/SConstruct b/SConstruct index b20c60da..ee63229e 100644 --- a/SConstruct +++ b/SConstruct @@ -30,6 +30,24 @@ else: env = Environment(tools=["default"]) +# 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) +if 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) + platforms = ("linux", "osx", "windows", "android", "ios", "javascript") opts = Variables([], ARGUMENTS) opts.Add(