syntax trees for Schematika parser
  • C++ 95.6%
  • CMake 4.4%
Find a file
2025-08-29 19:32:40 -04:00
.github/workflows github: + jsoncpp-dev dependency 2025-05-11 15:38:44 -05:00
_static/img xo-umbrella: + docs support files 2025-06-22 16:19:21 -05:00
cmake xo-tokenizer: docs + error-handling improvement 2025-06-23 23:08:12 -05:00
docs xo-object: generative GC utest + reinstate coverage build 2025-08-06 09:30:37 -05:00
etc/hostegl shim directory etc/hostegl for running SDL app on WSL2 2025-08-21 20:22:57 -05:00
pkgs xo-cmake: comments on modules vs configs 2025-07-05 16:16:47 -05:00
xo-alloc xo-alloc: try to make commit happen at start of GC cycle 2025-08-26 13:36:18 -04:00
xo-callback xo-callback xo-alloc: + GC copy callbacks + unique_ptr cbset support 2025-08-12 12:53:06 -05:00
xo-cmake xo-alloc: GC mutation log works for full GC 2025-08-12 00:16:00 -05:00
xo-distribution Add 'xo-distribution/' from commit '036ca5d817' 2025-05-11 15:52:36 -05:00
xo-expression xo-alloc: mutation log tracking in working state + unit test 2025-08-05 11:08:36 -05:00
xo-flatstring xo-flatstrint: + .data() + .ensure_final_null() 2025-08-22 15:10:30 -04:00
xo-imgui xo-imgui: + vulkan examples 2025-08-29 19:32:40 -04:00
xo-indentlog xo-alloc / xo-object: utest coverage + assorted bugfixes 2025-08-07 18:32:14 -05:00
xo-jit xo-expression: generalize envframestack + handle explicit lm retturn 2025-07-28 13:16:09 -04:00
xo-kalmanfilter Add 'xo-kalmanfilter/' from commit '2ced8429c0' 2025-05-11 16:22:42 -05:00
xo-object bugfix: missed #pragma once 2025-08-12 00:15:03 -05:00
xo-ordinaltree xo-ordinaltree: drop legacy lcov build 2025-08-06 09:31:28 -05:00
xo-printjson Add 'xo-printjson/' from commit '6743b9ef18' 2025-05-11 14:58:48 -05:00
xo-process xo-process: prefer xo::bp spelling to xo::ref::brw 2025-07-05 13:53:46 -05:00
xo-pydistribution Add 'xo-pydistribution/' from commit 'a142a0044c' 2025-05-11 15:57:32 -05:00
xo-pyexpression refactor xo::ast -> xo::scm + restore nodef ppdetail_atomic build 2025-07-28 10:13:25 -04:00
xo-pyjit refactor xo::ast -> xo::scm + restore nodef ppdetail_atomic build 2025-07-28 10:13:25 -04:00
xo-pykalmanfilter Add 'xo-pykalmanfilter/' from commit 'a9daaa3278' 2025-05-11 16:27:01 -05:00
xo-pyprintjson Add 'xo-pyprintjson/' from commit '36797a419a' 2025-05-11 15:05:03 -05:00
xo-pyprocess Add 'xo-pyprocess/' from commit 'c4af12c625' 2025-05-11 16:19:35 -05:00
xo-pyreactor Add 'xo-pyreactor/' from commit '50b8d529a7' 2025-05-11 15:14:43 -05:00
xo-pyreflect Add 'xo-pyreflect/' from commit '54d11b31a5' 2025-05-10 21:04:13 -05:00
xo-pyrprintjson Add 'xo-pyrprintjson/' from commit '36797a419a' 2025-05-11 15:02:26 -05:00
xo-pysimulator Add 'xo-pysimulator/' from commit 'f940051411' 2025-05-11 16:06:48 -05:00
xo-pyunit Add 'xo-pyunit/' from commit '4d0e708ea4' 2025-05-11 00:58:27 -05:00
xo-pyutil Add 'xo-pyutil/' from commit 'a2cb8ae60f' 2025-05-10 19:38:21 -05:00
xo-pywebsock + xo-pywebsock 2025-05-11 15:27:53 -05:00
xo-pywebutil Add 'xo-pywebutil/' from commit '578b3d724a' 2025-05-11 14:55:44 -05:00
xo-randomgen Add 'xo-randomgen/' from commit '44a31724ec' 2025-05-10 18:54:18 -05:00
xo-ratio xo-ratio: compiler nit 2025-08-23 13:09:39 -04:00
xo-reactor pretty printing -- copmlete for xo::ast::GeneralizedExpression 2025-07-19 11:47:03 -05:00
xo-reader minor logging adds 2025-07-28 15:16:11 -04:00
xo-refcnt pretty printing -- copmlete for xo::ast::GeneralizedExpression 2025-07-19 11:47:03 -05:00
xo-reflect xo-reflect: bugfix is_i64 on linux (gcc / wsl2) 2025-07-27 14:31:39 -04:00
xo-reflectutil Add 'xo-reflectutil/' from commit '37ff6c2b01' 2025-05-10 20:12:01 -05:00
xo-simulator pretty printing -- copmlete for xo::ast::GeneralizedExpression 2025-07-19 11:47:03 -05:00
xo-statistics Add 'xo-statistics/' from commit 'ae49d8896a' 2025-05-11 15:42:06 -05:00
xo-subsys Add 'xo-subsys/' from commit '57eee82fa5' 2025-05-10 18:38:12 -05:00
xo-tokenizer xo-tokenizer: fix utest 2025-08-06 09:31:42 -05:00
xo-unit xo-unit: gcc + doc nits 2025-08-22 15:10:03 -04:00
xo-websock use xo::bp instead of xo::ref::brw 2025-07-05 13:55:00 -05:00
xo-webutil Add 'xo-webutil/' from commit '8e75838950' 2025-05-11 14:48:17 -05:00
.gitignore + .gitignore 2025-05-10 12:17:19 -05:00
CMakeLists.txt xo-alloc: + gc history xo-imgui: gui examples 2025-08-14 09:50:59 -05:00
conf.py xo-tokenizer: docs + error-handling improvement 2025-06-23 23:08:12 -05:00
default.nix xo-imgui: + vulkan examples 2025-08-29 19:32:40 -04:00
Doxyfile.in xo-umbrella: + docs support files 2025-06-22 16:19:21 -05:00
index.rst + xo-alloc + xo-object + xo-alloc docs + GC utests 2025-08-03 15:59:38 -05:00
README.md xo-alloc / xo-object: utest coverage + assorted bugfixes 2025-08-07 18:32:14 -05:00

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} -DXO_ENABLE_EXAMPLES=1
$ 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.

Coverage Build

Prepare build

# phase 2
$ cmake -B .build -S . -DCMAKE_INSTALL_PREFIX=${PREFIX} -DCMAKE_BUILD_TYPE=coverage

Run coverage-enabled unit tests

$ (cd .build && ctest)

Generate coverage report

$ .build/gen-ccov

Html report left in .build/ccov/html/index.html

To view docs from WSL

  1. find wsl IP address
$ hostname -I
  1. run nix build
$ nix-build -A xo-userenv
  1. serve docs from some available port
$ (cd result && python3 -m http.server 3000)
  1. browse to ":3000/share/doc/xo-flatstring/html" from windows

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
  1. checkout satellite repo
$ git subtree add --prefix=xo-foo xo-foo main