syntax trees for Schematika parser
  • C++ 95.6%
  • CMake 4.4%
Find a file
2025-10-27 12:44:27 -04:00
.github/workflows github: + libbsd-dev dep 2025-09-04 00:09:28 -04:00
_static/img xo-umbrella: + docs support files 2025-06-22 16:19:21 -05:00
cmake + LinearAlloc + utest 2025-07-29 07:17:35 -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 nix build: xo-jit: build+install docs+examples: xo-jit.nix ++ 2025-09-22 12:55:49 -04:00
xo-alloc xo-imgui: clang compiler nits 2025-08-29 19:33:09 -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-build: add with-vulkan arg 2025-09-23 00:53:05 -04:00
xo-distribution Add 'xo-distribution/' from commit '036ca5d817' 2025-05-11 15:52:36 -05:00
xo-expression xo-expression: build: install examples 2025-09-22 12:29:05 -04:00
xo-flatstring xo-flatstring: build: install examples if XO_ENABLE_EXAMPLES 2025-09-22 12:29:29 -04:00
xo-imgui Merge branch 'main' of github.com:Rconybea/xo-umbrella2 2025-10-27 12:44:27 -04:00
xo-indentlog xo-indentlog: build: cosmetic 2025-09-22 12:53:12 -04:00
xo-jit xo-jit: build: ignore llvm-owned maybe-uninitialized 2025-09-22 12:53:48 -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 xo-randomgen: build: install examples with XO_ENABLE_EXAMPLES 2025-09-22 12:30:00 -04:00
xo-ratio xo-ratio: build fix for indentlog dep + install examples 2025-09-22 12:30:23 -04:00
xo-reactor pretty printing -- copmlete for xo::ast::GeneralizedExpression 2025-07-19 11:47:03 -05:00
xo-reader nix build: xo-reader: build + install docs+examples + build fix 2025-09-22 12:47:00 -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: build + install docs + examples + build fixes 2025-09-22 12:45:30 -04:00
xo-unit xo-unit: bugfix: need ppdetail_atomic guard 2025-09-22 21:12:13 -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-build: + xo_indentlog docs in umbrella doxygen list 2025-09-23 00:48:10 -04:00
conf.py xo-tokenizer: docs + error-handling improvement 2025-06-23 23:08:12 -05:00
default.nix xo-imgui wip 2025-09-24 23:24:35 -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 build: opengl + vulkan both working on wsl2 w/ hardware accel !! 2025-09-23 00:51:23 -04: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

Nix shell (reproducible development environment)

If nix is available, can get several reproducible build environments

$ cd xo-umbrella2
$ nix-shell -A shell0  # just nix stdenv: make,gcc,bash etc.
$ nix-shell -A shell1  # stable environment
$ nix-shell -A shell2  # stable environment + emacs + lsp
$ nix-shell -A shell   # bleeding edge environment

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