# Cutekit 

Cutekit is a build system that aims to be simple, fast and easy to use.
A project is described using json files.

## Project file 

The project file is used to describe the project and its dependencies.

See: [doc/spec/project.md](doc/spec/project.md) for the full specification.

Example: 

> project.json
```json
{
    "$schema": "https://schemas.cute.engineering/stable/cutekit.manifest.project.v1",
    "id": "skift-org/skift",
    "type": "project",
    "description": "The Skift Operating System",
    "extern": {
        "cute-engineering/libheap": {
            "git": "https://github.com/cute-engineering/libheap.git",
            "tag": "v1.1.0"
        }
    }
}
```

Here we describe a project with the id `skift-org/skift` and a dependency to `cute-engineering/libheap` at version `v1.1.0`.

## An executable package manifest


When you want to create an executable package, you need to create a `manifest.json` file in any directory under `src/`.
This is the file that describe an executable with its dependencies.

> src/nyan-cat-app/manifest.json   
```json
{
    "$schema": "https://schemas.cute.engineering/stable/cutekit.manifest.component.v1",
    "id": "nyan-cat-app",
    "type": "exe",
    "description": "rainbows everywhere",
    "requires": [
        "easy-lib"
    ]
}
```

Here we describe an executable with the id `nyan-cat-app` and a dependency to `easy-lib` (which is a library built by the project).

You can run the executable by running `$ ck run nyan-cat-app`.

## A library package manifest

When you want to create a library package, you need to create a `manifest.json` file in any directory under `src/`, like an executable package.

> src/easy-lib/manifest.json   
```json
{
    "$schema": "https://schemas.cute.engineering/stable/cutekit.manifest.component.v1",
    "id": "easy-lib",
    "type": "lib",
    "description": "easy to use library",
    "requires": [
        "cute-engineering/libheap"
    ]
}
```

Here we describe a library with the id `easy-lib` and a dependency to `cute-engineering/libheap` (which is an external dependency described above in the `project.json`).

## Using installed libraries

You can create a specific installed library through the use of `pkg-config` files.
For example here is how you add `SDL2` to your project:


> src/extern/sdl2/manifest.json
```json
{
    "$schema": "https://schemas.cute.engineering/stable/cutekit.manifest.component.v1",
    "id": "sdl2",
    "type": "lib",
    "description": "A cross-platform development library designed to provide low level access to hardware",
    "tools": {
        "cc": {
            "args": [
                "@exec",
                "pkg-config",
                "--cflags",
                "sdl2"
            ]
        },
        "cxx": {
            "args": [
                "@exec",
                "pkg-config",
                "--cflags",
                "sdl2"
            ]
        },
        "ld": {
            "args": [
                "@exec",
                "pkg-config",
                "--libs",
                "sdl2"
            ]
        }
    }
}
```