Skip to content

Latest commit

 

History

History
114 lines (73 loc) · 3.14 KB

INSTALL.md

File metadata and controls

114 lines (73 loc) · 3.14 KB

INSTALL SAMBAMBA

Sambamba dependencies

  • D compiler (ldc)
  • libz
  • liblz4
  • meson + ninja for builds

The biod project was moved back into the sambamba git repo. It is no longer a dependency. We use .guix-build to set up the build environment in a GNU Guix container.

For optimal performance it really is important to compile '-singleobj' and -flto=full' as described in http://johanengelen.github.io/ldc/2016/11/10/Link-Time-Optimization-LDC.html At this point only the standard Makefile is fully optimized. The meson build system does not do singleobj yet (it makes a 5% difference in runtime).

For the most optimal system use

make release
make check

Static release

Use Guix for static release script.

. ./guix-build-static
make static

Install Sambamba from source

Tested on Debian:

meson build --buildtype release
cd build
ninja
ninja test

After checking out the source from github with git submodules it is possible to install the build tools with GNU Guix

guix package -i gcc-toolchain gdb bash ld-wrapper ldc which python git

(see also guix-build)

Even better, with Guix, you can create a light-weight container in the source tree and run our development setup (lately gold is required by ldc)

source .guix-build
make clean
env CC=gcc make -f Makefile.guix -j 4
make -f Makefile.guix check ./bin/sambamba-0.8.2

this way all dependencies are isolated. To create a static release use

env CC=gcc make -f Makefile.guix static -j 4 (FIXME)

Note that the static build is not working on GNU Guix right now because the Phobos libs are missing (shared lib only).

Alternatively use the Guix meson+ninja build with

rm -rf build/ ; env D_LD=gold CC=gcc meson build --buildtype release
cd build/
env CC=gcc ninja
env CC=gcc ninja test

Development

We use GNU Guix containers for development. Install Guix and run a build container with

. .guix-build
make -f Makefile.guix clean
# Set versions
python3 ./gen_ldc_version_info.py ldc2 > utils/ldc_version_info_.d
# build the debug version
env CC=gcc make -f Makefile.guix lz4-static -j 8
env CC=gcc make -f Makefile.guix -j 8

Instead, to make the release:

env CC=gcc make -f Makefile.guix -j 8 release

To make the static release:

env CC=gcc make -f Makefile.guix static

Run tests

make -f Makefile.guix check

Run binary

./bin/sambamba

When you only get unit tests disable them with --DRT-testmode=run-main

Note that this all also works in the emacs shell.

Guix VM

guix package -i qemu -p ~/opt/qemu
. ~/opt/qemu/etc/profile

Download the bootable image from https://guix.gnu.org/en/download/ and start it with, for example

qemu-system-x86_64    -nic user,model=virtio-net-pci    -enable-kvm -m 1024    -device virtio-blk,drive=myhd    -drive if=none,file=guix-system-vm-image-1.2.0.x86_64-linux,id=myhd

Check list for release

  • Test meson build with local lz4
  • Build and test static version
  • Build and test optimized version with performance run
  • Update release notes
  • Release on github
  • Ping Debian, Guix and Conda projects