# Modulus Modulus is the shared C++23 foundation library and build tooling used by the khodo Product Vamp repositories. It provides small runtime utilities, Conan profiles, CMake package integration, editor templates, typed LSP compile-database setup, and bridge targets for the external libraries needed by Product Vamp. The core `modulus::modulus` target requires only Boost.JSON. Optional bridges are loaded when requested: ```cmake find_package(modulus CONFIG REQUIRED COMPONENTS openssl) target_link_libraries(app PRIVATE modulus::modulus modulus::openssl) ``` Available components are `boost_json`, `openssl`, `sqlite`, `raylib`, and `miniaudio`. Existing package discovery can also be followed by `modulus_require_openssl()` (or the corresponding bridge helper). Source builds opt in with `MODULUS_WITH_OPENSSL`, `MODULUS_WITH_SQLITE`, `MODULUS_WITH_RAYLIB`, and `MODULUS_WITH_MINIAUDIO`. Conan consumers must enable the matching `modulus/*:with_openssl`, `with_sqlite`, `with_raylib`, or `with_miniaudio` option to add that dependency to the graph. Applications combining several bridge consumers should set the union of these options on their direct Modulus requirement. All four options default to false. ## Build Use the checked-in tools directly inside CI or a compatible build environment: ```sh MODULUS_DIRECT=1 ./tools/configure.py --target x86_64_gcc12_release ./tools/build.py --target x86_64_gcc12_release ./tools/test.py --target x86_64_gcc12_release ``` Outside that environment, downstream repos use `python3 modulus.py ` to fetch the public `modulus/latest` package from the khodo Conan registry and export the tool wrappers into `build/build_tools/`. `build` automatically configures a target when CMake metadata is missing. Run `configure` explicitly when you want to force a reconfigure or refresh dependencies. Refresh clangd compile databases with: ```sh ./tools/lsp.py ``` Product repos can add typed extra CMake compile databases under `tooling.lsp.compile_databases`; this is intended for cases like Product Vamp's Pico firmware tree. ## Package Create Conan packages with: ```sh ./tools/package.py --all ``` Publishing requires credentials only for the upload step: ```sh CONAN_USER= \ CONAN_TOKEN= \ MODULUS_CONAN_UPLOAD=1 \ MODULUS_ALLOW_PACKAGE_REPLACE=1 \ ./tools/package.py --all --replace ``` The default public Conan remote is: ```text https://git.thyme-labs.com/api/packages/khodo/conan ``` Generic application artifacts default to: ```text https://git.thyme-labs.com/api/packages/khodo/generic ``` Configure/build/test do not require package credentials for public packages. ## License Modulus is released under the MIT License.