master repository for XO: cooperating set of C++ libraries for deterministic simulation
- C++ 87.5%
- C 6.2%
- CMake 3.4%
- Nix 1%
- Objective-C++ 0.6%
- Other 1.2%
| .github/workflows | ||
| pkgs | ||
| xo-callback | ||
| xo-cmake | ||
| xo-distribution | ||
| xo-expression | ||
| xo-flatstring | ||
| xo-indentlog | ||
| xo-jit | ||
| xo-kalmanfilter | ||
| xo-ordinaltree | ||
| xo-printjson | ||
| xo-process | ||
| xo-pydistribution | ||
| xo-pyexpression | ||
| xo-pyjit | ||
| xo-pykalmanfilter | ||
| xo-pyprintjson | ||
| xo-pyprocess | ||
| xo-pyreactor | ||
| xo-pyreflect | ||
| xo-pyrprintjson | ||
| xo-pysimulator | ||
| xo-pyunit | ||
| xo-pyutil | ||
| xo-pywebsock | ||
| xo-pywebutil | ||
| xo-randomgen | ||
| xo-ratio | ||
| xo-reactor | ||
| xo-reader | ||
| xo-refcnt | ||
| xo-reflect | ||
| xo-reflectutil | ||
| xo-simulator | ||
| xo-statistics | ||
| xo-subsys | ||
| xo-tokenizer | ||
| xo-unit | ||
| xo-websock | ||
| xo-webutil | ||
| .gitignore | ||
| CMakeLists.txt | ||
| default.nix | ||
| README.md | ||
Introduction
Local nix build for xo libraries. Intended for local development work, with source in immediate subdirectories.
Features
- native c++
- deterministic simulation
- reflection
- python bindings
Getting Started
Cmake build
If nix is available, you probably prefer the nix build.
Otherwise continue reading..
The cmake build has two phases, because it needs to bootstrap
generated xo-cmake-config, xo-build helpers.
$ cd xo
$ PREFIX=/path/to/say/usr/local
# phase 1
$ cmake -B .build0 -S xo-cmake -DCMAKE_INSTALL_PREFIX=${PREFIX}
$ cmake --build .build0
$ cmake --install .build0
# phase 2
$ cmake -B .build -S . -DCMAKE_INSTALL_PREFIX=${PREFIX}
$ cmake --build .build
$ cmake --install .build
Nix Build
Nix build uses toplevel default.nix,
along with top-level pkgs/xo-foo.nix for each subproject foo.
It doesn't interact with toplevel CMakeLists.txt.
$ nix-build -A xo-userenv
This builds all xo subprojects, assembles sandbox under ./result.
$ tree -L 1 ./result
./result
├── bin
│ ├── xo-build
│ ├── xo-cmake-config
│ └── xo-cmake-lcov-harness
└── share
├── cmake
│ └── xo_macros
│ ├── code-coverage.cmake
│ ├── xo-project-macros.cmake
│ └── xo_cxx.cmake
├── etc
│ └── xo
│ └── subsystem-list
└── xo-macros
├── Doxyfile.in
├── gen-ccov.in
└── xo-bootstrap-macros.cmake
For completeness' sake: can also use
$ nix-build -A xo-userenv-slow
Same result as $nix-build -A xo-userenv, but builds each package serially
using xo-build.
To view docs from WSL
- find wsl IP address
$ hostname -I
- run nix build
$ nix-build -A xo-userenv
- serve docs from some available port
$ (cd result && python3 -m http.server 3000)
- browse to ":3000/share/doc/xo-flatstring/html" from windows
To add a new satellite repo
-
check clone in clean state (all local changes committed or unwound)
-
add satellite as remote
$ git remote add xo-foo git@github.com:Rconybea/xo-foo.git
$ git fetch xo-foo
- checkout satellite repo
$ git subtree add --prefix=xo-foo xo-foo main