---
name: xmake-workflow
description: Build and test the libuipc project using XMake. Use when building with xmake, running xmake f / xmake build / xmake run commands, selecting release/releasedbg/debug modes, or running Catch2 tests produced by xmake.
---

# XMake Workflow for libuipc

Run all xmake commands from the repository root (`libuipc/`).

## Configure

```bash
xmake f -c
```

Add `-m releasedbg` (RelWithDebInfo equivalent) or `-m debug` to change mode. Default is `release`.

## Build

```bash
xmake build -j8
```

Keep `-j` low (e.g. `-j8`). NVCC is memory-hungry and can OOM with a high job count.

Build one target: `xmake build -j8 core`.

## Target Names vs. Binary Names

Test targets use the shared `uipc_test` rule in `apps/tests/xmake.lua`, which rewrites the binary basename to `uipc_test_<target>`. Use the **target name** for `xmake build` / `xmake run`; use the **binary name** only when executing the file directly.

| Target name | Binary name |
|-------------|-------------|
| `core`, `geometry`, `common`, `sim_case`, `regression`, `sanity_check`, `backend_cuda` | `uipc_test_<target>` |
| `hello_affine_body`, `hello_simplicial_complex`, `wrecking_ball`, `pyuipc` | same as target |

List every runnable target with `xmake run --help`.

## Testing

Tests use **Catch2**. Run via xmake (recommended):

```bash
xmake run sim_case
xmake run backend_cuda
```

Or execute the binary directly: `./build/<plat>/<arch>/<mode>/uipc_test_core` (e.g. `./build/linux/x86_64/releasedbg/uipc_test_core`; on Windows the path ends in `.exe`).

Catch2 flags passthrough:
- `--list-tests` — list all test cases
- `[tag]` — filter by tag
- `"test name"` — run a specific test

## Quick Reference

| Step             | Command                                                  |
|------------------|----------------------------------------------------------|
| Configure        | `xmake f -c` (add `-m releasedbg` for RelWithDebInfo)    |
| Build            | `xmake build -j8`                                        |
| Build one target | `xmake build -j8 <target>`                               |
| List run targets | `xmake run --help`                                       |
| Run test         | `xmake run <target>`                                     |
| Clean            | `xmake clean` (add `-a` for all configs)                 |
