The samurai package provides a drop-in replacement for the Ninja package. It aims for full compatibility.
This package works for most packages as a Ninja replacement.
It's known to work just fine for 32-bit on 64-bit and with projects with
Rust, as well. However, it can be bitten by some build systems with
missing dependency information, causing important targets
to be skipped that Ninja papers over. If you find that a project tries
to include a header like so: #include
"xdg-shell.h", but can't, it is probably generated by a target
which got skipped. You can try using Ninja to see if that resolves the
issue.
Known packages with that issue:
glycin
(builds glycin-thumbnailer first which depends on a
built libglycin-2, which
should be built beforehand but isn't)
SceneFX-0.4.1
(examples are disabled so this issue cannot
be observed, but if enabled, then it cannot include
"xdg-shell-protocol.h"; will be fixed for
wlroots-0.20.x)
Install samurai by running the following commands:
make CC=cc CFLAGS+=" -std=c99"
Now, as the root user:
make PREFIX=/usr install
If you want samu to be used whenever
ninja is run, make a symlink as the root user:
if [ "$(file /usr/bin/ninja | grep ELF)" ]; then
mv -v /usr/bin/ninja{,.old}
fi &&
ln -svf samu /usr/bin/ninja
samu won't run on all logical CPUs or threads by
default, similar to make. The process to make it do
so is the same: pass
-j, where
<x> is the number
of logical CPUs you want to use whenever samu (or
ninja if you made the symlink) is run. You can get
around having to specify it every time by including
<x>-j in
<x>SAMUFLAGS like so:
export SAMUFLAGS=-j$(nproc)
If MAKEFLAGS only contains the -j
option, you can set SAMUFLAGS to
MAKEFLAGS like so:
export SAMUFLAGS=$MAKEFLAGS
If you'd like to avoid manually setting SAMUFLAGS each
time you log in, add it to a Bash profile script like
~/.bash_profile.