Some docs.
This commit is contained in:
parent
0527902dbc
commit
18aa5a8ca8
222
README.md
222
README.md
|
@ -1 +1,221 @@
|
|||
# sdk
|
||||
# osdk
|
||||
|
||||
The operating system development kit
|
||||
|
||||
## Macros
|
||||
|
||||
|
||||
### `@latest`
|
||||
|
||||
Find the latest version of a command in the path.
|
||||
|
||||
```json
|
||||
"cc": {
|
||||
"cmd": ["@latest", "clang"], // clang-14
|
||||
/* ... */
|
||||
```
|
||||
|
||||
### `@uname`
|
||||
|
||||
Query the system for information about the current operating system.
|
||||
|
||||
|
||||
```json
|
||||
"cc": {
|
||||
"cmd": ["@uname", "machine"], // "x86_64"
|
||||
/* ... */
|
||||
```
|
||||
|
||||
### `@include`
|
||||
|
||||
Include a file
|
||||
|
||||
### `@join`
|
||||
|
||||
Join two objects
|
||||
|
||||
Example:
|
||||
|
||||
```json
|
||||
["@join", {"a": 1}, {"b": 2}] // {"a": 1, "b": 2}
|
||||
```
|
||||
|
||||
### `@concat`
|
||||
|
||||
Concatenate strings
|
||||
|
||||
Example:
|
||||
|
||||
```json
|
||||
["@concat", "a", "b", "c"] // "abc"
|
||||
```
|
||||
|
||||
### `@exec`
|
||||
|
||||
Execute a command and return the output
|
||||
|
||||
Example:
|
||||
|
||||
```json
|
||||
["@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:
|
||||
|
||||
```json
|
||||
{
|
||||
"id": "hello"
|
||||
}
|
||||
```
|
||||
|
||||
### `type`
|
||||
|
||||
The type of the package. This is used to identify the package in the manifest file.
|
||||
|
||||
Exemple:
|
||||
|
||||
```json
|
||||
{
|
||||
"type": "exe"
|
||||
}
|
||||
```
|
||||
|
||||
### `description`
|
||||
|
||||
The description of the package for the user.
|
||||
|
||||
Exemple:
|
||||
|
||||
```json
|
||||
{
|
||||
"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:
|
||||
|
||||
```json
|
||||
{
|
||||
"deps": [
|
||||
"libc",
|
||||
"libm"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### `provide`
|
||||
|
||||
Alias for the package.
|
||||
|
||||
Exemple:
|
||||
|
||||
```json
|
||||
{
|
||||
"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:
|
||||
|
||||
```json
|
||||
{
|
||||
"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.
|
||||
|
||||
```json
|
||||
{
|
||||
"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"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
|
|
@ -182,12 +182,14 @@ def getCmdOutput(*args: str) -> str:
|
|||
|
||||
return proc.stdout.decode('utf-8')
|
||||
|
||||
|
||||
def sanitizedUname():
|
||||
un = os.uname()
|
||||
if un.machine == "aarch64":
|
||||
un.machine = "arm64"
|
||||
return un
|
||||
|
||||
|
||||
def findLatest(command) -> str:
|
||||
"""
|
||||
Find the latest version of a command
|
||||
|
@ -207,7 +209,7 @@ def findLatest(command) -> str:
|
|||
for f in os.listdir(path):
|
||||
if regex.match(f):
|
||||
versions.append(f)
|
||||
|
||||
|
||||
if len(versions) == 0:
|
||||
raise CliException(f"Failed to find {command}")
|
||||
|
||||
|
|
Loading…
Reference in a new issue