Skip to content

NMake provider: jom - #5772

Draft
johnwparent wants to merge 7 commits into
spack:developfrom
johnwparent:win-use-jom
Draft

NMake provider: jom#5772
johnwparent wants to merge 7 commits into
spack:developfrom
johnwparent:win-use-jom

Conversation

@johnwparent

@johnwparent johnwparent commented Jul 28, 2026

Copy link
Copy Markdown
Contributor

Adds jom as a package and provider of nmake, the Windows makefile builder.
Jom is the qt project's implementation of nmake that 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_only as 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

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>
@spackbot-triage spackbot-triage Bot added new-package Additions of new packages to the Spack ecosystem new-version Modifications to packages' `depends_on()` directives dependencies Modifications with a `depends_on()` directive virtual-dependencies Modifications to virtual package dependencies update-package Modifications to packages in the repository conflicts Modifications with a `conflicts()` directive licenses Modifications to a package's `license()` directive build-systems Related to package build systems new-variant Modifications to packages' `variant()` directives labels Jul 28, 2026
@spackbot-triage
spackbot-triage Bot requested review from LydDeb, Sinan81 and alecbcs July 28, 2026 18:14
@johnwparent
johnwparent marked this pull request as draft July 28, 2026 18:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

build-systems Related to package build systems conflicts Modifications with a `conflicts()` directive dependencies Modifications with a `depends_on()` directive licenses Modifications to a package's `license()` directive new-package Additions of new packages to the Spack ecosystem new-variant Modifications to packages' `variant()` directives new-version Modifications to packages' `depends_on()` directives update-package Modifications to packages in the repository virtual-dependencies Modifications to virtual package dependencies

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant