85 lines
1.8 KiB
Markdown
85 lines
1.8 KiB
Markdown
# 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
|
|
```
|
|
|
|
## To add a new satellite repo
|
|
|
|
1. check clone in clean state (all local changes committed or unwound)
|
|
|
|
2. add satellite as remote
|
|
|
|
```
|
|
$ git remote add xo-foo git@github.com:Rconybea/xo-foo.git
|
|
$ git fetch xo-foo
|
|
```
|
|
|
|
3. checkout satellite repo
|
|
|
|
```
|
|
$ git subtree add --prefix=xo-foo xo-foo main
|
|
```
|