Skip to content

Repository files navigation

YAE

YAE clones a C++ project's dependencies and generates its CMakeLists.txt files. The generated CMake is committed and builds with plain cmakeYAE is not required to configure or build. On top of that, YAE adds convenience commands (build, run, profile, list, git-status, format, tidy, …) so day-to-day work is a single command.

The Python implementation lives under src/yae; the root yae launcher runs it through uv.

Requirements

  • uv on your PATH (runs YAE in a local .venv; nothing is installed globally).
  • git, CMake 3.29 or newer, Ninja (the default generator), and a C++ toolchain.
  • Python 3.12 or newer, if the project stages content — the build calls a script to do it. Needed to build the project even without YAE; see Generated CMake.

Install

git clone https://github.com/Sunday111/yae
sudo ln -sf "$PWD/yae/yae" /usr/bin/yae   # optional: call it as `yae` from anywhere

Bash completion

With bash-completion installed, link the completion script from your YAE checkout:

completion_dir="${XDG_DATA_HOME:-$HOME/.local/share}/bash-completion/completions"
mkdir -p "$completion_dir"
ln -s "$PWD/completions/yae.bash" "$completion_dir/yae"

Bash loads it automatically when completing yae. It completes commands, options, directory arguments, and fixed option choices. Build and executable target names are not completed. To reload it in a shell that has already loaded the script, run source "$completion_dir/yae".

The script is generated from the argument parser. After changing command definitions, regenerate it from the checkout root with:

uv run python -m yae.completion > completions/yae.bash

Quick start

Build and run a project you already have (a directory containing yae_project.json):

cd path/to/project
yae build     # fetch dependencies, generate CMake, configure, and build
yae run       # (re)build, then run the default executable

yae build runs the whole generate → configure → build chain for you.

Clone a project with YAE and run it:

export YAE_CLONED_REPOSITORIES_DIR="$HOME/yae_repositories"
yae clone https://github.com/Sunday111/verlet_cuda
yae run verlet_cuda          # finds the checkout by target name — no cd needed

See what a project contains:

yae list                     # this project's modules
yae git-status               # repos with uncommitted changes

Common flags

  • --project_dir=<path> or YAE_PROJECT_DIR — operate on a project without cd-ing into it. For format, the path may be any Git repository even when it has no yae_project.json; --repository_dir is a clearer alias.
  • --cloned_repositories_dir=<path> or YAE_CLONED_REPOSITORIES_DIR — where dependencies are fetched/shared.
  • --clone-progress — stream git clone progress on slow networks.

Building without YAE

Because the CMake files are committed, anyone can build without the tool:

cmake -S . -B build -DYAE_CLONED_REPOSITORIES_DIR=/path/to/repositories
cmake --build build --parallel

See Generated CMake for details.

Documentation

Topic What's in it
Getting started Install, first build, cloning a project.
Commands Full reference for every command and its flags.
Project model yae_project.json, *.package.json, *.module.json.
Repositories & running from anywhere Dependency fetching, path resolution, YAE_PROJECT_DIR, discovery.
Generated CMake The committed CMake, building without YAE, the support package.
Configuration local-config.json, compiler/generator settings, pinning the support package.
Self test What yae self-test checks.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages