Skip to content

Qt Make/Ninja interaction #2076

Description

@bartoldeman

When building Qt5 5.12.8 I observed that the QtWebEngine part was very slow. It uses Ninja inside Make and for some reason Ninja only spawned one g++ process at a time. Now I did use something non-standard, namely using a Gentoo Prefix Ninja, which is a fork with support for the GNU Make jobserver (https://github.com/Kitware/ninja), and that was what caused this interaction.

However when putting ninja 1.10.0 as a builddependency I see this:

Checking for system ninja... no

and it then proceeds to build and use an included Ninja in (qtwebengine/src/3rdparty/ninja/ninja), which is Ninja version 1.8.2 in this case.
From a pure EB perspective I see two issues here:

  1. The Qt make procedure has this check (also in 5.14.1):
        contains(version, "1.[7-9].*"): return(true)
        qtLog("Ninja version too old")

Ninja 1.10 fails this test and that's why it uses the included Ninja instead of the builddep.

  1. Ninja by default (ie. not the one with GNU Make jobserver support) will gobble up all cores. If you want to avoid that you need to pass it an explicit -jN flag, via prebuildopts = "NINJAFLAGS='-j8'" (see https://patchwork.ozlabs.org/project/buildroot/patch/20180629143521.9018-1-gael.portay@savoirfairelinux.com/ )

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions