🪄​ The *magical* build system and package manager
Go to file
2023-02-02 16:24:24 +01:00
osdk Fix deps resolution. 2023-02-02 16:24:24 +01:00
osdk-old Continue work on ninja file generation. 2023-02-02 10:34:46 +01:00
.gitignore Initial commit 2022-06-26 00:21:53 +02:00
.mypyconfig Initial commit. 2022-06-26 00:22:53 +02:00
LICENSE Initial commit 2022-06-26 00:21:53 +02:00
README.md Some docs. 2022-10-30 22:15:52 +01:00
requirements.txt Initial commit. 2022-06-26 00:22:53 +02:00
setup.cfg Add setup.cfg for packaging 2022-06-26 12:29:24 +02:00
setup.py Fix deps resolution. 2023-02-02 16:24:24 +01:00

osdk

The operating system development kit

Macros

@latest

Find the latest version of a command in the path.

"cc": {
    "cmd": ["@latest", "clang"], // clang-14
/* ... */

@uname

Query the system for information about the current operating system.

"cc": {
    "cmd": ["@uname", "machine"], // "x86_64"
/* ... */

@include

Include a file

@join

Join two objects

Example:

["@join",  {"a": 1}, {"b": 2}] // {"a": 1, "b": 2}

@concat

Concatenate strings

Example:

["@concat", "a", "b", "c"] // "abc"

@exec

Execute a command and return the output

Example:

["@exec", "uname", "-m"] // "x86_64"

Manifest file format

id

The id of the package. This is used to identify the package in the manifest file.

Exemple:

{
    "id": "hello"
}

type

The type of the package. This is used to identify the package in the manifest file.

Exemple:

{
    "type": "exe"
}

description

The description of the package for the user.

Exemple:

{
    "description": "Hello world"
}

deps

Dependencies of the package. The name listed here must be the same as the id of the package or member of a provide list.

Exemple:

{
    "deps": [
        "libc",
        "libm"
    ]
}

provide

Alias for the package.

Exemple:

{
    "provide": [
        "hello"
    ]
}

requires

A list of requirements for the package check agaisnt the build props. If the requirement is not met, the package will be disabled.

Target file format

id

The id of the target. This is used to identify the target in the target file.

type

Should be target.

props

A list of properties for the target.

Exemple:

{
    "props": {
        "arch": "x86_64",
        "vendor": "pc",
        "os": "linux",
        "env": "gnu",
        "abi": "elf",
        "cpu": "x86_64",
        "features": "fxsr,sse,sse2"
    }
}

Theses values are exposed the translation unit as __osdk_{prop}__.

tools

A list of tools for the target.

{
    "tools": {
        "cc": {
            "cmd": ["@latest", "clang"],
            "args": [
                "-target",
                "x86_64-unknown-windows",
                "-ffreestanding",
                "-fno-stack-protector",
                "-fshort-wchar",
                "-mno-red-zone"
            ]
        },
        "cxx": {
            "cmd": ["@latest", "clang++"],
            "args": [
                "-target",
                "x86_64-unknown-windows",
                "-ffreestanding",
                "-fno-stack-protector",
                "-fshort-wchar",
                "-mno-red-zone"
            ]
        },
        "ld": {
            "cmd": ["@latest", "clang++"],
            "args": [
                "-target",
                "x86_64-unknown-windows",
                "-nostdlib",
                "-Wl,-entry:efi_main",
                "-Wl,-subsystem:efi_application",
                "-fuse-ld=lld-link"
            ]
        },
        "ar": {
            "cmd": ["@latest", "llvm-ar"],
            "args": [
                "rcs"
            ]
        },
        "as": {
            "cmd": "nasm",
            "args": [
                "-f",
                "win64"
            ]
        }
    }
}