77 lines
1.7 KiB
Markdown
77 lines
1.7 KiB
Markdown
# Getting Started
|
|
|
|
## Requirements
|
|
|
|
| Dependency | Version | Notes |
|
|
|---|---|---|
|
|
| CMake | ≥ 3.21 | |
|
|
| C++ compiler | GCC ≥ 11, Clang ≥ 13 | C++20 required |
|
|
| nanobind | ≥ 2.1 | auto-fetched; Python ≥ 3.8 |
|
|
| Catch2 | v3 | auto-fetched for tests |
|
|
| OpenCV | ≥ 4 | optional; only for examples 09/12/13 |
|
|
|
|
## Build
|
|
|
|
```bash
|
|
cmake -B build # core + tests + C++ examples
|
|
cmake --build build --parallel
|
|
ctest --test-dir build # run all tests including example smoke tests
|
|
```
|
|
|
|
Enable Python bindings:
|
|
|
|
```bash
|
|
cmake -B build -DKPN_BUILD_PYTHON=ON
|
|
cmake --build build --parallel
|
|
```
|
|
|
|
Skip examples:
|
|
|
|
```bash
|
|
cmake -B build -DKPN_BUILD_EXAMPLES=OFF
|
|
```
|
|
|
|
## Your first pipeline
|
|
|
|
Three functions — source, transform, sink — wired into a `Network`:
|
|
|
|
```cpp
|
|
--8<-- "examples/01_hello_pipeline/main.cpp:basic_node_fns"
|
|
```
|
|
|
|
Create nodes, connect them, build and run:
|
|
|
|
```cpp
|
|
--8<-- "examples/01_hello_pipeline/main.cpp:network_build"
|
|
```
|
|
|
|
That's it. Types are inferred from function signatures. The channel between `src` and `dbl` carries `int`; the channel between `dbl` and `prn` also carries `int`. A type mismatch is a compile error.
|
|
|
|
## Named ports
|
|
|
|
For nodes with multiple inputs or outputs, name the ports for clarity:
|
|
|
|
```cpp
|
|
--8<-- "examples/02_named_ports/main.cpp:named_port_creation"
|
|
```
|
|
|
|
Wire by name instead of index:
|
|
|
|
```cpp
|
|
--8<-- "examples/02_named_ports/main.cpp:named_port_network"
|
|
```
|
|
|
|
## Multi-output nodes
|
|
|
|
Return a `std::tuple` to fan out to multiple downstream nodes:
|
|
|
|
```cpp
|
|
--8<-- "examples/03_multi_output/main.cpp:multi_output_fn"
|
|
```
|
|
|
|
Wire each tuple element to its own downstream node:
|
|
|
|
```cpp
|
|
--8<-- "examples/03_multi_output/main.cpp:fanout_network"
|
|
```
|