NMake provider: jom - #5772
Draft
johnwparent wants to merge 7 commits into
Draft
Conversation
Signed-off-by: John Parent <john.parent@kitware.com>
Signed-off-by: John Parent <john.parent@kitware.com>
Signed-off-by: John Parent <john.parent@kitware.com>
Previously relied on implict msvc dependency to provide nmake Signed-off-by: John Parent <john.parent@kitware.com>
…nd qmake Used to support building jom with reasonable overhead Signed-off-by: John Parent <john.parent@kitware.com>
Signed-off-by: John Parent <john.parent@kitware.com>
Signed-off-by: John Parent <john.parent@kitware.com>
johnwparent
marked this pull request as draft
July 28, 2026 18:33
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds
jomas a package and provider of nmake, the Windows makefile builder.Jom is the qt project's implementation of
nmakethat directly supports building nmake build systems in parallel, similar to how make operates.Openssl build times on Windows:
With vanilla nmake: ~12m
With jom: ~4m
Jom can be used as a drop in replacement (in most cases) for nmake, and thus is made a provider for the virtual nmake.
Packages can specify a requirement on vanilla nmake by requiring it be provided by MSVC via visual studio, or prefer the parallel jom through traditional provider spec syntax.
Adds proper modeling for nmake dependencies to packages that rely on it vs relying on the implicit availability of the package via reliance on the MSVC compiler.
Building jom is unfortunate, as it's a Qt5 based package, it requires QMake and qt core to build. Traditionally in spack, that requires a full Qt build, which, adding to the DAG in most cases removes any performance improvement provided by jom (for that dag, obviously future uses get the parallel builds for free). This PR adds a minimal Qt install that only builds qtcore and qmake, which jom leverages to reduce the overhead required to build it.
Adds
+qmake_onlyas a variant to the qt5 package.None of this applies to qt6, which abandons jom in favor of CMake and ninja.
Requires changes to core before it can land allowing duplicate
joms in a graph