Turned osdk into a python package.

This commit is contained in:
Sleepy Monax 2022-06-26 08:31:43 +02:00
parent d21f41448f
commit 7bf3c66ca7
8 changed files with 69 additions and 35 deletions

48
__main__.py → osdk/__init__.py Executable file → Normal file
View file

@ -3,11 +3,9 @@ import sys
import os import os
import random import random
import osdk.build as build
import build import osdk.utils as utils
import utils import osdk.environments as environments
from utils import Colors
import environments
CMDS = {} CMDS = {}
@ -34,12 +32,12 @@ def parseOptions(args: list[str]) -> dict:
def runCmd(opts: dict, args: list[str]) -> None: def runCmd(opts: dict, args: list[str]) -> None:
if len(args) == 0: if len(args) == 0:
print(f"Usage: {sys.argv[0]} run <component>") print(f"Usage: {args[0]} run <component>")
sys.exit(1) sys.exit(1)
out = build.buildOne(opts.get('env', 'host-clang'), args[0]) out = build.buildOne(opts.get('env', 'host-clang'), args[0])
print(f"{Colors.BOLD}Running: {args[0]}{Colors.RESET}") print(f"{utils.Colors.BOLD}Running: {args[0]}{utils.Colors.RESET}")
utils.runCmd(out, *args[1:]) utils.runCmd(out, *args[1:])
@ -121,11 +119,11 @@ def idCmd(opts: dict, args: list[str]) -> None:
def helpCmd(opts: dict, args: list[str]) -> None: def helpCmd(opts: dict, args: list[str]) -> None:
print(f"Usage: {sys.argv[0]} <command> [options...] [<args...>]") print(f"Usage: osdk <command> [options...] [<args...>]")
print("") print("")
print("Description:") print("Description:")
print(" The skift operating system build system.") print(" Operating System Development Kit.")
print("") print("")
print("Commands:") print("Commands:")
@ -134,8 +132,12 @@ def helpCmd(opts: dict, args: list[str]) -> None:
print("") print("")
print("Enviroments:") print("Enviroments:")
for env in environments.available(): availableToolchains = environments.available()
print(" " + env) if len(availableToolchains) == 0:
print(" No environments available")
else:
for env in environments.available():
print(" " + env)
print("") print("")
print("Variants:") print("Variants:")
@ -175,20 +177,22 @@ CMDS = {
}, },
} }
if __name__ == "__main__":
def main():
argv = sys.argv
try: try:
if len(sys.argv) < 2: if len(argv) < 2:
helpCmd({}, []) helpCmd({}, [])
else: else:
o = parseOptions(sys.argv[2:]) o = parseOptions(argv[2:])
if not sys.argv[1] in CMDS: if not argv[1] in CMDS:
print(f"Unknown command: {sys.argv[1]}") print(f"Unknown command: {argv[1]}")
print("") print("")
print(f"Use '{sys.argv[0]} help' for a list of commands") print(f"Use '{argv[0]} help' for a list of commands")
sys.exit(1) return 1
CMDS[sys.argv[1]]["func"](o['opts'], o['args']) CMDS[argv[1]]["func"](o['opts'], o['args'])
sys.exit(0) return 0
except utils.CliException as e: except utils.CliException as e:
print() print()
print(f"{Colors.RED}{e.msg}{Colors.RESET}") print(f"{utils.Colors.RED}{e.msg}{utils.Colors.RESET}")
sys.exit(1) return 1

5
osdk/__main__.py Executable file
View file

@ -0,0 +1,5 @@
import sys
from . import main
sys.exit(main())

View file

@ -1,13 +1,12 @@
from os import environ from os import environ
from typing import TextIO, Tuple from typing import TextIO, Tuple
import json import json
import ninja
import manifests as m
import environments as e
import copy import copy
import utils
from utils import Colors from . import ninja
from . import manifests as m
from . import environments as e
from . import utils
def genNinja(out: TextIO, manifests: dict, env: dict) -> None: def genNinja(out: TextIO, manifests: dict, env: dict) -> None:
@ -92,7 +91,7 @@ def prepare(envName: str) -> Tuple[dict, dict]:
def buildAll(envName: str) -> None: def buildAll(envName: str) -> None:
environment, _ = prepare(envName) environment, _ = prepare(envName)
print(f"{Colors.BOLD}Building all targets for {envName}{Colors.RESET}") print(f"{utils.Colors.BOLD}Building all targets for {envName}{utils.Colors.RESET}")
try: try:
utils.runCmd("ninja", "-j", "1", "-f", environment["ninjafile"]) utils.runCmd("ninja", "-j", "1", "-f", environment["ninjafile"])
except: except:
@ -101,7 +100,7 @@ def buildAll(envName: str) -> None:
def buildOne(envName: str, target: str) -> str: def buildOne(envName: str, target: str) -> str:
print(f"{Colors.BOLD}Building {target} for {envName}{Colors.RESET}") print(f"{utils.Colors.BOLD}Building {target} for {envName}{utils.Colors.RESET}")
environment, manifests = prepare(envName) environment, manifests = prepare(envName)
if not target in manifests: if not target in manifests:

View file

@ -2,7 +2,7 @@
import copy import copy
import os import os
import utils from . import utils
PASSED_TO_BUILD = [ PASSED_TO_BUILD = [
@ -46,7 +46,8 @@ def enableOptimizer(env: dict, level: str) -> dict:
def available() -> list: def available() -> list:
return [file.removesuffix(".json") for file in os.listdir("meta/toolchains") if file.endswith(".json")] return [file.removesuffix(".json") for file in utils.tryListDir("meta/toolchains")
if file.endswith(".json")]
VARIANTS = ["debug", "devel", "release", "sanatize"] VARIANTS = ["debug", "devel", "release", "sanatize"]

View file

@ -2,7 +2,7 @@ import os
import json import json
import copy import copy
import utils from . import utils
def loadJsons(basedir: str) -> dict: def loadJsons(basedir: str) -> dict:

View file

@ -7,7 +7,6 @@ import requests
import subprocess import subprocess
import json import json
import copy import copy
from types import SimpleNamespace
class Colors: class Colors:
@ -187,3 +186,10 @@ def loadJson(filename: str) -> dict:
result = copy.deepcopy(result) result = copy.deepcopy(result)
return result return result
def tryListDir(path: str) -> list[str]:
try:
return os.listdir(path)
except FileNotFoundError:
return []

19
setup.py Normal file
View file

@ -0,0 +1,19 @@
from setuptools import setup
setup(
name="osdk",
version="0.0.1",
description="Operating System Development Kit",
author="The DEVSE Community",
author_email="contact@devse.wiki",
url="https://devse.wiki/",
packages=["osdk"],
install_requires=[
"requests",
],
entry_points={
"console_scripts": [
"osdk = osdk:main",
],
}
)