From 18aa5a8ca84f63a9b4385b4b82867e6fe1aafc5d Mon Sep 17 00:00:00 2001 From: VAN BOSSUYT Nicolas Date: Sun, 30 Oct 2022 22:15:52 +0100 Subject: [PATCH] Some docs. --- README.md | 222 +++++++++++++++++++++++++++++++++++++++++++++++++- osdk/utils.py | 4 +- 2 files changed, 224 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 4c4a298..2f7b050 100644 --- a/README.md +++ b/README.md @@ -1 +1,221 @@ -# sdk \ No newline at end of file +# 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" + ] + } + } +} +``` diff --git a/osdk/utils.py b/osdk/utils.py index b4364c3..1e58052 100644 --- a/osdk/utils.py +++ b/osdk/utils.py @@ -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}")