The project includes a Nix flake for reproducible builds with a modular structure:
# Build everything (default)
nix build
# Or explicitly
nix build '.#logos-liblogos'
nix build '.#default'The result will include:
/bin/- Core binaries (logoscore, logos_host)/lib/- Core libraries (liblogos_core, liblogoscore, liblogos_host)/include/- Headers (interface.h)
# Build only the binaries (outputs to /bin)
nix build '.#logos-liblogos-bin'
# Build only the libraries (outputs to /lib)
nix build '.#logos-liblogos-lib'
# Build only the headers (outputs to /include)
nix build '.#logos-liblogos-include'# Enter development shell with all dependencies
nix developNote: In zsh, you need to quote targets with # to prevent glob expansion.
If you don't have flakes enabled globally, add experimental flags:
nix build '.#logos-liblogos' --extra-experimental-features 'nix-command flakes'The compiled artifacts can be found at result/
The nix build system is organized into modular files in the /nix directory:
nix/default.nix- Common configuration (dependencies, flags, metadata)nix/build.nix- Shared build that compiles everything oncenix/bin.nix- Extracts binaries (includes libraries for runtime linking)nix/lib.nix- Extracts libraries onlynix/include.nix- Header installation
Note: The logos-liblogos-bin package includes both binaries and their required libraries to ensure proper runtime linking. This is necessary because the binaries dynamically link against the logos libraries.
To use a local logos-cpp-sdk repo:
nix build --override-input logos-cpp-sdk path:../logos-cpp-sdkFirst, initialize the git submodules:
git submodule update --init --recursiveThen build:
./scripts/compile.shThe built libraries will be available in build/lib/ and binaries in build/bin/.
- CMake (3.14 or later)
- Ninja build system
- pkg-config
- Qt6 (qtbase) or Qt5 (Core, RemoteObjects)
- Qt6 Remote Objects (qtremoteobjects)
- logos-cpp-sdk
- macOS (aarch64-darwin, x86_64-darwin)
- Linux (aarch64-linux, x86_64-linux)