diff options
Diffstat (limited to 'results/classifier/118/device/1898')
| -rw-r--r-- | results/classifier/118/device/1898 | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/results/classifier/118/device/1898 b/results/classifier/118/device/1898 new file mode 100644 index 000000000..24c0c2628 --- /dev/null +++ b/results/classifier/118/device/1898 @@ -0,0 +1,62 @@ +device: 0.845 +graphic: 0.773 +performance: 0.701 +permissions: 0.701 +vnc: 0.674 +ppc: 0.641 +architecture: 0.619 +files: 0.618 +risc-v: 0.590 +kernel: 0.560 +PID: 0.533 +VMM: 0.485 +socket: 0.465 +network: 0.448 +boot: 0.437 +debug: 0.431 +user-level: 0.409 +register: 0.394 +TCG: 0.361 +peripherals: 0.348 +semantic: 0.334 +arm: 0.285 +mistranslation: 0.256 +assembly: 0.199 +x86: 0.099 +i386: 0.099 +hypervisor: 0.098 +virtual: 0.095 +KVM: 0.057 + +Ninja makeserver support +Description of problem: +Building `qemu` using a patched version of `ninja`[0] to utilize `make`'s jobserver feature doesn't work when building `qemu`. Usually, when using a jobserver to control the number of jobs being built in parallel across multiple different builds (i.e. when building with `open-embedded` or `buildroot`), the `-j$(nproc)` argument is left out. In this case, the `Qemu` `Makefile` interprets the absent `-j` argument as a wish for a single process only, and adds a `-j1` argument to the `ninja` call. +Steps to reproduce: +1. Built/install the patched `ninja` from [0]: `export PATH=<path/to/ninja>:$PATH` +2. Start the attached [jobserver.py](/uploads/8215e8a470c97cd456d2d14e2c71c6a5/jobserver.py) script: `python jobserver.py /tmp/jobserver 4` +3. Configure `qemu`: `mkdir build; ../configure` +4. Build `qemu`: `MAKEFLAGS="--jobserver-auth=fifo:/tmp/jobserver" make` +5. Observe that only a single CPU/core is being used. + +Now, to avoid passing `-j1` to `ninja`, remove filtering of `-j` arguments from the `Makefile`: + +```patch +diff --git a/Makefile b/Makefile +index bfc4b2c8e9..d66141787e 100644 +--- a/Makefile ++++ b/Makefile +@@ -142,7 +142,6 @@ MAKE.k = $(findstring k,$(firstword $(filter-out --%,$(MAKEFLAGS)))) + MAKE.q = $(findstring q,$(firstword $(filter-out --%,$(MAKEFLAGS)))) + MAKE.nq = $(if $(word 2, $(MAKE.n) $(MAKE.q)),nq) + NINJAFLAGS = $(if $V,-v) $(if $(MAKE.n), -n) $(if $(MAKE.k), -k0) \ +- $(filter-out -j, $(lastword -j1 $(filter -l% -j%, $(MAKEFLAGS)))) \ + -d keepdepfile + ninja-cmd-goals = $(or $(MAKECMDGOALS), all) + ninja-cmd-goals += $(foreach g, $(MAKECMDGOALS), $(.ninja-goals.$g)) +``` + +Run the build again, and see four jobs being run in parallel: + +`make clean; MAKEFLAGS="--jobserver-auth=fifo:/tmp/jobserver" make` +Additional information: +[0] https://github.com/stefanb2/ninja/tree/topic-issue-1139-part-3-jobserver-fifo |