commit | 056985e0acd80b3404b509b1812ad7c3e0fe9a86 | [log] [tgz] |
---|---|---|
author | Evan Martin <evan.martin@gmail.com> | Sun May 05 20:36:25 2024 -0700 |
committer | Evan Martin <evan.martin@gmail.com> | Sun May 05 20:44:26 2024 -0700 |
tree | 317269e878c79939785652f42ae46e0569609435 | |
parent | 15a580d2c17844859d35ed8d098f3ec32d1aa90b [diff] |
use cargo install --locked Apparently `cargo install` means "install using versions I've never tested", while `cargo install --locked` means "install using the versions I specified". Fixes #116.
n2 (pronounced “into”) implements enough of Ninja to successfully build some projects that build with Ninja. Compared to Ninja, n2 missing some features but is faster to build and has a better UI; see a more detailed comparison.
Here's a small demo of n2 building some of Clang.
$ cargo install --locked --git https://github.com/evmar/n2 # (installs into ~/.cargo/bin/) $ n2 -C some/build/dir some-target
When CMake generates Ninja files it attempts run a program named ninja
with some particular Ninja behaviors. In particular, it attempts to inform Ninja/n2 that its generated build files are up to date so that the build system doesn't attempt to rebuild them.
n2 can emulate the expected CMake behavior when invoked as ninja
. To do this you create a symlink named ninja
somewhere in your $PATH
, such that CMake can discover it.
ln -s path/to/n2 ninja
mklink ninja.exe path\to\n2
New-Item -Type Symlink ninja.exe -Target path\to\n2
Warning
If you don't have Ninja installed at all, you must install such a symlink because CMake attempts to invokeninja
itself!
While building, n2 displays build progress like this:
[=========================--------- ] 2772/4459 done, 8/930 running Building foo/bar (2s) Building foo/baz
The progress bar always covers all build steps needed for the targets, regardless of whether they need to be executed or not.
The bar shows three categories of state:
=
signs show the build steps that are already up to date.-
signs show steps that are in-progress; if you had enough CPUs they would all be executing. The 8/930 running
after shows that n2 is currently executing 8 of the 930 available steps.The lines below the progress bar show some build steps that are currrently running, along with how long they've been running if it has been a while. Their text is controlled by the input build.ninja
file.
I wrote n2 to explore some alternative ideas I had around how to structure a build system. In a very real sense the exploration is more important than the actual software itself, so you can view the design notes as one of the primary artifacts of this.