# Installation

## Python toolchain

Requires Python 3.10 or later.

```bash
pip install tigris-ml
```

This pulls in all Python dependencies automatically. pip picks a wheel for your
platform:

| Platform | Wheel | `tigris run` |
|----------|-------|--------------|
| Linux x86-64 and ARM64, glibc 2.28 or newer | native (`manylinux_2_28`) | yes |
| macOS 11 or newer, x86-64 and ARM64 | native | yes |
| Windows x86-64 | native | yes |
| musl Linux (Alpine), Windows ARM64, 32-bit ARM Linux, older glibc | pure Python | with your own host library |

Native wheels bundle the portable C runtime as a host library, so
[`tigris run`](/0.11.0/toolchain/run/) can execute compiled plans on your machine. The
pure Python wheel has every other command: `analyze`, `compile`, `codegen`,
`inspect`, `simulate` and `zoo`. There `run` stops with "Bundled host runtime is
unavailable" unless you build the host library from the runtime sources and set
`TIGRIS_HOST_LIBRARY` to it; see
[Using your own host library](/0.11.0/toolchain/run/#using-your-own-host-library).
No native runtime is downloaded separately during installation or execution.

### Development install

Clone the repo and install with dev extras for testing:

```bash
git clone https://github.com/raws-labs/tigris.git
cd tigris
pip install -e ".[dev]"
```

The `[dev]` extra adds `pytest` and `onnxruntime` (used for reference output validation).

### Verify

```bash
tigris --version
```

This also prints the host runtime version and where it comes from, for example
`tigris, version X.Y.Z (runtime X.Y.Z; bundled)`, or `(runtime unavailable)` on
the pure wheel without an override. Compiler and runtime release as a
pair with the same version number; each plan still records its own schema, and
each runtime states which plan schemas it accepts.

## C runtime

The runtime is a self-contained C project built with CMake as C11. It has no
external dependencies and needs no package manager. The portable harness that
`tigris codegen` generates is C99.

```bash
git clone https://github.com/raws-labs/tigris-runtime.git
cd tigris-runtime
cmake -B build && cmake --build build
```

Run the self-contained test suite:

```bash
ctest --test-dir build --output-on-failure
```

The fixture-driven end-to-end tests need plans generated by the compiler. From a
checkout of [tigris](https://github.com/raws-labs/tigris) with
`pip install -e ".[dev]"`:

```bash
python scripts/gen_fixtures.py model.onnx -o <runtime checkout>/test/fixtures -m 256K
```

Then, from the runtime checkout, `./test/run_all.sh test/fixtures`.


## Platform notes

| Platform | Status | Notes |
|----------|--------|-------|
| Linux (x86_64, aarch64) | Supported | Primary development platform |
| macOS (Apple Silicon, Intel) | Supported | |
| Windows (x86-64) | Supported for the Python toolchain | The native wheel includes the host runtime. Building the C runtime for firmware from Windows is untested; WSL is recommended. |

## Next step

Ready to deploy? Follow the [Quickstart](/0.11.0/getting-started/quickstart/).