# Graft C ABI primitives

<a id="graftcabiprimitives"></a>

# Graft C ABI primitives

C-compatible manifest and export conventions shared by plugin-in and host-out graft surfaces.

## Classes

| Name | Description |
|------|-------------|
| [`icy_graft_manifest`](https://auscaster.com/icey/docs/api-reference/icy_graft_manifest.md#icy_graft_manifest-1) | What a graft plugin exports under ICY_GRAFT_PLUGIN_MANIFEST_SYMBOL: its ABI version, file name, ID, name, version, runtime and entry point. |

## Macros

| Name | Description |
|------|-------------|
| [`ICY_GRAFT_EXPORT`](#icy_graft_export)  |  |
| [`ICY_GRAFT_EXTERN_C_BEGIN`](#icy_graft_extern_c_begin)  |  |
| [`ICY_GRAFT_EXTERN_C_END`](#icy_graft_extern_c_end)  |  |
| [`ICY_GRAFT_MANIFEST_STORAGE`](#icy_graft_manifest_storage)  |  |
| [`ICY_GRAFT_ABI_VERSION`](#icy_graft_abi_version)  |  |
| [`ICY_GRAFT_PLUGIN_MANIFEST_SYMBOL`](#icy_graft_plugin_manifest_symbol)  |  |
| [`ICY_GRAFT_RUNTIME_NATIVE`](#icy_graft_runtime_native)  |  |
| [`ICY_GRAFT_RUNTIME_WORKER`](#icy_graft_runtime_worker)  |  |
| [`ICY_GRAFT_RUNTIME_HOST`](#icy_graft_runtime_host)  |  |
| [`ICY_GRAFT_MANIFEST`](#icy_graft_manifest)  |  |
| [`ICY_GRAFT_HOST_SURFACE`](#icy_graft_host_surface)  |  |

---

<a id="icy_graft_export"></a>

### ICY_GRAFT_EXPORT

```cpp
#define ICY_GRAFT_EXPORT
```

Defined in src/graft/include/icy/graft/abi.h:26

---

<a id="icy_graft_extern_c_begin"></a>

### ICY_GRAFT_EXTERN_C_BEGIN

```cpp
#define ICY_GRAFT_EXTERN_C_BEGIN
```

Defined in src/graft/include/icy/graft/abi.h:35

---

<a id="icy_graft_extern_c_end"></a>

### ICY_GRAFT_EXTERN_C_END

```cpp
#define ICY_GRAFT_EXTERN_C_END
```

Defined in src/graft/include/icy/graft/abi.h:36

---

<a id="icy_graft_manifest_storage"></a>

### ICY_GRAFT_MANIFEST_STORAGE

```cpp
#define ICY_GRAFT_MANIFEST_STORAGE ICY_GRAFT_EXPORT const
```

Defined in src/graft/include/icy/graft/abi.h:37

---

<a id="icy_graft_abi_version"></a>

### ICY_GRAFT_ABI_VERSION

```cpp
#define ICY_GRAFT_ABI_VERSION 1u
```

Defined in src/graft/include/icy/graft/abi.h:41

---

<a id="icy_graft_plugin_manifest_symbol"></a>

### ICY_GRAFT_PLUGIN_MANIFEST_SYMBOL

```cpp
#define ICY_GRAFT_PLUGIN_MANIFEST_SYMBOL "icy_graft_manifest"
```

Defined in src/graft/include/icy/graft/abi.h:43

---

<a id="icy_graft_runtime_native"></a>

### ICY_GRAFT_RUNTIME_NATIVE

```cpp
#define ICY_GRAFT_RUNTIME_NATIVE "native"
```

Defined in src/graft/include/icy/graft/abi.h:45

---

<a id="icy_graft_runtime_worker"></a>

### ICY_GRAFT_RUNTIME_WORKER

```cpp
#define ICY_GRAFT_RUNTIME_WORKER "worker"
```

Defined in src/graft/include/icy/graft/abi.h:46

---

<a id="icy_graft_runtime_host"></a>

### ICY_GRAFT_RUNTIME_HOST

```cpp
#define ICY_GRAFT_RUNTIME_HOST "host"
```

Defined in src/graft/include/icy/graft/abi.h:47

---

<a id="icy_graft_manifest"></a>

### ICY_GRAFT_MANIFEST

```cpp
#define ICY_GRAFT_MANIFEST(symbolName, surfaceId, surfaceName, surfaceVersion, runtimeKind, entrypointName) ICY_GRAFT_EXTERN_C_BEGIN                                                                      \
    ICY_GRAFT_MANIFEST_STORAGEicy_graft_manifest_t symbolName = {                                \
        ICY_GRAFT_ABI_VERSION,                                                                    \
        __FILE__,                                                                                 \
        surfaceId,                                                                                \
        surfaceName,                                                                              \
        surfaceVersion,                                                                           \
        runtimeKind,                                                                              \
        entrypointName,                                                                           \
    };                                                                                            \
    ICY_GRAFT_EXTERN_C_END
```

Defined in src/graft/include/icy/graft/abi.h:74

---

<a id="icy_graft_host_surface"></a>

### ICY_GRAFT_HOST_SURFACE

```cpp
#define ICY_GRAFT_HOST_SURFACE(manifestSymbol, surfaceId, surfaceName, surfaceVersion, entrypointName) ICY_GRAFT_MANIFEST(manifestSymbol,                                                              \
                       surfaceId,                                                                   \
                       surfaceName,                                                                 \
                       surfaceVersion,                                                              \
                       ICY_GRAFT_RUNTIME_HOST,                                                       \
                       entrypointName)
```

Defined in src/graft/include/icy/graft/abi.h:88

## Enumerations

| Name | Description |
|------|-------------|
| [`icy_graft_status`](#icy_graft_status)  |  |

---

<a id="icy_graft_status"></a>

### icy_graft_status

```cpp
enum icy_graft_status
```

Defined in src/graft/include/icy/graft/abi.h:64

| Value | Description |
|-------|-------------|
| `ICY_GRAFT_STATUS_OK` |  |
| `ICY_GRAFT_STATUS_ERROR` |  |
| `ICY_GRAFT_STATUS_INVALID_ARGUMENT` |  |
| `ICY_GRAFT_STATUS_INVALID_STATE` |  |
| `ICY_GRAFT_STATUS_UNSUPPORTED` |  |
## Typedefs

| Return | Name | Description |
|--------|------|-------------|
| struct [`icy_graft_manifest`](https://auscaster.com/icey/docs/api-reference/icy_graft_manifest.md#icy_graft_manifest-1) | [`icy_graft_manifest_t`](#icy_graft_manifest_t)  | What a graft plugin exports under ICY_GRAFT_PLUGIN_MANIFEST_SYMBOL: its ABI version, file name, ID, name, version, runtime and entry point. |
| enum [`icy_graft_status`](#icy_graft_status) | [`icy_graft_status_t`](#icy_graft_status_t)  |  |

---

<a id="icy_graft_manifest_t"></a>

### icy_graft_manifest_t

```cpp
using icy_graft_manifest_t = struct icy_graft_manifest
```

Type: struct [`icy_graft_manifest`](https://auscaster.com/icey/docs/api-reference/icy_graft_manifest.md#icy_graft_manifest-1)

Defined in src/graft/include/icy/graft/abi.h:61

What a graft plugin exports under ICY_GRAFT_PLUGIN_MANIFEST_SYMBOL: its ABI version, file name, ID, name, version, runtime and entry point.

---

<a id="icy_graft_status_t"></a>

### icy_graft_status_t

```cpp
using icy_graft_status_t = enum icy_graft_status
```

Type: enum [`icy_graft_status`](#icy_graft_status)

Defined in src/graft/include/icy/graft/abi.h:71
